项目介绍
axodox-machinelearning
项目是一个基于 C++ 的稳定扩散图像合成库,它完整实现了文本到图像(txt2img)、图像到图像(img2img)以及修复能力,并包含了安全检查功能。这套解决方案完全不依赖于 Python,能够在单个进程中运行整个图像生成过程,并且性能表现优异。由于只是几个可执行文件和库文件再加上模型权重,因此极大地简化和减小了部署过程。该项目非常适合那些能够导入 C++ 或 C 函数的应用,尤其是实时图形应用和游戏开发者,它们通常都是用 C++ 实现的。
ControlNet 支持
库还支持 ControlNet,这使得可以使用输入图像来引导图像生成过程。例如:
- 使用 OpenPose 和 OpenPose 条件控制的 ControlNet,可以通过指定姿势来引导 img2img 的生成,产生更佳的结果。
- 使用 HED 边缘检测和边缘条件控制的 ControlNet,可以将图像风格改变为类似漫画插图,但保持布局不变。
- 使用深度估计和深度图条件控制的 ControlNet,可以生成不同的角色,而保持原有的设置。
特征提取器
该库还提供 GPU 加速的功能提取器实现,包括:
- 姿势估计:利用 OpenPose 从图像中提取人体骨架。
- 深度估计:利用 MiDAS 从单个图像中估计每个像素的深度。
- 边缘检测:利用整体嵌套的边缘检测从图像中提取边缘。
代码示例
提供了一些简单的代码示例,展示如何使用该库实现各种功能:
- 稳定扩散测试
- ControlNet 测试
- 特征提取测试
参考模型
所需的 AI 模型以 ONNX 格式存储,并经过 Microsoft Olive 优化,适用于 DirectML。测试的模型包括:
- 支持 ControlNet 的 Stable Diffusion 1.5
- 支持 ControlNet 的 Realistic Vision 1.4
- 具有特征提取器的 ControlNet
用户也可以根据指导转换自己的模型。需要注意的是,如果你计划将这些模型集成到产品中,请务必检查模型的原始许可证。
技术背景
实现中使用 ONNX 存储涉及图像生成的数学模型,这些 ONNX 模型通过 ONNX runtime 执行。ONNX runtime 支持多种平台及执行提供者(如 NVIDIA CUDA、AMD ROCm、Apple CoreML 等)。我们提供了一个示例集成,称为 Unpaint,展示了如何将库集成到一个简单的基于 WinUI 的用户界面中。
授权许可
该库的源代码以 MIT 许可证提供。
组件集成
可以从 Nuget 中获取预构建版本,并将其添加到 Visual Studio C++ 项目中(支持桌面和 UWP 项目)。简单集成步骤包括:
- 添加
Axodox.Common
和Axodox.MachineLearning
包到项目中。 - 确保在项目中 仅使用 x64 平台。
- 确保编译器设定为 C++20,并建议启用所有警告和合规模式。
- 添加
#include "Include/Axodox.MachineLearning.h"
到代码文件或预编译头中。 - 参考示例代码完成管道集成。
构建项目
在库中测试更改需要去构建它。需要安装以下工具:
- Visual Studio 2022,选择桌面及游戏开发相关组件。
构建流程可以通过运行 build_nuget.ps1
脚本或者直接在 Visual Studio 中打开并构建解决方案来执行,包括必要的环境配置和项目路径添加。