Datawhale X 魔搭 AI夏令营第四期魔搭 Task3:进阶上分-实战优化
ComfyUI应用场景探索
Stable Diffusion的基本原理是通过降噪的方式(如完全的噪声图像),将一个原本的噪声信号变为无噪声的信号(如人可以理解的图像)。其中的降噪过程涉及到多次的采样。采样的系数在KSampler中配置:
- seed:控制噪声产生的随机种子
- control_after_generate:控制seed在每次生成后的变化
- steps:降噪的迭代步数,越多则信号越精准,相对的生成时间也越长
- cfg:classifier free guidance决定了prompt对于最终生成图像的影响有多大。更高的值代表更多地展现prompt中的描述。
- denoise: 多少内容会被噪声覆盖 sampler_name、scheduler:降噪参数
ComfyUI 则是将 webUI的流程分解为小模块,让你可以手动魔改
运行的ComfyUI:
Lora微调
Lora微调原理和优势
LoRA通过在预训练模型的关键层中添加低秩矩阵来实现。这些低秩矩阵通常被设计成具有较低维度的参数空间,这样它们就可以在不改变模型整体结构的情况下进行微调。本质就是将大型矩阵拆成,两个小矩阵相乘,从而降低计算复杂度。
M
R
×
C
=
A
R
×
k
⋅
B
k
×
C
M_{R \times C} = A_{R \times k} \cdot B_{k \times C}
MR×C=AR×k⋅Bk×C
在特定领域有少量标注数据
的情况下,也可以有效地对模型进行个性化调整
,可以迅速适应新的领域或特定任务。有助于保持模型在未见过的数据上的泛化能力
,同时还能学习到特定任务的知识。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训练
参数列表
参数id | 脚本中的数值 | 解释 |
---|---|---|
pretrained_unet_path | models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors | 指定预训练UNet模型的路径 |
pretrained_text_encoder_path | models/kolors/Kolors/text_encoder | 指定预训练文本编码器的路径 |
pretrained_fp16_vae_path | models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors | 指定预训练VAE模型的路径 |
lora_rank | 16 | 设置LoRA的秩(rank),影响模型的复杂度和性能 |
lora_alpha | 4 | 设置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) |
LoRA训练
接下来是我自己训练LoRA的流程:
创建自己的数据集
使用魔搭帮助自己创见数据集,csv等可以自己生成:
下载自己的数据集,并继续用baseline训练
#数据集下载
from modelscope.msdatasets import MsDataset
ds = MsDataset.load(
'ThereAreBearsComing/ZzzLoRAData', # 自己的数据集
subset_name='default',
split='train',
cache_dir="/mnt/workspace/kolors/data" # 添加baseline中的原定路径,让路径对应
)
#您可按需配置 subset_name、split,参照“快速使用”示例代码
Run baseline进行训练,之后发布LoRA:
https://modelscope.cn/models/ThereAreBearsComing/Thekingofwolfkids-KolorsTrained-ZZZ-LoRA
获得自己的LoRA,需要更换comfyUI的LoRA路径,并设置LoRA权重
用ComfyUI开始生成:
提示词 | 反向提示词 | 结果 |
---|---|---|
16岁的女孩在雪地里醒来,四周覆盖着厚厚的积雪,天空灰暗,远处有极光。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼睛,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指、色情擦边、热带气候、阳光明媚、温暖环境 | |
女孩在雪地中艰难前行,背景中有雪松和冰冻的河流。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼睛,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指、色情擦边、沙漠、炎热天气、干旱地区 | |
女孩与一只驯鹿相遇,两者相互观察,背景中有雪地和树木。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼睛,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指、色情擦边、热带雨林、城市街道、家养宠物 | |
女孩正在建造一个简易的小屋,背景中有木材堆和雪墙。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,色情擦边、色情擦边、高楼大厦、现代建筑、豪华别墅 | |
女孩和其他几个幸存者围坐在篝火旁,背景中有简易小屋。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼睛,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指、色情擦边、孤独、荒岛、无人区 | |
女孩手拿弓箭和同伴们在雪地中追踪足迹,准备狩猎。背景中有雪地和冰川,环境中有大雾。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼睛,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指、色情擦边、都市生活、超市购物、快餐店 | |
女孩和同伴们庆祝狩猎成功,背景中有篝火和烤肉。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼睛,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指、色情擦边、饥饿、贫困、缺乏食物 | |
女孩和同伴们踏上了前往未知目的地的旅程,背景中有山脉和雪原。女孩穿着厚实的蓝色羽绒服,内搭羊毛衫,下身是保暖裤,脚穿雪靴,戴着蓝色针织帽和手套,脖子围着一条围巾。深棕色长发绑成马尾辫,明亮的蓝色眼睛,二次元 | 丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指、色情擦边、停滞不前、放弃希望、独自一人 | |
最后提交作品: