一、ComfyUI应用
1.1 什么是ComfyUI
ComfyUI 是GUI的一种,是基于节点工作的用户界面,主要用于操作图像的生成技术,ComfyUI 的特别之处在于它采用了一种模块化的设计,把图像生成的过程分解成了许多小的步骤,每个步骤都是一个节点。这些节点可以连接起来形成一个工作流程,这样用户就可以根据需要定制自己的图像生成过程。
首先,ComfyUI具有直观易用的界面: 通过节点的方式,用户可以清晰地看到各个模块的功能,并根据自己的需求进行调整和连接。这种方式使得工作流程更加明确,也降低了使用门槛,使得不熟悉代码的用户也能够轻松上手
其次,ComfyUI的生成速度更快: 相较于传统的Web UI,ComfyUI在生成图片时进行了优化,显著提高了生成速度。这意味着用户可以更快地获得所需的图片,节省了宝贵的时间和计算资源
此外,ComfyUI对显存的要求更低: 由于内部流程的优化,ComfyUI所需的显存比传统的Web UI更少。这意味着用户不需要高配置的硬件设备就能流畅地运行ComfyUI,降低了使用门槛
1.2 ComfyUI核心模块
模型加载器:Load Checkpoint用于加载基础的模型文件,包含了Model、CLIP、VAE三部分,CLIP模块将文本类型的输入变为模型可以理解的latent space embedding作为模型的输入
解码器:VAE模块的作用是将Latent space中的embedding解码为像素级别的图像
采样器:用于控制模型生成图像,不同的采样取值会影响最终输出图像的质量和多样性。采样器可以调节生成过程的速度和质量之间的平衡
1.3 速通安装ComfyUI
通过 学习手册 安装熟悉ComfyUI
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors_test_comfyui.git
mv kolors_test_comfyui/* ./
rm -rf kolors_test_comfyui/
mkdir -p /mnt/workspace/models/lightning_logs/version_0/checkpoints/
mv epoch=0-step=500.ckpt /mnt/workspace/models/lightning_logs/version_0/checkpoints/
在终端(terminal)复制粘贴上述代码,运行下载文件
打开ComfyUI.ipynb,全部运行
在最后点击网址进入ComfyUI工作流界面
1.4 ComfyUI运用
通过 学习手册 下载工作流脚本,分为 不带Lora的工作流样例 和 带Lora的工作流样例
点击右下角Load,载入工作流脚本,再点击Queue Prompt生成图片(可以看到整个运行流程)
不带Lora的工作流样例,生成如下
二、Lora微调
2.1 Lora简介
LoRA (Low-Rank Adaptation) 微调是一种用于在预训练模型上进行高效微调的技术。它可以通过高效且灵活的方式实现模型的个性化调整,使其能够适应特定的任务或领域,同时保持良好的泛化能力和较低的资源消耗。这对于推动大规模预训练模型的实际应用至关重要。
2.2 Lora微调的优势
-
参数效率:Lora通过在模型的权重矩阵中引入低秩结构,减少了需要训练的参数数量,这使得微调过程更加高效
-
快速适应:由于参数数量的减少,Lora微调可以在更短的时间内完成,这对于需要快速部署模型的场景非常有用
-
更好的泛化能力:通过低秩适应,Lora能够在不破坏预训练模型原有知识的情况下,更好地适应特定任务
-
减少过拟合:由于参数数量的减少,Lora微调有助于减少模型在特定任务上的过拟合风险
-
灵活性:Lora可以应用于不同类型的预训练模型,包括但不限于语言模型、视觉模型等
-
成本效益:由于训练时间的减少和参数数量的降低,Lora微调可以降低计算资源的需求,从而降低成本
-
持续学习:Lora微调可以支持模型在面对新数据时进行持续学习和适应,而不需要从头开始训练
2.2 Lora微调代码详解
Baseline中Lora设置参数代码如下
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
--lora_rank 16 \
--lora_alpha 4.0 \
--dataset_path data/lora_dataset_processed \
--output_path ./models \
--max_epochs 1 \
--center_crop \
--use_gradient_checkpointing \
--precision "16-mixed"
""".strip()
os.system(cmd)
参数名称 | 参数值 | 说明 |
| models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors | 指定预训练UNet模型的路径 |
| models/kolors/Kolors/text_encoder | 指定预训练文本编码器的路径 |
| models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors | 指定预训练VAE模型的路径 |
| 16 | 设置LoRA的秩(rank),影响模型的复杂度和性能 |
| 4 | 设置LoRA的alpha值,控制微调的强度 |
| data/lora_dataset_processed | 指定用于训练的数据集路径 |
| ./models | 指定训练完成后保存模型的路径 |
| 1 | 设置最大训练轮数为1 |
| 启用中心裁剪,用于图像预处理 | |
| 启用梯度检查点,节省显存 | |
| "16-mixed" | 设置训练时的精度为混合16位精度(half precision) |
通过Lora微调后,生成结果如下:
图片编号 | 场景描述 | 正向提示词 | 反向提示词 |
图 1 | 女主正在上课 | 童话风格,教室,金色长发少女,认真听课, 手上拿着笔,身着红色鲜艳的校服,上半身,正面,坐在课桌前 | 丑陋,变形,嘈杂,模糊,低对比度 |
图 2 | 开始睡着了 | 童话风格,教室,金色长发少女,闭上眼睛,身着红色鲜艳的校服,上半身,正面,坐在课桌前 | 丑陋,变形,嘈杂,模糊,低对比度 |
图 3 | 进入梦乡,梦到自己在森林 | 童话风格,四周全是茂密的森林,金色长发少女,站白色长裙,上半身,看向远方 | 丑陋,变形,嘈杂,模糊,低对比度 |
图 4 | 王子骑马而来 | 童话风格,四周全是茂密的森林,一位英俊的王子,骑着白马,上半身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图 5 | 两人相谈甚欢 | 童话风格,四周全是茂密的森林,金色长发少女,一位英俊的王子,白色长裙,两个人一起聊天,开心,上半身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图 6 | 两人一起跳舞 | 童话风格,四周全是茂密的森林,金色长发少女,白色长裙,一位英俊的王子,两个人一起跳舞,全身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图 7 | 下课了,梦醒了 | 童话风格,教室,金色长发少女,用右手揉眼睛,左手拿笔,闭上眼睛,身着红色鲜艳的校服,上半身,正面,坐在课桌前 | 丑陋,变形,嘈杂,模糊,低对比度 |
图 8 | 又回到了学习生活中 | 童话风格,教室,金色长发少女,惊醒, 惊讶,身着红色鲜艳的校服,上半身,正面,坐在课桌前,墙上有下课铃 | 丑陋,变形,嘈杂,模糊,低对比度 |