Ce référentiel contient une implémentation entièrement C ++ de la synthèse d'image basée sur la diffusion stable , y compris les capacités d'origine TXT2IMG, IMG2IMG et de découpage et le vérificateur de sécurité. Cette solution ne dépend pas de Python et exécute l'intégralité du processus de génération d'images dans un seul processus avec des performances concurrentielles , en rendant les déploiements considérablement plus simples et plus petits, composés essentiellement de quelques fichiers exécutables et de bibliothèque, et les poids du modèle. En utilisant la bibliothèque, il est possible d'intégrer une diffusion stable dans presque toutes les applications - tant qu'elle peut importer des fonctions C ++ ou C, mais elle est très utile pour les développeurs d'applications et de jeux graphiques en temps réel , qui sont souvent réalisés avec C ++.
![]() | ![]() | ![]() |
La bibliothèque prend également en charge ControlNet, cela permet à l'utilisation d'images d'entrée pour guider le processus de génération d'images, par exemple:
Dans ce premier, par exemple, nous utilisons un estimateur OpenSose et OpenSpose ControlNet, nous pouvons guider la génération IMG2IMG en spécifiant la pose, donc elle produit de meilleurs résultats.
En utilisant la détection de bord HED et le contrôle de contrôle conditionné par le bord, nous modifions le style de l'image pour ressembler à une illustration de bande dessinée, mais gardons la mise en page intacte.
En utilisant un estimateur de profondeur et une carte de profondeur ControlNet conditionné, nous générons un caractère différent, mais conservons la configuration d'origine.
La bibliothèque fournit également des implémentations accélérées GPU des extracteurs de fonctionnalités suivants (présentés ci-dessus):
Voici quelques exemples de code simples:
Les modèles AI requis pour la bibliothèque sont stockés au format ONNX. Tous les modèles ont été exécutés via Microsoft Olive et sont optimisés pour DirectML. J'ai testé la bibliothèque avec les modèles suivants:
Vous pouvez apporter vos propres modèles, en les convertissant en utilisant ce guide.
Veuillez vous assurer de vérifier la licence d'origine des modèles si vous prévoyez de les intégrer dans vos produits.
L'implémentation utilise l'ONNX pour stocker les modèles mathématiques impliqués dans la génération d'images. Ces modèles ONNX sont ensuite exécutés à l'aide de l'ONNX Runtime, qui prennent en charge une variété de plates-formes (Windows, Linux, MacOS, Android, iOS, WebAssembly, etc.) et les fournisseurs d'exécution (tels que Nvidia Cuda / Tensorrt; AMD ROCM, Apple Coreml, Qualcomm QNN, Microsoft DirectML et beaucoup plus).
Nous fournissons un exemple d'intégration appelée Unstaint qui montre la façon dont les bibliothèques peuvent être intégrées dans une interface utilisateur simple basée sur WinUI. Vous pouvez télécharger l'application gratuite de la boutique Microsoft pour évaluer les caractéristiques de performance de la solution.
La base de code actuelle et les packages NuGet résultants ciblent les fenêtres et utilisent DirectML, mais seules les petites sections du code utilisent des API spécifiques à Windows, et pourraient donc être portées vers d'autres plates-formes avec un effort minimal.
Le code source de cette bibliothèque est fourni en vertu de la licence MIT.
Les versions prédéfinies du projet peuvent être récupérées de NuGet sous le nom d' Axodox.MachineLearning et ajoutées aux projets Visual Studio C ++ (les projets de bureau et UWP sont pris en charge) avec la plate-forme X64.
Intégration de base:
Axodox.Common et Axodox.MachineLearning packages à votre projet#include "Include/Axodox.MachineLearning.h"Nous vous recommandons d'ajouter des mécanismes de sécurité appropriés à votre application pour supprimer les sorties inappropriées de Stisediffusion, les frais généraux de performance sont insignifiants.
Les modèles de diffusion stables que nous utilisons ont été générés à l'aide de Microsoft Olive, veuillez suivre l'exemple lié pour convertir des modèles à partir de HuggingFace. En modifiant le script, vous pouvez également convertir des modèles stockés sur votre disque à partir de différents formats (par exemple *.safetensors ). Vous pouvez trouver des modèles préconvertis ici pour les tests.
La construction de la bibliothèque est nécessaire pour apporter et tester les modifications. Vous devrez installer les installations suivantes pour construire la bibliothèque:
Vous pouvez exécuter build_nuget.ps1 ou ouvrir Axodox.MachineLearning.sln et build à partir de Visual Studio.
Une fois que vous avez construit la bibliothèque, vous remplacez l'installation de votre package NuGet existant en définissant la variable d'environnement AxodoxMachineLearning-Location pour pointer vers votre version locale.
Par exemple
C:devaxodox-machinelearningAxodox.MachineLearning.Universalpour une application UWP etC:devaxodox-machinelearningAxodox.MachineLearning.Desktoppour une application de bureau.
Ajoutez ensuite le projet pointé par le chemin de la solution de votre propre projet. Cela permet d'ajouter tous les projets dans la même solution et d'apporter des modifications à la bibliothèque et à votre application sans coureur sans copier à plusieurs reprises.