图像LoRA训练

图片模型训练

Lora的概念

● Lora 允许在 Checkpoint 权重不变的情况下,对整幅图像进行微调。这样,只需要调整 Lora 就能生成特定的图像,而无需修改整个 Checkpoint。

● 目前训练的模型都是在官方训练好的模型(SD1.5、SDXL、PONY、ILLUSTRIOUS、FLUX、SD3.5)上进行的“精炼”。当然,也可以在其他人创建的模型上进行精炼。

● Lora 训练:AI 首先根据提示生成图像,然后将这些图像与训练集中的数据集进行比较。通过引导 AI 根据生成的差异不断微调嵌入向量,使生成的结果逐渐逼近数据集。最终,微调后的模型能够生成与数据集完全等价的结果,使 AI 生成的图像与数据集之间形成关联,使其越来越相似。

● 与 Checkpoint 相比,LoRA 的文件体积更小,节省时间和资源。此外,LoRA 可以在 Checkpoint 的基础上调整权重,从而达到不同的效果。

● 也可与Checkpoint融合,形成新的Checkpoint。

LoRA 训练过程

Five steps: Prepare dataset - Image preprocessing - Set parameters - Monitor Lora training process - Training completion

数据集

高质量的数据集是有效模型训练的关键.训练数据集是我们模型的来源,使用正确的大小、标记和编辑对于创建良好的数据集至关重要。

● 通常,20 到 40 张图片对于许多类型的 LoRA 来说已经足够,但风格模型训练需要更多图片来得到更好的泛化性。图片并非越多越好,低质量素材的加入反而会降低模型质量

● 通常寻找素材可以选择在图片网站中寻找,或者用AI 图像生成创建。但都需要避免使用出现问题的低质量素材图片

低质量素材一般有这些特点:画面太暗,不易识别到场景,构图不合理,画面不清晰,画面细节难以复刻,主次不明,画面细节难重复堆叠,无关元素的出现,主体不一且图片拼接,肢体错误或肢体错位

● 训练的角色风格最好与所选择的Checkpoint风格相近,即二次元角色就使用二次元的Checkpoint训练

所训练的角色通常 25-40 张图像就足够。使用相同的角色图像,但采用不同的姿势、角度、视图、衣服、表情、背景等

包含 30 张图片的数据集:12 张肖像照、4 张海滩背景照、4 张微笑表情照、6 张穿着原始衣服的照片、4 张背影照、6 张上半身照、8 张全身照、6 张坐姿照、8~10 张站姿照等。

● LoRA 风格数据集的选择

● 用的基准模型必须灵活或与所训练样式相似,插画的画风就使用平面类型的Checkpoint训练

所有图像必须具有相同的风格 (创建 LoRA 所需的风格)

编辑标签和触发词

● 必须使用触发词来实现最佳工作的 LoRA,它是提示阶段非常重要的部分。

● 触发词是 LoRA 的激活密钥,它本质上是标签,不会写入图像数据,而是显示在图像中。LoRA 的一致部分必须通过触发词来识别,而不是通过其自身的标签。

如:角色训练有固定头发特征就无需就无需在标签里标注,使其特征融合进触发词。风格训练,则需把带有风格词汇的标签删除

打标

名称

wd1.4

deepbooru

blip

输出形式

单词

单词

自然语言

主要用途

二次元特化

动漫图像分类

通用图像描述

模型使用

1.5,il,pony

1.5,il,pony

flux,xl

阈值

0.3-0.5

0.3-0.5

/

名称

deepseek

wd-swinv2-tagger-v3

cogflorence

输出形式

单词

单词

自然语言

主要用途

二次元特化

二次元特化

通用图像描述

模型使用

1.5,il,pony

1.5,il,pony

qwen,flux,xl

阈值

/

/

/

wd-swinv2-tagger-v3与wd1.4的区别

名称

wd1.4

wd-swinv2-tagger-v3

架构

CNN架构

Transformer架构

使用场景

