事先声明,本文中有些概念内容来源于互联网与chatGPT的解释,如有谬误敬请指正。
启动补丁包后,会进入一段loading,等待时间一般较久,它在搜寻你的电脑里是否安装了Lion优化器,如果未安装,则弹出提示框,关闭后再等待一段时间,弹出网络连接错误或者直接进行下一步。如果弹出安装未完成,则在后续步骤中不要使用Lion优化器。
该步骤允许你调用在电脑中已经保存过的json文件,如果你第一次运行,请选择否。
选择你的底模型。
注意,这里选择的图像路径必须是,X_tag 的父文件夹,例如images/7_tags 则选择images。
你输出的lora文件保存在哪里。
保存为json文件,下次可以直接选择,减少一些参数的选择。
如果你是一台正常的电脑,就不要开启这个。低RAM模式只针对非常差的显卡让它可以进行训练,但是训练出来的东西质量也很差。
以下是chatgpt的解释:
“AdamW是Adam优化器的一种变体,它将权重衰减正则化技术融入到优化过程中。权重衰减是一种常用的正则化技术,它惩罚大的权重值,从而避免过拟合。
8bit-Adam是一种针对深度神经网络的低精度优化器。它使用8位整数表示权重和梯度,从而减少了存储和计算的开销,加快了模型的训练和推理速度。
LION是一种新型的优化算法,它基于生物学中的遗传进化和个体竞争的原理。LION优化器通过对群体中的个体进行竞争和演化,来逐步优化模型的性能。相比传统的优化算法,LION具有更好的收敛性和鲁棒性。”
讲人话就是:
AdamW、8bit-Adam、LION这三个东西都是在机器学习领域中用来帮助优化模型的算法。
AdamW是一种对Adam优化器的改进,它可以防止模型过度拟合,从而提高模型的泛化能力(比如二次元往赛博coser上的迁移)。
8bit-Adam是一种用于深度学习的优化算法,它可以在不影响模型精度的情况下,大幅减少存储和计算资源的使用,从而让模型训练和推理的速度更快。
LION则是一种基于生物学原理的优化算法,通过竞争和演化的方式来优化模型,可以让模型更快地收敛并且更加稳定。相比其他优化算法,LION更加先进,但是也更加复杂。一般情况效果会更好。
底模的下载地址一般会给出它的基底模型。比如
就说明了该模型的Base Model是SD 1.5,那么就选择否。
用于控制clip_skip参数,这是一个训练层数的定义。一般情况下,真实模型的clip_skip都使用1,而动漫都使用2,当你选择是的时候这个值被更改为1。而否则改为2。
这是一个很复杂的东西,之后我们会有教程来讲这个。如果要使用它,也是将父文件夹载入。以下摘自lora guide并进行了翻译。
“regularization_images" 文件夹可以为空,存在正则化图像是可选的。 理论上,正则化图像有助于提高训练准确性。 正则化图像使您可以将正在训练的对象(概念)与图像的画风“分离”。在训练期间,网络将“并行”训练(实际上是顺序训练,在智能场景中存在正则化图像时,训练时间应该加倍)如何使概念不应该看起来像。这样的 LoRA 网络的模型之间的可转移性会变得更好(同样是理论上)。 如果您不确定是否应该使用正则化图像,请不要使用它们,除非您知道自己在做什么。
例如,如果您正在训练一个人的脸(男性),而每个描述文件中都有“Photo of [name]“的tag,那么最好打开 WebUI 并使用“Photo of man”的提示生成图像。需要生成多少张?至少要与示例中男性脸部图像的数量相同。生成更多图像会更好。
准备好带有200张图片的文件夹,其中包括1girl、1boy、photo of woman,photo of man这些tag生成的照片,这样的效果会更好。
这是一个断点续传功能,如果你对你已经训练好的loRA不满意,你可以在已经保存好的loRA上继续加数据训练。
翻转图像是一种简单的数据增强技术,可以帮助模型更好地学习不同角度的特征,在翻转图像时,可以沿着水平轴或垂直轴翻转图像(在这里是镜像),然后复制一份,加到数据集里。如果你的人物左右对称可以使用,如果不是左右对称会毁了数据。
chatgpt:“ batch_size是机器学习中常用的一个参数,它表示每个训练步骤中用来训练模型的样本数量。在训练模型时,通常会将训练数据集分成多个batch,每个batch包含了batch_size个样本。模型的训练过程会对每个batch中的样本进行一次前向传播和反向传播,并根据这些样本的梯度更新模型参数。因此,batch_size的大小会影响模型的训练速度和准确性。”
较大的batch_size可以加快训练速度,但可能导致内存或显存不足的问题;较小的batch_size可以增加模型的泛化能力,但可能增加训练过程中的抖动和噪声。
已经给出了一个参考参数,12g显存,在512分辨率下,可以最多处理6张图像。
epoch是机器学习中的一个重要概念,它表示对整个数据集进行一次完整的训练。举个例子,如果一个训练数据集中有1000个样本,batch_size设置为100,那么一个epoch就需要进行10个batch的训练,对每个batch进行前向传播和反向传播,并更新模型参数。通常情况下,epoch的数量越多,模型的训练效果越好,但过多的epoch可能会导致模型过拟合训练数据,泛化能力下降。
DIM是特征的数量,也就是输入数据的维度。在机器学习中,每个样本由多个特征组成,而这些特征就对应了输入数据的维度。这个值严重影响lora的质量,太低模型不像,太高容易过拟合。经过多方调试,128被认为是一个最为推荐的数值。它也直接影响输出的模型大小。
chatgpt:“在机器学习中,alpha通常指正则化中的超参数,用于控制模型复杂度和泛化能力之间的权衡。正则化是一种常用的防止过拟合的技术,它通过对模型参数进行惩罚,以减少模型的复杂度和提高泛化能力。
alpha的大小可以根据数据集和模型的复杂度来确定,通常情况下,alpha越大,模型的正则化程度就越高,复杂度越小,泛化能力越强。反之,alpha越小,模型的正则化程度就越低,复杂度越高,泛化能力越弱。”
经过实验调试,这个值为0.25-0.5 dim最佳。
大多数模型的分辨率都是正方形,因此只用提供一个数据。注意,你提供的数据需要为64的倍数。
学习率是指控制模型在每次迭代中更新权重的步长。学习率的大小对模型的训练和性能都有重要影响。如果学习率设置得太小,模型收敛速度会很慢,训练时间会变长;如果学习率设置得太大,模型可能会在训练过程中出现震荡,甚至无法收敛。默认1e-4是调试过的数值。
当然,我们也可以用学习率调度器动态调整,后面会提到。
text_encoder_lr和unet_lr分别是用于文本编码器和unet(指图像编码器和解码器的组合)的学习率,它们会覆盖基本的学习率设置。
unet_lr:3e-4 text_encoder_lr:1e-4是一个调试过的数值。设置不同的学习率,以更好地控制每个组件的权重更新速度,从而提高模型的性能和效率。
学习率调度器是一种用于动态调整学习率的技术,它可以在训练过程中根据模型的表现自动调整学习率,以提高模型的训练效果和泛化能力。
Cosine:余弦退火。使用余弦函数来调整学习率,使其在训练过程中逐渐降低。
其中,base_lr 表示初始学习率,T_max 表示一个周期的迭代次数,eta_min 表示最小学习率。
cosine_with_restarts:余弦退火重启。在consine的基础上每过几个周期将进行一次重启,该值在选择后可以设定。
其中,T_i 表示第 i 个周期的迭代次数,T_0 表示第一个周期的迭代次数,T_mult 表示每个周期的迭代次数相对于前一个周期的倍数
Polynomial:使用多项式函数来调整学习率。
其中,power 表示多项式的幂次,max_iter 表示总的迭代次数
constant and constant_with_warmup:恒定和恒定预热。恒定代表学习率不变,恒定热身代表在开始会增大一点,然后退回原学习率不变。warmup的概念后面也会再讲。
linear:线性。学习率线性下降。
一般选用cosine即可。(吐槽一下我是真不会用B站的这个公式块,我好菜)
最好的loRA不一定是在最后,可能会过拟合,所以可以设定一个值,每过3个epoch或者2个epoch保存一次,导入到stable_diffusion-webui中做对比。
chatgpt:“是一个用于控制是否打乱文本(caption)数据的开关参数。如果将该参数设置为True,则在训练前,文本数据中的每个caption都会被随机打乱顺序。这种操作通常用于增强模型对于不同文本顺序的鲁棒性,从而提高模型的泛化能力。
具体来说,打乱文本数据的操作是对于每个caption随机选择一个其他的caption,然后将它们交换位置,这样就完成了一次打乱操作。打乱操作可以多次进行,从而更大程度地增加数据的随机性”
常常用于SD模型。在训练真人模型的时候与二次元模型不同,它的构成是caption + tag的形式。
用中文表达为 “一个人在喝牛奶(caption),人,牛奶,牧场...”
洗牌文本可以在多种相似的图像中使用。如果差异较大,就不要使用了。
这个功能是让AI更好的知道“这是一段描述而不是一个tag”,如果你的描述都比较短,推荐开启。设置为1就可以了。
这是为了在训练开始时避免模型权重更新过于剧烈而采用的策略。学习率预热比例越高,就会有更多的迭代次数用于学习率的逐渐增加,以帮助模型更好地收敛。通常,学习率预热比例设置为训练迭代总数的一小部分,比如1/10或1/20。如果你的总步数为1000,在接下来的设置里请改为50-100。步数的计算方式为:
如果实在不会计算,可以先跑一次看看steps,然后再回来设置。
不修改的话,输出默认名为“epoch_次数”和"last"。尽量修改一下。
只是加个注释而已,不重要。
除非你有改代码和预先训练的需求,否则选否就好了。
它将在输出文件夹按照你的选择,字母顺序或者是频率顺序输出你所有在训练时打上的tag的txt文件方便你生成图的时候拿出来用。
例如:
“caption dropout”是一种用于训练图像文本的技术。在训练过程中,随机删除一定比例的文本描述,或者不使用描述,以防止模型过分依赖于描述信息,提高其泛化能力。如果你训练的真人模型,并有描述的话,可以使用。之后会提示你是否要在整个文件上使用,百分比是多少。
设置的话,每隔几个epoch会将整个epoch里的描述都删了进行训练,并重新生成描述进行对比,以提高泛化能力。
与描述类似,只是换了个对象。Tag忽略是按比例来算的,因为tag数量比较多。
添加的噪声偏移量。如果你的图像普遍偏暗,亮,或者忽暗忽亮,模糊不稳定。那训练出来的图像也会不稳定,可以加入一定的noise offset来进行均衡。一般设为0.1。
如果你的图像都进行过压缩,或者比例低于512很多,可以开启。
将另外一个训练加入队列,在本训练结束后继续训练。