Este repositório contém uma implementação totalmente C ++ da síntese de imagem baseada em difusão estável , incluindo os recursos originais do TXT2IMG, IMG2IMG e de pintura e o verificador de segurança. Esta solução não depende do Python e executa todo o processo de geração de imagens em um único processo com desempenho competitivo , tornando as implantações significativamente mais simples e menores, consistindo essencialmente alguns arquivos executáveis e de biblioteca e os pesos do modelo. Usando a biblioteca, é possível integrar difusão estável em praticamente qualquer aplicativo - desde que possa importar funções C ++ ou C, mas é mais útil para os desenvolvedores de aplicativos e jogos gráficos em tempo real , que geralmente são realizados com C ++.
![]() | ![]() | ![]() |
A biblioteca também suporta o ControlNet, isso permite usar imagens de entrada para orientar o processo de geração de imagens, por exemplo:
Neste primeiro, exemplo, usamos um estimador aberto e o ControlNet Condicionado de Uso Aberto, podemos orientar a geração IMG2IMG especificando a pose, por isso produz melhores resultados.
Usando a detecção de borda HED e o ControlNet com condição de borda, alteramos o estilo da imagem para se parecer com uma ilustração de quadrinhos, mas mantemos o layout intacto.
Usando um estimador de profundidade e um mapa de profundidade ControlNet, geramos um caractere diferente, mas mantemos a configuração original.
A biblioteca também fornece implementações aceleradas da GPU dos seguintes extratores de recursos (exibidos acima):
Aqui estão alguns exemplos de código simples:
Os modelos de IA necessários para a biblioteca são armazenados no formato ONNX. Todos os modelos foram executados no Microsoft Olive e são otimizados para o DirectML. Eu testei a biblioteca com os seguintes modelos:
Você pode trazer seus próprios modelos, convertendo -os usando este guia.
Verifique a licença original dos modelos se você planeja integrá -los em seus produtos.
A implementação usa o ONNX para armazenar os modelos matemáticos envolvidos na geração de imagens. Esses modelos ONNX são então executados usando o tempo de execução do ONNX, que suporta uma variedade de plataformas (Windows, Linux, MacOS, Android, iOS, WebAssembly etc.) e provedores de execução (como Nvidia CUDA / TENSORT; AMD ROCM, APLEML, QUALCOMM QNN, MICROSOFTML; MAIS ROCM, APLEML).
Fornecemos um exemplo de integração chamada UNSAINT, que mostra como as bibliotecas podem ser integradas em uma interface de usuário simples baseada em UNUI. Você pode fazer o download do aplicativo gratuito na Microsoft Store para avaliar as características de desempenho da solução.
A base de código atual e os pacotes NUGET resultantes segmentam Windows e usam o DirectML, no entanto, apenas pequenas seções do código utilizam APIs específicas do Windows e, portanto, poderiam ser portadas para outras plataformas com um esforço mínimo.
O código -fonte desta biblioteca é fornecido sob a licença do MIT.
As versões pré -construídas do projeto podem ser recuperadas do NUGET sob o nome Axodox.MachineLearning e adicionadas aos projetos do Visual Studio C ++ (os projetos de desktop e UWP são suportados) com a plataforma X64.
Integração básica:
Axodox.Common e Axodox.MachineLearning ao seu projeto#include "Include/Axodox.MachineLearning.h"Recomendamos adicionar mecanismos de segurança apropriados ao seu aplicativo para suprimir saídas inadequadas do StableDIFFusion, a sobrecarga de desempenho é insignificante.
Os modelos de difusão estável que usamos foram gerados usando o Microsoft Olive, siga o exemplo vinculado para converter modelos do HuggingFace. Ao alterar o script, você também pode converter modelos armazenados em seu disco em vários formatos (por exemplo, *.safetensors ). Você pode encontrar alguns modelos pré -contratados aqui para teste.
A construção da biblioteca é necessária para fazer e testar alterações. Você precisará ter o seguinte instalado para construir a biblioteca:
Você pode executar build_nuget.ps1 ou Open Axodox.MachineLearning.sln e Build a partir do Visual Studio.
Depois de construir a biblioteca, você substitui o pacote NUGET existente, configurando a variável de ambiente AxodoxMachineLearning-Location para apontar para a compilação local.
Por exemplo
C:devaxodox-machinelearningAxodox.MachineLearning.Universalpara um aplicativo UWP eC:devaxodox-machinelearningAxodox.MachineLearning.Desktoppara um aplicativo de mesa.
Em seguida, adicione o projeto apontado pelo caminho para a solução de seu próprio projeto. Isso permite adicionar todos os projetos à mesma solução e fazer alterações na biblioteca e seu aplicativo sem problemas sem copiar arquivos repetidamente.