当前位置:AIGC资讯 > AIGC > 正文

如何训练一个stable diffusion模型?

提前总结

显卡要好,显存要高 素材像素要好,数量越多越好 素材不必要的元素越少越好,太多就扣像留白底 要好好的打标签,影响最终效果

硬件要求

建议N卡且显卡显存至少8G,显存越高越好(即价格越贵越好); 4G需要调整参数,而且速度较慢,不推荐。 以下是不同训练分辨率,最低显存要求,图片分辨率越大,显存要求越高: 512×512 768×768或更高 8G以下使用(容易出现怪图,因为解析度>模型取样值) 8G或更高

训练难易度

不同风格的模型训练难易度不相同,原则就是画面越复杂训练越难,排序就是场景>真人lora>动漫二次元

准备训练素材

以下是出图效果更好的比较推荐的取样方式,可按照实际情况酌情增减

取样范围与标准

取样的好坏基本上决定了模型的成功与否,必须严格准备训练素材。在影响因素上面有一个原则:图片质量高于图片数量;

人物

范围 举例 不同面部表情,越多越好 自然,高兴,担心,害怕,恐怕,兴奋,悲伤,疑惑,孤独,忧郁,高冷,厌恶,愤怒,吃惊等 不同人物体态,要包含头部,一部分的半身或全身 面部特写,半身照,全身照,肖像照,远景,正视图,左视图,右视图,背面,左侧身,右侧身,回头,抬头,俯视 不同人物相关元素 不同的衣服:裙子,衬衫,大衣,冲锋衣;
不同的发型:短发,长发,披肩,丸子头,马尾辫等

环境因素

不同的灯光:明光,暗光,逆光等复杂灯光; 脸部轮廓清晰无遮挡,不能选光线导致脸部看不清的; 主体尽量和背景有明显区分,背景纯白色最佳;

画面

分辨率越高越好,手机照片基本能满足要求(分辨率太高会导致训练时间增加); 画面不能有模糊抖动,主体清晰可见,特征明显; 构图简单,其他元素越少越好(如果背景复杂需要裁剪); 减少重复或高度相似的图片,避免过拟合。

数量

数量对结果的影响:
1. 太多需要更多时间准备和更长的训练时间,时间不够相似度不够高;
2. 太少会过拟合,不容易产生变化,描述词一改可能就不像了

以下数量仅供参考,建议按实际情况调整,如果实在是找不到更多的图片,可以使用Stable diffusion自带图像预处理>创建水平翻转副本来提高学习数量。 简单主体 人物,动漫,面部等 至少15张(少于15张可能导致细节错过,出图人物不像) 复杂主体 场景,建筑物等 100张或以上

创建水平翻转副本来提高学习数量

训练步数

步数指在训练过程中,每张图像被重复训练多少次,类似你为了记住照片元素,需要看照片多少次。训练次数越多,学习度越高,出图细节越明显。但是设置过高会训练过拟合。需要在实际中不断尝试找到适合的值,以下是单张建议值(仅供参考):

通用最少值:10步; 二次元:10-16步; 写实人物:17-35步; 建筑或场景等:至少50步;

训练步数的确定要根据素材总数与总步数来一起确定,通常的公式为:


(训练步数 × 素材总数 × 训练循环数Epoch) / 并行数量Bath size ≤ 训练总步数


LoRA训练总步数在1500至6000步,checkpoint训练总步数:至少30000步

训练完成后,模型文件会保存到设置的输出目录。比如 epoch 训练循环数设置了 5,就会得到 5 个训练好的 LoRA 模型。

图片预处理

裁剪图片

通常为768×768,如果显存足够高需要更高的质量,可以按需增加,建议保持正方形等比例;

A、使用 BIRME 批量裁剪,或者使用汉化离线版
优点:可视化+批量调整裁剪框
缺点:裁剪框固定,无法放大图片裁剪。可能需要用PS之类软件提前裁剪保留区域

也可以使用美图秀秀,支持放大图片裁剪


B、使用Stable diffusion自带图像预处理功能裁剪
优点:AI智能切图,自己切图自己用;妈妈再也不用担心你的学习了,切图傻瓜式;
缺点:可能会切不准

2. 训练集

如果训练素材较少的话,可以将素材拆分为多个训练集分开训练:例如希望出肖像特写,训练素材就需要多放比较近的脸部特写。如果希望是半身,就多放半身,全身一些。