专为二次元优化。在动漫角色识别方面表现出色,对典型的动漫特征如发色、眼色、服装风格等有很高的识别准确度。适合标准化的动漫图像处理,兼容性强,资源消耗适中。

对复杂场景的动漫图像适应性强,无论是宏大的幻想世界场景,还是拥挤的城市街道场景等,都能较好地识别其中的元素和关系。但对于一些风格过于抽象、特征不明显的动漫图像,适应性会有所下降。

阈值:值越小,描述越精细

图像预处理

裁剪图像

● 中心裁剪:裁剪图像的中心区域。

●焦点裁剪:自动识别图像的主要主题。

● 无需裁剪:即不裁剪图像,需要配合arb分桶使用

● 相比中心裁剪,焦点裁剪更容易保留数据集的主体,因此一般建议使用焦点裁剪。

● 对于稳定扩散 1.5 LoRA,建议使用 512x512, 512x768, 768x512 。如果您想创建高度详细的 LoRA,也可以使用 768x768 。

● 对于 SDXL、Flux 和 Stable Diffusion 3.5 训练,建议使用 1024x1024 。

数据集创建上传

可以选择上传已有数据集(即图片和文字标注相对应的总称)或者上传图片进行打标裁剪处理

已经上传完的数据集无法进行二次裁剪和自动打标,可以手动修改标签

上传完图片(一次批量上传数量小于50张),可选择裁剪方式以及尺寸和打标方法。选择完成后点击裁剪打标(待到完成处理即可开始调整参数训练)

训练参数设置

● 最上方是底模类型(即我们在这个类型的大模型下训练Lora)

● Base Model:每个类型的底模的不同选择

● Repeat:每张图片训练多少次。

● Epoch:所有图片训练多少轮

● Model Effect Preview Prompts:训练完成,每个模型会有一个样图,这个样图生成的提示词就是模型效果预览提示词

高级参数设置

● Batch size:指的是⼀次性送⼊模型的数据样本数量。设置为4时,意味着模型每 次处理4张图⽚。通过分批处理数据,可以提⾼内存的利⽤率与训练速度。通常,Batch Size值选择为2的n次⽅,提⾼了Batchsize,可以同步提⾼学习率,同倍数提⾼,⽐如2 倍的 batch_size 可以使⽤两倍的 UNet 学习率,但是TE学习率不能提⾼太多。

● Gradient Checkpointing:是⼀种⽤计算换显存的训练算法,可以节约显存 ,但会以牺牲⼀点速度。Batch Size是1,则关闭,Batch Size是2及以上则打开

● ARB Bucketing:⽤⾮固定宽⾼⽐的图像来训练(开启了ARB桶以后,无需裁剪。ARB 桶在⼀定程度上会增加训练时间。 ARB桶分辨率必须⼤于训练素材分辨率。)

● ARB Bucket Minimum Resolution:默认为256,上传图片分辨率不能小于256

● ARB Bucket Maximum Resolution:默认1024,上传图片分辨率不能大于1024,可以将数值改大,来添加更改分辨率的素材

● ARB Bucket Resolution Steps:默认64即可

● Save Every N Epochs:在循环次数的基础上保存模型,如:决定最终保存的 Lora 数量。如果设置为 2,且 Epoch 为 10,则最终将保存 5 个 Lora。

● Learning Rate:它表示 AI 学习数据集的强度。学习率越高,AI 学习能力越强,但也可能导致输出图像不一致。建议从较低的学习率逐渐增加,建议学习率为 0.0001。

● unet lr:设置 unet lr 后,学习率将不会生效。建议设置为 0.0001。

● text encoder lr: 决定对标签的敏感度。通常,文本编码器 lr 设置为 unet lr 的 1/2 或 1/10。

● Learning Rate & Optimizer:

AdamW8bit

prodigy

Learning Rate

总学习率1e-4

根据batchsize大小同倍数放大

所有学习率设置为1

实际学习率会自适应调整

Lr scheduler

Cosine with restart

重启次数不超过4

constant

Lr warm up

预热步数是总步数的5%~10%

