为何要自行训练模型

自行训练模型可基于现有模型,使学习如何生成特定风格、概念、角色、姿势或对象,从而提高生成结果的准确性。

例如,假设你下载了一个人物模型的大型检查点,但想要生成特定人物,如迪丽热巴,AI大型模型并不了解她的外貌,这时就需要自行训练模型。

值得注意的是,对于一些基本特征如长头发、短头发、黑色头发、棕色头发,AI已具备相关知识,因此这方面无需自行训练。

SD模型微调方法
主要有 4 种方式:Dreambooth, LoRA(Low-Rank Adaptation of Large Language Models), Textual Inversion, Hypernetworks。它们的区别大致如下:

Textual Inversion (也称为 Embedding),它实际上并没有修改原始的 Diffusion 模型, 而是通过深度学习找到了和你想要的形象一致的角色形象特征参数,通过这个小模型保存下来。这意味着,如果原模型里面这方面的训练缺失的,其实你很难通过嵌入让它“学会”,它并不能教会 Diffusion 模型渲染其没有见过的图像内容。
Dreambooth 是对整个神经网络所有层权重进行调整,会将输入的图像训练进 模型,它的本质是先复制了源模型,在源模型的基础上做了微调(fine tunning)并独立形成了一个新模型,在它的基本上可以做任何事情。缺点是,训练它需要大量 VRAM, 目前经过调优后可以在 16GB 显存下完成训练。
LoRA 也是使用少量图片,但是它是训练单独的特定网络层的权重,是向原有的模型中插入新的网络层,这样就避免了去修改原有的模型参数,从而避免将整个模型进行拷贝的情况,同时其也优化了插入层的参数量,最终实现了一种很轻量化的模型调校方法, LoRA 生成的模型较小,训练速度快, 推理时需要 LoRA 模型+基础模型,LoRA 模型会替换基础模型的特定网络层,所以它的效果会依赖基础模型。
Hypernetworks 的训练原理与 LoRA 差不多,目前其并没有官方的文档说明,与 LoRA 不同的是,Hypernetwork 是一个单独的神经网络模型,该模型用于输出可以插入到原始 Diffusion 模型的中间层。 因此通过训练,我们将得到一个新的神经网络模型,该模型能够向原始 Diffusion 模型中插入合适的中间层及对应的参数,从而使输出图像与输入指令之间产生关联关系。
总儿言之,就训练时间与实用度而言,目前训练LoRA性价比更高,也是当前主流的训练方法。

准备素材
1 确定要训练的LoRA类型
首先需要确定训练什么类型的Lora,类型可以有风格,概念,角色,姿势,对象等。本文以人物风格为例,讲解如何训练人物风格的LoRA模型。

2 图片收集
对于训练人物风格的LoRA,图片收集的标准大致为:

数量几十张即可
分辨率适中,勿收集极小图像
数据集需要统一的主题和风格的内容,图片不宜有复杂背景以及其他无关人物
图像人物尽量多角度,多表情,多姿势
凸显面部的图像数量比例稍微大点,全身照的图片数量比例稍微小点
(补充)图片收集的渠道:

一般情况下,首先会想到去Google的图片中进行搜索,但有时候搜索到的图片分辨率较小,且质量也不是很高。这里Post其他博主推荐的一些图片的网站,仅供参考:

堆糖:https://www.duitang.com
花瓣:https://huaban.com
pinterest:https://www.pinterest.com
优质训练集定义如下

至少15张图片,每张图片的训练步数不少于100
照片人像要求多角度,特别是脸部特写(尽量高分辨率),多角度,多表情,不同灯光效果,不同姿势等
图片构图尽量简单,避免复杂的其他因素干扰
可以单张脸部特写+单张服装按比例组成的一组照片
减少重复或高度相似的图片,避免造成过拟合
建议多个角度、表情,以脸为主,全身的图几张就好,这样训练效果最好
3 图片预处理
这里主要介绍对于图像分辨率方面的预处理。有些人也说,不用裁剪了,让AI自己去适配。

收集的图片在分辨率方面尽量大一些,但也不要太大。如果收集到的图片过小,可以使用超分辨率重建的方式将图片的方式扩大;然后将所有图片都裁剪成512×512像素大小(虽然SD2.x支持了768×768的输入,但考虑到显存限制,这里选择裁剪到512×512)。

对于超分辨率重建,可以使用SD WebUI中Extra页面中进行分辨率放大。详情请参考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/features/upscalers/

对于裁剪到固定尺寸,现提供如下的裁剪方法:

birme站点批量裁剪后批量下载,优势是可以自定义选取
使用SD WebUI自动裁切,或是手动裁切。

 

 

安装Koyha_ss
目前网上有很多训练LoRA的项目

1.koyha_ss_GUI:https://github.com/bmaltais/kohya_ss

2.LoRA_Easy_Training_Scripts:https://github.com/derrian-distro/LoRA_Easy_Training_Scripts

3.秋叶大佬的:https://github.com/Akegarasu/lora-scripts /     https://gitcode.com/mirrors/akegarasu/lora-scripts/blob/main/README.md

他们底层都是用的:https://github.com/kohya-ss/sd-scripts

小呱本文介绍的是秋叶大佬的训练模型

必要依赖

 

Python 3.10 和 Git

克隆带子模块的仓库

 

git clone --recurse-submodules https://github.com/Akegarasu/lora-scripts

✨ SD-Trainer GUI

 

Windows安装

运行 install-cn.ps1 将自动为您创建虚拟环境并安装必要的依赖。

运行训练

 

运行 run_gui.ps1,程序将自动打开 http://127.0.0.1:28000

Linux安装

运行 install.bash 将创建虚拟环境并安装必要的依赖。

运行训练

运行 bash run_gui.bash,程序将自动打开 http://127.0.0.1:28000

通过手动运行脚本的传统训练方式

 

Windows安装

运行 install.ps1 将自动为您创建虚拟环境并安装必要的依赖。

运行训练

 

编辑 train.ps1,然后运行它。

Linux安装

运行 install.bash 将创建虚拟环境并安装必要的依赖。

运行训练

 

训练脚本 train.sh 不会 为您激活虚拟环境。您应该先激活虚拟环境。

source venv/bin/activate

编辑 train.sh,然后运行它。

TensorBoard

 

运行 tensorboard.ps1 将在 http://localhost:6006/ 启动 TensorBoard

项目包链接:https://pan.baidu.com/s/1uYaaw7eMO5oQ0GTlufI_zQ?pwd=jyq7
提取码:jyq7

程序参数介绍

 

参数名称 类型 默认值 描述
--host str “127.0.0.1” 服务器的主机名
--port int 28000 运行服务器的端口
--listen bool false 启用服务器的监听模式
--skip-prepare-environment bool false 跳过环境准备步骤
--disable-tensorboard bool false 禁用 TensorBoard
--disable-tageditor bool false 禁用标签编辑器
--tensorboard-host str “127.0.0.1” 运行 TensorBoard 的主机
--tensorboard-port int 6006 运行 TensorBoard 的端口
--localization str 界面的本地化设置
--dev bool false 开发者模式,用于禁用某些检查