如果是需要照顾任一镜头的模型,需要有合适的配比,高分辨率的素材,更多的素材

3. AI打标签

所谓打标签,就是告诉AI画面有什么特征内容,比如人物发型,项链,眼镜等;Stable diffusion自带的训练功能下可以对图像做打标预处理,打标的方式通常有BLIP和Dreambooru两种方式。如果你还没安装SD,查看这个教程Stable diffusion安装和启动教程

A、BLIP打标
通过自然语言(一句话描述)的方式来描述图片,更适合处理真人模型

B、Dreambooru打标
包含了更多的二次元词汇,生成单个单词的方式来打标,适合动漫

打标完成后输出目录会有一张图和一个同名的txt,txt用于记录同名图的关键字

标签优化

优化原理

预处理的标签通常还无法满足训练要求,有些描述甚至是错误的,这些错误在训练集较小的时候会影响训练结果。需要手动做优化调整,一般有两种优化方法:

保留全部标签:对标签不做删标处理直接训练

优点 省时省力,过拟合概率变小 缺点 风格变化大,需要输入大量标签调整,训练需要把 epoch 训练轮次调高,训练时间变长

删除部分特征标签:即放弃一些人物特征标签,此法画面的多样性就更大

优点 调用方便,更精准还原特征 缺点 容易导致过拟合,泛化性降低

批量修改标签

推荐使用 BooruDatasetTagManager 和 VS code(用于批量查找替换文本)

点击File> load folder载入已打标的文件夹,默认就会显示以下界面:


修改标签原则:标签顺序直接代表画面影响权重,越靠前权重越大

A、BLIP标签修改
BLIP处理的提示词是如果想要保留的特征,就添加这个特征标签。例如需要强调人物特征,会导致训练出的模型并不很像,所以需要加上突出人物特征的标签:
常用特征标签:
Face
Nose
Lips
Hairstyle
Eyes
Ears
Forehead
breast

点击右侧的+按钮,添加标签,adding position(添加位置)选择top,这里要一个一个依次添加 如想保留其他特征,需要按住ctrl依次点击相同发型的图片或shift起止点击,然后点+号批量添加 给所有图片素材加上人物专属标签,例如人物姓名拼音,用来更精准触发人物特征;


至此BLIP标签就处理完成了

B、Dreambooru标签修改
Dreambooru的提示词是需要删掉要保留的标签。比如要保留基本特征,应删除 black_hair,lips,nose,black_hair,asian等特征
如果素材中发型非常多,建议删除发型,这样“更像”本人,在处理二次元人物时,发型常常是需要删除的,真人的发型也能带来一定的辨识度


注意:不应删除【1girl】,除非想让她永远单独出镜,【1girl】是一个描述场景的词,而非描述人物
然后,加上专属的tag,在最前面


Dreambooru标签修改标准

删掉标签 绑定到人物上的,人物眼睛,眉毛,鼻子,头发长度等代表人物本身属性 保留标签 可改变的部分,动作,姿态,衣服,配件,表情,背景,全身,半身,特写等

训练

一、云端训练


即在 AutoDL、Google Colab 等云平台上使用训练脚本训练。云端训练的好处在于不占用本机资源,训练的同时还可以干其他事,推荐使用 kohya-ss 的训练脚本 kohya_train_webui.ipynb (霍格沃兹向你发起会议邀请)
比较建议云端训练,免费的干嘛不用

1、连接硬件配置

2、建立训练文件夹

运行初始化常量与挂载谷歌硬盘,挂载成功后依次新建以下目录:
drive>MyDrive>Lora>input>repeat_主题
drive>MyDrive>Lora>output

1、repeat代表步长,主题可以是训练目的,例如脸,服装等;
2、>代表目录层级,存在的就不需要新建;
3、注意大小写

3、运行克隆github的库,安装依赖

4、设置训练用底模型

新手可以先用已经存在的通用模型 Stable-Diffusion-v1-5 练习试试手,如果是需要训练比较真实的模型,通常比较推荐:chilloutmix

modelName 可以选择环境中已经提供的模型 如 Stable-Diffusion-v1-5.safetensors base_model_url 也可以选择自定义模型,在 huggingface 上搜到想要模型的地址,复制过来

5、训练参数配置

运行启动 WebUI 来设置参数,出现 https://localhost:xxxxx/ 链接后点击打开训练参数配置界面