/

● Network:常用数值

Network Rank Dim

32

64

128

Network Alpha

16

32

64

该值设置得太高会导致 AI 学习太深且模型会更大,捕获许多不相关的细节,类似于“过度拟合”

● Shuffle caption:启⽤后,训练过程中将随机打乱⽂本的token顺序,以增强⽣

成模型的泛化能⼒。建议打开。

● Keep N Tokens:⼀般选择1,以保持我们第⼀个填⼊的触发词,具有最⾼的权重。

● Noise Offset :在训练过程中加⼊全局的噪声,改善图⽚的亮度变化范围(就是能⽣成更⿊或者更⽩的图⽚)

● Multires Noise Iterations:定义迭代次数

● Multires Noise Discount:定义了噪声随迭代逐步减⼩的⽐例

注释:他们都需要更多步数以保证收敛,所以会影响训练时间。(针对Noise Offset,Multires Noise Iterations,Multires Noise Discount)

正则化

Regularization正则化就是规范化,就是规则,⼀个限制,正则化就是说给损失 函数加上⼀些限制,通过这种规则去规范他们在接下来的迭代中,不要⾃我膨胀。⽬的是 防⽌过拟合,增强模型的泛化能力

例如,在肖像数据集中,大多数图像都以长发为主,可以将短发图像添加到常规数据集中。同样,如果数据集完全由相同艺术风格的图像组成,您可以将不同风格的图像添加到常规数据集中,以丰富模型。常规数据集无需标记和裁剪。

训练记录查看

在创建数据集的右边查看训练记录

选择样图里没有问题的模型,进行保存

点击右上方个人账号的头像,跳转到个人作品界面,选择模型进行使用

模型测试

海艺会自动同步底模和所训练的Lora

在高级设置里将固定种子数打开,调整模型权重,即可测试模型在不同权重下的效果

Lora训练问题

过度拟合/欠拟合

过度拟合: 当数据集有限或 AI 与数据集的匹配过于精确时,会导致 Lora 生成的图像与数据集非常相似,从而导致模型的泛化能力较差。

右上角的图像在外观和姿势上都与左侧的数据集非常相似。

过度拟合的原因:

● 缺少数据集

● 参数设置不正确(标签、学习率、步数、优化器等)

防止过度拟合:

● 适当降低学习率。

● 减少Epoch

● 减少Repeat

● 利用正则化训练。

● 增加数据集。

欠拟合: 模型在训练过程中未能充分学习数据集的特征,导致生成的图像与数据集不太匹配。

拟合不足的原因:

● 模型复杂度低

● 特征数量不足

防止欠拟合:

● 适当提高学习率

● 增加Epoch

● 增加Repeat

● 减少正则化约束

● 向数据集添加更多特征素材(高质量)

Regular Dataset

避免图像过拟合的一种方法是添加额外的图像来增强模型的泛化能力。常规数据集不宜过大,否则 AI 会过度学习常规数据集,导致与原始目标不一致。建议使用 10-20 张图像。

例如,在肖像数据集中,大多数图像都以长发为主,将短发图像添加到常规数据集中。同样,如果数据集完全由相同艺术风格的图像组成,可以将不同风格的图像添加到常规数据集中,以丰富模型。常规数据集无需标记且无需裁剪。

图像模型类型划分

● SD1.5 :发布于22年10月,主流训练尺寸为512*512,作为训练底模,训练速度快,但出图质量相对一般

● 常用模型有:

majicMIX realistic

麦橘写实

Counterfeit-V3.0

GhostMix鬼混

XXMix_9realistic

● SDXL:发布于23年7月,主流训练尺寸为1024*1024,作为训练底模,训练速度一般,出图效果较好

● 常用模型:

Animagine XL V3 Series

XXMix_9realisticSDXL

Juggernaut XL

● Pony:发行很多版本,主流使用为V6 XL版本,发布于24年1月,主流训练尺寸为1024*1024,专注于卡通和动物风格图像生成的模型

● 常用模型:

