Task 3 主要任务
了解微调的基本原理,对的种参数有一个更加清楚的了解,实现一个更好的效果。
了解文生图的工作流平台工具ComfyUI,实现一个更加高度定制的文生图。
ComfyUI应用场景探索
什么是ComfyUI?
GUI 是 "Graphical User Interface"(图形用户界面)的缩写。简单来说,GUI 就是你在电脑屏幕上看到的那种有图标、按钮和菜单的交互方式。
ComfyUI 是GUI的一种,是基于节点工作的用户界面,主要用于操作图像的生成技术,ComfyUI 的特别之处在于它采用了一种模块化的设计,把图像生成的过程分解成了许多小的步骤,每个步骤都是一个节点。这些节点可以连接起来形成一个工作流程,这样用户就可以根据需要定制自己的图像生成过程。
ComfyUI核心节点
1.Load Checkpoint节点
功能:加载checkpoint大模型
2.Load Checkpoint with config节点
功能:加载checkpoint大模型并同时应用config文件中指定的设置
3.CLIP Set Last Layer节点
功能:对CLIP进行微调并调整最后一层(Set Last Layer)。该节点用来设置选择CLIP模型在第几层的输出数据,提高模型在目标任务上的表现。
4.CLIP Text Encode (Prompt)节点
功能:该节点用来输入正反向提示词
5.KSampler节点
功能:门用于逐步减少潜在空间图像中的噪声,改善图像质量和清晰度
6.Empty Latent image节点
功能:控制纯噪声的潜空间图像及比例
7.VAE Decode节点
功能:用来将潜空间图像解码到像素级的图像。
8.Save image节点
用来保存image图像
每个节点详细介绍见:ComfyUI进阶篇:ComfyUI核心节点(一)
浅尝ComfyUI工作流
用带Lora和不带Lora模型的工作流脚本分别安装到comfyUI上,生成图片
不带Lora:
带Lora:
ComfyUI资源
Lora微调
什么是Lora微调?
LoRA(Low-Rank Adaptation)微调方法是一种针对预训练模型的高效微调技术。其核心思想是在预训练模型的基础上,通过注入可训练层(秩-分解矩阵)来实现模型性能的提升。具体来说,LoRA建议冻结预训练模型的权重,并在每个Transformer块中注入可训练层。由于不需要为大多数模型权重计算梯度,因此大大减少了需要训练参数的数量,降低了GPU的内存要求。
在LoRA微调过程中,研究人员发现,通过聚焦大模型的Transformer注意力块,使用LoRA进行的微调质量与全模型微调相当,同时速度更快且需要更少的计算资源。这一特点使得LoRA微调方法在实际应用中具有很大的优势。
可图比赛中微调代码的深入了解
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \ # 选择使用可图的Lora训练脚本DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \ # 选择unet模型
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \ # 选择text_encoder
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \ # 选择vae模型
--lora_rank 16 \ # lora_rank 16 表示在权衡模型表达能力和训练效率时,选择了使用 16 作为秩,适合在不显著降低模型性能的前提下,通过 LoRA 减少计算和内存的需求
--lora_alpha 4.0 \ # 设置 LoRA 的 alpha 值,影响调整的强度
--dataset_path data/lora_dataset_processed \ # 指定数据集路径,用于训练模型
--output_path ./models \ # 指定输出路径,用于保存模型
--max_epochs 1 \ # 设置最大训练轮数为 1
--center_crop \ # 启用中心裁剪,这通常用于图像预处理
--use_gradient_checkpointing \ # 启用梯度检查点技术,以节省内存
--precision "16-mixed" # 指定训练时的精度为混合 16 位精度(half precision),这可以加速训练并减少显存使用
""".strip()
os.system(cmd) # 执行可图Lora训练
UNet、VAE和文本编码器的协作关系
UNET是一种基于词向量的扩散算法,它的目标是将图形数据带在噪点图中,通过分步去噪的过程生成描述文本的图片。 VAE(变分自编码器)是一个先压缩后解压的算法。 它将输入的图像压缩为较小的噪点图,然后通过UNET算法进行逐步去噪,得到带有所有图片特征的噪点图。
如何准备一个高质量的数据集
明确需求
应用场景(例如,艺术风格转换、产品图像生成、医疗影像合成等)、数据类型(真实世界的照片还是合成图像?是黑白的还是彩色的?是高分辨率还是低分辨率?)、数据量(需要多少图片来支持训练和验证)
数据集来源
公开数据平台:魔搭、ImageNet、Open Images、Flickr、CelebA(专注于人脸图像的数据集)、LSUN
使用API或爬虫获取(注意版权问题)
数据合成
数据增强
购买或定制(特定领域,比如医学影像、卫星图像等,建议从靠谱的渠道购买一些数据集。)