👉腾小云导读
最近,AI 图像生成引人注目,它可能依据文字描述生成精美图像,这极大地扭转了人们的图像创作形式。Stable Diffusion 作为一款高性能模型,它生成的图像品质更高、运行速度更快、耗费的资源以及内存占用更小,是 AI 图像生成畛域的里程碑。本篇文章作者将手把手教大家入门 Stable Diffusion,能够先珍藏再浏览,防止迷路!
👉看目录,点珍藏
1 硬件要求
2 环境部署
2.1 手动部署
2.2 主动整合包
3 对于插件
4 文生图最简流程——重点步骤与参数
5 提醒词
5.1 提醒词内容
5.2 提醒词语法
5.3 Token
5.4 提醒词模板
6 Controlnet
6.1 根本流程
6.2 可用预处理 / 模型
6.3 多 ControlNet 合成
7 模型:从下载、装置、应用到训练
7.1 模型下载
7.2 模型装置
7.3 模型应用
7.4 模型训练
7.5 环境搭建
7.6 环境更新
7.7 界面启动
7.8 训练流程
8 格调训练与人物训练
01、硬件要求
本篇咱们将具体解说 SD 模型的应用教程,各位读者能够在公众号后盾回复 「AIGC」 间接获取模型以及实现疾速部署的 GPU 服务器限量优惠券。
倡议应用不少于 16GB 内存,并有 60GB 以上的硬盘空间。须要用到 CUDA 架构,举荐应用 N 卡。(目前曾经有了对 A 卡的相干反对,但运算的速度仍旧显著慢于 N 卡,参见:
Install and Run on AMD GPUs · AUTOMATIC1111/stable-diffusion-webui Wiki · GitHub。)
留神:适度应用,显卡会有损坏的危险。进行 512x 图片生成时支流显卡速度比照:
02、环境部署
2.1 手动部署
能够参考 webui 的官网 wiki 部署:
Home · AUTOMATIC1111/stable-diffusion-webui Wiki (github.com)
stable diffusion webui 的残缺环境占用空间极大,能达到几十 G。值得注意的是,webui 须要联网下载安装大量的依赖,在境内网络环境下载较慢。接下来是手动部署的 6 个步骤:
1、装置 Python
装置 Python 3.10,装置时须选中 Add Python to PATH
2、装置 Git
在 Git-scm.com 下载 Git 安装包并装置。下载 webui 的 github 仓库,按下 win+r 输出 cmd,调出命令行窗口。运行下方代码,并请把代码中的 PATH\_TO\_CLONE 替换为本人想下载的目录。
cd PATH_TO_CLONEgit clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
3、拆卸模型
可在如 Civitai 上下载标注有 CKPT 的模型,有模型能力作画。下载的模型放入下载后文件门路下的 models/Stable-diffusion 目录。
4、应用
双击运行 webui-user.bat。脚本会主动下载依赖,期待一段时间(可能很长),程序会输入一个相似 http://127.0.0.1:7860/ 的地址,在浏览器中输出这个链接开即可。具体可参见模型应用。
5、更新
按下 win+r 输出 cmd,调出命令行窗口。运行下方,并请把代码中的 PATH\_TO\_CLONE 替换为本人下载仓库的目录。
cd PATH_TO_CLONEgit pull
2.2 主动整合包
感觉上述步骤麻烦的开发者能够间接应用整合包,解压即用。 比方独立研究员的空间下常常更新整合包。秋叶的启动器也十分好用,将启动器复制到下载仓库的目录下即可,更新治理会更不便。
关上启动器后,可一键启动:
如果有其它需要,能够在高级选项中调整配置。
显存优化依据显卡理论显存抉择,不要超过以后显卡显存。不过并不是指定了显存优化量就肯定不会超显存,在出图时如果启动了过多的优化项(如高清修复、人脸修复、过大模型)时,仍然有超出显存导致出图失败的几率。
xFormers 能极大地改善内存耗费和速度,倡议开启。筹备工作结束后,点击一键启动即可。期待浏览器主动跳出,或是控制台弹出本地 URL 后阐明启动胜利。
如果报错提醒短少 Pytorch,则须要在启动器中点击配置。
Stable Diffusion webui 的更新比拟频繁,请依据需要在“版本治理”目录下更新:
同样地,也请留神插件的更新:
03、对于插件
Stable Diffusion 可配置大量插件扩大,在 webui 的“扩大”选项卡下,能够装置插件:
点击「加载自」后,目录会刷新。抉择须要的插件点击右侧的 install 即可装置。
装置结束后,须要重新启动用户界面:
04、文生图最简流程——重点步骤与参数
4.1 重点步骤
次要是 4 步骤:
1、抉择须要应用的模型(底模),这是对生成后果影响最大的因素,次要体现在画面格调上。
2、在第一个框中填入提醒词(Prompt),对想要生成的货色进行文字描述。
3、在第二个框中填入负面提醒词(Negative prompt),对不想要生成的货色进行文字描述。
4、抉择采样办法、采样次数、图片尺寸等参数。
4.2 参数
晓得完大抵的步骤后,上面咱们来介绍一些重要的参数,抉择不同将会带来较大差别:
- Sampler(采样器 / 采样办法)抉择应用哪种采样器?
Euler 是最简略、最快的。
Euler a(Eular ancestral)能够以较少的步数产生很大的多样性,不同的步数可能有不同的后果。而非 ancestral 采样器都会产生基本相同的图像。DPM 相干的采样器通常具备不错的成果,但耗时也会相应减少。Euler a 更多样,不同步数能够生产出不同的图片。然而太高步数 (>30) 成果不会更好。
DDIM 收敛快,但效率绝对较低,因为须要很多 step 能力取得好的后果,适宜在重绘时候应用。
LMS 是 Euler 的衍生,它们应用一种相干但稍有不同的办法(均匀过来的几个步骤以进步准确性)。大略 30 step 能够失去稳固后果
PLMS 是 Euler 的衍生,能够更好地解决神经网络构造中的奇怪性。
DPM2 是一种神奇的办法,它旨在改良 DDIM,缩小步骤以取得良好的后果。它须要每一步运行两次去噪,它的速度大概是 DDIM 的两倍,生图成果也十分好。然而如果你在进行调试提醒词的试验,这个采样器可能会有点慢了。
UniPC 成果较好且速度十分快,对立体、卡通的体现较好,举荐应用。
- Sampling Steps(采样步数)
Stable Diffusion 的工作形式是从以随机高斯噪声起步,向合乎提醒的图像一步步降噪靠近。随着步数增多,能够失去对指标更小、更准确的图像。但减少步数也会减少生成图像所需的工夫。减少步数的边际收益递加,取决于采样器。个别开到 20~30。
不同采样步数与采样器之间的关系:
- CFG Scale(提醒词相关性)
图像与你的提醒的匹配水平。减少这个值将导致图像更靠近你的提醒,但它也在肯定水平上升高了图像品质。
能够用更多的采样步骤来对消。过高的 CFG Scale 体现为粗暴的线条和过锐化的图像。个别开到 7~11。
CFG Scale 与采样器之间的关系:
- 生成批次
每次生成图像的组数。一次运行生成图像的数量为“批次 * 批次数量”。
- 每批数量
同时生成多少个图像。减少这个值能够进步性能,但也须要更多的显存。大的 Batch Size 须要耗费巨量显存。若没有超过 12G 的显存,请放弃为 1。
- 尺寸
指定图像的长宽。出图尺寸太宽时,图中可能会呈现多个主体。1024 之上的尺寸可能会呈现不现实的后果,举荐应用小尺寸分辨率 + 高清修复(Hires fix)。
- 种子
种子决定模型在生成图片时波及的所有随机性,它初始化了 Diffusion 算法终点的初始值。
实践上,在利用完全相同参数(如 Step、CFG、Seed、prompts)的状况下,生产的图片该当完全相同。
- 高清修复
通过勾选 “Highres. fix” 来启用。默认状况下,文生图在高分辨率下会生成十分混沌的图像。如果应用高清修复,会型首先依照指定的尺寸生成一张图片,而后通过放大算法将图片分辨率扩充,以实现高清大图成果。最终尺寸为(原分辨率 * 缩放系数 Upscale by)。
放大算法中,Latent 在许多状况下成果不错,但重绘幅度小于 0.5 后就不甚现实。ESRGAN\_4x、SwinR 4x 对 0.5 以下的重绘幅度有较好反对。
Hires step 示意在进行这一步时计算的步数。
Denoising strength 字面翻译是降噪强度,体现为最初生成图片对原始输出图像内容的变动水平。该值越高,放大后图像就比放大前图像差异越大。低 denoising 意味着修改原图,高 denoising 就和原图就没有大的相关性了。一般来讲阈值是 0.7 左右,超过 0.7 和原图基本上无关,0.3 以下就是略微改一些。理论执行中,具体的执行步骤为 Denoising strength * Sampling Steps。
- 面部修复
修复画面中人物的面部,然而非写实格调的人物开启面部修复可能导致面部崩坏。点击“生成”即可。
05、提醒词
提醒词所做的工作是放大模型出图的解空间,即放大生成内容时在模型数据里的检索范畴,而非间接指定作画后果。
提醒词的成果也受模型的影响,有些模型对自然语言做特化训练,有些模型对单词标签对特化训练,那么对不同的提醒词语言格调的反馈就不同。
5.1 提醒词内容
提醒词中能够填写以下内容:
值得注意的是,Emoji 在构图上有影响。举个例子,💐👩💐输入后:
对于应用 Danbooru 数据的模型来说,能够应用西式颜文字在肯定水平上管制出图的表情。如::-) 微笑 :-(不悦 ;-) 使眼色 :-D 开心 :-P 吐舌头 :-C 很悲伤 :-O 诧异 张大口 :-/ 狐疑
5.2 提醒词语法
依据本人想画的内容写出提醒词,多个提醒词之间应用英文半角符号 [,],如:
masterpiece, best quality, ultra-detailed, illustration, close-up, straight on, face focus, 1girl, white hair, golden eyes, long hair, halo, angel wings, serene expression, looking at viewer
一般而言,概念性的、大范畴的、风格化的关键词写在后面,叙述画面内容的关键词其次,最初是形容细节的关键词,大抵程序如:
(画面质量提醒词), (画面主题内容)(格调), (相干艺术家), (其余细节) |
不过在模型中,每个词语自身自带的权重可能有所不同。如果模型训练集中较多地呈现某种关键词,在提醒词中只输出一个词就能极大地影响画面。
反之如果模型训练集中较少地呈现某种关键词,在提醒词中可能输出很多个相干词汇都对画面的影响成果无限。提醒词的程序很重要,越靠后的权重越低。关键词最好具备特异性,譬如 Anime (动漫)一词就绝对泛化,而 Jojo 一词就能清晰地指向 Jojo 动漫的画风。措辞越不形象越好,尽可能防止留下解释空间的措辞。
能够应用括号人工批改提醒词的权重,办法如:
- (word) – 将权重进步 1.1 倍
- ((word)) – 将权重进步 1.21 倍(= 1.1 * 1.1)
- [word] – 将权重升高至原先的 90.91%
- (word:1.5) – 将权重进步 1.5 倍
- (word:0.25) – 将权重缩小为原先的 25%
- \(word\) – 在提醒词中应用字面意义上的 () 字符
(n) = (n : 1.1)
((n)) = (n : 1.21)
(((n))) = (n : 1.331)
((((n)))) = (n : 1.4641)
(((((n)))) = (n : 1.61051)
((((((n)))))) = (n : 1.771561)
请留神,权重值最好不要超过 1.5。
还能够通过 Prompt Editing 使得 AI 在不同的步数生成不一样的内容,譬如在某阶段后,绘制的主体由男人变成女人。
语法为:
[to:when] 在指定数量的 step 后,将 to 处的提醒词增加到提醒
[from::when] 在指定数量的 step 后从提醒中删除 from 处的提醒词
[from:to:when] 在指定数量的 step 后将 from 处的提醒词替换为 to 处的提醒词
例 1:
a [fantasy:cyberpunk:16] landscape
在一开始,读入的提醒词为:the model will be drawing a fantasy landscape.
在第 16 步之后, 提醒词将被替换为:a cyberpunk landscape, 它将持续在之前的图像上计算
例 2:
对于提醒词为: fantasy landscape with a [mountain:lake:0.25] and an oak:a christmas tree:0.75[in background:0.25] [shoddy:masterful:0.5],100 步采样,
一开始。提醒词为:fantasy landscape with a mountain and an oak in foreground shoddy
在第 25 步后,提醒词为:fantasy landscape with a lake and an oak in foreground in background shoddy
在第 50 步后,提醒词为:fantasy landscape with a lake and an oak in foreground in background masterful
在第 60 步后,提醒词为:fantasy landscape with a lake and an oak in background masterful
在第 75 步后,提醒词为:fantasy landscape with a lake and a christmas tree in background masterful
提醒词还能够轮转,譬如
[cow|horse] in a field
在第一步时,提醒词为“cow in a field”;在第二步时,提醒词为 ”horse in a field.”;在第三步时,提醒词为 ”cow in a field”,以此类推。
5.3Token
实际上,程序是将输出的关键词以 Token 的模式传入模型进行计算的:
“(Medieval astronomer using a telescope with a cosmic starry sky in the background.sketch, hand draw style, con, uncomplicated background)”
转换为 Token ID 即:263, 10789, 40036, 1996, 320, 19037, 593, 320, 18304, 30963, 2390, 530, 518, 5994, 8, 11, 263, 5269, 267, 2463, 4001, 1844, 267, 5646, 267, 569, 16621, 5994, 264。
一个单词可能对应一个或多个 Token,多个单词也可能对应同一个 Token。
5.4 提醒词模板
可参考 Civitai | Stable Diffusion models, embeddings, hypernetworks and more 中优秀作品的提醒词作为模板。相似的网站还有:
- Majinai:MajinAI | Home
- 词图:词图 PromptTool – AI 绘画材料治理网站
- Black Lily:black\_lily
- Danbooru 标签超市:Danbooru 标签超市
- 魔咒百科词典:魔咒百科词典
- AI 词汇加速器:AI 词汇加速器 AcceleratorI Prompt
- NovelAI 魔导书:NovelAI 魔导书
- 鳖哲法典:鳖哲法典
- Danbooru tag:Tag Groups Wiki | Danbooru (donmai.us)
- AIBooru:AIBooru: Anime Image Board
06、Controlnet
Controlnet 容许通过线稿、动作辨认、深度信息等对生成的图像进行管制。请留神,在应用前请确保 ControlNet 设置下的门路与本地 Stable Diffusion 的门路同步。
6.1 根本流程
- 点击 Enable 启用该项 ControlNet
- Preprocessor 指预处理器,它将对输出的图像进行预处理。如果图像曾经合乎预处理后的后果,请抉择 None。譬如,图中导入的图像曾经是 OpenPose 须要的骨架图,那么 preprocessor 抉择 none 即可。
- 在 Weight 下,能够调整该项 ControlNet 的在合成中的影响权重,与在 prompt 中调整的权重相似。Guidance strength 用来管制图像生成的前百分之多少步由 Controlnet 主导生成,这点与 [:] 语法相似。
- Invert Input Color 示意启动反色模式,如果输出的图片是红色背景,开启它。
- RGB to BGR 示意将输出的色调通道信息反转,即 RGB 信息当做 BGR 信息解析,只是因为 OpenCV 中应用的是 BGR 格局。如果输出的图是法线贴图,开启它。
- Low VRAM 示意开启低显存优化,须要配合启动参数“–lowvram”。
- Guess Mode 示意无提醒词模式,须要在设置中启用基于 CFG 的疏导。
- Model 中请抉择想要应用解析模型,应该与输出的图像或者预处理器对应。请留神,预处理器能够为空,但模型不能为空。
6.2 可用预处理 / 模型
- canny:用于辨认输出图像的边缘信息。
- depth:用于辨认输出图像的深度信息。
- hed:用于辨认输出图像的边缘信息,但边缘更柔和。
- mlsd:用于辨认输出图像的边缘信息,一种轻量级的边缘检测。它对横平竖直的线条十分敏感,因而更实用于于室内图的生成。
- normal:用于辨认输出图像的法线信息。
- openpose:用于辨认输出图像的动作信息。
OpenPose Editor 插件能够自行批改姿态,导出到文生图或图生图。
- scribble:将输出图像作为线稿辨认。如果线稿是红色背景,务必勾选“Invert Input Color”
- fake\_scribble:辨认输出图像的线稿,而后再将它作为线稿生成图像。
- segmentation:辨认输出图像各区域别离是什么类型的物品,再用此构图信息生成图像。
如果想绘制一张合乎 segementation 标准的图像,能够应用以下色表绘制。
color\_coding\_semantic\_segmentation\_classes – Google 表格
6.3 多 ControlNet 合成
在 ControlNet 的设置下,能够调整可用 ControlNet 的数量。
在多个 ControlNet 模式下,后果会将输出的信息合并生成图像:
07、模型:从下载、装置、应用到训练
7.1 模型下载
模型可能无效地管制生成的画风和内容。罕用的模型网站有:
- Civitai | Stable Diffusion models, embeddings, hypernetworks and more
- Models – Hugging Face
- SD – WebUI 资源站
- 元素法典 AI 模型收集站 – AI 绘图指南 wiki (aiguidebook.top)
- AI 绘画模型博物馆 (subrecovery.top)
7.2 模型装置
下载模型后须要将之搁置在指定的目录下,请留神,不同类型的模型应该拖放到不同的目录下。模型的类型能够通过 Stable Diffusion 法术解析检测。
- 大模型(Ckpt):放入 models\Stable-diffusion
- VAE 模型:
一些大模型须要配合 vae 应用,对应的 vae 同样搁置在 models\Stable-diffusion 或 models\VAE 目录,而后在 webui 的设置栏目抉择。
- Lora/LoHA/LoCon 模型:放入
extensions\sd-webui-additional-networks\models\lora,
也能够在 models/Lora 目录
- Embedding 模型:放入 embeddings 目录
7.3 模型应用
- Checkpoint(ckpt) 模型
对成果影响最大的模型。在 webui 界面的左上角抉择应用。
一些模型会有触发词,即在提醒词内输出相应的单词才会失效。
- Lora 模型 / LoHA 模型 / LoCon 模型
对人物、姿态、物体体现较好的模型,在 ckpt 模型上附加应用。在 webui 界面的 Additional Networks 下勾线 Enable 启用,而后在 Model 下抉择模型,并可用 Weight 调整权重。权重越大,该 Lora 的影响也越大。不倡议权重过大(超过 1.2),否则很容易呈现扭曲的后果。
多个 lora 模型混合应用能够起到叠加成果,譬如一个管制面部的 lora 配合一个管制画风的 lora 就能够生成具备特定画风的特定人物。因而能够应用多个专一于不同方面优化的 Lora,别离调整权重,联合出本人想要实现的成果。
LoHA 模型是一种 LORA 模型的改良。LoCon 模型也一种 LORA 模型的改良,泛化能力更强。
- Embedding
对人物、画风都有调整成果的模型。在提醒词中退出对应的关键词即可。大部分 Embedding 模型的关键词与文件名雷同,譬如一个名为为“SomeCharacter.pt”的模型,触发它的关键词检索“SomeCharacter”。
7.4 模型训练
7.4.1 环境搭建
以 GitHub – bmaltais/kohya\_ss 为例,它提供了在 Windows 操作系统下的 GUI 训练面板。如果须要在 Linux 上部署且须要 GUI,请参考
GitHub – P2Enjoy/kohya\_ss-docker: This is the tandem repository to exploit on linux the kohya\_ss training webui converted to Linux. It uses the fork in the following link
须要保障设施领有 Python 3.10.6 及 git 环境。
首先,以管理员模式启动 Powershell,执行“Set-ExecutionPolicy Unrestricted”命令,并答复“A”。而后能够敞开该窗口。
其次,启动一个一般的 Powershell 窗口,在须要克隆该仓库的门路下,执行以下命令:
git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
python -m venv venv
.\venv\Scripts\activate
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --use-pep517 --upgrade -r requirements.txt
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl
cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py
accelerate config
在执行“accelerate config”后,它将询问一些设置选项。请依照以下选项顺次抉择:
This machine
No distributed training
NO
NO
NO
all
fp16
30 系、40 系显卡可抉择装置 CUDNN:
.\venv\Scripts\activatepython .\tools\cudann_1.8_install.py
7.4.2 环境更新
如果须要更新仓库,请执行以下命令:
git pull .\venv\Scripts\activate pip install --use-pep517 --upgrade -r requirements.txt
7.4.3 界面启动
在 Powershell 中执行:
.\gui.ps1
双击 gui.bat 也能够。弹出以下界面后,间接拜访 URL 即可。
7.4.4 训练流程
模型训练次要有三种后果:欠拟合、成果好、过拟合。
- 欠拟合:模型齐全没有从数据集中学习到教训,对各种输出都得出差距很大的后果。
- 成果好:模型不仅对训练集中的输出有靠近的后果,对不来自训练集中的输出也有靠近的成果。
- 过拟合:模型只训练集中的输出有十分十分靠近的后果,对不来自训练集中的输出给出差距很大的后果。
接下来开始讲训练流程,次要会有 6 步:筹备训练集、图片裁剪、图片打标、正则化、文件门路组织、训练参数。 其中,训练参数(也即第 6 步)咱们会开展讲述。
7.4.4.1 筹备训练集
图片尽可能高清,格调对立但内容形式多样(譬如动作多样、服装多样)。
样本数量可能影响到拟合后果。样本量太少,模型可能欠拟合;样本量过大,模型可能过拟合。(譬如让一个人学习英语,只给他几条例句去看,他可能什么都没学会【欠拟合】;给了它几十亿条例句去看,他可能只会依据他人说的话查字典一样回话,如果字典里没有就齐全不会说了【过拟合】)。
7.4.4.2 图片裁剪
将训练集裁剪为多个尺寸雷同的图片。能够在 SD webui 界面中主动裁剪,也能够手动裁切。
个别应用的图片尺寸是 512*512,也可更换为其余尺寸,尺寸越大占用显存越高,但对细节的捕获也会越好。
7.4.4.3 图片打标
咱们先说关键词生成,再讲关键词合并、编组。
- 关键词生成
能够在训练环境的页面下打标:
也能够在 sd webui 的页面下打标:
比拟这几种不同的打标器的成果,在同一输出下:【转义:一个在铁匠铺里打铁的男铁匠】
打标对图片的形容越准越好,如果条件容许,尝试人工打标。
- 关键词合并
在生成出的关键词中,咱们须要把与训练指标强相干的关键词划为一个对立的特色表述。
以_”1boy, cooking, frying pan, male focus, solo, gloves, apron, fire, brown footwear, black gloves, boots, stove, kitchen, holding, facial hair, bandana, blue shirt, shirt”_为例,如果咱们的训练对象就是一个男性大胡子,那么他必然始终携带着”男人、胡子“这两个因素,那么咱们能够用一个词总结这个角色,例如用”Smith“代替”1boy,facial hair”,整条句子将变为:
- 原关键词:1boy, cooking, frying pan, male focus, solo, gloves, apron, fire, brown footwear, black gloves, boots, stove, kitchen, holding, facial hair, bandana, blue shirt, shirt
- 合并后:Smith, cooking, frying pan, male focus, solo, gloves, apron, fire, brown footwear, black gloves, boots, stove, kitchen, holding, bandana, blue shirt, shirt
以此类推,咱们须要为指标绑定什么因素,就将它从关键词中删去。而相似于动作、背景这种与对象绑定关系不严密,在日后生成图期间须要扭转的,就保留在关键词中。
- 编组
一些具备同组关系的图片能够利用关键词疏导 AI 去演绎它们。譬如,咱们训练的对象 Smith 有三张图,别离是全图、背景、前景,那么我能够如此解决:
7.4.4.4 正则化
训练集中的每张图片通常能被合成为两大部分:“训练指标 + 其余因素”,仍然以 Smith 为例:
其中,”铁匠铺、打铁、铁匠“都是模型中已有的内容,称为“先验常识”。咱们须要将这部分常识为 AI 指明,省去重新学习这部分内容的工夫;也能疏导 AI 明确学习的指标,让模型具备更好的泛化性。
正则化通过升高模型的复杂性进步泛化能力。模型越简单,模型的泛化能力越差,要达到雷同的泛化能力,越简单的模型须要的样本数量就越多,为了进步模型的泛化能力,须要正则化来限度模型复杂度。
正则化的标签须要与训练集中的 Class 绝对应,图片数量也要统一。
正则化不是必须的,能够依据训练集的状况和训练目标的不同来调整。
同一张图片不容许在训练集和正则化中同时呈现。
7.4.4.5 文件门路组织
在训练前,咱们须要用特定的形式组织文件门路:譬如,训练指标是一群女孩,其中有一位名为 sls 的女孩好一位名为 cpc 的女孩,那么文件门路应该为:
●train_girls
—-○10_sls 1girl
—-○10_cpc 1girl
●reg_girls
—-○1_1girl
其中,train\_girls 目录下搁置的是训练集,命名规定是“训练次数 \_< 标识符 > < 类别 >”,如“10\_sls 1girl”示意“名为 sls 的对象,她是一个女孩(类别),这个文件夹下的训练集每个训练 10 次”。
reg\_girls 目录下搁置的是正则化内容。命名规定是“训练次数 \_< 类别 >”,如“1\_1girl“示意”文件夹下的图片都是一个女孩,不重复使用数据“。* 须要日后补充
7.4.4.6 训练参数
在 kohya webui 界面训练时,ckpt 与 lora 训练方法相似。
a. 底模
它表明咱们此次训练将以哪个模型为根底进行训练。这个模型须要依据本人的需要抉择。如果很明确本人的指标是属于某一大类下的分支,那么能够用靠近这一大类的模型进行训练。譬如想训练一个二次元角色,那么能够应用二次元的底模(如 NovelAI)进行训练。如果本人的像训练的指标须要比拟好的泛化性,能够应用 sd 模型,因为它蕴含的人物、物品、格调最多。如果模型为 sd2.0,则须要勾选 v2 和 v\_parameterization
b. 最大分辨率 Max resolution
Training parameters 下的 Max Resolution 用于指定以后输出训练集图片的分辨率,请与文件夹内的保持一致。如果尺寸不一会被裁切。
c. Epoch
Epoch 是指一次将训练集中的所有样本训练一次(即对每个样本实现一次正向流传与一次反向流传)的过程。有时,因为一个训练样本过于宏大,它会被分成多个小块分批学习,每个小块就叫 batch。
在深度学习中,程序通过一直地将数据集在神经网络中往返传递来更新网络中的权重,以此建设对指标的拟合关系,因而只有重复地迭代能力加强数据集的拟合度。随着 epoch 的减少,模型将从欠拟合(右一,示意即使是来自于数据集中的输出,模型也很难达到它应该有的后果,相似于“只做题库里的题都做不对的差生”)变为过拟合(左一,示意模型对于来自于数据集中的输出,总能准确地达到对应的对后果,然而如果输出一旦有些许偏差,比方输出一些不是训练集中的输出,那后果就会很差,相似于“只会做题库里的题的书呆子”)。
咱们心愿能达到两头的成果,即对训练集输入绝对精确的后果,又对不在训练集里的输出也有较好的体现。这种特色就叫泛化。
因而,咱们须要不少于一个 epoch 能力建设起较好的拟合关系,当然也不能太多。对于不同的数据集,应用的 epoch 都可能有所不同。
d. Batch size
batch size 示意训练时的批量大小,也就是一次训练中选取的样本数量。这个参数对性能有肯定要求,如果性能足够,减少 batch size 在实践上会进步模型的准确性。如果数据集样本量较小,Batch Size 能够等于样本数量,即把所有数据集一起输出网络进行训练,这样做的成果也很好;然而如果样本量较大,这必定让设施吃不消,因而须要减小 Batch Size。然而,如果 Batch Size 太小,那么意味着在一个 Epoch 中迭代的次数也会减小,训练时权重的调整速度变慢,为了对消这种影响,还得进步 epoch 能力有更好的成果。所以 Batch Size 与 Epoch 参数二者是相辅相成的,他们二者的关系就好比一次刷多少题和总共刷多少次题。适合的 batch size 应该让 GPU 正好满载运行。
e. Save every N epochs
每 N 个 Epoch 保留一次
f. 学习率 Learning Rate
学习率指的是一次迭代(即输出一个样本对它学习,并用此次学习的教训调整神经网络)的步长。这个值越大,表明一次学习对模型的影响越大。为了让学习循序渐进,学习率不应该太高,咱们须要 AI 在训练中重复总结一点点教训,最初累积为残缺的学习成绩。正当的学习率会让学习过程收敛,Loss 达到足够低。
学习率太低,容易呈现部分最优解,相似于“一个开车的 AI 稀里糊涂地开齐全程,车技很菜”;学习率太高,容易使得模型不收敛,找不到解,相似于“一个开车的 AI 齐全不会开车,只会原地打圈瞎操作”。
g. 学习率调度器 Learning Rate Scheduler
学习率调度器是一种用于动静调整学习率的技术,它能够在训练过程中依据模型的体现主动调整学习率,以进步模型的训练成果和泛化能力。通常,学习率在训练开始时设置为比拟高的值,容许 AI“在一次训练中学得更多更快”。随着训练的进行,学习率会升高,逐渐收敛到最优。在训练过程中升高学习率也称为退火或衰减。
- adafactor:自适应学习率。
- constant:恒定,学习率不变。
- constant\_with\_warmup:恒定预热。学习率在开始会增大一点,而后退回原学习率不变。
- Cosine:应用余弦函数来调整学习率,使其在训练过程中逐步升高。常被称为余弦退火。
- cosine\_with\_restarts:余弦退火重启。在 consine 的根底上每过几个周期将进行一次重启,该值在抉择后能够设定。
- linear:线性。学习率线性降落。
- Polynomial:应用多项式函数来调整学习率。
h. 学习率预热比例 LR warmup
刚开始训练时模型的权重是随机初始化的,如果此时抉择一个较大的学习率,可能会带来模型的不稳固。学习率预热就是在刚开始训练的时候先应用一个较小的学习率,先训练一段时间,等模型稳固时再批改为事后设置的学习率进行训练。(例如,假如咱们在训练神经网络时设置了一个学习率为 0.1,预热比例为 0.1。则在训练的前 10% 的迭代次数中,咱们会逐步将学习率从 0.01 减少到 0.1,而后在残余的训练迭代次数中应用设定的学习率 0.1。)
i. 优化器 Optimizer
在训练神经网络时,须要在反向流传中逐渐更新模型的权重参数。优化器的作用就是依据以后模型计算结果与指标的偏差,一直疏导模型调整权重,使得偏差一直迫近最小。Adafactor 和 Lion 是举荐应用的优化器。
- Adam:一种罕用的梯度降落算法,被广泛应用于神经网络模型的优化中。它联合了动量梯度降落和自适应学习率办法的长处,既能够放慢收敛速度,又能够防止学习率调整不当导致的振荡和陷入部分最优解。并且对于不同的参数有不同的学习率,更加实用于高维度的参数空间。
- AdamW:对 Adam 算法的改良计划,对惩办项参数进行管制,能更好地管制模型的复杂度,避免模型过拟合,进步泛化性能。
- AdamW8bit:8bit 模式的 AdamW,能升高显存占用,稍微放慢训练速度。
- Adafactor:自适应优化器,对 Adam 算法的改良计划,升高了显存占用。参考学习率为 0.005。
- DAdaptation:自适应优化器,比梯度降落(SGD)办法更加稳固无效、应用时请将学习率设置为 1。
- Lion:自适应优化器,节俭更多显存、速度更快,与 AdamW 和 Adafactor 相比有 15% 左右的减速。参考学习率为 0.001。
- SGDNesterov:一种罕用的优化算法,基于梯度降落(SGD)办法进行优化,通过引入动量的概念减速收敛速度。
- SGDNesterov8bit:8bit 模式的 SGDNesterov,能升高显存占用,稍微放慢训练速度。
j. Text Encoder 与 Unet
机器不能间接辨认人类的语言,Text Encoder 是一种用于将文本数据转换为机器可读模式的模型或算法。对于输出的一串提醒词,程序会将它们合成为一个个标记(Token)输出给 Text Encoder(一个 Token 通常代表着一个特色),这样一句话就能被转为一个向量为机器所辨认。
Unet 是一种用于图像宰割的深度学习模型,它的作用是将图像宰割为多个不同的形成局部。经过训练后,它能够来填充图像中缺失或损坏的局部,或者对灰度草图进行着色。
能够为它们设置不同的学习率,别离对应了“辨认文字描述”和“辨认图片”的能力。
在原版 Dreambooth 训练中,咱们只能让 AI 学习 UNET 模型,XavierXiao 改良增加了额定训练 Text Encoder,在本文应用的仓库中就沿用了这种改良。
k. Network Rank(Dimension)
示意神经网络的维度,维度越大,模型的表达能力就越强。如果训练 lora,该值不要超过 64;如果训练 loha,该值不要超过 32;如果训练 locon,该值不要超过 12,但还是要依据具体的训练指标来定,如果指标比较简单,就齐全不须要太高的 Rank。
在神经网络中,每一层都由许多个神经元节点形成,它们犬牙交错形成了一个 N 维空间。维度越大,代表模型中就越多的神经元节点能够解决各种因素。——当然,这也意味着模型的训练难度就越大,也可能变得更容易过拟合,它可能须要更多的、更精确的数据集,更大的迭代次数。
l. Network Alpha
对模型过拟合的惩办权重。它示意对模型在训练时呈现齐全拟合(即输入后果与样本统一)时的惩办的权重,适当进步它能够减少模型的泛化能力(当然也不能太高)。目前教训认为设置为 alpha 设置在 1 以下成果更好。
举一个艰深的例子,一个学生在抄学霸的作业,为了不与学霸的后果完全相同,他须要对每个答案做一些小小的改变。对老师而言,一个齐全照抄答案的学生约等于一个只会抄不会想的学生,而能稍作批改的学生阐明还有对题目思考了解的能力。所以要略微地“惩办”那些只会照抄的学生,疏导学生本人思考。因而这个值不能太低(齐全不惩办照抄),也不能太高(太大的惩办让学渣齐全不能从学霸的答案里取得参考)。
m. Caption Dropout
Dropout 是在深度学习中一种避免过拟合的技术,在训练中,可能模型会反复计算某些节点,随着训练的进行,这可能导致谬误的门路依赖,即模型会变得总是依赖这些节点解决问题,就像某个学生碰巧刷到了几道解题办法类似的题目,就误认为所有的题目都要用这种解题办法。Dropout 的解决办法是随机敞开某些神经元,迫使模型在训练时缩小神经元之间的依赖关系,从而让神经网络的泛化能力更强。当然,在理论应用模型的时候,Dropout 是敞开的。
在训练中,也能够随机将一些训练集的标记(Caption)剔除。在 Drop out caption every n epochs 中,能够指定每隔多少 epoch 就剔除一些标记;在 Rate of caption dropout 中,能够指定剔除几成的标记。
n. Noise Offset
在原版的 Stable Diffusion 中,模型得出的图片在亮度上总是很均匀,亮的场景不够亮,暗的场景不够暗,而且用传统的训练方法也无奈让它学会防止这个问题。个别输出 0.1。
通过 Noise Offset,能够让图像在亮和暗上的体现更加显著(右图)。
o.xformers
Xformers 是一个用于放慢图像生成速度并缩小显存占用的库。
p. Gradient checkpointing
梯度检查点(Gradient checkpointing)是一种在训练模型时缩小显存占用的办法,然而会减少训练时长。它防止在训练期间一次计算所有权重,而是逐渐计算权重,从而缩小训练所需的显存量。敞开它不会影响模型的准确性,但关上它后能够应用更大的 Batch Size。
尽管单次训练的时长可能减少了单次训练的时长,但如果增大了 Batch Size,总的学习工夫实际上可能会更快。
q. shuffle caption
关上它,能够让训练时训练集的标签被打乱(Shuffle,洗牌)。如输出 ” 铁匠铺,工人,打铁 ”,可能被转换为”铁匠铺,打铁,工人“或”工人,铁匠铺,打铁“。
这种操作通常用于加强模型对于不同文本程序的鲁棒性,从而进步模型的泛化能力。打乱操作能够屡次进行,从而更大程度地减少数据的随机性。
Shuffle caption 能够在多种类似的图像中应用。如果差别较大,就不要应用了。
在每一个 epoch 中,输出的前 4 个 token 会被当做触发词,此外的 token 会被当做排除集。ai 会将排除集中的元素在素材中删除后,把素材的残余局部学进前 4 个 token 中。因而,如果不开启 keep tokens,在进行打乱后,打标中的每一个 tag 在足够多的 epoch 后,都将成为触发词。
r. Token
如果你的 Caption 比拟长,那么能够裁减一次输出容许的 Token 量。如果不是必要,放弃默认值 75。
s. Clip Skip
Clip 是一个转换提醒词为 Token 模式的神经网络,是模型了解文字的源头。
它开启与否与底模无关。譬如,一些模型在第一层的神经网络将输出的词转换为 Token 读取,传输给下一层网络,然而通过 Clip Skip,能够手动管制跳过 Stable Diffusion 的 Clip 阶段,间接应用模型的 Tokenizer 对某些层级间接传输 Token 进去。有些时候调整这个参数能够让后果更好。
默认状况下 SD2.0 应用倒数第二层接管 Token,因而不要在 SD2.0 学习中指定。
08、格调训练与人物训练
8.1 格调训练
训练集尽可能蕴含该画风对不同事物的描述。有几个要点:
- 尽可能对训练集进行正则化。如果数据足够大,能够将数据二分,一部分作为训练集,一部分作为正则化图集。如果数据不够大,能够先用高学习率疾速训练出一个长期模型,用它产出靠近于该画风的图片,而后将它投入训练集。
- 如果是小模型,能够在生成时变更大模以调整生成成果;如果是大模型,能够通过模型交融以调整成果。
- 模型成果不好不肯定是模型不好,提醒词与最终的成果有十分大的关系。
8.2 人物训练
训练集尽可能蕴含人物在不同角度的画面。如果人物图像很少,能够通过以下的形式裁减训练集:
- 镜像
- 用高学习率疾速训练出一个长期模型,用它产出人物的新图,将新图投入训练集
以上是本次分享全部内容,欢送大家在评论区分享交换。如果感觉内容有用,欢送转发~文章信息比拟长,小云倡议先一键三连,后续缓缓细品。在公众号后盾回复 「AIGC」 间接获取模型、实现疾速部署的 GPU 服务器限量优惠券。
参考资料
https://wandb.ai/yepster/tpu-t5-base/reports/Adafactor-learni…
https://arxiv.org/pdf/2301.07733.pdf
https://github.com/google/automl/tree/master/lion
https://medium.com/analytics-vidhya/nlp-text-encoding-a-begin…
https://medium.com/analytics-vidhya/painting-sketches-with-ml…
https://github.com/XavierXiao/Dreambooth-Stable-Diffusion/
https://github.com/KohakuBlueleaf/LyCORIS
https://www.crosslabs.org//blog/diffusion-with-offset-noise
-End-
原创作者|黄志翔
技术责编|黄志翔
你感觉 Stable Difussion 模型还有哪些新利用场景?欢送公众号评论区留言分享你的创想。 咱们将选取 1 则最有创意的分享,送出腾讯云开发者 - 限定随行杯 1 个(见下图)。4 月 27 日中午 12 点开奖。
关注我并点亮星标
公众号回复「AIGC」间接获取模型
实现疾速部署的 GPU 服务器限量优惠券