概述
这是本次夏令营的最后一次task,在这次task中我主要学习了如何使用ComfyUI,运用其模块化的特点,定制自己的图像生成过程。同时,我也了解了Lora的基本原理,以及如何将自己训练出的Lora运用到图像生成过程之中。最后,了解了一些数据集的获取路径。
基本知识
ComfyUI
ComfyUI是GUI的一种,采用了模块化的设计,所以使用起来很方便。并且是图形化界面,使用时就像在搭建流程图一样,将代码可视化,便于理解。在使用过程中,主要就是调用各种模块,在模块中输入参数,然后将不同模块的节点连接起来形成工作流,达成某个功能。同时,ComfyUI还兼顾了灵活性,使用者可以通过自定义模块实现一些特定的功能,比如说图像颜色的反转等等。
Lora
Lora(low-rank adaptation)是一种在预训练的模型上进行微调的技术。对模型的微调主要是对其中一些参数进行微调。而lora就是在已有的参数上加上一个低秩矩阵而达到调整的目的。通常一个参数矩阵中有大量的元素,如果对其中每一列参数都进行调整的话,会消耗大量的时间,但考虑到其中有很多是线性相关的,所以其中有很多操作是相似的,因此,我们只需对其中的一部分进行调整即可。这也是一个低秩矩阵拥有较好调整效果的原因。同时,由于低秩矩阵只是调整了参数的一小部分,所以其不会改变模型的整体架构,到达在原模型的基础上进行微调的目的。并且,在训练过程中,只有这些新增的低秩矩阵被更新,原始模型的大部分权重不会改变。
ComfyUI的使用
我在这次task中,使用了阿里云的PAI-DSW体验ComfyUI。
安装ComfyUI
在PAI-DSW中创建一个实例,并在其中打开终端,输入以下命令下载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/
进入ComfyUI的安装文件,运行其中的ComfyUI.ipynb文件,即可成功安装ComfyUI。最后会提供一个链接,点击链接便可成功打开ComfyUI。
使用ComfyUI
我使用ComfyUI来实现文生图
模块介绍
模型加载模块
Download Kolors Model/Download ChatGLM3 Model/Load VAE分别加载model,CLIP,VAE
CLIP模块
Kolors Text Encode用于将文本类型的输入转变为模型可以理解的latent space embedding作为模型输入
解码器
VAE Decode用于将Latent space中的embedding解码为像素级别的图像
采样器
Kolors Sampler用于控制模型生成图像,其中width与height控制图像大小,seed控制噪声生成的随机种子,control_after_generate控制seed在每次生成后的变化fixed表示不变,steps为降噪的迭代步数,cfg控制提示词对图像生成的影响,scheduler控制使用的调度器,denoise_strength控制多少内容会被噪声覆盖(这里设置为1即完全随机噪声,较小的值通常用于对图像修复中以保持图像的细节与质量)
不带Lora的工作流
我先用这些模块搭建不带Lora的工作流,先用Download Kolors Model, Download ChatGLM3 Model和Load VAE加载模型,然后Kolors Text Encode用加载的CLIP将输入的提示词变为模型可理解的embedding输出,接着将该输出与加载的模型输入Kolors Sampler,调整参数输出Latent space embedding,然后VAE Decode运用VAE将该输出变为像素图片,最后用Preview Image展示图片。具体的工作流与结果如下
带Lora的工作流
Lora文件
这里使用的Lora是我在task1中用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)
该代码先调用了训练脚本train_kolors_lora.py,然后输入的参数主要有
预训练模型路径(--pretrained_unet_path指定unt路径,--pretrained_text_ebcode_path指定文本编码器路径,--pretrained_fp16_vae_path指定VAE路径),
Laro参数(--lora_rank设置lora矩阵的秩,--lora_alpha设置lora的缩放因子alpha),
数据集与输出位置(--dataset_path设置训练所用数据集的位置,--output_path设置训练结果的存放位置),
训练参数(--max_epochs设置训练轮数,--center_crop表示在处理图像时进行中心裁剪,--use_gradient_checkpointing表示使用梯度检查点技术,--precision设置计算精度)。
下载lora文件
我之前在魔搭社区中创建了该lora的公开模型,所以可以在实例中通过以下指令下载lora文件
git clone https://www.modelscope.cn/shek535/learn1public.git
搭建工作流并运行
工作流的搭建与不带lora的类似,只是在Download Kolors Model与Kolors Sample之间增添一个Load Kolors LoRA模块用于加载lora模型,其中lora_path为实例中lora的存放路径。
具体的工作流与结果如下
数据集的获取路径
最后我也了解了一些数据集的获取路径,首先可以通过一些公开的数据平台如魔搭社区中开放的数据集、ImageNet、Flickr等等,其次我们还可以通过网络爬虫获取图片。
总结
通过最后一次task,我学会了如何使用ComfyUI,更深入的了解了LoRA微调背后的原理以及其训练的过程,也知道了更多数据集的获取路径,可以更好的掌握文生图技术。通过本次夏令营,我对文生图有了大致的了解,学会了如何生成自己所需的图片,希望以后可以再次基础上更加深入的理解与使用AIGC技术。