AI PC 新玩法:OpenVINO™ GenAI+LoRA 助你轻松实现个性化图像的高效生成

武卓
借助生成式 AI 模型(如 Stable Diffusion 和 FLUX.1),用户可以将平平无奇的文本提示词转换为令人惊艳的视觉效果。但如果你想生成更具风格化或定制化的图像,开源的基础模型可能无法满足你的所有需求。这时,LoRA(低秩适应)就派上用场了。许多风格修改和增强功能现以 LoRA 的形式发布,作为基础模型的模块化附加组件。通过添加LoRA适配器,使得大家可以随心所欲、生成风格多变的个性化图像。
通过将 LoRA 集成到 OpenVINO™ GenAI 中,开发者可以一次加载多个 LoRA 适配器,并在运行推理时快速动态切换,无需重新编译基础模型。这使得用户能够以高效、可扩展的方式生成满足特定需求的、多样化、高质量的输出。现在,让我们深入了解具体步骤,借助 OpenVINO 将你的图像生成项目推向全新高度!
目录
克隆openvino.genai GitHub仓库
为AI模型转换安装相关依赖包
下载和转换AI模型及相应的分词器
选择单个或者多个LoRA 适配器来进行图像生成
用C++创建和运行LoRA图像生成示例
结论
第0步: 问 OpenVINO GenAI 示例代码,体验 LoRA 适配器加持的文本生成图像功能
了解如何使用 OpenVINO GenAI 搭配 LoRA 进行文本生成图像的最简单方法,就是查看代码仓库中的示例源码.
以下是使用 LoRA 进行图像生成的 Python 示例脚本:
def main():
parser = argparse.ArgumentParser()
parser.add_argument('models_path')
parser.add_argument('prompt')
args, adapters = parser.parse_known_args()
prompt = args.prompt
device = "CPU" # GPU, NPU can be used as well
adapter_config = openvino_genai.AdapterConfig()
# Multiple LoRA adapters applied simultaneously are supported, parse them all and corresponding alphas from cmd parameters:
for i in range(int(len(adapters) / 2)):
adapter = openvino_genai.Adapter(adapters[2 * i])
alpha = float(adapters[2 * i + 1])
adapter_config.add(adapter, alpha)
# LoRA adapters passed to the constructor will be activated by default in next generates
pipe = openvino_genai.Text2ImagePipeline(arg***odels_path, device, adapters=adapter_config)
print("Generating image with LoRA adapters applied, resulting image will be in lora.bmp")
image = pipe.generate(prompt,
generator=Generator(42),
width=512,
height=896,
num_inference_steps=20)
image_write("lora.bmp", image)
你会发现,只需少量代码,就能将 LoRA 适配器(单个或多个)轻松融入 OpenVINO GenAI 的文本生成图像流程。运行 LoRA 图像生成脚本,就像这样简单:
python lora_text2image.py FLUX.1-dev/INT4 " albert einstein, yarn art style" pytorch_lora_weights.safetensors 1.0
其中pytorch_lora_weights.safetensors 就是我们选择的用于图像生成的LoRA 适配器。
Step 1: 克隆openvino.genai GitHub仓库
从openvino.genai GitHub仓库克隆OpenVINO GenAI的开源代码。
Step 2:为AI模型转换安装相关依赖包
前往 文本生成图像(Text-to-Image)LoRA 示例:
\openvino.genai\samples\python\image_generation
在这个文件夹中,你可以找到关于示例的相关README.md 文件. 你也可以直接从 OpenVINO 下载页面访问该 README 文件。
现在,你需要准备一个 Python 虚拟环境,用于模型下载和转换。可以使用以下代码完成设置:
python -m venv venv_export
venv_export\Scripts\activate
pip install --upgrade-strategy eager -r ../../export-requirements.txt
Step 3:下载和转换AI模型及相应的分词器
为了生成图像,我们将使用 FLUX.1-dev模型,并且可以通过一条命令下载并转换为 OpenVINO IR 格式:
optimum-cli export openvino --model black-forest-labs/FLUX.1-dev --weight-format int4 --group-size 64 --ratio 1.0 FLUX.1-dev/INT4
如果由小伙伴不方便从HuggingFace的网站直接下载模型的,也可以先利用以下命令,从魔搭社区下载模型
modelscope download --model black-forest-labs/FLUX.1-dev
将模型保存在本地后,再次运行以下命令,
optimum-cli export openvino --model /FLUX.1-dev –task text-to-image --weight-format int4 --group-size 64 --ratio 1.0 FLUX.1-dev/INT4
完成模型的转换和导出。此外,OpenVINO 还支持其他适用于 LoRA 适配器的文本生成图像模型,完整列表请见此处。欢迎尝试不同模型,探索更多可能性!
过一会儿,转换完成后的模型就保留在了本地磁盘上,并准备好进行图像生成。如果不再需要转换(或优化)AI 模型,你可以删除 venv_export 文件夹,这些依赖包在 AI 推理的过程中并不需要。或者,你也可以直接从我们在HuggingFace这里或者魔搭社区这里的模型专区下载我们工程师已转换和量化的 FLUX.1 模型,跳过上述 第 2 步和第 3 步 的模型下载和转换步骤,直接从下方的推理步骤开始使用模型!
Step 4: 选择单个或者多个LoRA 适配器来进行图像生成
首先,我建议你准备一个 Python 虚拟环境来运行 AI 推理。与用于模型下载和转换的环境不同,这里你只需要安装一个 Python 包 —— openvino.genai。
python -m venv venv
venv\Scripts\activate
pip install -r ../../deployment-requirements.txt
openvino_genai.AdapterConfig 用于在 openvino_genai.Text2ImagePipeline 中管理 LoRA 适配器。它可以用于添加、移除适配器,或调整它们的权重系数(Alpha)来实现风格融合。你可以在配置中加入一个或多个适配器,并通过 Alpha 系数进行混合,以生成更具风格化和创意的图像。目前,OpenVINO GenAI 支持以 Safetensors 格式保存的 LoRA 适配器。你可以使用 CivitAI 或 HuggingFace Hub 上的公开预训练适配器,或者自行训练适配器来满足个性化需求。
以下是用于处理多个 LoRA 适配器的代码示例,
adapter_config = openvino_genai.AdapterConfig()
# Multiple LoRA adapters applied simultaneously are supported, parse them all and corresponding alphas from cmd parameters:
for i in range(int(len(adapters) / 2)):
adapter = openvino_genai.Adapter(adapters[2 * i])
alpha = float(adapters[2 * i + 1])
adapter_config.add(adapter, alpha)
将 LoRA 集成到 OpenVINO GenAI 的文本生成图像流程中,仅需一行代码,如下所示:
# LoRA adapters passed to the constructor will be activated by default in next generates
pipe = openvino_genai.Text2ImagePipeline(arg***odels_path, device, adapters=adapter_config)
选择单个LoRA适配器进行图像生成
python lora_text2image.py .\FLUX.1-dev\INT4 "albert einstein" pytorch_lora_weights.safetensors 1.0
使用上述命令,你可以生成带有 “Yarn art” LoRA 风格的图像,并使用 INT4 量化的 FLUX.1-dev 模型,效果如下:
选择多个LoRA 适配器进行图像生成
当然,你还可以在一次推理中轻松使用多个 LoRA 适配器运行 Text2ImagePipeline。例如,使用以下命令,可以将 “浮世绘艺术(Ukiyo-e Art)” 风格与 “点绘风格(Point style)” 结合,并搭配转化和导出为OpenVINO格式的SDXL-LCM模型(具体步骤参考这里)来生成图像:
python lora.py "./sdxl-lcm" "a cute cat in sunglasses" araminta_k_the_point.safetensors 0.8 "Ukiyo-e Art.safetensors" 0.6
生成的融合了多个LoRA风格的图像就如下图所示
OpenVINO GenAI 支持以 Safetensors 格式保存的 LoRA 适配器。你可以使用 CivitAI 或 HuggingFace Hub上的公开预训练适配器,或者自行训练 LoRA 适配器,以满足个性化需求。
请注意,在加载预训练的 LoRA 适配器之前,请确保它们与基础模型架构兼容。例如,如果你使用 SDXL 模型,则需要提供专为该模型类型训练的 LoRA 适配器。否则,例如使用 FLUX 训练的适配器,将无**确集成到推理流水线中,也无法成功运行模型推理。
Step 5: 用C++创建和运行LoRA图像生成示例
尽管 Python 作为编程语言功能强大,且非常适合代码实验,但在许多情况下,C++ 更适用于桌面应用程序的开发。下面是用于 LoRA 图像生成 的 C++ 代码示例:
const std::string device = "CPU"; // GPU, NPU can be used as well
ov::genai::AdapterConfig adapter_config;
// Multiple LoRA adapters applied simultaneously are supported, parse them all and corresponding alphas from cmd parameters:
for(size_t i = 0; i < (argc - 3)/2; ++i) {
ov::genai::Adapter adapter(argv[3 + 2*i]);
float alpha = std::atof(argv[3 + 2*i + 1]);
adapter_config.add(adapter, alpha);
}
// LoRA adapters passed to the constructor will be activated by default in next generates
ov::genai::Text2ImagePipeline pipe(models_path, device, ov::genai::adapters(adapter_config));
std::cout << "Generating image with LoRA adapters applied, resulting image will be in lora.bmp\n";
ov::Tensor image = pipe.generate(prompt,
ov::genai::generator(std::make_shared(42)),
ov::genai::width(512),
ov::genai::height(896),
ov::genai::num_inference_steps(20));
imwrite("lora.bmp", image, true);
关于使用 C++ 构建 LoRA 文本生成图像 应用的详细指南,请查看此处。
小结
我们演示了如何使用 OpenVINO™ GenAI 通过文本提示词结合多个 LoRA 适配器 进行图像生成。借助提供的工具和代码,无论你偏好哪种编程语言,都能轻松上手。
你还可以通过 OpenVINO Notebook 体验 OpenVINO GenAI 的多 LoRA 适配器图像生成,运行效果如下:
欢迎尝试修改示例代码,并调整以下生成参数,探索更多可能性:
更改生成图像的宽度或高度
为同一提示词生成多张图片
调整推理步数,以优化生成质量和速度
调节引导尺度(Guidance Scale),影响生成结果的遵从度(了解更多详情)
(适用于 SD 1.x 和 2.x)当引导尺度 >1 时,添加 负向提示词 以优化生成效果
结合多个 LoRA 适配器,并调整混合系数,实现个性化风格融合
使用 OpenVINO GenAI,这一切都变得简单高效!快来试试吧!
Read More
Additional Resource***r/>
OpenVINO™ Documentation
OpenVINO™ Notebook***r/>
Provide Feedback & Report Issue***r/>
GenAI Quick-start Guide
About the Authors & Editors:
Notices & Disclaimer***r/>Performance varie***y use, configuration, and other factors. Learn more on the Performance Index site.
Performance results are based on testing as of dates shown in configurations and may not reflect all publicly available updates. See backup for configuration details. No product or component can be absolutely secure. Your costs and result***ay vary. Intel technologie***ay require enabled hardware, software or service activation.
© Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries.