Этот репозиторий содержит полностью реализацию C ++ стабильного синтеза изображений на основе диффузии , включая оригинальные возможности TXT2IMG, IMG2IMG и Inpainting и проверку безопасности. Это решение не зависит от Python и запускает весь процесс генерации изображений в одном процессе с конкурентной производительностью , что делает развертывания значительно простыми и меньшими, по сути, состоит из нескольких исполняемых и библиотечных файлов, а также веса модели. Используя библиотеку, можно интегрировать стабильную диффузию практически в любое приложение - до тех пор, пока она может импортировать функции C ++ или C, но это наиболее полезно для разработчиков графических приложений и игр в реальном времени , которые часто реализуются с помощью C ++.
![]() | ![]() | ![]() |
Библиотека также поддерживает ControlNet, это позволяет использовать входные изображения для руководства процессом генерации изображений, например:
В первом примере мы используем открытую оценку и открытую кондиционированную ControlNet, мы можем направить генерацию IMG2IMG, указав позу, поэтому она дает лучшие результаты.
Используя обнаружение края хед и кондиционированное управление, мы меняем стиль изображения, напоминающего иллюстрацию комиксов, но сохраняем макет нетронутой.
Используя оценку глубины и кондиционированную карту глубины, мы генерируем другой символ, но сохраняем исходную настройку.
Библиотека также предоставляет ускоренные реализации графических процессоров следующих экстракторов функций (представленные выше):
Вот несколько простых примеров кода:
Модели ИИ, необходимые для библиотеки, хранятся в формате ONNX. Все модели проходили через Microsoft Olive и оптимизированы для DirectML. Я проверил библиотеку со следующими моделями:
Вы можете принести свои собственные модели, преобразуя их, используя это руководство.
Пожалуйста, не забудьте проверить оригинальную лицензию моделей, если вы планируете интегрировать их в свои продукты.
Реализация использует ONNX для хранения математических моделей, участвующих в генерации изображений. Эти модели ONNX затем выполняются с использованием времени выполнения ONNX, которые поддерживают различные платформы (Windows, Linux, MacOS, Android, iOS, Webassembly и т. Д.), А также поставщики выполнения (такие как NVIDIA CUDA / Tensorrt; AMD ROCM, Apple Coreml, Qualcomm QNN, Microsoft Directml и многие другие).
Мы предоставляем пример интеграции под названием Uncaint, которая демонстрирует, как библиотеки могут быть интегрированы в простой пользовательский интерфейс на основе Winui. Вы можете загрузить бесплатное приложение из Microsoft Store, чтобы оценить характеристики производительности решения.
Текущая кодовая база и полученные пакеты Nuget Target Windows и используют DirectML, однако только небольшие разделы кода используют специфические API Windows и, таким образом, могут быть перенесены на другие платформы с минимальными усилиями.
Исходный код этой библиотеки представлен по лицензии MIT.
Предварительные версии проекта могут быть извлечены из Nuget под названием Axodox.MachineLearning и добавлены в проекты Visual Studio C ++ (поддерживаются как настольные, так и UWP) с платформой x64.
Основная интеграция:
Axodox.Common и Axodox.MachineLearning в свой проект#include "Include/Axodox.MachineLearning.h"Мы рекомендуем добавить соответствующие механизмы безопасности в ваше приложение для подавления неподходящих выходов стабильны, накладные расходы на производительность незначительны.
Стабильные диффузионные модели, которые мы используем, были сгенерированы с использованием Microsoft Olive, пожалуйста, следуйте связанному примеру для конвертации моделей из HuggingFace. Изменив сценарий, вы также можете преобразовать модели, хранящиеся на своем диске в различных форматах (например *.safetensors ). Вы можете найти здесь несколько предвзятых моделей для тестирования.
Создание библиотеки необходимо для внесения и тестирования изменений. Вам нужно будет установить следующее для создания библиотеки:
Вы можете запустить build_nuget.ps1 или Axodox.MachineLearning.sln и построить из Visual Studio.
После того, как вы построили библиотеку, вы переопределяете установку существующей установки пакета Nuget, установив переменную среды AxodoxMachineLearning-Location чтобы указывать на вашу локальную сборку.
Например
C:devaxodox-machinelearningAxodox.MachineLearning.Universalдля приложения UWP иC:devaxodox-machinelearningAxodox.MachineLearning.Desktopдля настольного приложения.
Затем добавьте проект, указанный по пути к решению вашего собственного проекта. Это позволяет добавлять все проекты в одно и то же решение и вносить изменения в библиотеку и ваше приложение плавно, не копируя файлы.