作者:
借助生成式 AI 模型(如 Stable Diffusion 和 FLUX.1),用戶可以將平平無奇的文本提示詞轉(zhuǎn)換為令人驚艷的視覺效果。但如果你想生成更具風(fēng)格化或定制化的圖像,開源的基礎(chǔ)模型可能無法滿足你的所有需求。這時(shí),LoRA(低秩自適應(yīng))就派上用場了。許多風(fēng)格修改和增強(qiáng)功能現(xiàn)以 LoRA 的形式發(fā)布,作為基礎(chǔ)模型的模塊化附加組件。通過添加LoRA適配器,使得大家可以隨心所欲、生成風(fēng)格多變的個(gè)性化圖像。
通過將 LoRA 集成到 OpenVINO GenAI 中,開發(fā)者可以一次加載多個(gè) LoRA 適配器,并在運(yùn)行推理時(shí)快速動(dòng)態(tài)切換,無需重新編譯基礎(chǔ)模型。這使得用戶能夠以高效、可擴(kuò)展的方式生成滿足特定需求的、多樣化、高質(zhì)量的輸出。現(xiàn)在,讓我們深入了解具體步驟,借助 OpenVINO 將你的圖像生成項(xiàng)目推向全新高度!
目錄
克隆openvino.genai GitHub倉庫
為AI模型轉(zhuǎn)換安裝相關(guān)依賴包
下載和轉(zhuǎn)換AI模型及相應(yīng)的分詞器
選擇單個(gè)或者多個(gè)LoRA 適配器來進(jìn)行圖像生成
用C++創(chuàng)建和運(yùn)行LoRA圖像生成示例
結(jié)論
第0步:
問 OpenVINO GenAI 示例代碼,體驗(yàn) LoRA 適配器加持的文本生成圖像功能
了解如何使用 OpenVINO GenAI 搭配 LoRA 進(jìn)行文本生成圖像的最簡單方法,就是查看代碼倉庫中的示例源碼。
以下是使用 LoRA 進(jìn)行圖像生成的 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(args.models_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)
你會(huì)發(fā)現(xiàn),只需少量代碼,就能將 LoRA 適配器(單個(gè)或多個(gè))輕松融入 OpenVINO GenAI 的文本生成圖像流程。運(yùn)行 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模型轉(zhuǎn)換安裝相關(guān)依賴包
前往 文本生成圖像(Text-to-Image)LoRA 示例:
openvino.genaisamplespythonimage_generation
在這個(gè)文件夾中,你可以找到關(guān)于示例的相關(guān)README.md 文件. 你也可以直接從 OpenVINO 下載頁面訪問該 README 文件。
現(xiàn)在,你需要準(zhǔn)備一個(gè) Python 虛擬環(huán)境,用于模型下載和轉(zhuǎn)換。可以使用以下代碼完成設(shè)置:
python -m venv venv_export venv_exportScriptsactivate pip install --upgrade-strategy eager -r ../../export-requirements.txt
Step 3:下載和轉(zhuǎn)換AI模型及相應(yīng)的分詞器
為了生成圖像,我們將使用 FLUX.1-dev模型,并且可以通過一條命令下載并轉(zhuǎn)換為 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的網(wǎng)站直接下載模型的,也可以先利用以下命令,從魔搭社區(qū)下載模型
modelscope download --model black-forest-labs/FLUX.1-dev
將模型保存在本地后,再次運(yùn)行以下命令,
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
完成模型的轉(zhuǎn)換和導(dǎo)出。此外,OpenVINO 還支持其他適用于 LoRA 適配器的文本生成圖像模型,完整列表請(qǐng)見此處。歡迎嘗試不同模型,探索更多可能性!
過一會(huì)兒,轉(zhuǎn)換完成后的模型就保留在了本地磁盤上,并準(zhǔn)備好進(jìn)行圖像生成。如果不再需要轉(zhuǎn)換(或優(yōu)化)AI 模型,你可以刪除 venv_export 文件夾,這些依賴包在 AI 推理的過程中并不需要。或者,你也可以直接從我們?cè)贖uggingFace這里或者魔搭社區(qū)這里的模型專區(qū)下載我們工程師已轉(zhuǎn)換和量化的 FLUX.1 模型,跳過上述 第 2 步和第 3 步 的模型下載和轉(zhuǎn)換步驟,直接從下方的推理步驟開始使用模型!
HuggingFace
https://huggingface.co/OpenVINO/FLUX.1-schnell-int4-ov
魔搭社區(qū)
https://modelscope.cn/models/OpenVINO/FLUX.1-schnell-int4-ov
Step 4: 選擇單個(gè)或者多個(gè)LoRA 適配器來進(jìn)行圖像生成
首先,我建議你準(zhǔn)備一個(gè) Python 虛擬環(huán)境來運(yùn)行 AI 推理。與用于模型下載和轉(zhuǎn)換的環(huán)境不同,這里你只需要安裝一個(gè) Python 包 —— openvino.genai。
python -m venv venv venvScriptsactivate pip install -r ../../deployment-requirements.txt
openvino_genai.AdapterConfig用于在 openvino_genai.Text2ImagePipeline 中管理 LoRA 適配器。它可以用于添加、移除適配器,或調(diào)整它們的權(quán)重系數(shù)(Alpha)來實(shí)現(xiàn)風(fēng)格融合。你可以在配置中加入一個(gè)或多個(gè)適配器,并通過 Alpha 系數(shù)進(jìn)行混合,以生成更具風(fēng)格化和創(chuàng)意的圖像。目前,OpenVINO GenAI 支持以 Safetensors 格式保存的 LoRA 適配器。你可以使用 CivitAI 或 HuggingFace Hub上的公開預(yù)訓(xùn)練適配器,或者自行訓(xùn)練適配器來滿足個(gè)性化需求。
CivitAI
https://civitai.com/
HuggingFace Hub
https://huggingface.co/models
以下是用于處理多個(gè) 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(args.models_path, device, adapters=adapter_config)
選擇單個(gè)LoRA適配器進(jìn)行圖像生成
python lora_text2image.py .FLUX.1-devINT4 "albert einstein" pytorch_lora_weights.safetensors 1.0
使用上述命令,你可以生成帶有 “Yarn art” LoRA 風(fēng)格的圖像,并使用 INT4 量化的 FLUX.1-dev 模型,效果如下:
選擇多個(gè)LoRA 適配器進(jìn)行圖像生成
當(dāng)然,你還可以在一次推理中輕松使用多個(gè) LoRA 適配器運(yùn)行 Text2ImagePipeline。例如,使用以下命令,可以將 “浮世繪藝術(shù)(Ukiyo-e Art)” 風(fēng)格與 “點(diǎn)繪風(fēng)格(Point style)” 結(jié)合,并搭配轉(zhuǎn)化和導(dǎo)出為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
生成的融合了多個(gè)LoRA風(fēng)格的圖像就如下圖所示
OpenVINO GenAI 支持以 Safetensors 格式保存的 LoRA 適配器。你可以使用 CivitAI 或 HuggingFace Hub上的公開預(yù)訓(xùn)練適配器,或者自行訓(xùn)練 LoRA 適配器,以滿足個(gè)性化需求。
請(qǐng)注意,在加載預(yù)訓(xùn)練的 LoRA 適配器之前,請(qǐng)確保它們與基礎(chǔ)模型架構(gòu)兼容。例如,如果你使用 SDXL 模型,則需要提供專為該模型類型訓(xùn)練的 LoRA 適配器。否則,例如使用 FLUX 訓(xùn)練的適配器,將無法正確集成到推理流水線中,也無法成功運(yùn)行模型推理。
Step 5: 用C++創(chuàng)建和運(yùn)行LoRA圖像生成示例
盡管 Python 作為編程語言功能強(qiáng)大,且非常適合代碼實(shí)驗(yàn),但在許多情況下,C++ 更適用于桌面應(yīng)用程序的開發(fā)。下面是用于 LoRA 圖像生成 的 C++ 代碼示例:
const std::string device = "CPU"; // GPU, NPU can be used as well
ov::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::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::Text2ImagePipeline pipe(models_path, device, ov::adapters(adapter_config));
? ?std::cout << "Generating image with LoRA adapters applied, resulting image will be in lora.bmp
";
? ?ov::Tensor image = pipe.generate(prompt,
? ? ? ?ov::make_shared(42)),
ov::width(512),
ov::height(896),
ov::num_inference_steps(20));
imwrite("lora.bmp", image, true);
關(guān)于使用 C++ 構(gòu)建 LoRA 文本生成圖像 應(yīng)用的詳細(xì)指南,請(qǐng)查看此處。
小結(jié)
我們演示了如何使用 OpenVINO GenAI 通過文本提示詞結(jié)合多個(gè) LoRA 適配器 進(jìn)行圖像生成。借助提供的工具和代碼,無論你偏好哪種編程語言,都能輕松上手。
你還可以通過 OpenVINO Notebook (https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/multilora-image-generation)體驗(yàn) OpenVINO GenAI 的多 LoRA 適配器圖像生成,運(yùn)行效果如下:
歡迎嘗試修改示例代碼,并調(diào)整以下生成參數(shù),探索更多可能性:
更改生成圖像的寬度或高度
為同一提示詞生成多張圖片
調(diào)整推理步數(shù),以優(yōu)化生成質(zhì)量和速度
調(diào)節(jié)引導(dǎo)尺度(Guidance Scale),影響生成結(jié)果的遵從度(了解更多詳情)
(適用于 SD 1.x 和 2.x)當(dāng)引導(dǎo)尺度 >1 時(shí),添加 負(fù)向提示詞 以優(yōu)化生成效果
結(jié)合多個(gè) LoRA 適配器,并調(diào)整混合系數(shù),實(shí)現(xiàn)個(gè)性化風(fēng)格融合
使用 OpenVINO GenAI,這一切都變得簡單高效!快來試試吧!
-
英特爾
+關(guān)注
關(guān)注
61文章
10279瀏覽量
179492 -
PC
+關(guān)注
關(guān)注
9文章
2164瀏覽量
158562 -
AI
+關(guān)注
關(guān)注
90文章
38413瀏覽量
297694 -
圖像生成
+關(guān)注
關(guān)注
0文章
25瀏覽量
7136 -
OpenVINO
+關(guān)注
關(guān)注
0文章
117瀏覽量
723
原文標(biāo)題:開發(fā)者實(shí)戰(zhàn)|AI PC 新玩法:OpenVINO? GenAI+LoRA 助你輕松實(shí)現(xiàn)個(gè)性化圖像的高效生成
文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄

使用OpenVINO GenAI和LoRA適配器進(jìn)行圖像生成
評(píng)論