WAI-ANI-NSFW-PONYXL

Prefect Pony XL

CyberRealistic Pony

● Illustrious:主流使用V1.0,发布于24年7月,主流训练尺寸为1024*1024,专注于提供高质量的动漫和插画风格图像生成能力。

● 常用模型有:

WAI-NSFW-illustrious-SDXL

Prefectious XL NSFW

Illustrious-Anime Artist

● 注:Illustrious和Pony底模训练出来模型,可以用在SDXL的模型下

● Flux:发布于24年8月,基于一种新颖的变压器架构,使用了 120 亿个参数,使其能够生成细致且逼真的图像。

主流训练尺寸为1024*1024,在512*512的训练尺寸下也有不错效果。

● 模型版本有:FLUX Pro,FLUX Dev,FLUX Schnell,FLUX GGUF,NF4

● 常用模型有:

名称

SeaArt Infinity

STOIQO NewRealit

MajicFlus麦橘超然

人像训练方式

二次元角色训练

底模选择il0.1模型

一般来说,训练人物的在步数上超过或者等于3000步就可以了(如果你的图片很多,包含了这个角色的各种服饰,背景,表情。可以在这个步数上增加)

Model Effect Preview Prompts可以直接使用图片的标签

高级参数可以参考前面的介绍(这里仅标注一些常用参数)

开启Enable ARB Bucketing,就可以不用裁剪图像,但最大分辨率可以根据你最大尺寸的图片的尺寸进行修改,目前所有上传超过2048分辨率的图片都会被压缩到2048,可以在最大分辨率位置填写2048即可

因为Epoch是20,需要10个模型,所以将Save Every N Epochs填写为2

学习率,优化器,调度器都可以使用默认的,最终效果不好可以再修改

Network Size,Network Alpha可以使用64和32的组合,也可以其他组合,参考高级参数里的推荐

Shuffle Caption可以增加泛化性

参考高级参数的解释,可以直接使用默认参数,也可以不加噪点

● 在样图的表现可能不如其他il模型

● 最终保存其中一个模型,在创作流里切换其他il模型进行使用

● 其最终效果会比0.1il模型效果好很多,对于其他il模型的泛化性也会更好

写实人像训练

选择flux模型作为底模

打上触发词,选择BLIP(可选cogflorence,deepseek)进行打标,然后将样图的提示词直接复制到Model Effect Preview Prompts里

接下来排查标注是否存在错误

如:with a cat on her lap and a cat on her shoulder looking at her,与图片内容不符,就应该改正

改正为:A woman is sitting at a table with a cat on it and is feeding the cat

全部完成排查后,调整参数

Enable ARB Bucketing这个参数是否开启没有任何影响,因为数据集的图片全部都是1024*1024,在ARB Bucket Maximum Resolution分辨率内

Learning Rate Scheduler 选择 constant

Optimizer 选择 Prodigy

选择Prodigy无需修改学习率,此优化器是全程自适应学习率

Network Size,Network Alpha人像训练不用开太高

flux训练人像,且是自然语言,无需打乱标注

步数较少,可以不用添加噪声

因为Optimizer 选择 Prodigy,所以最后几轮的样图有所差距,最后一轮样图手部有畸形,直接选择前面一轮的模型保存

多使用不同场景测试出图

风格训练方式

二次元风格训练

● 训练风格:所需要的图片类型越多越好(人物,动物,风景 ,物品),这样能更好的提升模型泛化能力

● 标注:标签里最好不要带有某种风格的词汇,仅对画面内容进行描述

模型选择Illustrious v0.1

填写触发词,打标选择wd 1.4 tagger,阈值可以在0.3-0.5左右(阈值越高,词汇越少,阈值越低,描述越详细。),填写好Model Effect Preview Prompts

因为没有对图片进行裁剪,且所有图片的分辨率都在2048以下,所以将ARB Bucket Maximum Resolution的数值改为2048

数据集图片足够多,无需开启

Learning Rate可以不用修改

Learning Rate Scheduler选择cosine_with_restarts