点击保存、读取webui配置展开,然后点击读取,完成默认参数配置,再进行基础参数和采样参数设置

基础参数配置

train_data_dir 训练集输入目录,把之前建立的数据集文件夹路径复制过来,如/content/drive/MyDrive/Lora/input 底模 填入底模文件夹地址 /content/Lora/sd_model/,刷新加载底模 resolution 训练分辨率,支持非正方形,但必须是 64 倍数。一般方图 512x512、768x768,长图 512x768 batch_size 一次性送入训练模型的样本数,显存小推荐 1,12G 以上可以 2-6,并行数量越大,训练速度越快 max_train_epoches 最大循环训练的次数,通常在5-10,一般设置为6,防止过拟合,如果使用了镜像翻转,导致相同的图片实际训练了两次,可以改为三次 network_dim 线性 dim,代表模型大小,数值越大模型越精细,常用 4~128,如果设置为 128,则 LoRA 模型大小为 144M network_alpha 线性 alpha,一般设置为比 Network Dim 小或者相同,通常将 network dim 设置为 128,network alpha 设置为 64

输出设置

模型输出地址 模型输出目录,把之前建立的训练输出文件夹路径复制过来,如/content/drive/MyDrive/Lora/output 输出模型名称 可以填模型主题名,如 bighand 保存模型格式 模型保存格式,默认 safetensors

学习率设置

学习率的配置一般默认不动,当你深入吃透后再来研究这个吧 unet_lr unet 学习率,默认值为 0.0001 text_encoder_lr 文本编码器的学习率,一般为 unet 学习率的十分之一 0.00001 lr_scheduler 学习率调度器,用来控制模型学习率的变化方式,一般默认。 lr_warmup_steps 升温步数,仅在学习率调度策略为“constant_with_warmup”时设置,用来控制模型在训练前逐渐增加学习率的步数,一般不动。 lr_restart_cycles 退火重启次数,仅在学习率调度策略为“cosine_with_restarts”时设置,用来控制余弦退火的重启次数,一般不动。

采样参数设置

Sample every n epochs: 每 N 轮采样一次,一般设置为 1 Sample every n steps: 比如设置为 100,则代表每训练 100 步采样一次 Sample prompt: 采样提示词,设置之后,LoRA 训练的同时会每隔设定的步数或轮次,生成一副图片,以此来直观观察 LoRA 训练的进展


完成训练参数设置后,依次点击全部参数确认、生成 toml 参数与采样配置文件,并保存配置文件。

6、开始训练

训练参数配置保存完成后,点击开始训练。这里steps代表总训练步数,再次提醒一下总训练步数的计算方法:


(训练步数 × 素材总数 × 训练循环数Epoch) / 并行数量Bath size ≤ 训练总步数

LoRA训练总步数在1500至6000步,checkpoint训练总步数:至少30000步
训练完成后,模型文件会保存到设置的输出目录。比如 epoch 训练循环数设置了 5,就会得到 5 个训练好的 LoRA 模型。

二、本地训练

要求 N 卡,推荐 RTX 30 系列及以上显卡,训练环境可以用秋叶大佬的一键训练包,或者安装 Stable Diffusion WebUI 的训练插件。 https://github.com/liasece/sd-webui-train-tools


程序要求

Kohya_ss(可视化训练页面) Additional Networks插件 CUDNN训练加速器(30系以下显卡不支持):占用更多显存,加速运算: Kohya_ss 要求 Python为3.10版本,后面小版本号都行(即3.11,3.12等):window安装Python教程 Python下载加速: https://wwi.lanzoup.com/iaUPv11r9f5e

Window修改执行策略
为防止恶意脚本的执行,PowerShell 中设计了一个叫做执行策略(Execution Policy)的东西。可以在不同的应用场景中设置不同的策略来防止恶意脚本的执行,我们需要将这个改为不受限制:
以管理员权限打开powershell,输入以下命令,选择A回车

set-executionpolicy unrestricted

安装

因为默认你们都是windows,所以以下只展示windows的安装方法啦!(其实是发电太懒)

https://github.com/bmaltais/kohya_ss

A、通过git克隆代码
Git安装教程:Window安装Git教程
通过此方法安装,就默认你有开发基础,后续不解释一些原理了

git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
//执行安装脚本
./setup.bat

B、直接下载代码

