训练效果越好。=image(图片数量)* repeat(每张图片训练次数)* epoch(训练轮数)*/ batch size(同时训练图片数量)。过大过小的学习率都可能导致训练效果不佳。通常需要通过测试和调整来找到一个合适当训练集的学习率。就可以处理学习越多的训练集的细节。如果训练集的细节越多。
点击启动脚本打开训练器,若刚安装的需要点击国内加速更新一下再点启动脚本
一、路径相关
训练底模
SD-v1-5-pruned-emaonly 或者 ReVAnimated 这种没有被融合过的大模型作为训练用的底层模型
(注:训练SDXL1.0版本的lora出图底模需要和训练底模一致,且不能使用controlnet,并且需要16G的显存才能训练,目前与SD1.5训练结果差别不大)
训练集
从训练集角度,训练集图片质量越好,模型效果越好,训练集质量由image+tag决定。
image:近景/远景/不同角度/清晰度
tag:描述全面准确——触发词+背景+视角+动作+光影+镜头构图(自然语言+单词描述)
分辨率
不能超过最大分辨率,但最大分辨率可以调大。训练集尺寸越大,训练效果越好,但是训练时间越长
二、步数相关
repeat 每张图片训练次数
代表每张图片循环训练几次,如果训练集较少的情况下,可以增加循环次数,因为训练数据不同,没有具体的标准数值参考,如果觉得学习的不够收敛就增加步数,过拟合就减少次数,但高repeat也会需要更高的算力。
写法:30_aidou,30就是repeat,代表每张图片训练30次
epoch 训练轮次
它和repeat相似,越高对训练的时间越久,也容易导致过拟合,可以提升模型的准确率和效果,但是太高容易炸炉。初步测试建议用10-20,过拟合就减少,收敛不足就增加,看训练集细节程度,假设场景细节多且是大场景,建议开高。
配置高的话,可以开启训练预览图
D:\lora-scripts-v1.5.1\output\sample这个地方出黑图or日志里loss值波动复杂的话就是炸炉了
bath size 同时训练数据量
代表了同时训练的数据量,比如同时训练4张图片。假设训练集一共40张图,一次训练4张,只需要跑10次。
较大的bath size会使训练速度更快,内存占用更大,但收敛的慢(需要更多epoch数)
较小的bath size会使训练速度更慢,内存占用更小,但收敛的快(可以减少epoch数)
对硬件要求比较高,如果硬件好可以开高,默认为1
总训练步数
=image(图片数量)* repeat(每张图片训练次数)* epoch(训练轮数)*/ batch size(同时训练图片数量)
假设一共100张图,每张图训练30次,训练10轮,同时训练1张图,训练步数
=100*30*10/1
=30000 步
三、模型效果相关
unet lr U-Net学习率
学习率是指在机器学习算法中的一个参数,用于控制模型在每次迭代更新时对于权重和位置的调整程度,可以将学习率视为决定每一步跨越多远的因素。
如果学习率较大的时候,每一步更新的幅度就会比较大,模型可能会更快的收敛,但是可能会因为跨越的幅度太大了容易不稳定,可能会出现炸炉或者收敛太快的情况,loss值波动复杂。(学太糙,没学懂)
如果学习率较小的话,过程会比较稳定,就像人走路步子迈太大可能摔倒,迈小一点可能稳当一点,但也可能导致收敛过慢来不及,达不到最佳收敛效果,loss值波动比较平稳。(学太慢,没学到)
所以选择合适的学习率非常重要,过大过小的学习率都可能导致训练效果不佳,通常需要通过测试和调整来找到一个合适当训练集的学习率,以达到更好的模型效果。
选择合适的学习率相当于选择一个合适的节奏,稳步前进,但是如果过小的话这个训练过程时间会比较长。
(如果开启U-Net学习率就只用管红色框里的,蓝色不用管)
1e-4=1/10000=0.0001
1e-5=1/100000=0.00001
1e-4/10=1e-5
1e-4/ 2 =5e-5
text_encoder_lr一般是Unet lr的十分之一或二分之一左右
新手可用默认
optimizer 优化器
主流使用的是AdamW8bit\DAd\Lion\神童优化器这几个,其中DA是一个自适应学习率的优化器
这里DAdaptation优化器一般用于测试一组素材的最优学习率
如何利用DA优化器寻找一个最优的学习率
01-将DA优化器的Unet设为1,text_encoder_lr设为1,调度器为constant
02-其他参数按照正常训练流程设置即可,然后就可以点击训练了
03-日志里的第二排第一个折线图tensorboard上升达到一个值后就会恒定不变,这个值就是最优unet_lr学习率
04-然后就可以用这个最优学习率去选择优化器里的Lion或者AdamW8it进行训练,使用Lion需要最优学习率➗3
dim 网络维度
network_alpha常采用与network_dim相同值或者一半,不能超过network_dim的值
network_dim“网络维度”指的是神经网络模型中的参数数量或网络层数,可以理解为规模复杂性,更多的神经元可以学习更加复杂的元素。而network_alpha“超参数”用于控制模型的复杂性。
可以理解为,越大的dim,就可以处理学习越多的训练集的细节,如果训练集的细节越多,则dim就需要相对调大,而aplpha越小则越约束模型,避免过拟合,但也不可以太小,太小会出现下溢,影响模型效果,而且速度也会变慢。
大场景+细节较多,dim:128 看效果适当降低 IP或者细节比较少的图 dim:32、64 根据具体情况调整测试
(细节多的训练集可以开高dim和epoch训练轮次)
(如果unet lr U-Net学习率小,network_alpha也小,可能会导致太慢达不到好的模型效果)
过拟合(步数太多,学过头)
降低 训练集张数、 repeat(每张图片训练次数)、 epoch(训练轮数)、network_dim(网络维度)、network_alpha(超参数), 或者增加batch size(同时训练图片数量)
欠拟合(步数太少,没学到)
增加 训练集张数、repeat(每张图片训练次数)、 epoch(训练轮数)、network_dim(网络维度)、network_alpha(超参数),或者降低batch size(同时训练图片数量)