Optimizer选择AdamW8bit

等训练完成后,看效果再修改

因为数据集图片细节很多,可以将Network Size,Network Alpha开高一些,以便学习到更多的细节

因为训练风格,为了提升模型泛化性,可以将Shuffle Caption打开

Keep N Tokens数值填写1,保证触发词在第一位,以提升触发词的权重

因为步数足够多,可以加一些噪声

选择最后一轮进行测试

测试时候,选择其他Illustrious模型

特征明显类风格训练

模型选择flux,填入触发词,可以自己输入Model Effect Preview Prompts,也可以直接复制数据集的标签进去

高级参数可以参考il训练的参数

如果数据集的图片都是1024*1024就可以不用打开Enable ARB Bucketing或者调整参数

这些都可以直接使用默认参数

Shuffle Caption,flux模型训练使用自然语言,无需打乱标注

噪声可以不添加

最后几轮差异很小,直接选择最后一轮保存,进行测试

尝试各种提示词,测试图片能否正常出图

选择flux模型作为底模

打上触发词,将模型预览图提示词里也加上触发词,选择BLIP进行打标

接下来排查标注是否存在错误

如:a green sky with stars,与图片内容不符,就应该删除或者改正

改正为:A deer drinks water from a pond in the woods with trees in the background and some green branches hanging down in the foreground

全部完成排查后,调整参数

Enable ARB Bucketing这个参数是否开启没有任何影响,因为数据集的图片全部都是1024*1024,在ARB Bucket Maximum Resolution分辨率内

这两个参数在我们有足够的数据集的情况下不用打开,仅在少于10张数据集的时候可以打开

循环20轮,每1个循环保存一次lora,一共保存20个模型。可以选择更多的轮次保存一个模型,这样可以提升训练速度

学习率可以不用修改,如果最终未能完美学习到风格,再逐步提升学习率

优化器和调度器,可以参考前面高级参数里的搭配

Network Alpha,Network Size这两个的参数设置可以参考高级设置里的说明

打乱标注,在flux的训练里,使用自然语言可以关闭

噪声,在步数较少时可以不加

选择Lora,可以查看样图是否符合预期,可以看到12轮以前的样图都是不断有变化的,说明模型一直处于学习的过程,还未完成学习。这些部分的Lora不建议使用

从第15轮开始,模型样图几乎趋近一致,证明模型已经在收敛。一般从这一部分Lora选取使用。但是这并不代表所有模型都是最后的轮次最好,如果步数很多很多。选择中间部分的模型则会更好

有样图效果很好的,也可以保存下来在创作流进行测试,输入提示词进行测试,选择效果最好的即可

打标

图片数量

步数

Scheduler

Optimizer

Dim/Alpha

写实人物(FLUX)

BLIP

大于10

3000~4000

constant

Prodigy

32/32

风格(FLUX)

BLIP

大于60

5000~7000

cosine_with_restarts

AdamW8bit

32/32

二次元人物(IL)

wd 1.4 tagger

大于20

3000~4000

cosine_with_restarts

AdamW8bit

64/32

● 注意:参数只能是参考,可以根据具体情况进行调整,如在风格训练的时候,学习到的风格不明显,可以尝试增加学习率和增加一些噪声设置,如果人物训练出现畸形肢体或者物品错乱,可以检查打标是否正确,或者更换其他优化器和调度器

常见问题

● 问题:训练二次元人物使用il模型进行训练,最终出图人物发色随机,无法跟训练集角色的发色保持一致。

解决方法:将角色头发发色标注出来,并在出图时也在提示词里将发型发色打出来。另外可以使用il0.1作为底模训练,并最终出图使用其他il模型。这样能有效减少发色混乱的问题。

● 问题:训练过程中样图与数据集不一致或与样图提示词的内容不一致

解决方法:检查样图提示词是否正确,在样图提示词中,将主体角色或者物体写在最前面,客观描述画面内容。无需进行质量提示词的添加和提示词权重的添加,减少对样图的画面的影响

Last updated