新建一个目录A 打开网站或点此链接下载,如果你不能下载,一定是你没关注点赞转发,麻瓜人类,得到救赎吧!


下载解压后找到setup.bat,打开powershell,拖动这个文件进去回车启动

开发者可能会更新安装步骤,这里我们统统选1,然后等待安装,这个过程可能会非常慢,慢慢等,建议打开魔法


安装完成会重新跳到选项目录,此时就代表安装完成了,选择5启动配置页面

测试模型

确定模型和权重

lora模型可以与其他模型混合,也需要依托一个主模型,不同模型的混合就讲一个优先次序,即权重。训练完成的模型要进行测试,通过生成一张对比图,找出最适合的模型和权重参数,以下是结合sd-webui-additional-networks来配置的方法

1、安装sd-webui-additional-networks

在扩展 >可下载页面,点击加载扩展列表,然后在搜索框中输入networks,找到sd-webui-additional-networks点击安装即可,我这里已经安装,所以第一张图没有搜索到了

2、把训练好的 LoRA 模型放入以下目录

extensions/sd-webui-additional-networks/models/lora

3、打开sd-webui,因为是测试模型,先只配置必要的设置

左上角基础模型用训练时的模型 提示词复制粘贴训练时的关键词 预设样式选基本起手式 面部修复可以开也可以不开 宽高和总批次可以确认模型效果不错时设置

4、展开下方的Additional networks,勾选启用,然后在附加模型1的模型选项选择一个训练的lora模型

5、然后下方的脚本选择X/Y/Z plot(关于对XYZ的理解请看后面的解释),然后XYZ的参数可以根据自己的意愿来配置,但是必须得有一个轴是lora模型,解释一下下图的配置:

X轴设置为随机值 Y轴为lora模型,点击右侧黄色小书载入全部模型,如果不需要的模型可以删掉 Z轴是lora的权重,这里设置为从0.1到1全部测试一遍:0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1

6、配置完成就可以开始跑测试了,这个过程如果显卡配置不好就会比较漫长。下方是生成出来的XY轴对比图,通过肉身识别对比,就可以找出表现最佳的模型和权重值了;

7、如果发现表现不错的lora模型,记住模型名,将这个模型复制到 ..\models\Lora 目录中就可以使用了,还可以给模型配一个封面图,即同时放一个同名的png图进入这个目录

验证泛化性与适用性

通过加入,删掉或者修改提示词,查看是否有变化效果

使用模型

有了专属模型,就可以结合其他的lora模型一起使用了(提示词多个lora模型需要修),还可以通过controlNet一起使用提升可控性;
在设置页重载前端,然后点击生成下方的类似画的图标打开扩展模型窗口,然后切换到lora,复制一条底模效果较好的提示词和否定词,修改lora模型的引用:点击刚保存过来的模型就自动加上这个模型,需要修改的就是模型:1,这个数字就是权重,用刚刚对比效果最好的权重即可


提示词配置好就可以调大一点图片图片尺寸,总批次数数量就决定了生成数量,然后点击生成开始等待结果吧!

专业性说明

过拟合 画面细节丢失、画面模糊、画面发灰、边缘不齐、无法做出指定动作、在一些大模型上表现不佳等情况 泛化性 指模型训练后,应用到新数据并做出准确预测的能力。 一个模型在训练数据上经常被训练得太好即过拟合,以致无法泛化。 传统的统计学习理论认为模型参数较多的时候,泛化能力应该会更差

XYZ plot


这个脚本的原理就是3D维度,分别把三个参数类型赋予不同变量XYZ,三个变量通过改变其中一个变量的形式衍生出一个三维化的立体参数图表,通过对比找出变量配置最优的方案。
通常是把不同的LoRA模型设置为变量X,把权重值为设置为变量Y,最后形成X轴Y轴的图表,以此来验证各种LoRA模型在哪个权重值的表现较佳;

对于很多刚学习AI绘画的小伙伴而言,想要提升、学习新技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

如果你苦于没有一份Lora模型训练学习系统完整的学习资料,这份网易的《Stable Diffusion LoRA模型训练指南》电子书,尽管拿去好了。

包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

由于内容过多,下面以截图展示目录及部分内容,完整文档领取方式点击下方微信卡片,即可免费获取!

篇幅有限,这里就不一一展示了,有需要的朋友可以点击下方的卡片进行领取!

总结

更新时间 2024-07-12