本文为您介绍如何训练LoRA模型。
背景信息
Stable Diffusion(下文简称SD)是深度学习文生图的一个模型,相对Midjourney,其显著优势在于开源性。SDWebUI是SD的一个可视化浏览器操作界面,它集成了丰富的功能,不仅可以在网页端进行文生图、图生图等操作,还可以通过安装各类插件以及导入多种模型等方式,满足更高程度的定制化的绘图需求,从而生成一个较为可控的结果。
通过SDWebUI服务生成各种图片需要使用多种模型,模型的能力直接决定生成图片的效果。不同的模型具有不同的侧重点,不同模型有各自的特色与适用领域,需要针对性地采用不同的训练数据集及训练策略来培养。其中,LoRA是一种轻量化的模型微调训练方法,在原大模型的基础上对模型微调,生成特定的角色或画风。LoRA模型训练方式速度较快,模型文件大小适中,对训练的配置要求较低。
Kohya是当前应用比较广泛的训练LoRA模型的开源服务。Kohya's GUI是一个程序包,整合了训练需要用到的环境,提供可以用于模型训练的用户界面,所有动作都在自身环境中运行,不会干扰其他的程序。在SDWebUI里也可以使用一些扩展插件去做模型训练,但如果都在SD中操作有时候会互相干扰,产生报错 。
其他模型微调方法请参见模型介绍。
准备LoRA训练数据集
确定LoRA类型
首先您需要确定希望训练的LoRA模型的类型,比如是角色类型还是风格类型。
例如,需要训练一个阿里云进化设计语言体系下的阿里云3D产品图标风格的风格模型。
数据集内容要求
数据集由图片和图片对应的文本描述标注两种文件组成。
准备数据集内容:图片
图片要求
数量:15张以上(一般不小于10张)。
质量:分辨率适中,画质清晰。
风格:需要一套统一风格的图片内容。
内容:图片需凸显要训练的主体物形象,不宜有复杂背景以及其他无关的内容,尤其是文字。
尺寸:分辨率是64的倍数,显存低可以裁剪为512*512,显存高可以裁剪为768*768。
图片预处理
质量调整:图片分辨率适中即可,保证画质清晰,但也无需太大。画质会影响模型训练的结果。如果自己准备的图片分辨率比较小,不是很清晰,可以使用SD WebUI中Extras页面中进行分辨率放大,也可以使用其他图像处理工具去处理图像的分辨率。
尺寸调整量调整:可以前往像birme这种站点批量裁剪后批量下载,也可以使用SDWebUI裁剪或手动裁剪。
图片部分准备完毕示例
将图片存放至本地文件夹中。
创建数据集并上传文件
上传前需要注意文件的属性和命名要求,如果只是用平台管理数据集文件或者给图片打标,直接上传文件或文件夹都可以,对这些文件和文件夹的命名没有特殊要求。
如果数据集打标完之后,需要用平台的Kohya做LoRA模型训练,对于上传的文件属性和命名要求如下。
命名格式:数字+下划线+任意名称
命名含义:自定义。
数字:每张图片重复训练次数,一般要求≥100。总训练次数一般要求>1500,因此若文件夹内包含10张图片,则每张图片训练1500/10=150次,图片文件夹名数字部分可为150;若文件夹内包含20张图片,则每张图片训练1500/20=75(<100)次,图片文件夹名数字部分可为100。
任意名称:本文以100_ACD3DICON为例,您可以根据实际情况自定义。
创建数据集
在数据集页面,单击新建数据集,并输入数据集名称,此处以acd3dicon为例。
上传数据集文件
单击已创建的数据集,将整理好的数据集图片文件夹从本地拖拽上传。
上传成功。
进入到文件夹里可以查看到已上传的图片。
准备数据集内容:图片标注
图片标注是指每张图片对应的文字的描述,文字描述的标注文件,是与图片同名的TXT格式的文件。
图片标注要求
例如,针对这类3D图标画面打标的信息维度的拆分。
分类
关键词
业务
产品/业务
数据库、云安全、计算平台、容器、云原生等(英文)
云计算元素
Data processing、Storage、Computing、Cloud computing、Elastic computing、Distributed storage、Cloud database、Virtualization、Containerization、Cloud security、Cloud architecture、Cloud services、Server、Load balancing、Automated management、Scalability、Disaster recovery、High availability、Cloud monitoring、Cloud billing
设计(质感)
环境&构图
viewfinder、isometric、hdri environment、white background、negative space
材质
glossy texture、matte texture、metallic texture、glass texture、frosted glass texture
照明
studio lighting、soft lighting
色彩
alibaba cloud orange、white、black、gradient orange、transparent、silver
情绪
rational、orderly、energetic、vibrant
质量
UHD、accurate、high details、best quality、1080P、16k、8k
设计(氛围)
...
...
给图片添加标注
您可以手动为每个图片添加对应的文字描述,但当图片量非常大的情况下,手动打标非常耗时耗力。此时您可以选择借助神经网络,完成对所有图片批量生成文本描述的工作。您也可以在Kohya中选择使用一个叫做BLIP的图像打标模型。
打标数据集
在Kohya-SS页面,选择Utilities>Captioning>BLIP Captioning。
选择已创建的数据集里面上传的图片文件夹。
输入一些预置词,这是让机器给每一张图片都批量加上您输入的标注文本。您可以结合自己对数据集图片拆分的维度去添加预置词,不同类型的图片打标的维度也不同。
单击Caption Image即可开始打标。
在下方的日志里可以查看打标的进度和打标完成的提示。
再返回到数据集里面,可以看到刚才上传的图片已经有对应的标注文件。
(可选)对于不合适的标注可以手动修改。
kohya实操:LORA模型训练
在Kohya-SS页面,选择LoRA>Training>Folders。
选择已上传了数据集文件夹的数据集。
说明数据集文件打标时,要选到数据集下面图片的文件夹;做模型训练时,要选择放置数据集文件夹的数据集。
设置训练参数。
单击Start training。
在下方的日志里可以查看模型训练进度和模型训练完成的提示。
Training Parameters 部分常用训练参数介绍说明
参数 | 功能 | 设置说明 |
LoRA Type | 选择LoRA类型 |
|
LoRA network weights | LoRA网络权重,如果要接着训练则选用最后训练的LoRA | 选填。 |
Train batch size | 训练批量大小 | 根据显卡性能,12 GB显存最大为2,8 GB显存最大为1。 |
Epoch | 训练轮数——将所有数据训练一次为一轮 | 自行计算。一般: Kohya中总训练次数=训练图片数量x重复次数x训练轮数/训练批量大小。 WebUI中总训练次数=训练图片数量x重复次数。 使用类别图像时,在Kohya或在WebUI中总训练次数都会乘2;在Kohya中模型存储次数会减半。 |
Save every N epochs | 每N个训练周期保存一次 | 如设为2,则每完成2轮训练保存一次训练结果。 |
Caption Extension | 打标文件扩展名 | 选填。 训练图集中注解/提示文件的格式,.txt。 如图: |
Mixed precision | 混合精度 | 视显卡性能决定。默认可选no、fp16、bf16。30以上显卡可选bf16。 |
Save precision | 保存精度 | 同上。 |
Number of CPU threads per core | CPU每核线程数 | 主要为显存,根据所购实例和需求调整。 |
Learning rate | 学习率 | 默认0.0001。 |
LR Scheduler | 学习率调度器 | 下拉列表,按需选择cosine或cosine with restart等函数。 |
LR Warmup(% of steps) | 学习预热步数 | 按需调节,默认为10,可以选不要(0)。 |
Optimizer | 优化器 | 按需选择,默认AdamW8bit,DAdaptation自动操作。 |
Max Resolution | 最大分辨率 | 根据图片情况。 |
Network Rank (Dimension) | 模型复杂度 | 一般默认可设64能适应大部分场景。 |
Network Alpha | 网络Alpha | 建议可以设小,rank和alpha设置影响最终输出lora大小。 |
Convolution Rank (Dimension) & Convolution Alpha | 卷积度 | Lora对模型的微调涵盖范围。根据LoRA Type不同做调整。 Kohya官方建议: LoCon:dim<=64,alpha=1(或更低) LoHA:dim<=32,alpha=1 |
clip skip | 文本编码器跳过层数 | Clip跳过,二次元选2,写实模型选1,动漫模型训练最初就有跳过一层,如使用训练素材也是二次元图像,再跳一层=2。 |
Sample every n epoch | 每n轮样本 | 每几轮保存一次样本。 |
Sample Prompts | 提示词样本 | 提示词样本。需要使用命令,参数如下:
|
- 本页导读 (1)