1439 字
7 分钟
StableDiffusion:训练LoRA模型

1. 介绍#

​ LoRA是Low-Rank Adaptation的缩写,是一种大语言模型的低秩适配器,它可以降低模型可训练参数,使其尽量不损失模型表现的一种大模型微调方法。

​ 训练LoRA的具体步骤主要包括:

  • 确定目的:训练什么类型的LoRA
  • 收集素材:构建训练数据集
  • 处理素材:裁图
  • 设置标签:打标
  • 清洗标签:更新提示词
  • 模型训练:训练,根据训练步数决定训练时长
  • 效果验证:一般采用XY表展示LoRA的训练效果

2. 确定目的#

​ 在训练LoRA模型之前,需要先明确训练什么类型的LoRA,主要包括:人物角色画面风格概念场景服饰特定元素等。

​ 可以简单地将其划分为两大类:具象类泛化类具象类包括具体的物体、人物、姿势、服装、特定元素等,泛化类包括场景、艺术风格、色彩风格等。

3. 收集素材#

3.1 具象类#

  • 数量:建议30张左右
  • 素材要求不同角度、不同背景、不同姿势、不同服饰,清晰无遮挡的图片

3.2 泛化类#

  • 数量:建议50张以上
  • 素材要求不需要特别在意同质化,但也要注意不要让非常接近的素材占比过高

3.3 通用要求#

  • 尽量收集清晰无遮挡的图片
  • 尽量收集画质清晰、图像质量好的图片
  • 注意版权归属,不要使用有版权保护的图片
  • 慎用人物肖像图片

4. 处理素材#

4.1 SD 1.5#

​ 对于SD1.5时代的模型,训练图像要裁剪512 * 512尺寸附近,可以参考以下的方案:

  • 方形尺寸512 * 512
  • 矩形尺寸一边尺寸是512,另一边尺寸必须是64的倍数

4.2 SDXL、SD 3、SD 3.5、FLUX#

​ 对于SDXL时代SD3时代(包括SD 3.5和FLUX)的模型,训练图像要裁剪1024 * 1024尺寸附近,可以参考以下的方案:

  • 方形尺寸1024 * 1024
  • 矩形尺寸一边尺寸是1024,另一边尺寸必须是64的倍数

4.3 示例#

  • 20张自然风景下的化妆品

训练数据

5. 设置标签#

​ 给图像数据集设置标签,即打标,让AI在训练过程中理解画面内容。

​ 有两种打标的方式:

  • 手动打标
    • 好处:人工打标更准确,更能控制哪些元素需要、哪些元素不需要
    • 劣势:费时费力
  • 批量自动打标
    • 好处:速度快
    • 劣势:包含了画面内的大多数内容,需要人工复核内容,删除错误的、不需要的内容
    • 方法:使用提示词反推的工作流,一键式批量生成标签。以Florence 2方式的反推工作流参考如下:

批量生成提示词

6. 清洗标签#

  • 确定LoRA触发词唯一的创新性的(大模型不理解的新概念),并且对数据集内所有图像的标签都使用这个触发词
  • 明确LoRA训练内容把希望Lora学习到的内容从标签中去除,那么这些被去除的内容就会被学习到Lora触发词中

7. 模型训练#

​ 在comfyUI中可以使用kijai提供的FluxTrainer进行Lora模型训练——仅适用于基于FLUX基础模型LoRA模型训练

7.1 安装插件#

  • ComfyUI-FluxTrainer
Terminal window
git clone https://github.com/kijai/ComfyUI-FluxTrainer.git
cd ComfyUI-FluxTrainer
pip install -r requirements.txt
  • ComfyUI-KJNodes
Terminal window
git clone https://github.com/kijai/ComfyUI-KJNodes.git
cd ComfyUI-KJNodes
pip install -r requirements.txt
  • cg-training-tools
Terminal window
git clone https://github.com/chrisgoringe/cg-training-tools.git
cd cg-training-tools
pip install -r requirements.txt

7.2 绘制工作流#

Flux:LoRA_训练

  • 设定归一化尺寸,一般使用512*512768*7681024*1024等三种方案
  • 设定训练的模型
  • 设定存储的位置
  • 设定训练的最大步数,默认为3000步

7.3 训练#

训练中

​ 在RTX 4090单卡(24GB显存)下,训练20张1024 * 1024分辨率的图像,使用1024*1024的模式,会报错(爆显存),改用768*768的模式,可以顺利训练,速度在2.42s/it训练3000步,需要约2小时。

750步1500步2250步3000步
750步1500步2250步/
750步1500步2250步3000步

8. 效果验证#

8.1 验证方法#

​ 一般对于训练完成的LoRA,可以使用XY图表展示LoRA模型对生图效果影响,其中一个轴为LoRA的迭代模型,另一个轴为LoRA强度。

​ 对于SD1.5时代SDXL时代的模型,可以使用Efficiency Nodes节点直接生成XY图表,目前此节点尚未更新支持SD3、SD3.5和FLUX,因此对于SD3时代的模型,只能手动组装XY图表。

​ Flux版本可以参考生图工作流进行同一Lora模型、不同Lora强度的测试。

8.2 绘制工作流#

Flux:LoRA_测试

8.3 示例#

提示词#

  • 英文:Product photography,a perfume bottle with a wooden cap and a label on the body that says “FLUX ONE”,lying next to two white flowers on top of brown wood and a yellow flower behind,with soft lighting,in a minimalist style,simple composition,high-resolution photography,and high level of detail
  • 中文(参考):产品摄影,一个木质瓶盖的香水瓶,瓶身上贴着“FLUX ONE”的标签,旁边是棕色木头上的两朵白花,后面是一朵黄花,灯光柔和,风格简约,构图简单,摄影分辨率高,细节丰富

迭代步数#

  • 750步
Lora强度:0.0→0.2→0.4→0.6→0.8→1.0
  • 1500步
Lora强度:0.0→0.2→0.4→0.6→0.8→1.0
  • 2250步
Lora强度:0.0→0.2→0.4→0.6→0.8→1.0
  • 3000步
Lora强度:0.0→0.2→0.4→0.6→0.8→1.0

结果分析#

​ 模型在1500步时已经基本收敛Lora强度在0.8左右效果较好——0.6时更倾向于提示词效果:瓶子会呈现出磨砂透明质感;1.0时则更倾向于LORA效果:瓶子会呈现出不透明的化妆品效果,背景更倾向于自然风格。

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00