Stable Diffusion LoRA模型训练详解万字宝典

2024-02-2208:31:56AI绘画与短视频剪辑Comments409 views字数 36715阅读模式

一,首先介绍一下训练 LoRA 的软件

在 Stable Diffusion 的模型训练领域,目前专门训练LoRA模型的有两种工具:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • Kohya_ss 是目前比较主流的产生 LoRA 的工具。Kohya_ss GUI 是一个独立于 Stable Diffusion WebUI 的开源的程序。它可以帮助训练 LoRA、Dreambooth 和 Textual inversion 模型。(Github地址:https:///github.com/bmaltais/kohya_ssya_ss)
  • 另一个方法是 Dreambooth 扩展插件。它在 Stable Diffusion WebUI 的 Extension 标签下可以找到直接安装的按钮,也可以去 Github 上安装(Github地址:
  • https://github.com/d8ahazard/sd_dreambooth_extensionambooth_extension)。h_extension

本文,主要以 Kohya_ss GUI 的界面设置为基础来讲解 LoRA 的训练过程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

二,LoRA 模型训练的准备工作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

和所有的模型训练一样,SD 的 LoRA 模型训练也需要一个完整的训练规划,通常建议大家考虑以下 7 个方面:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

1.训练的主题选择:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

训练的主体有很多,目前主要集中在训练脸部上。其次是训练服装风格、身体姿态、某个新怪物物种,或者某种画风等等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

2.训练集收集:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

和其他种类的模型训练一样,训练集是训练过程中最重要的部分,模型的训练效果 50% 以上取决于训练集的素材,其他都属于技术因素,可以通过后期的不断雕琢逐渐完善,而训练集则是根本。训练集注重的是质量,数量则保持在 15 张图片以上即可,一般不超过30张。但是对于高级训练师来说,一个 characters 人物角色需要 10 到 50 张训练图片, styles 某种风格则需要 100 到 4000 张,某种 concepts 概念则需要 50 到 2000 张。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

3.训练集修整

  • 如果是训练脸部模型,则需要照片的主体区域大部分为人脸,各个角度,多种表情,不同光线下的,清晰的脸部图片。构图简单一些,尽量少一些背景元素对前景人脸的干扰,比如背景中也有几个人脸这样的干扰。避免重复高度相似的图像,以避免过拟合。可以适当有一两张全身像。
  • 其他主题也是一样的考虑,训练什么,训练集的图片中的主体就突出什么。围绕不同角度,多进行取材。避免画面中其他元素的干扰。
  • 如果训练集的图片本身像素尺寸过低(低于设置中的分辨率时,一般为不低于 512*512 像素),实在无法找到高清的素材了。可以在 Stable Diffusion WebUI 的 Extra 标签下进行超分修复(具体请参阅之前有关 Extra 的讲解)。另外,也不要使用过大的图像(比如 3000*3000像素以上),这会导致系统错误,建议事先缩小。
  • 对于初学者来说,可以把训练集图片裁剪成 512*512 像素尺寸的图片。可以用 批量裁剪网站进行批量裁切工具。也可以使用Stable Diffusion WebUI 的Train标签下的图像预处理 Preprocess images 进行裁切。对于熟练使用者来说,则有许多不同的设置和参数可以控制训练集的图片大小问题,比如 bucket “桶”概念的引入,可以帮助训练程序直接引入不同尺寸的训练集图片,从而避免了在训练集图片准备阶段繁琐的统一图片尺寸的工作。
Stable Diffusion LoRA模型训练详解万字宝典
birme 的设置界面

注意:上图,Birme 的 RENAME 可以让输出的图片名称更加有序,方便训练程序使用,xxx 代表三位数字,下边的 starting number 代表从哪个数字开始排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

4.训练集预处理与打标,即图片的描述文本文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • 使用Stable Diffusion WebUI 的 Train 标签下的图像预处理 Preprocess images 进行裁切与打标。
  • 预处理完成后,系统会自动重命名训练集的每一张图片,并给每一个图片加上一个同名的 .txt 文本文件,文件中存放着描述 tag。
  • 然后,我们需要手动地对生成的 .txt 文本文件中的的 tag 进行核对,并进行调整。如果手动打标,则建议图像命名为1、2、3 …。那么每个图像对应自己的 .txt 文件命名则为 1.txt、2.txt、3.txt…每个 .txt 文件都必须描述它对应的图像,例如 1.txt 必须描述 1.png ,以此类推(注意:同名却不同扩展名的图像文件不应在同一目录中)。
  • 在每一个 .txt 文件中都要有 Trigger Word “触发词”。触发词不能是通用词语,比如你要训练你家的猫的 LoRA 模型,你家猫叫“大橘子”,那么触发词则不能用“大橘子”。因为,这会另 AI 混乱,当你给 Stable Diffusion 输入提示词“大橘子”时,它到底是生成一个大的橘子,还是你家的猫呢?因此,当我们给图片做标记时,最终的结果应该如下:
Stable Diffusion LoRA模型训练详解万字宝典
二次元形象 plum 和这幅图对应的文本描述文件中的tag标签
Stable Diffusion LoRA模型训练详解万字宝典
二次元形象 plum 和这幅图对应的文本描述文件中的tag标签

该二次元形象为plum,但plum与水果“李子”是同一个单词,所以在标注时最终选择了用“plu”(词典里没有)来代替,即特殊的触发提示词。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
每一个图片对应的 .txt 文件中的标签

可以看到,每一个图片对应的 .txt 文件中的tag标签,都是以“plu”这个 Trigger Word 触发词为开头的,其余的部分根据图片中的元素特征来分别标注。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

注意:图像的标注中,对于 plum 来说,并没有明确标注出”棕色“、”短发”这样的标签,而仅标注出了衣服的特征。这是因为对于 plum 的形象来说, ”棕色“、”短发”是 plum 本身的独有特征,并不随外部条件的改变而改变,所以我们是希望模型能够学会并记住最终“plu”这个触发词代表的就是”棕色“、”短发”等等这些 plum 身上独有的特征,即 plum 不可能是黑色长发或其他的发型,即 plu= ”棕色“、”短发”…。所以在标签中,不能填写”棕色“、”短发”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

所以,训练的黄金法则就是,任何你没有标注的内容,就是模型要学习的主要对象的天生内在的独有特征。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
Ayumi 的标准形象特征“红色水手服和领口的蝴蝶结”

举一个例子:当你训练 Ayumi 时,她的标准形象特征就是红色水手服和领口的蝴蝶结。如果你分别尝试训练两个 LoRA,其中一个特地标注了“水手服”和“领口蝴蝶结”,另一个不标注。则当你尝试使用这两个 LoRA 生成图片时 (提示词:masterpiece, high quality, Ayumi, white dress, smile, indoors ),则结果如图。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

左边为训练 LoRA 时没有单独标注“水手服”和“领口蝴蝶结”,右边为单独标注了“水手服”和“领口蝴蝶结”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

如果你不太确定哪些打标的词汇需要保留,哪些需要添加或剔除,那说明你对你需要训练的数据集的特征熟悉程度不是很高。那么此时,你只能通过反复的实验,通过训练后的结果对比来进行最终的判断。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

5.进行训练:

训练时着重注意两个问题,一个是基础底模型,一个是训练参数。(下一章节详细讲解)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

6.对比查看训练结果,调整参数,继续完善训练。

下面专门针对第五步训练环节进行逐一讲解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

三,LoRA 训练细节及参数详解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

· Configuration file 区域设置

1.首先,进入kohya_ss 界面,选择 LoRA 标签,在 Configuration file 区域里可以直接选择过往的存储好的参数预设文件(.json),即配置文件。(这个文件是可以将过往比较成熟的参数设置存储下来,方便之后训练新模型时使用)。所以,请尽可能地保存你所喜欢的设置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
进入kohya_ss 界面,选择 LoRA 标签

· 文件夹目录准备

2.准备一个专门用来训练的文件夹目录,并在目录中建立四个子目录:image、reg、log、model(稍后会解释着四个目录的内容和功能);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

3.然后在 image 目录中新建子目录,具体细节如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • 首先在image目录中建立一个子目录如下:
Stable Diffusion LoRA模型训练详解万字宝典
训练集目录结构示意
  • 文件夹名规则为 <num_repeats>_<identifier> <class> ,其中 “num_repeats” 是数字,为训练的重复次数,下面用“n”来指代。比如,目录名字为 100_identifierA,即表示该文件夹内的每张照片训练 100 步,100 这个数字会直接被程序读取。然后将之前准备好的训练集图片放到该目录中,假设准备了 20 张照片,那么训练时需要的总训练步数则为:100 * 20 = 2000步。(虽然没有详细的指引,但根据以往的模型训练总结的经验来看,需要注意“n”和总训练步数、图片数量之间要满足如下关系:image 里的所有子目录的 “n” 加在一起不能小于 100,同时另一个条件也需要满足,那就是总训练步数不能低于 1500。这两个条件都要满足。如果你总共只有 11 张图片,那么计算得到 1500/11=136.3636,那么 image 中子目录的“n”加到一起应该至少是 137,如果你有 20 张图片,计算得到 1500/20=75,那么这些“n”加在一起应该不小于 100。这些只是经验之谈,建议大家多做实验,亲子体会,不必照搬,多多总结出自己的模型训练笔记。);
  • “n”存在的意义:为了给特定的文件夹更大的权重,需要用到“n”来调节重复度。例如,你分别设置了一个包含 20 个图像的 200_ HighRes (高分辨率的意思)文件夹和一个包含 10 个图像的 100_ LowRes (低分辨率的意思)文件夹。这样一来,一共有 5000 步数(20 * 200 + 10 * 100)的训练步数,那么程序在第一个文件夹中学习的时间是 80% (20*200/5000) ,在第二个文件夹中学习的时间是20% (10*100/5000) ,从而减少了低质量图片对训练的过分影响;
  • image 文件夹为训练集所在文件夹,不能为空。图中,identifierA、identifierB …identifierN 为 <identifier>,是训练对象的特有名称,即模型名称独有的标识符,也是 image 中的子文件夹名,必须为英文,且为非通用词汇,如:uhu 。最好为 3 个字母组成的罕见词,如:ici、idi、uku、oro、hru 等等,确定之前建议多查查字典,看看是否有一样的单词。“n”和 identifierA、identifierB…identifierN 即 <identifier> 之间必须用下划线“_”链接;
  • <class> 为通用的类别名,比如 dog、cat 之类。<identifier> 与 <class> 之间用空格链接,比如:100_uhu dog 。那么在图像生成阶段时,使用“uhu dog”作为提示词中的触发词,将生成所训练的 LoRA 模型的狗种类图像。虽然可以在一个 LoRA 模型训练中包含多个特征和风格,但我并不建议这样,最好是专项专用,即一个LoRA只训练一种特征或形象;
  • n_identifierN class 的每个文件夹内必须有图像 *.png 或其他格式的图像文件(图像文件格式支持 .png、.jpg、 .jpeg、 .webp、.bmp )。如果存储了这些图片对应的描述文件 *.txt 或 *.caption(这类描述图片的文本文件称为:caption)则该文件夹名称中的<identifier> <class> (原本是作为训练时使用的 token)便在模型训练时失效,系统改为读取 caption 中的文本描述内容。(注意:.txt 为扩展名的 caption 与 DeepDanbooru 会产生冲突)
  • 文本描述文件除扩展名外,他们的名称必须与对应图片的名称一致。caption 中的描述文本必须有对应图片的实际 tag 描述或自然语言的文本描述,文本应该为一行,即不要手动回车换行。第一个被逗号分割的词,设置为训练对象的特有名称,即模型名称独有的标识符,即 Trigger Word 触发词,必须为英文,且为非通用词汇,如:uhu ;
  • identifiertN 文件夹可以有很多,即 N 的值可以很大,但至少要有一个;
  • reg 代表 regularization images ,为正则化训练集所在文件夹。reg 文件夹可以没有,它是一个可选项。但在理论上,正则化图像有助于提高训练精度。一旦设置 reg 文件夹,就应该放置相关的正则化图像,则训练用图像的“n1”需要满足(n1×图像的数量)≥(正则化图像的 n2 ×正则化图像的数量),通常,数百张正则化图像是理想的。正则化图像的子文件夹命名规则为:<num_repeats>_<class> 。正则化图像无需 caption。(通常一 epoch 即一“轮”的总训练步数是:重复次数 n1 x 训练图像的数量。如果正则化图像的数目大于这个数目,则系统训练时不使用多余的正则化图像。)

· Source model 子标签

1. Model Quick Pick 下拉菜单:然后在 Source model 子标签下,Model Quick Pick 下拉菜单中选择 custom,代表训练时使用的基础底模型由用户自己选择。如果你不选择 custom 而是下拉菜单中的其他 SD 的基础底模型,则软件会自动从 Github 下载这些基础模型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典

(注意:由于我们事先已经下载过了 SD 的基础模型,所以选 custom,然后选择本地的基础底模型所在路径即可。另外,如果这个地方选择了本地非 SD 官方基础模型,则需要知道该模型是基于哪个基础底模型派生出来的,如果是基于 SD 1.5 模型,则下面的复选框不能勾选 v2、v_parameterization 和 SDXL Model,如果是基于 SD 2.0 模型,则勾选 v2,如果是基于 SD 2.0 768 模型,则还需要勾选 v_parameterization,如果是基于 SDXL 模型,则不要勾选 v2 和 v_parameterization,而仅需勾选 SDXL Model。)(注:SD 基础底模型可以在这里下载 https:/https://huggingface.co/models?other=stable-diffusionable-diffusion)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

2. Pretrained model name or path 输入框:下方会展开一个新的区域 Pretrained model name or path 输入区。在这个区域里选择基础底模型。如果是训练真人质感的就找一个真人质感的基础底模型,比如 chilloutmix 系列。如果是二次元质感的或 2.5D 质感的就找到对应的基础底模型,比如 Anything-V3.0 之类的。将基础底模的目录和文件名称填入输入框。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

3. Save trained model as 下拉菜单一般选择 safetensors (safetensors 与 ckpt 的区别之前讲过)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

4. v2、v_parameterization、SDXL Model 复选框:这三个复选框根据 Source model 子标签下,Model Quick Pick 下拉菜单的需要来勾选。(注:SD模型有三个版本:“v1”、“v2”和“XL”,每个版本都有不同的数据结构。截至 2023 年 5 月 v2 版本尚未得到广泛的普及,而 2023 年 7 月以后、SDXL 1.0 模型迅速流行起来。目前普及最广泛的版本依旧是 v1 和刚刚火爆起来的 SDXL 。但是,如果你确实要使用 v2 作为基础模型,则需要勾选此选项。否则默认为 v2 关闭状态。SDXL 为最新最强大的模型,建议可以开始训练 SDXL 版本的 LoRA 模型,所以建议事先准备 XL 基础模型,并勾选此项。v_parameterization 是 v2 模型中引入的一种方法,它比以前采用更少的采样步骤来生成图像。使用 v1 模型时,你可以关闭此选项,但如果你知道你的基本模型包含 v_parameterization ,那就应将其勾选。当你打开此功能时,请务必同时也勾选“v2”。比如:当你指定 stable-diffusion-2 或 768-v-ema.ckpt 为底模型时。V2 和 v_parameterization 就要同时打开。)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

· Folders 子标签

  1. 然后,在 Folders 子标签下,分别填入之前设置好的三个目录 image、reg、log 和 model 的文件夹路径。
Stable Diffusion LoRA模型训练详解万字宝典
  • Image folder 输入框:输入之前设置好的 image 文件夹路径。(注意:不是 image 内部的子文件夹 n_identifierN class);
  • Output folder 输入框:为之前设置好的 model 文件夹;
  • Logging folder 输入框:位之前设置好的 log 文件;
  • Regularization folder 输入框:此为正则化图像所在的文件夹 reg。在 LoRA 模型训练方面,经常会发生训练图像的特征与<class_token> 类别名产生联系过于紧密的情况,导致每次使用这个类别名时都会生成与训练图像特征相似的图像,即语言漂移(Language Drift )。比如:如果你不使用正则化图像,训练了一个模型 uhu dog 的 LoRA,这是以你家狗狗 uhu 命名的一个 LoRA,训练集的子目录文件夹名为:100_uhu dog。那么当你用这个 LoRA 生成 dog 的图像时,即使在提示词中只有 dog,没有 uhu 的情况下,生成出的图像依旧十分像 uhu。因此要在训练过程中引入一些看起来明显不像训练图像中训练主题特征的同类 class 图像,以此防止 <class_token> 与要训练图像的特征产生强关联。这种与需要训练的图像特征明显不同的图像被称为 Regularization images 正则化图像。对于较低的训练(较少图片,训练步骤偏低)来说是不需要 Regularization images 正则化图像的,所以一般这里默认为空置即可。如果你的训练集图像确实很多,并且需要很多的训练步数,和很细腻的学习率,则需要有的 Regularization images 正则化图像训练集的参与。

2. Model output name 输入框:需要给要训练的 LoRA 模型起一个名字,填入此框,英文和数字格式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

3 .Training comment 输入框 (Optional) Add training comment to be included in metadata.:
这里相当于你对训练的一个描述,你可以在此处记录一个简短的对本次训练的文本描述。该文本可以作为“元数据”嵌入到完成的 LoRA 模型文件中。之后,你可以通过单击 Stable Diffusion WebUI 的 LoRA 选择屏幕上的 ⓘ 标记来查看这部分“元数据”文本。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

然后,在 Parameters 子标签下,设置参数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

· Parameters 子标签

Stable Diffusion LoRA模型训练详解万字宝典

1. Presets 下拉菜单:这是一个预设的下拉列表,其中罗列了许多对高级设置区域中各个参数调整的预设模式。每一个预设的名称中都包含了这个预设的一些重要参数,选择后可以查看下方的各个设置区域中的参数数值的变化,以用来对自己在训练过程中的参数设置形成参考。这个功能建议熟练使用高级功能后再开启。默认为不选择状态,即关闭。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

2. Basic子标签中:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

LoRA type下拉菜单罗列了几种 LoRA 的类型(Standard、LyCROIS/LoKr、LyCROIS/LoHa、LyCROIS/LoCon、LyCROIS/iA3、LyCROIS/DyLoRA、LoRA-FA、Kohya LoCon、Kohya DyKoRA);具体各项的解释如下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
各 LyCORIS 的特征总结表

LyCORIS:英文全称 LoRA beyond Conventional methods, Other Rank adaptation Implementations for Stable diffusion. 可以翻译为:用另一种超越常规的 Rank adaptation “秩自适应”的方法来实现稳定扩散。可以说 LyCORIS 是 LoRA 的思路的进一步扩展,是升级换代的 LoRA,通常比 LoRA 更有表现力,可以捕捉更多的训练图像的细节。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • LoRA network weights 输入框 Path to an existing LoRA network weights to resume training from :如果你想使用已经成型的 LoRA 模型文件进行额外的训练,请在此处指定 LoRA 文件所在位置。这里指定的 LoRA 会在学习开始时加载,并且训练的进程会从这个 LoRA 的现有状态开始。训练后的 LoRA 模型会另存为一个新文件,所以这里指定的LoRA文件不会被覆盖。
  • Automatically determine the dim(rank) from the weight file. DIM from weights 复选框:当使用已经成型的 LoRA 模型文件进行额外训练时,便可以勾选此项。LoRA 作为一个小型网络,其 Network Rank “网络的秩数”可以自定义设定。勾选此项,那么你创建的 LoRA 的 Rank 则等于已经成型的这个 LoRA 的 Rank。打开此功能后,之后的设置中 Network Rank 设定项中的设定将被忽略。
  • Train batch size 滑块:根据实际情况先择,如果显存比较小(低于6G VRAM)建议保持为 1 就行。如果本身也没有多少训练集图片,比如10~15或20,那么此处选 1 就行。batch size 的意思就是一次处理多少张图的意思,如果为4,则代表一次处理4张图片。如果总学习步数为 2000 步,那么实际处理步数为 2000/4=500 步,batch size 越大训练时间越短。但对显卡显存要求就越高。同时 batch size 与学习率是相关的,batch size 越大,需要的学习率可以小一些即学习的越要细腻。增加 batch size 会导致每次系统对单一图片的学习精度有所降低,但由于会综合捕捉多张图片的特征,所以最终的结果实际上可能会更好。但这必然要求你有足够多的训练图片来支撑,如果本身训练图片不多、不够丰富,则反而会降低学习的精度并减少权值变化的次数,在某些情况下可能会导致学习不足。另外需要注意,每个批次同时读取的图像必须全部具有相同的大小尺寸,如果尺寸大小不同,则可能会同时处理少于此处指定的批次数量的图像。
  • Epoch 输入框:轮数,即重复训练几次的意思。epoch 的多与少会影响总训练步数。因为总训练步数的公式是:Total number of steps =(总训练集中的图片数 images)x (重复次数 “n”) x (轮数 epochs);例如,你想通过 50 张图像,每张图像学习 10 次来训练。那么,一个 epoch 内进行 50x10 = 500 步训练。如果设置为 epoch = 2,以上过程将运行两次,即 50x10 x2 = 1000 步的训练步数。
    系统默认为在指定的 epoch 轮数全部训练完毕后,创建 LoRA 文件并将其保存在指定位置,除非在“Save every N epochs ”中另有设置。网上有一些有经验的模型训练师建议设置 epoch 为 5~10。
  • Max train epoch 输入框 (Optional) Enforce number of epoch:最大训练 epoch 轮数。你可以通过此处设置的数值,来强制模型训练的最大数量的 epoch 轮数,即当训练完成了此处设置的轮数时,将结束;
  • Max train steps 输入框 (Optional) Enforce number of steps:最大训练步数。你可以通过此处设置的数值,来强制模型训练的最大数量的 steps 步数,即当训练完成了此处设置的步数时,将结束。如果 Max train epoch 和 Max train steps 都设置,则 epoch 数优先;
  • Save every N epochs 输入框:每 N 轮之后存储模型,建议设置为 1,因为这更有利于查看每一轮训练后的结果。如果不需要在中间保存查看训练结果,则设置此处数值与 Epoch 输入框设置的数值一致即可;
  • Caption Extension 输入框 (Optional) Extension for caption files. default: .caption:如果你为每个图像都建立了描述文本文件,请在此处指定该文件的扩展名。如果不指定,则系统默认扩展名为“.caption”扩展名的文件。如果描述文件扩展名为“.txt”,请在此处指明“.txt”。

如果你没有图片的文本描述文件,则在此输入框中保持留空。
kohya_ss GUI 允许你利用 BLIP 模型自动为你所准备的所有训练集图像制作自然语言的描述文档。你可以在 Utilities -> Captioning -> BLIP Captioning 处找到它。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
利用 BLIP 模型自动准备的所有训练集图像制作自然语言的描述文档。可以在 Utilities -&gt; Captioning -&gt; BLIP Captioning 处找到它。
Stable Diffusion LoRA模型训练详解万字宝典
  • Mixed precision 下拉菜单:no、fp16、bf16 三个选项。此为设置训练期间权重数据的混合精度类型,用以节省 CRAM。最初,权重数据是 32位的(即在设置为 no 情况下)。fp16 是一种精度减半的数据格式,它可以节省大量 VRAM 并提高速度,但效果没有 bf16 好。bf16 是 NVIDIA RTX30 系列显卡以后的版本才有的,是一种用于处理与 32 位数据相同的数字宽度的数据格式。如果你的硬件支持 bf16,最好选择它。如果 VRAM 小于 16G 的话,请选择 fp16;
  • Save precision 下拉菜单:float、fp16、bf16三个选项。此为指定要保存到 LoRA 文件中的权重数据的精度。float 是 32 位,fp16 和 bf16 是 16 位。默认值为 fp16。同样,bf16 的效果要好于 fp16,但需要硬件的支持。如果你想缩小模型的文件尺寸,该选项将起到一定的帮助(如果你通过 DreamBooth 或 Fine-tuning 方式存储模型文件为 Diffusers 格式,则设置该选项无效);
  • Number of CPU threads per core 滑块:总共1~8个数值:此为训练期间每个 CPU 核心的线程数。基本上,数字越高,效率越高,但你需要根据你的CPU实际型号规格来设置;
  • Seed 输入框:类似在用Stable Diffusion或Midjourney生成图片是使用的Seed值,这在模型训练中也有类似的意义。在训练中,存在许多随机进程,例如“图像应该以什么顺序加载”和“训练图像应该添加多少噪声”。Seed就像一个决定随机处理过程的 ID,如果指定相同的 Seed,则每次都会使用相同的随机过程,即把第一次随机的进程记录了下来,以便后期重现这一进程,从而更容易重现第一次的训练效果。但是并不是训练过程中所有的随机进程都会固化下来(例如,随机裁剪图像的过程),因此即使你指定了相同的种子,也不一定会获得十分相同的训练结果。
    此处默认为空;
  • Cache latents 复选框:此为缓存图像 latent。训练图像被加载到VRAM 中时,在进入 U-Net 之前,被 VAE “压缩”在了一个更小的空间中,这个空间为 Latent 潜空间,此时图片的状态即为 Latent 状态,在此状态下图像开始进行训练。通常,每次加载图像时都会“压缩”图像进入潜空间,但你可以指定将“压缩”的潜空间图像保存在主内存中,以节省 VRAM 空间并提高速度,但这样做会阻止“压缩”之前的图像处理,因此你不能使用除 Flip_aug(稍后介绍)之外的任何增强功能。此外,你将不再能够使用随机裁剪(稍后描述)功能,它每次都会在随机范围内裁剪图像;
  • Cache latents to disk 复选框:此为缓存图像 latent 到磁盘。与缓存潜在图像到主内存类似,勾选此处将把潜在图像数据作为临时文件保存到硬盘中。即使在重启 kohya_ss 后也可以重复使用这个临时文件,所以如果你想用相同的数据进行多次 LoRA 训练,打开这个选项会提高效率。但是,同样地,如果勾选此功能,你将无法使用 Flip_aug 之外的增强和随机裁剪;
  • Learning rate 输入框:学习率(可简写为 LR),通常的设置为0.0001。也可以用公式的方式设置不同阶段的学习率,比如:0.05:10,0.02:20,0.01:60,0.005:200,0.002:500,0.001:3000,0.0005 在这个例子中,意味着前10步使用0.05的学习率,即比较粗狂的方式学习。以此类推,直至3000步以后出现了0.0005的学习率,意味着3000 步以后用比较细腻的学习率。“学习”是指改变神经网络中神经元之间的连线的粗细(即权重),以此让网络能够创建出与给定图片几乎一模一样的图片。但每次给出新的图片时连线权重都会因新的图片而发生改变,所以如果你设置学习率太细腻,那只能让模型绘制给定的图片,即过拟合,无法泛化,最终将导致模型无法绘制任何其他图片。为了避免这种过拟合情况发生,每次都会稍微改变权重一点点,在原有基础上合并一点新给定的图片的特征。“学习率”决定了这个“一点点”的量到底有多少。很明显,太高的 LR,即太粗糙是不行的。太低的 LR ,即太细腻也不行。默认值 0.0001 为比较安全的通用设置。但这里还需要考虑模型在训练过程中不同阶段面对不同的训练细腻程度的问题。学习率就好比我们用一个大树桩子雕刻出一尊细腻的雕像,起初你仅需要大刀阔斧地消除多余的部分即可,之后逐渐替换一些较小的刀具去雕刻出大体的轮廓,然后才是用更精巧的刀具去雕琢更细致入微的细节部分。所以,学习率应该是随着训练进程的进展而不断变小的。比如,下图由 JEREMY JORDAN 总结的在不同时期学习率的大与小的简单对比图。(学习率越大学习速度越快但学得也越粗犷,反之越细腻但效率也越低。)
Stable Diffusion LoRA模型训练详解万字宝典
简单粗略的比较学习率大与小的区别

因此学习率可以设置为在不同阶段用不同细腻的学习率去学习,如下图这样的学习率遵循某种曲线规律逐渐降低 LR 的曲线。更有规律的学习率公式可以在 LR Scheduler 学习率调度器里进行设置。如果 U-Net 和 text encoder 的学习率未做单独指定,那么默认同此 LR 学习率;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
学习率曲线
  • LR Scheduler 下拉菜单:adafactor、constant、constant_with_warmup、cosine、cosine_with_restarts、linear、polynomial,总共7个选项。此为学习率调度器设置。它的作用是;来规定模型训练的不同阶段使用不同的学习率,随着训练步数的不断增加,在某个训练阶段采用什么样的学习率,可以以一种固定套路的方式来规定,这个套路便是不同的学习率调度器。一般设置为 constant 或者 constant_with_warmup。如果下面的 Optimizer 优化器设置为 Prodigy,则 Prodigy 在学习率调度器为 constant 的设置下可以很好地工作。如果设置为 constant_with_warmup 以配合Prodigy,则需要更多的学习步数。大约 10 % 学习率预热 LR warmup 时,可能需要一两个额外的 epoch 轮数来补偿。如果使用 warmup,建议启用 safeguard_warmup=True 。cosine_with_restarts 是目前比较流行的调度器。以下是几种 LR Scheduler 学习率调度器的含义表格:
Stable Diffusion LoRA模型训练详解万字宝典
几种 LR Scheduler 学习率调度器的含义汇总表格
Stable Diffusion LoRA模型训练详解万字宝典
图一~图五:各种 LR Scheduler 学习率调度器对应的 LR 随 Steps 分布曲线
Stable Diffusion LoRA模型训练详解万字宝典
图六:polynomial 学习率调度器对应的 LR 随 Steps 在不同 power 下的变化
  • LR scheduler extra arguments 输入框(Optional) eg: “lr_end=5e-5”:此为学习率调度器额外参数输入框,设置参数时需要匹配对应的学习率调度器;
  • LR warmup (% of steps)滑块:1~100数值选择。此为学习率预热步数,一般以总学习步数的百分比形式出现,即总学习步数的前百分之多少步为逐渐预热期。所谓逐渐预热是指学习率从0直至事先设定的最高学习率的逐渐提高过程(学习率的提高代表着学习速度的提高,即学习得越来越不细腻)。调度程序中选择了constant_with_warmup 则设置此项,如果你的调度程序不是constant_with_warmup,则可以忽略它。默认为 10,即10%;
Stable Diffusion LoRA模型训练详解万字宝典
polynomial scheduler power=0.1~0.99 用不同颜色的线来表示。power=0.99,即接近 1 时,则基本等同于 linear scheduler 的线性线型。
Stable Diffusion LoRA模型训练详解万字宝典
图例:cosine_with_restarts 参数为 num_cycles=4 (紫色线) ,polynomial scheduler power=2 (绿色线)。
  • Optimizer下拉菜单:AdamW、AdamW8bit、Adafactor、Dadaptation、DAdaptAdaGrad、DAdaptAdam、DAdaptAdan、DAdaptAdanIP、DAdaptAdamPreprint、DAdaptLion、DAdaptSGD、Lion、Lion8bit、PagedAdamW8bit、PagedLion8bit、Prodigy、SGDNesterov、SGDNesterov8bit,总共18个选项。此为优化器设置。此项默认为 AdamW8bit。优化器是确定在训练期间如何更新神经网络权重的设置。人们已经提出了各种用于智能学习的方法,但 LoRA 学习最基础用的是“AdamW”(32位)或“AdamW8bit”(8位)。AdamW8bit 使用较少的 VRAM 并且具有足够的精度,因此如果你不确定哪个更适合,请使用“AdamW8bit” 。另外,融合了Adam方法,根据学习进度适当调整学习率的“Adafactor”也经常被使用(使用Adafactor优化器时,学习率调度设置则被忽略)。“Lion”是一个相对较新的优化器,尚未得到充分验证,据称 AdamW 更好。“SGDNesterov” 学习准确率不错,但速度较慢。DAdaptAdam 是比较稳妥的通用的选择,Prodigy 则是 Dadaptation 的升级版,适合在 SDXL 的环境,它会随着步数增加寻找最优的学习率,在训练 SDXL 的 LoRA 模型时选择它可以达到很好的结果;
  • Optimizer extra arguments 输入框 (Optional) eg: relative_step=True scale_parameter=True warmup_init=True:如果你想对指定的优化器进行更详细的设置,此为优化器的额外的参数输入框,设置参数时需要匹配对应的优化器。这是一个可选项,可以保留此处为空置;以下是有关 Optimizer 优化器特点和 Optimizer arguments 优化参数的对照表格:
    • AdamW : torch.optim.AdamW
    • 地址:
    • https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html
    • AdamW8bit : 参数同上
    • PagedAdamW8bit : 参数同上
    • Lion : (https://https://github.com/lucidrains/lion-pytorchion-pytorch)
    • Lion8bit : 参数同上
    • PagedLion8bit : 参数同上
    • SGDNesterov :
    • torch.optim.SGD(hthttps://pytorch.org/docs/stable/generated/torch.optim.SGD.htmlim.SGD.html), nesterov=True
    • SGDNesterov8bit : 参数同上
    • DAdaptation(DAdaptAdamPreprint) : (https://github.com/facebookresearch/dadaptationa)
    • DAdaptAdam : 参数同上
    • DAdaptAdaGrad : 参数同上
    • DAdaptAdan : 参数同上
    • DAdaptAdanIP : 参数同上
    • DAdaptLion : 参数同上
    • DAdaptSGD : 参数同上
    • Prodigy : (https://github.com/konstmish/prodigy)
    • AdaFactor : Transformers AdaFactor(https://https://huggingface.co/docs/transformers/main_classes/optimizer_schedulesmizer_schedules)

注:Optimizer 优化器是给模型训练提供一套独有的训练规则,它可以简化神经网络的训练过程,或者使用更少的算力资源,或者更多的算力资源,但最终都时为了达到更好的训练效果。这些 Optimizer 优化器中的一些会比另一些产生更好的训练效果。目前最好的选择是 adaptive optimizers(Ada-)类型的自适应优化器,因为它们会在每次反向传播时根据“损失”自动调整学习速度。DAdaptAdam、 DAdaptLion 和 Prodigy 是目前最推荐的优化器,因为它们消除了所有的神经网络“猜测”的过程,避免了过度训练。Prodigy 是在 SDXL 的环境下工作的,所以最好先熟悉一下。各类 Optimizer 优化器在技术解读上来说十分复杂,所以我们通过之前的多次尝试总结了一部分实际上的体验结果总结如下表,方便大家参考选择:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
Optimizer 优化器特点和 Optimizer arguments 优化参数的对照表格

关于 Optimizer 优化器额外的解释和建议:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    • Lion 的训练结果经常给人一种很奇特的感觉,比如你要想训练一个有着白色头发的角色,结果训练出来的模型的头发却呈现出了彩虹色的混乱效果,于此同时用其他优化器训练同样的训练集则会得到正确的白色头发效果,这足以证明Lion 可能存在某种不一样的地方,会为模型添加某些独特的元素,但现在尚无人能总结出确切的规律。Lion 的学习速度相当快;
    • AdaFactor 在训练时需要很长的时间,每训练一步时间都很长。它可能更适合风格或概念类的模型这种需要更多步数的训练;
    • DAdaptation 目前已经被重命名为 DAdaptAdam。它是一种自适应的优化器,即它会动态地自动地调整训练中的数值,省去你手动操作繁琐工作。只要训练集本身没有问题,它通常会让你以最少的时间付出给出非常好的结果。目前为止,它应该算是最好用的优化器了。DAdaptation 需要特定的参数设置才能起作用:--optimizer_args “de Couple=True” “weight_decay=0.01” “betas=0.9,0.999” 。Scheduler 调度程序必须设置为 constant 常量。在使用 DAdaption 时,很多网上提供的经验显示 U-Net 和 TE 的学习率似乎最好都是 1.0,这个大家可以自己去尝试看看。不过,有一个问题需要注意, DAdaptation 对 VRAM 的需求很重。它在 batch size 为 1 (512x512) 的情况下,使用 6.1GB 的 VRAM,因此 6GB VRAM 用户将无法使用它。在这种情况下,AdaFactor 可能是一个较好的替代方案。在尝试了各种 Alpha 值来对应 Dadaptation 之后,似乎 Alpha 1 和 Alpha 64( Network Rank (Dimension) 为 128)。建议将 Alpha 的值保持在 Network Rank (Dimension) 的 1 到一半之间(也就是说 Rank 为 128,则 Alpha 的值设置为 1~64。如果 Rank 为 32,则 Alpha 的值设置为 1~16);
    • Prodigy 可是被视为 DAdaptation 的升级版本,因此它与 DAdaptation 一样, DAdaptation 的所有属性和注意事项也同样适用于 Prodigy,VRAM 的使用率和训练速度大致也相同,设置也非常相似。同样的,Prodigy 具有自适应能力,可以随时自动调整数值以优化训练,似乎调整起来比 Dadaptation 更精准。Prodigy 可以用于 SDXL 的 LoRA 训练和 LyCORIS 训练。在少量的测试中,我们发现在使用已经训练成功的 LoRA 所配套各种参数和训练集的情况下,把 DAdaptAdam 替换成 Prodigy 可以得到更好的结果,进一步的确认还需要之后大量的训练实验来确定。尽管在之前的很多次训练尝试中,我们已经能够确认 DAdaptAdam 是目前为止最好用的优化器,但是这不妨碍它的升级换代产品 Prodigy 在未来成为更优秀的优化器的可能性,让我们拭目以待。Prodigy 可以设置如下的 optimizer arguments 优化器参数:--optimizer_args “decouple=True” “weight_decay=0.01” “d_coef=2” “use_bias_correction=True” “safeguard_warmup=False” “betas=0.9,0.999”;
    • d_coef 是 dynamic learning rate coefficient,即动态学习率系数 。
Stable Diffusion LoRA模型训练详解万字宝典
  • Text Encoder learning rate 输入框:此为文本编码器学习率,在 Kohya 的介绍中建议使用 5e-5(0.00005)。如果此处空置,则系统将使用 Learning rate 处的设置值;
  • 文本编码器(TE)的作用:TE 在 SD 生成图像时起到了解释提示词的作用,它把提示词转化为神经网络能读懂的数字描述的方式。在训练模型阶段,它则负责将文本所代表的事物输入给神经网络。良好的 TE 训练将使得模型能够通过提示词更细腻地控制图片的生成。
  • TE 本身也是一个神经网络,所以它也需要学习,所以这里涉及到了学习率问题。在实际训练的模型结果测试中可以发现,如果用同样的训练集来训练,仅仅只调节 TE 的学习率,那么当你用模型生图时,在固定 seed 的情况下,会发现有更好的细节分离效果,即将不必要的特征和自己想训练的特征分离出来,以在提示词并不特别精准与强调权重的情况下减少不相关元素的干扰。所以,如果你在生成图像时,遇到了不想要的东西,那么降低 TE 的学习率,那么略微低一些的 TE 学习率会对这种特征分离起到好的作用。另一方面,如果你在不给提示词添加太多权重的情况下,很难使你想要的特征或事物显示出来,那么就说明你之前把 TE 的 LR 降低得太多了,需要往高调一下。
  • 通常 TE 的 LR 要设置得低于 U-Net 的 LR。如果此处设置了一个数字,那么将优先于 LR 设置,否则将同 LR 设置;
  • Unet learning rate 输入框:U-Net 学习率(U-Net LR),这是对 U-Net 中的每个注意力块执行额外学习时的学习率。一般设置为 1e-4(0.0001)。
  •  U-Net ,它在SD生成图像的环节中起到了核心作用,即通过事先的训练记忆了海量的图像扩散规律,并通过噪点预测的方式使得SD从潜空间噪点中逐渐地生成出图像,它决定了图像的内容、纹理、颜色等等。U-Net 帮助 SD 从一片噪点中逐渐细化出图像的细节,好比你要先生成一个地图轮廓,然后才是轮廓中的大洲,再是国家,再是山脉水系,然后才是城市的细节等等。当你在 SD-WebUI 生图时,如果你打开了预览,你可以发现 U-Net 的这种逐渐细化图像细节的过程。
  • U-Net 本身也是一个神经网络,它的训练有一定的难度,很容易过度或者不足,留给“适度训练”的空间很少。如果你得到的模型生成效果过拟合了,那很可能是由于 U-Net 训练过头了,此时你可以调整为较高一些,即较粗糙一些的 U-Net LR 或较少的 steps 学习步数来解决这个问题,或者降低 Network Alpha 值( Network Alpha 会在下面详细介绍)。
  • 如果你得到的模型生成出的图像有大面积的噪点,那则意味着 U-Net LR 设置的太高了,即学得太粗糙了,很可能是少输入了一个“0”,此时你至少应该将原有的 U-Net LR 除以一个 8 或 10。如果模型生图看起来太弱,无法体现出你希望它所学习的特殊细节,那则意味着 U-Net LR 设置的太高,即太粗糙了,它没有学习到位。如果此处设置了一个数字,那么将优先于 LR 设置,否则将同 LR 设置。
Stable Diffusion LoRA模型训练详解万字宝典
  • Network Rank (Dimension) 滑块:1~1024数值选择:LoRA 网络的“秩数”或“维度”(Rank 或 DIM)。在 LoRA 神经网络中,Rank 可以粗略地指代 LoRA 网络的中间层的神经元数目。Rank 常用 4~128,不是越大越好。神经元数量越多,可以保留的学习信息越多,但学习到学习目标以外的不必要信息的可能性也会增加。一般设置为 64,再高必要性就不大了,超过了 128 之后基本不会有什么变化。如果是 32,训练出来的 LoRA 模型是 217MB 左右,如果是 64,模型是 435MB 左右。越高的 DIM 导致越多的占用 VRAM 和越大的模型文件。此项的默认值为 8 ;
  • Network Alpha(alpha for LoRA weight scaling)滑块:0.1~1024数值选择。(实际上是 1~1024 取值)这一参数的引入是为了防止保存 LoRA 时权重四舍五入为 0,即下溢。由于 LoRA 的特殊结构,神经网络的权重值往往很小,如果变得太小,可能会变得与零无法区分,这则与没有学习到任何东西的结果是一样的。因此,提出了这种方法,以使 LoRA 保持较大的权重值。在学习过程中,系统总是以恒定的速率将权重削弱一定的百分比,以使权重适当变小,但是削弱的步伐太激进则会下溢。Network Alpha 则决定了这个“权重削弱率”( weight weakening rate )。权重削弱率是通过公式“Network_Alpha/Network_Rank”来表达的,值在 0 到 1 之间。Network Alpha 值越小, “权重削弱率” 则越小,导致 LoRA 神经网络的权重值就会保存越大,训练的 LoRA 模型越有创造力。但是太小也不好,当到达了 Alpha 的默认值 1 时,则会与训练集风格差距太远。如果 LoRA 训练学习后的准确率不令人满意,则有可能是权重太小以至于崩溃为 0。在这种情况下,可以选择尝试降低 Alpha 值,以降低削弱率,从而增加权重值来解决。Alpha 的值应该设置得比 Rank 值小,如 Rank 的一半(适合训练人物 LoRA 模型),即 Rank 若为 64,Network Alpha 设置为 32 ,此时的情况下所使用的权重削弱率为 32/64 = 0.5 。如果 Network Alpha 和 Rank 具有相同的值,则该效果自动关闭。Alpha 不能高于 Rank 值,虽然可以指定更高的数字,但很可能会导致意外的 LoRA。另外,在设置 Network Alpha 时,需要考虑到对 LR 的影响。比如,权重削弱率为 0.5(设置 Alpha 为 32,DIM 为 64),这意味着实际 LR 仅为 LR 设置值的一半效果。一般在网络上普遍的建议是 Alpha 的值是 Rank 的一半,且尽量都为 16 的倍数;
Stable Diffusion LoRA模型训练详解万字宝典
  • Max resolution 输入框:按照“宽度、高度”的顺序指定训练图像的最大分辨率。如果训练图像超过此处指定的分辨率,它们将被自动降低至该分辨率。默认值为“512,512”。许多模型都使用这种大小的图像,因此在学习 LoRA 时使用这种大小的图像是安全的。除非你的 GPU 很强大,以及基础底模型是 768 及以上训练出来的,那么可以设置“768,768” ,毕竟这样训练出来的模型生成的图像也会更细腻,更高分。如果是专门训练 SDXL 的 LoRA 则建议达到”1024,1024” 分辨率规模,但 GPU 和 CPU 需要较强大,GPU 建议要达到 24G 的 VRAM;
  • Stop text encoder training 滑块 After what % of steps should the text encoder stop being trained. 0 = train for all steps. :0~100 数值选择。Text Encoder(TE) 文本编码器的学习可以中途停止。更新 TE 对整体影响很大,因此很容易陷入过度拟合而无法泛化(对学习图像调整网络太多而无法绘制其他图像)。在适度的训练进程中停止学习 TE 是可以防止这种情况发生的一种方法。此处指定的数字是总训练步骤的百分比。一旦训练达到这个百分比,TE 即停止学习。例如,如果总步数为 1000,此处指定 80,则 TE 训练将在学习进度为 80% 时结束,即 1000 x 0.8 = 800 步时结束 TE 学习,然后 U-Net 训练继续进行剩余的 200 个步骤。如果为 0,TE 将不会停止学习,直到结束;
  • Enable buckets 复选框:“桶”,顾名思义就是“一个桶的容器”。LoRA 的训练集图像不必具有统一的尺寸,但不同尺寸的图像不能同时进行训练。因此,在学习之前,需要将图像按照大小分类到不同的“桶”中。尺寸一样图片放在同一个桶中,尺寸不同的图片放在不同的桶中。默认为勾选开启,即系统会自动把不同尺寸的图片放在不同的“桶”中。如果训练集的图像原本尺寸相同,你便可以关闭此选项,但保持打开状态并不会有任何影响;
    此选项,使得在准备训练集阶段特地将图片尺寸手动剪裁为 512*512、或 512*768 等等这样的工作变得毫无意义。因为,通过bucket “桶”这个概念可以很好地保留不同尺寸的图像,节省了事先准备的时间,更重要的是保留了图片中应有的细节。
  • Minimum bucket resolution 最小桶分辨率滑块, Minimum size in pixel a bucket can be (>= 64):64~4090数值选择。桶最小分辨率,一般为 320,或 256;
  • Maximum bucket resolution 最大桶分辨率滑块, Maximum size in pixel a bucket can be (>= 64):64~4090 数值选择。桶最大分辨率。一般为设定为 768 至 1024 。如果你有 1280 或 2048 或更大的图片,也可以,但不建议用超大图,最好之前用 PS 把图片手动降低分辨率;
Stable Diffusion LoRA模型训练详解万字宝典
  • Scale weight norms:最大范数正则化是一种通过限制网络权值的范数来稳定网络训练的技术。该方法可以有效地抑制 LoRA 的过度拟合,提高 LoRA 的稳定性。建议设置为 1 ;
  • Network dropout:在深度学习神经网络领域,如果数据集不足够大,则很容易导致过拟合的情形。通过将不同结构的神经网络模型组合到一起,有助于化解过拟合的风险,但这样又会导致计算和维护成本的大幅提高。目前最有效的解决办法是,通过在训练期间随机 dropout 放弃网络中的某个神经元节点及它的连接,可以使单个模型来模拟具有大量不同的网络架构的特性以解决过拟合的问题。所以,Network dropout 是一种普遍使用的神经元级别的按照概率来 dropout 放弃神经元节点的方法(论文: https://www.https://www.cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdfvastava14a.pdf )。当这个概念被运用到 LoRA 训练领域时,则实际是应用在了 U-Net 的 down 块中。推荐范围 0.1 至 0.5 ,即 10%~50% 的节点会被随机选取并放弃。(注意,在 LoRA 以外的其他网络中,比如 LyCORIS 训练时,暂不支持此项设置);
  • Rank dropout:同样,Rank 秩数,在 LoRA 中指的是隐藏层的节点数。在训练过程中随机的放弃少部分节点,有助于防止过拟合。推荐范围 0.1 至 0.3 ;
  • Module dropout:目前尚不太清楚这里指的是随机放弃哪些 Module 组件或模块。推荐范围 0.1 至 0.3 ;
  • Rank dropout 和 Module dropout 是 Network dropout 原始论文基础上,由 Kohya-ss 首先提出来的,截止至2023年7月,其作用尚未得到良好的验证,大家可以尝试。

然后,进入 Advanced Configuration 高级设置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

· Advanced Configuration 高级设置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典

Weights(权重)、Blocks(块)、Conv( Convolutional Neural Network,或CNN,卷积神经网络),这三个子标签是 U-Net 中每个块的 learning weight 学习权重和 Rank 秩的设置。从U-Net 网络结构图中可以看到,U-Net 总共由 25 个 block “块”(或称为“层”)组成:12个 IN 块、1个 MID 块和12个 OUT 块。这是 U-Net 网络的标准结构。如果你想改变每个块的学习率权重,你可以在这里单独设置。选择这三个中的任意一个,下面的设置区域将显示相应设置内容。这些设置适用于高级用户属于更细腻的设置。一般情况下是不需要的,如果你确定了解这些细节,并能对微调这些细节十分了解,再对此区域进行设置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • Weights:Down LR weights/Mid LR weights/Up LR weights/Blocks LR zero threshold:这里的 Weights 权重指的是 strength of learning “学习的强度”,用 0 至 1 的数字表示,其中 0 表示“不学习”,1 表示“按照 LR 中设置的学习率进行学习”。以此可以改变 strength of learning “学习的强度” 。如果设置为 0.5,则 LR 将为一半强度。目前截止到 Kohya_ss v21 这个版本此设置尚不支持 SDXL 模型的训练。
    • Down LR Weights 输入框:Down 即 IN 块,它指定了 12 个 IN 块每一个的学习权重。
    • Mid LR Weights 输入框:指定 MID 块的学习权重。
    • Up LR Weights 输入框:Up 即 OUT 块,它指定 12 个 OUT 块每一个的学习权重。
    • Blocks LR zero threshold 输入框:这是较新的 v21.7.16 版本的 kohya_ss 中新加入的设置。之前解释过“LoRA 实际上是添加了一个小的神经网络”,但添加权重太小的神经网络没有意义,因为那相当于几乎没有学习到任何东西。因此,你可以设置“不要向权重太小的块添加 LoRA 神经网络。”所以,此处的设置的意思是:为 U-Net 网络中每个块的 LR 设置一个阈值。如果权重不大于此处设置的这个阈值,则不会创建 LoRA 块。例如,如果你在此处设置 0.1,则 LoRA 神经网络将不会添加到权重设置低于 0.1 的块。此设置的默认值为 0 即无论如何都会创建 LoRA 块。
Stable Diffusion LoRA模型训练详解万字宝典

Blocks: Block dims/Block alphas:在这里,你可以为 U-Net 网络的25个块中的每一个设置不同的 Rank(DIM)值和 Alpha (Network Alpha)值:IN 0~11、MID 和 OUT 0~11。(通常 Rank 较高的块则可以容纳更多的信息。)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

此处需要指定 25 个数字,即对应 U-Net 中的25个块,为每个块都要指定一个数值。但由于 LoRA 是将 Attention 块作为学习目标的,而 Attention 块并不存在于 IN0、IN3、IN6、IN9、IN10、IN11、OUT0、IN1 这些块中,因此这 25 个数字中的第 1、4、7、11、12、14、15 和 16 的块在学习过程中将被忽略。尽管如此,你仍需要填写出全部的 25 个数字,以“,”半角逗号分割。(确实,此设置的用户界面不够友好,希望以后这个设置能更好用一些)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

此设置适用于高级用户。一般情况下,你可以在此处留空。如果未指定,则 Network Rank(DIM)和 Network Alpha 处设置的值将应用于所有25个块。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

Stable Diffusion LoRA模型训练详解万字宝典
  • Conv: Conv dims, Conv, alphas:LoRA 针对 Attention 注意力块进行训练,Attention 中有一个 Conv 卷积神经网络(Convolutional Neural Networks, CNN) ,它也是通过额外的学习进行更新的。其中使用的“过滤器”的大小是 1x1 正方形。(有关卷积神经网络的结构可以去参考我专门为卷积神经网络所进行的讲解)

    另一方面,除了 Attention 之外的一些块(Res、Down 块)和 OUT 中的一些 Attention 块使用的是 3x3 “过滤器”进行卷积。本来这些块并不是 LoRA 的默认 学习目标,但是通过指定这个参数,Res 块的 3x3 卷积也可以作为学习目标。因此,由于学习目标的数量增加了,便可以进行更精确的 LoRA 学习。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    设置方法,同之前的 Blocks: Blocks dims, Blocks alphas ,也需要设置 25 个值,以“,”半角逗号分割。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    同样,此设置适用于高级用户。一般情况下,你可以在此处留空。如果未设置,则 Conv 不进行学习。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

     

下面介绍 Weights、Blocks、Conv 三个子标签下都有的设置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • No token padding 复选框:此为添加到训练图像中的 Captions 描述文本中,对每 75 个 token 进行一次处理。如果 Captions 描述文本的长度小于 75 个 tokens,则在 Captions 后添加所需数量的终止符号,以使其与 75 个 tokens 齐。这称为 padding “填充”。如果 Captions 描述文本的长度超过 75 个 tokens(假设有 150 个tokens)时,系统将分成多组 75 个 tokens 进行提交(此处假设 150 个 tokens 则导致分成两组)。由于在同一 75 个 token 的集合中具有上下文语义的联系。这意味着在第一组 tokens 集合和第二组 tokens 集合之间的被分割的边界处有类似“blue hair”这样的词组,于是“blue”作为一个 token 将被分到第一组中,而“hair”作为另一个 token 将被分第二组中。这会导致 Captions 整体描述的语义不连贯。于是 padding 所起的作用就是,将本组中最后一个逗号所分割出的逗号之后的所有 token 放入下一个组,同时对于未达到75个 tokens 的本组进行 padding “填充”,以达到 75 个 tokens 为一组的要求。下一组在接受到上一组挪过来的逗号分隔出的 tokens 后,放在最前端,后面的 tokens 集体后移。

    此处复选框在勾选的情况下的意思是,指定系统不执行 padding 填充。默认状态为不勾选,即自动执行 padding 填充。

  • Gradient accumulation steps 滑块:1~128之间数值。此为梯度累积步数。系统通常在每一次读取 batch 批次时便更改一次权重,即重新开始一次学习。但也可以一次对多个 batch 批次进行学习。该选项指定一次学习多少个 batch 批次。比如,如果 batch 设为 4,则一批次同时加载的图像数量为 4。换句话说,每读取 4 张图像就进行一次学习。如果将 Gradient accumulation steps 梯度累积步数设置为 2,则每 2 个批次执行一次学习,即每读取 8 张图像就会执行一次学习。这与直接设置 batch 为 8 的工作原理看似表面上的数字计算是一致的,但不完全等同。注:之所以说不完全等同,则在于 Gradient accumulation 梯度累积的核心思想是,对多个批次进行一次性的更新,更新过程中,它使用相同的模型参数进行多次反向传递。这与传统的方式不同,传统的方式是每批次更新一次模型参数。一个是多次反向传递相同参数,一个是每批次传递一个新的参数。所以这两种方式对网络的影响是有不同之处的。而 Gradient accumulation 可能会累积出几组相互冲突的参数,从而导致学习失败。所以如果要设置此项目,必须要考虑设置后和设置多少相比较没有设置有更好的结果,同时还需要确保在 Gradient accumulation steps 和 batch 之间找到一个平衡。这可能需要花费大量的时间做测试。

    此项的默认值为 1 。

  • Enable weighted captions in the standard style “(token:1.3)”. No commas inside parens, or shuffle/dropout may break the decoder. Weighted captions 复选框:目前最流行的 Stable Diffusion 使用软件界面是 Stable Diffusion WebUI,它有独特的提示词书写公式。例如,如果你在提示中指定“black cat”时想要非常强调“Black”这个词,则可以将要强调的词放在圆括号中,例如 (black:1.2) cat。”1.2”为需要强调的权重数。此勾选项便是允许你在训练图像的描述文本文档中也使用这种表达公式。可以使用(abc)、[ abc ]、(abc: 1.23)等。这些括号的嵌套也是可以的。但不要在括号中包含逗号,因为那会导致在 Shuffle caption 勾选情况下打乱括号位置。

    默认为关闭状态。

  • Prior loss weight 输入框:Prior loss weight 先验损失权重,即正则化图像的损失权重。它决定了训练过程中对“正则化图像”的重视程度。如果该值较低,则表示正则化图像不太重要,生成的 LoRA 更强烈地展现训练图像的特征,即使你仅用 class 的类别 token 来生成图像,也还是会更多地展示训练图像的特征。反之,则是特别重视正则化图像。如果你压根不使用正则化图像,则此设置没有任何意义。这个输入的数值是一个介于 0 和 1 之间的值,默认为 1.0,即100%考虑正则化图像。
  • LR number of cycles 输入框 (Optional) For Cosine with restart and polynomial only:此为在 LR Scheduler 学习率调度器设置为 “Cosine with restart”或“Polynomial”的情况下,则此输入框用于指定调度程序在学习期间应运行多少个 cycles 周期。如果此选项的数量为 2 或更高,则调度程序将在一次训练期间运行多次。在 Cosine with restart 和 Polynomial 中,LR 随着学习的进行逐渐减小到 0,但是如果循环数为 2 或更多,当学习率达到 0 时,学习率被重置并重新开始。下图展示了是 cycles 为 4 时, Cosine with restart(紫色)和 cycles 为 1 时,Polynomial(绿色)的 LR 变化的曲线。

    此项默认为留空,留空则 cycles 为 1,即无多次循环。

Stable Diffusion LoRA模型训练详解万字宝典
图例:cosine_with_restarts 参数为 num_cycles=4 (紫色线) ,polynomial scheduler power=2 (绿色线)
  • LR power 输入框 (Optional) For Cosine with restart and polynomial only:此为在 LR Scheduler 学习率调度器设置为 polynomial 情况下用来规定 polynomial 的 power 的数值。power 的数值从 0.10~0.99~N,数值越小前期 LR 衰减的越少而后期衰减得越快。这个数字越大,初始 LR 就衰减得越陡。当 power 为 1 时,它与 linear 线性调度器具有相同的形式(见下两图例)。注意不要让数字超过 1 以后太大,因为 LR会在起始阶段就迅速陡峭地下降至 0 并卡在接近 0 的位置,导致学习不足。默认值为空,在这种情况下将为 1,即与 linear 线性调度器相同;
  • Additional parameters 附加参数输入框 (Optional) Use to provide additional parameters not handled by the GUI. Eg: --some_parameters “value” :如果你想要修改 kohya_ss GUI 上未显示的学习设置参数,请在此处将其作为命令输入。通常此处留空;
Stable Diffusion LoRA模型训练详解万字宝典
  • Save every N steps 每N步存储输入框 (Optional) The model is saved every specified steps:每次系统完成此处指定的步骤数 N 时,都会创建并保存 阶段性的 LoRA 文件。例如,如果学习步骤总数为 1000,而你在此处指定 200,则 LoRA 文件将在第 200、400、600 、800 步结束时保存 LoRA 文件(当然,在 1000 步全部完成后,也会正常保存 LoRA 文件)。这样做的目的是在漫长的训练时间进展过程中,方便你及时查看训练进展的状态,以通过对照找出参数设置的问题,以决定是否继续或修改参数事中的调整,以提高训练效率。这与 Save every N epochs 的设置是类似的。如果 Save every N steps 与 Save every N epochs 两者都设定了,则 epoch 数优先。此项默认为 0,即不保存中间状态 LoRA 文件。
  • Save last N steps 最后N步存储输入框 (Optional) Save only the specified number of models (old models will be deleted) :当你设定了“Save every N steps ”以在训练过程中保存 LoRA 文件,则可以使用此选项进行进一步设置。即,如果你只想保留最近的 LoRA 文件并丢弃旧的 LoRA 文件,你可以在此处设置“要保留 LoRA 文件的最近步数”。例如,假设总学习步骤为 600,并且你设置“Save every N steps”为 100 步保存一次。然后,LoRA 文件将在第 100、200、300、400 和 500 步时临时保存 LoRA 文件,并且你在此处同时设定“Save last N steps ”为 300,则意味着系统仅保存最近 300 步的 LoRA 文件。即,在第200(500-300)步和 200 步以前的 LoRA 文件将不被存储下来。此项,默认值为 0。

    此项设置的意义在于,早期的 LoRA 临时文件中几乎还没有存储进什么特别有用的学习到的信息,此时作为你的参考观察对象将变得毫无意义。

  • Save last N states 存储最后N步输入框 (Optional) Save only the specified number of states(old models will be deleted):此处指定了最后第 N 个阶段的 states 文件被保存,最后第 N 个 states 阶段之前的 states 文件将被删除。比如,此处设置为 3 的话,那么最后 3 个 states 阶段的相关文件被保存,之前的各阶段的相关文件被删除,即被覆盖掉。此项默认为 0,即不设置最后 N 个 states 阶段的文件被保存。

    这里的 states 与 Save training state 设置处所指的“state”相同,即保存时刻的训练进度状态、各种参数、optimizer 优化器状态等等;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    states 训练状态数据将存储到名为“<output_name>-X-state”(X 是 epoch 数)的文件夹中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    注意:epoch 数和全局 steps 步数不会被保存到 states 训练状态数据中,即用 states 文件恢复训练时它们也只能从头开始,所以,届时需要重新设置 epoch 和 steps 。

  • Keep n tokens 前n个token被保留滑块:0~32 数值。如果你的训练图像有描述文本文件,你可以通过 Shuffle caption 来随机打乱描述文本文件中以逗号分隔的“词组”(Shuffle caption “随机打乱描述词”会在后面详细解释)。但是,如果在打乱时你想保留最靠前的几个“词组”不被打乱(因为开头的“词组”往往被视为此次训练的模型的特征词、触发词),此时则可以使用此选项指定将前几个“词组”保留在开头。但实际上,无论你是否指定此项,文本文件的前 4 个 token 都将被保留不动,即不被随机打乱。

    此项默认值为 0,即不保留任何“词组”固定在最前。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    如果 Shuffle caption “随机打乱文本”选项为关闭状态,则此处的设置无效,即不打乱的情况下,所有描述文本文件的所有词组的位置都是固定的,此选项自然无效。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    注意:此处所指的“词组”是指用逗号分隔开的单词、词组或句子。即,无论逗号分隔的文本包含多少个单词,它都算作一个词组。例如:“black cat, eating, sitting”,则“black cat” 在此处为一个词。

  • Clip skip 滑块:0~12 数值。Stable Diffusion 使用 “CLIP” 来进行提示词的文本的数字化编码。CLIP 也是一种深度神经网络,它由 12 个相似的层组成。文本(实际上是 token)最初通过这 12 个层转换为数字序列的表达,即向量形式的表达。在第 12 层,即最后一层输出出来的向量则被发送到 U-Net 网络中的 Attention 块进行处理。然而,Novel AI 公司独立开发了一个模型,俗称 NAI,即”Novel AI 模型”,它采用了独特的架构,可以使向量在 CLIP 的第二层到最后一层的所有层都可以输出,而不仅仅是在最后一层处理后才输出。这种创新的机制也被 Stable Diffusion 所利用。

    因此,“Clip skip”滑块在此处设置的数值,指定“从倒数第 几 层” skip 跳过后续层的处理,而直接输出向量给 U-Net。比如:此处设置为 2 ,则将 CLIP 的倒数第二层的输出向量发送到 U-Net。如果为 1,则使用最后一层的输出向量,即视同为不指定。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    如果用于训练的基础模型使用 NAI 模型,即 Novel AI 的模型(或 NAI 的混合模型),最好将此处设置为 2,因为 NAI 模型训练时是在 Clip skip= 2 的情况下进行的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    另外,根据经验:如果你选择基础模型是真实质感的,最好选择 Clip skip= 1,如果选择的基础模型是绘画与动漫质感的,最好选择 Clip skip= 2。

  • Max Token Length 最大token长度下拉菜单:75、150、225三个数字设置。此处指定文本描述中的最大 token 数。注意:Token 的含义虽然接近于“单词”,但它不等价于“单词”,token 的含义需要单独去了解,逗号也算作一个 token。对于 token 的确切定义请参考我提供的详细名词解释。

    绝大多数情况下一张图片的文本描述的 token 数都是少于 75 个的。但如果你认为文本描述必须超过 75 个,否则难以描述清晰对图像的描述,那么此时应该在此处指定更大的 token 数字,即不高于 150 token,或不高于 225 个 token。

  • Full fp16 training (experimental) 复选框:如果打开之前的选项 Mixed precision “混合精度”(fp16或bf16),则在训练期间将使用 32 位和 16 位数据的混合。但如果打开此选项,则所有权重数据将是 16-位(fp16 格式),即不会混合32 位数据。这样虽然节省了VRAM,但某些数据的准确率则减半,因此学习准确率也会因此导致下降。此项默认为不勾选,即关闭。除非你觉得有必要节省 VRAM,否则可以将其关闭(毕竟,我们的最终目的是为了训练满意的模型而不是为了节省VRAM)。
  • Gradient checkpointing 复选框:通常在训练过程中,每次加载图像时都会一次性地修改和更新大量的神经网络权重。勾选该选项指定逐步计算权重,而不是在训练期间一次计算所有权重,来减少训练所需的 GPU 的 VRAM 使用量。打开或关闭此功能对模型训练的结果没有影响。打开它通常会减慢速度,但却可以增加 batch size 批次大小,因此总的训练速度实际上可能会更快一点。此项默认为不勾选,即关闭。
  • Shuffle caption 复选框:如果你的训练集图像有文本描述文件,那么文本描述很可能会写成一系列逗号分隔的“词组”(由于描述文本中有时不仅仅是某个单词,而是一句话或一个短语,为了区分“单词”和“token”我们在之前明确定义为“词组”),例如“black cat, eating, sitting.”等等。此处,Shuffle caption 复选框的勾选则会在每一次学习训练数据集中的某一张图片时,随机打乱该图片描述文本文件中被逗号分隔的“词组”的顺序,比如:“eating, sitting, black cat.” 。一般来说,文本描述中的“词组”越靠前就越重要(这与在 Stable Diffusion 的实际生图过程中输入提示词的技巧是一样的,大家都应该有所体会,我在之前的“提示词”技巧中详细讲解过这一点)。因此,如果被逗号分割的“词组”的顺序一直是固定的,后面的“词组”可能不会得到充足的学习,另一方面,靠前的“词组”也有可能因为过度地强化训练,而导致模型与靠前的“词组”形成意想不到的过分联系。所以,希望可以通过每次加载图像和图像的描述文件时随机更改“词组”的顺序来纠正这种可能的极端化偏差。

    如果描述文本词不是以逗号分隔的,而是一整句自然语言的句子,则此选项也就自然失效了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    此选项默认为不勾选,即关闭,即不进行词组的随机打乱排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    注意:此处所指的“词组”是指用逗号分隔开的单词、词组或句子。即,无论逗号分隔的文本包含多少个单词,它都算作一个“词组”。例如:“black cat, eating, sitting”,则“black cat” 在此处为一个词。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    网上一些有经验的训练师认为 Shuffle caption 的实际效果并不明显,可以忽略不计。但出于严谨的科学训练规划来说,还是建议打开此选项。

  • Persistent data loader 复选框:每个 epoch 轮训练时加载的所需数据将在本 epoch 轮后被丢弃,并在下一轮 epoch 前重新加载。勾选此项则保留本 epoch 轮加载的数据。很明显,勾选此选项将加快学习新一轮 epoch 的开始速度,但会消耗更多内存来临时保存数据(此功能仅限在 Windows 环境中有效)。此选项默认为不勾选,即关闭。
  • Memory efficient attention 复选框:勾选此项则可以减少 VRAM 的使用并执行注意力块的处理。如果你没有足够的 VRAM,请打开它。

    此选项默认为不勾选,即关闭。

  • Use xformers 复选框:如果你使用名为“xformers”的 Python 库,则意味着使用 xformers 的 CrossAttention,则可以减少 VRAM 的使用并执行注意力块的处理,但代价是学习速度略有降低。勾选 Memory efficient attention 与勾选 Use xformers 相比, Memory efficient attention 会导致学习速度更慢。当然,如果你没有 xformers 则应该打开 Memory efficient attention 。如果你没有足够的 VRAM,请打开此项。

    此选项默认为勾选,即打开。

  • Color augmentation 复选框:augmentation “增强”的意思是“增加图像的颜色的色相与饱和度”。通过每次对训练图像进行轻微处理,人为地增加了训练图像的多样性。当此处被勾选,即 Color augmentation 颜色增强打开时,图像的色调每次都会随机地轻微变化。因此 LoRA 模型在色调上学习到的会有轻微的多样性变化。

    如果 Cache latents “缓存图像 latent”是打开状态,此项勾选无效。此选项默认为不勾选,即关闭。

  • Flip augmentation 复选框:类似 Color augmentation 将颜色进行轻微调节,以增加训练图像的多样性,Flip augmentation 将图像左右进行镜像反转,以增加训练图像的多样性。
  • Min SNR gamma 滑块:0~20 数值。最小信噪比伽马值。在 LoRA 学习中,会在训练图像中添加各种强度的噪点以进行学习(这种添加噪点的详细方式可以参考 Stable Diffusion 的 U-Net 的介绍部分)。根据添加噪点的强度,模型训练会变得更接近目标或者更远离目标,尤其是在训练没有被添加足够多的噪点的图像时,学习可能会明显偏离目标,因此要尽量抑制这种情况的发生。引入 Min SNR gamma (Min-SNR-γ)“最小信噪比伽马值”来补偿这一点,以使得学习变得更稳定。

    稳定的学习也自然加快了收敛速度,使得模型训练效率提高了3.4倍。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    另外,增加最小信噪比伽马值,则会增加对常见元素的学习,减少对不常见元素的学习。这意味着如果你要训练数据集中的一些细小特征,那就应该降低这个值,甚至关闭这个值。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    这个滑块数值默认为 0 ,即关闭。根据提出该方法的论文来看,最佳设置为 5 ( 论文:httpshttps://arxiv.org/abs/2303.09556)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    实际上这个设置是最近的新版本 kohya_ss 最新添加的一个设置,值得一试。

  • Don‘t upscale bucket resolution 复选框:默认情况下,存储桶大小设置为 256 到 1024 像素之间(或者,你也可以使 用Maximum bucket resolution “最大分辨率”选项指定最大分辨率)。垂直或水平尺寸超出此尺寸范围的图像将被缩小以适合该指定的尺寸范围(同时保持长宽比)。但是,当勾选了此选项时,将忽略 bucket 桶的大小范围设置,并自动根据训练图像的大小自动准备存储桶,即加载所有训练图像而不进行缩放。然而,即使在这个时候,也有可能会裁剪部分图像以将其大小与 bucket resolution steps “桶分辨率步长”(稍后会详细描述)相匹配。

    此选项默认为勾选,即打开。

  • Bucket resolution steps 滑块:1~128 数值。如果勾选了 Enable buckets “使用存储桶”,请在此处指定每个存储桶 的Bucket resolution steps “分辨率间隔步长”。例如,如果你在此处指定 64,则每个训练图像将根据每增加 64 个像素为间隔分类到单独的存储桶中。这种分布是从垂直和水平两个维度上来进行的。如果图像大小不完全是桶指定的大小,则多出的部分将被裁剪。例如,如果最大分辨率为 512 像素,桶步长为每 64 像素,则桶将为 512、448、384 等。此时,500 像素的图像将放置在 448 像素的桶中,多出的 52 像素将被裁剪掉。steps 步长默认值为 64 像素。SDXL 的模型训练,建议此值设置为 32,低于32不起作用,

    注:如果你把这个值设得太小,桶的分布就会变得太细,最坏的情况下,你可能会面临每张图片都有一个桶的情况。另外,每个批次始终从同一个桶中加载图像,因此如果存储桶中的图像太少,则批次数量会无意中被迫变小。这就是此处的值设置过小的一种可能不利后果。

  • Random crop instead of center crop 复选框:如上一个设置所述,不符合步长区间尺寸的图像会被部分地裁剪掉多余部分,以放入分类到桶中。但默认的裁剪方法为以图像的中心点作为基准点,中心对称的方式去裁剪。勾选即打开此选项,则随机确定图片的哪一部分将被裁剪。

    注意:如果 Cache latents “缓存图像 latent”是打开状态,此项勾选无效。

Stable Diffusion LoRA模型训练详解万字宝典
  • Noise offset type 下拉菜单:Original/Multires。噪点偏移类型。此处用于指定在向训练图像添加额外噪点时使用哪种 offset 偏移方法。默认为 Original。Multires 则以稍微复杂的方式添加噪点。复杂一点的噪声将更有利于训练出能生成整体更明亮或更昏暗的图像的模型。

    Stable Diffusion 有一个大多数人都没有注意到的有趣的小瑕疵。如果你试图让它生成特别暗或特别亮的图像时,它几乎总是生成总亮度的平均值相对接近于 0.5 的图像(一个完全黑色的图像是 0,一个完全白色的图像是 1)。这是由 Stable Diffusion 模型的噪点预测器的本质所决定的。所以接近办法也自然地是在噪点预测环节进行调整,即添加某些额外的噪点,即 Noise offset 噪点偏移。

Stable Diffusion LoRA模型训练详解万字宝典

左侧四组与右侧四组为添加 Noise offset 之前和之后的情况生成的图像,分别为:A dark alleyway in a rainstorm (亮度均值,之前 0.301,之后 0.032); Top right: Monochrome line-art logo on a white background (亮度均值,之前 0.709,之后 0.974); Bottom left: A snow-covered ski slope on a sunny day (亮度均值,之前 0.641,之后 0.858); Bottom right: A town square lit only by torchlight (亮度均值,之前 0.452,之后 0.031);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • Noise offset 滑块 recommended values are 0.05~0.15 :这是当噪点补偿类型选择为 Original “原始”时的附加选项。如果你在此处输入大于 0 的值,则会添加额外的噪点。设置为 0 ,根本不添加噪声。设置为 1 增加了强烈的噪音。

    有报道称,添加约 0.1 的噪声可以使 LoRA 的颜色更加鲜艳。默认值为 0。

  • Adaptive noise scale 滑块 (Experimental, Optional) Since the latent is close to a normal distribution, it may be a good idea to specify a value around 1/10 the noise offset. :-1~1数值。自适应噪点量。与 Noise offset “噪点补偿”选项配对使用。如果你在此处指定一个值,则噪点将在 Noise offset “噪点补偿”基础上进一步根据图像中当前的噪点量自动调整放大(或衰减)。指定正值将增加附加噪点量,指定负值将减少附加噪点量。

    系统建议指定此处数值为 0.1。默认值为 0。

  • Multires noise iterations 滑块 enable multires noise (recommended values are 6-10) :0~64 数值。当噪点补偿类型选择 Multires “多分辨率”时,则展示该设置项。Multires “多分辨率”会产生多种分辨率的噪点,并将它们加在一起以创建最终的附加噪点。如果你在此处输入大于 0 的值,则会添加额外的噪点,数值则代表分辨率噪点的种类的数量。

    默认为 0,为 0 时不添加额外的噪点。建议设置为 6 ~10 中的数值。

  • Multires noise discount 滑块 recommended values are 0.8. For LoRAs with small datasets, 0.1-0.3 :0~1 数值。与多分辨率噪点迭代选项结合使用。该值用于在一定程度上减弱各分辨率下的噪点量。0 到 1 之间的值。数字越小,噪点越弱。衰减量根据分辨率而变化,并且低分辨率的噪点被衰减得更多。

    默认值为 0,通常建议 0.8,如果训练图像较少,建议将值降低到 0.3 左右。

  • Dropout caption every n epochs 输入框:通常,图像和描述文本是成对训练的,但也可以设置在特定的 epoch 轮中,仅训练图像,而放弃掉描述文本。此选项允许你指定每几轮学习开启一次没有描述文本图像的学习,即 dropout caption 放弃描述文本。

    例如,如果你在此处设定 2,则将在每 2 个 epoch 时(第 2 个 epoch、第 4 个 epoch、第 6 个 epoch...)执行一次不使用说明的图像学习。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    当学习没有字幕的图像时,LoRA 有可能学习到更全面的图像特征,并防止过多的图像特征与特定单词的过分关联。但是,请注意不要放弃太多描述文本,因为 LoRA 可能最终不会与任何提示词相关联。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    默认值为 0,这意味着不执行放弃描述文本。

  • Rate of caption dropout 滑块:0~1 数值。这是另外一种形式的放弃描述文本的设置方法,0~1 数值设置的是百分比,即设置放弃描述文本的学习占总学习数量的百分比比例。0 是 0% 的放弃率,即“学习时始终使用描述文本”,1 是100%的放弃率,即“学习时从不使用描述文本” 。设置在 0~1 之间的小数,代表一定的百分比数值的放弃率。其中,哪些图像被学习为“放弃描述文本”是随机确定的。

    例如,如果加载 20 张图像,每张图像学习 50 次, epoch 为 1,则图像训练总数为 20 x 50 x 1 = 1000 次。此时,如果将放弃描述文本率设置为 0.1,则其中的 1000 x 0.1 = 100 次学习将作为“放弃描述文本”的学习 。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    默认值为 0,即学习所有带描述文本的图像。

  • VAE batch size 滑块:0~32 数值。如果打开了 Cache Latents “缓存图像 latent”选项,就可以在主内存中存储“压缩”在潜空间中的图像数据。这里 VAE batch size 的数值则规定了存储多少组“压缩”图像。由于 batch size 批量的大小指定一次性学习的图像的数量,因此将 VAE batch size 最好也设置为 batch size 的数值。此项默认值为 0,在这种情况下,为与 batch size 批量大小相同的数值。
  • Save training state 复选框:如果训练图像的数量、迭代次数和 epoch 数量较多,LoRA 训练将需要很长时间。如果你勾选打开此项,将可以在训练中途暂时中断学习并在稍后恢复。学习期间的进度数据保存在名为“last-state”的文件夹中。
  • Resume from saved training state 输入框 path to “last-state” state folder to resume from :如果你想恢复之前中断的学习,请在此处指定“last-state”文件夹的位置。要恢复学习,必须事先保存学习进度数据。
  • Max train epoch 输入框 (Optional) Override number of epoch:指定训练的最大轮数。基本上,你可以使用 Epoch 选项指定训练轮数,但当达到此处指定的最大轮数时,学习便会结束。默认为空。即不指定最大轮数。
  • Max num workers for DataLoader 输入框:该选项指定学习时使用的 CPU 进程数。一旦指定某一数字,主进程将关闭,指定数字的进程数会开始运行。比如,设置此处的 num_workers 数值为 1 ,则会启用一个单独的 worker 子进程,同时主进程会关闭,即总进程数仍为 1 ,所以数据加载速度不会提高。设置此处的 num_workers 数为 2 ,则会同时有 2 个 workers 子进程同时工作,于是速度得到了提高。往上增加数字,以此类推。最终速度提升的多与少取决于 CPU 和 GPU 等硬件的性能以及 batch size 的大小。增加太多进程实际上反而会导致变得低效。请注意,无论你指定多大的数量,都不会超过正在使用的 CPU 的核心数( number of CPU cores )且在设置的数字为 CPU 核心数的情况下,根据 batch size 的大小,CPU RAM 很可能会溢出。

    此项默认为 0,表示数据只由主 CPU 进程读取。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

    考虑到计算机同时还有其他软件的运行,在训练模型时,又想提升效率,又想 CPU RAM 不溢出从而导致系统运行崩溃,最好的办法是慢慢增加 num_workers 数,一旦你的训练速度没有跟随此数值而显著提高,那就停止增加,此时便是最优的 num_workers 了 。

  • WANDB API Key 输入框 Users can obtain and/or generate an api key in the their user settings on the website: https://https://wandb.ai/login:WandB ( Weights & Biases 权重和偏差)是一家网络服务提供商,他们提供针对机器学习的数据和社区服务,他们可以把机器学习的各项数据以图表的形式记录下来,并显示学习进度,同时可以在线共享学习日志,以方便会员找到最佳学习设置。如果你立志成为一个模型训练师,那么可以在这个网站上注册账户( https://app.wandb.ai/authorize),获取API密钥后填入此输入框,以便你在通过kohya_ss训练模型过程中自动登录 WandB 并对接其服务。
Stable Diffusion LoRA模型训练详解万字宝典
Stable Diffusion LoRA模型训练详解万字宝典
  • If unchecked, tensorboard will be used as the default for logging. WANDB Logging 复选框:此处可以指定是否使用WandB 的服务记录 logs 学习状态日志。默认是不勾选状态,即关闭,即不使用 WandB 的服务记录 logs,但是会通过一个叫“tensorboard”的免费工具来记录。

    Tensorboard (https://www.https://www.tensorflow.org/tensorboard)是一种用于分析训练的免费工具,它可以分析多种不同的机器学习 logs 日志,提供许多关于你的训练方法的信息,它是一个帮助你学习如何微调模型的工具。

Stable Diffusion LoRA模型训练详解万字宝典
Stable Diffusion LoRA模型训练详解万字宝典
  • Only for SD v2 models. By scaling the loss according to the time step, the weights of global noise prediction and local noise prediction become the same, and the improvement of details may be expected. Scale v prediction loss 复选框:此项仅适用于 SD v2 模型的训练。勾选此项,系统会根据 time step 时间步来调整 loss 损失,使得全局噪点预测和局部噪点预测的权重变得相同,以此来追求训练效果细节的提升。除非你在专门训练 SD v2 版本的模型,否则保持默认不勾选状态。

然后,进入 Sample images config 设置区域。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

· Sample images config 设置

15.如果你想在模型训练过程中及时了解目前状态西 LoRA 模型生成图像是什么样子,请在 Sample Prompts 处输入图像生成的提示词。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • Sample every n steps 输入框:指定你想要在模型训练期间的哪一步生成样本图像。例如,设定 100,则每 100 步生成一张 Sample image 样本图像。此项默认为 0,即不生成图像。
  • Sample every n epochs 输入框:指定你想要在模型训练期间的哪一轮生成样本图像。例如,设定 2 ,则每 2 个 epoch 轮生成一张 Sample image 样本图像。此项默认为 0,即不生成样本图像。
  • Sample sampler 下拉菜单:这里罗列 16 种采样器,指定其中一个用于 Sample image 样本图像生成。这 16 种采样器与 Stable Diffusion Web UI 提供的采样器相同,请参阅我在之前对采样器的详细讲解。此处下拉菜单默认为 euler_a。
  • Sample prompts 输入框 :在此输入Sample image 样本图像生成的提示词。你可以在此处输入相关的一些设置参数,如下:
    --n:反向提示词
    --w:图像宽度
    --h:图像高度
    --d:种子
    --l:CFG 值
    --s:生成过程中的步骤数
    (例:masterpiece, best quality, 1girl, in white shirts, upper body, looking at viewer, simple background --n low quality, worst quality, bad anatomy, bad composition, poor, low effort --w 768 --h 768 --d 1 --l 7.5 --s 28 )
    此处默认为空。当该字段为空时,将默认显示以上例子以供参考。

以上是所有有关 kohya_ss 中运行 LoRA 模型训练的机制和设置。kohya_ss 是目前训练模型所采用的最广泛的工具,但相关的设置和参数十分繁多,并且许多参数背后都代表着一些科学理论,我们很难一时间全部了解这些背后的玄机。如果你是初学者,建议从基础设置开始,先尝试训练一个初代模型,可能这个模型会很糟糕,但没关系,只有踏出了第一步,接下来,你才会通过不断地调整参数来逐渐了解AI是如何训练模型的。当你有更高的要求时,则自然地会逐渐尝试高级设置。所有的高级设置,都是基于以前的更原始的训练方式一点一点的技术性的提高建立起来的。所以,不用害怕,有朝一日,你也可以成为模型训练大师。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/jianji/60819.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/jianji/60819.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定