Este repositorio contiene una implementación completamente C ++ de la síntesis de imagen basada en difusión estable , incluidas las capacidades originales de TXT2IMG, IMG2IMG e Inpainting y el verificador de seguridad. Esta solución no depende de Python y ejecuta todo el proceso de generación de imágenes en un solo proceso con un rendimiento competitivo , lo que hace que las implementaciones sean significativamente más simples y más pequeñas, esencialmente consisten en algunos archivos ejecutables y de biblioteca, y los pesos del modelo. Usando la biblioteca, es posible integrar la difusión estable en casi cualquier aplicación, siempre que pueda importar funciones de C ++ o C, pero es más útil para los desarrolladores de aplicaciones y juegos gráficos en tiempo real , que a menudo se realizan con C ++.
![]() | ![]() | ![]() |
La biblioteca también admite Controlnet, esto permite usar imágenes de entrada para guiar el proceso de generación de imágenes, por ejemplo:
En este primer ejemplo, utilizamos un estimador OpenPose y un control de control condicionado OpenPose, podemos guiar la generación IMG2Img especificando la pose, por lo que produce mejores resultados.
Utilizando la detección de borde HED y el control de control condicionado de borde, cambiamos el estilo de la imagen para parecerse a una ilustración de cómics, pero mantenga el diseño intacto.
Usando un estimador de profundidad y un mapa de profundidad Controlnet condicionado, generamos un carácter diferente, pero mantenemos la configuración original.
La biblioteca también proporciona implementaciones aceleradas de GPU de los siguientes extractores de características (exhibidos anteriormente):
Aquí hay algunos ejemplos de código simple:
Los modelos AI requeridos para la biblioteca se almacenan en formato ONNX. Todos los modelos se han ejecutado a través de Microsoft Olive y están optimizados para DirectML. He probado la biblioteca con los siguientes modelos:
Puede traer sus propios modelos, convirtiéndolos en esta guía.
Asegúrese de verificar la licencia original de los modelos si planea integrarlos en sus productos.
La implementación utiliza el ONNX para almacenar los modelos matemáticos involucrados en la generación de imágenes. Estos modelos ONNX se ejecutan luego utilizando el tiempo de ejecución de ONNX, que admite una variedad de plataformas (Windows, Linux, MacOS, Android, iOS, WebAssembly, etc.) y proveedores de ejecución (como Nvidia Cuda / Tensorrt; AMD ROCM, Apple Coreml, Qualcomm Qnn, Microsoft Directml y muchos más).
Proporcionamos una integración de ejemplo llamada Unrest que muestra cómo las bibliotecas pueden integrarse en una simple interfaz de usuario basada en Winui. Puede descargar la aplicación gratuita de Microsoft Store para evaluar las características de rendimiento de la solución.
La base de código actual y los paquetes NUGET resultantes se dirigen a Windows y usan DirectML, sin embargo, solo pequeñas secciones del código utilizan API específicas de Windows y, por lo tanto, podrían portarse a otras plataformas con un esfuerzo mínimo.
El código fuente de esta biblioteca se proporciona bajo la licencia MIT.
Las versiones previas a la construcción del proyecto se pueden recuperar de NUGET bajo el nombre de Axodox.MachineLearning y agregarse a los proyectos de Visual Studio C ++ (los proyectos de escritorio y UWP son compatibles) con la plataforma X64.
Integración básica:
Axodox.Common y Axodox.MachineLearning#include "Include/Axodox.MachineLearning.h"Recomendamos agregar mecanismos de seguridad apropiados a su aplicación para suprimir las salidas inapropiadas de STABLEDIFLEUSE, la sobrecarga de rendimiento es insignificante.
Los modelos de difusión estables que utilizamos se han generado utilizando Microsoft Olive, siga el ejemplo vinculado para convertir modelos de Huggingface. Al cambiar el script, también puede convertir modelos almacenados en su disco de varios formatos (por ejemplo *.safetensors ). Puede encontrar algunos modelos preconvertidos aquí para pruebas.
Se requiere construir la biblioteca para realizar y probar cambios. Deberá tener lo siguiente instalado para construir la biblioteca:
Puede ejecutar build_nuget.ps1 o abrir Axodox.MachineLearning.sln y construir desde Visual Studio.
Una vez que haya creado la biblioteca, anula su instalación de paquete Nuget existente configurando la variable de entorno de AxodoxMachineLearning-Location para señalar su compilación local.
Por ejemplo
C:devaxodox-machinelearningAxodox.MachineLearning.Universalpara una aplicación UWP yC:devaxodox-machinelearningAxodox.MachineLearning.Desktoppara una aplicación de escritorio.
Luego agregue el proyecto señalado por la ruta a la solución de su propio proyecto. Esto permite agregar todos los proyectos a la misma solución y realizar cambios en la biblioteca y su aplicación sin problemas sin copiar archivos repetidamente.