文本主要介绍利用云端算力,定制化lora生成图片。通过广泛浏览和借鉴多人的文档,借鉴经验,找到的一种最快速最全面的方案。能够完成从lora训练,到模型使用,再到炼丹经验的整个过程。
其实部署不难,主要是需要找到能匹配的环境(cuda,python等其他依赖)比较麻烦。所以直接找到了一种方案,能够直接启动,不必浪费任何时间到部署上
相关开源项目:
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
视频教程参考(youtube寒彬):
1.sd文生图工具讲解
2.lora定制化训练讲解
前置依赖
- AutoDL
国内性价比比较高的gpu租赁平台,按小时收费,并且里面有现成的大量镜像资源和数据资源。
lora定制化训练部署(autodl+秋叶镜像)
1. 服务器租赁
3090都可以满足需求,一小时1.6
2. 选择镜像
镜像名称:Akegarasu/lora-scripts/lora-train/v1.7.2,目前最好用的是秋叶大佬的镜像,简单好用,适合国人去用,然后就可以创建了
3. 进入容器实例
状态为运行中表示已经启动,进入容器实例查看(点右侧jupyterlab)。
有时候不知什么原因,点击进不去,没关系,可以使用vscode直接连接
3.1 vscode远程连接服务器
- 创建连接
- 输入ssh命令
复制可以得到ssh -p 39279 root@connect.westb.seetacloud.com
- vscode输入命令
- 登录ssh
- 复制密码并进入
- 连接成功
4. 一键启动
进入后点击终端,在终端里输入
这一步看起来很容易,但是如果第一次使用这个方法的人肯定会存在问题,只需要使用以下方法,将能一一解决以下几个问题。
网址输入http://127.0.0.1:6006 即可打开训练加速器。
4.1 端口透出
启动后是一个webui的服务,需要用页面打开,所以需要知道怎么使用公网打开服务。很简单,只需要打开自定义服务就行。
注意!!注意!!!
非常重要的一个问题,autodl能透出的端口只有6006,所以需要在容器实例内保证透出的服务端口是6006.
4.2 更改服务透出端口
4.1的注意里介绍的很明白,透出的服务端口要是6006,那我们怎么才能改成6006端口呢?
在容器实例左侧找到gui.py,改两个端口。
(1)把原来6006的改成其他(这个是启动tensorbord的服务,暂时用不到,改成其他的端口,但一定不要改成其他的常用端口,不然可能被其他服务占用了)
(2)–port那里改成6006
4.3 下载huggingface显示网络超时
- 官方方案(不知道为什么,没有解决问题)
启动时候还会遇到的问题就是下载huggingface模型时候因为网络问题显示超时,先来看官方推荐方案:学术资源加速,还可以借鉴下别人使用学术资源加速的案例,不过我没怎么细看
- 国内站点下载huggingface模型
参考:国内站点下载huggingface模型
- 项目案例展示
参考资料
- lora训练流程讲解
文字介绍的挺详细的,但是没有实例展示 - lora训练干货整理
这里介绍了很多数据收集的渠道,网上打标工具,还整理了不同大佬们git地址,可以借鉴的地方不少。并且介绍了图片预处理使用训练器处理的办法 - lora训练实例1
这里举了一个实际的应用(一个女生的单人写真图片),在这里可以借鉴下别人是怎么实现炼丹的 - lora训练实例2
这里举了一个实际应用(用ldh举例),可以借鉴下。另外这里提出了koya_ss的打标工具的使用,也可以借鉴
数据准备整理
这里整好了下上面几个参考资料提出来的要求,借鉴经验,可以按这个要求准备数据。
1.经验总结
- 训练集应当能尽量涵盖训练对象的“多样化样本”,图像人物尽量多角度,多表情,多姿势。如角色立绘图,各个角度不同的图片。
1.1 照片人像要求多角度,特别是脸部特写(尽量高分辨率),多角度,多表情,不同灯光效果,不同姿势等
1.2 建议多个角度、表情,以脸为主,全身的图几张就好,这样训练效果最好 - 提高训练集的质量:1.减少背景多余的元素。抠低使用纯白底产品图效果更佳。(后期处理的RemBg的智能抠图插件)
- 规范图片尺寸1:1
- 训练集为训练物品:可以使用更少的训练集。
- 图片构图尽量简单,避免复杂的其他因素干扰(白墙或绿幕方式实拍也可)
- 数量几十张即可(至少15张图片,每张图片的训练步数不少于100)
- 分辨率适中,勿收集极小图像(尽量大一些,但也不要太大)
- 数据集需要统一的主题和风格的内容,图片不宜有复杂背景以及其他无关人物
- 凸显面部的图像数量比例稍微大点,全身照的图片数量比例稍微小点
- 可以单张脸部特写+单张服装按比例组成的一组照片
- 减少重复或高度相似的图片,避免造成过拟合
图片收集渠道:
一般情况下,首先会想到去Google的图片中进行搜索,但有时候搜索到的图片分辨率较小,且质量也不是很高。这里Post其他博主推荐的一些图片的网站,仅供参考:
堆糖:https://www.duitang.com
花瓣:https://huaban.com
pinterest:https://www.pinterest.com
分辨率重建方法:
如果收集到的图片过小,可以使用超分辨率重建的方式将图片的方式扩大;然后将所有图片都裁剪成512x512像素大小(虽然SD2.x支持了768x768的输入,但考虑到显存限制,这里选择裁剪到512x512)。对于超分辨率重建,可以使用SD WebUI中Extra页面中进行分辨率放大。详情请参考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/features/upscalers/
图片预处理
1. 数据裁剪工具
这个是在线图片处理网站:https://www.birme.net/
2. 尺寸参数介绍
尺寸须知:
SD 1.4/1.5 :512512
SD 2.0/2.1 :768768
SD (0.9/1.0) : 1024*1024
数据打标
1. 使用WD 1.4标签器
存在问题:
模型可能需要科学上网的方式加速,参考4.3下载huggingface显示网络超时的方法解决问题
2. 打标经验总结
2.1 原则
标注里所描绘的标注在生成图片时,如果没有再一次使用对应关键词,则均会在生成时被“AI”剔除。但如果一点标签也不给,AI的学习效果会变差。越希望AI学习的东西越不能出现在标注里。比如如果标记过于全面,则不得不在每次生成时,都将”白头发,红眼睛”加进去。如果你想保留人物的某个特征,那就要把对应的标签删掉,这样AI就会默认这个人就是有这个特征如果你想灵活调整某个特征,那就要把这个特征打上标签。
2.2 打标流程
(1)一句话描述
(2)不希望出现的元素
(3)包含细节的关键词(描述整体的词,角度,颜色等)
(4)对标签进行“清洗”与“纠正”(使用Dataset Tag Editor进行标签纠正)
2.3 实例
(1)对于白墙或绿幕方式实拍的,在标签里加入“白色背景墙的”关键词以及拍摄照片的角度,大段描述词。
(2)假如现在我要训练这个动漫人物的Lora,粉色头发和绿色眼睛就是这个人物的特征,如果你后续在SD里做这个动漫人物的照片希望可以保留她的特征那我们就要把粉色头发和绿色眼睛的标签删掉这样不管我们输入的关键词是白头发或者黑头发,出来的都会是粉色头发,如果你想在SD里自定义头发的颜色,那这里的标签就要打上"粉色头发,所有标签处理好了就可以点击右下角的开始训练啦。
(3)白头发和红裙子是后台加上去的关键词,可以测试Lora的泛化性,泛化性就是看这个Lora能不能自由的去更换照片里的东西,比如发型、发色、服装之类的
2.4 删除标签类型:明确不符合角色特质的错词。
参数学习
秋叶版的训练器里有参数详解,在这里可以详细了解下各个参数的作用
训练内容输入
参考资料说的很明确了,这里就不过过多介绍,只说几处容易出问题的细节。
- 路径需要自己输入。这个路径指/root/lora-scripts下的位置,所以如果全连接是/root/lora-scripts/trains/imgs在这里就换成https://blog.csdn.net/weixin_41973200/article/details/trains/imgs。
- 模型需要自己提前下载好,提前放到具体的位置。
- 分辨率和自己挑选的保持一致。
- 下图的4个选项为必写。
- 数据集路径。这个路径下放的是图片和打标的文件。
训练参数输入
参考资料说的很明确了,这里就不过过多介绍,可以在参数学习的章节里具体看怎么选择,一开始就默认这些选择就好。
训练结果输出
结果输出在https://blog.csdn.net/weixin_41973200/article/details/output这里
选择autodl服务器
上面讲了不再重复,这里使用3090或者更便宜的都可以满足
镜像选择
上面讲了不再重复,这里使用
AUTOMATIC1111/stable-diffusion-webui/tzwm_sd_webui_A1111 / v18
一键部署启动
一键启动,启动器上直接按这个
或者终端输入这两行命令效果一样
登录http://127.0.0.1:6006打开sd页面
点击自定义服务打开页面
模型结果转过来
1.跨实例导数据
注意:
- 数据源所在服务器需要关机,数据需求所在服务器需要开机
- 数据需要提前放到/root/autodl-tmp 进行相互转移
2.lora模型需要放到指定位置
模型一定要放到指定位置才可以使用。lora模型一定要放到/root/autodl-tmp/models/lora,这个位置下,如果没有lora文件夹就自己创建个,不然sd里就找不到模型了
3.探查lora模型是否可以显示出来
如图,已经显示出来了
4.输入提示词及参数设置
1. 训练图片中找一个文本描述作为例子
如果选这个图片测试,就找他对应的文本标签
2. 在sd中输入文本标签
3. 参数选择
参数可以选择默认,根据实际结果调整,但是为了验证模型结果,有几个参数需要按要求填写,拉到最下面
X轴值/X values:000002,000004,000006,000008,000010,000012,000014,000016,000018
注意:这个数字是和lora模型对应上
Y轴值/Y values(这个表示的是权重):0.2,0.4,0.6,0.8,1
4. 重置输入词
现在在拐回去看输入词
后面多了个尾巴,其实这个分别是在点击lora模型(点哪个都行)和xy的时候产生的
注意!!!
需要注意的点来了,这个数也不能乱填,需要和xy照应上,不如x第一个是000002,y第一个是0.2,那么这个尾巴就应该是 lora:cluo-000002:0.2
至于为什么这么搞,我们看下一步去展示!
5. 结果展示,生成图片
点击生成图片,这时候应该知道上面是干什么的了吧,是为挑选权重和模型的最优组合,找一下这么多的数据哪个组合和标签对应的图片像,哪个就是结果。