训练的基本逻辑就是首先进行预处理,可以通过stable diffusion web ui中的预处理,也可以通过ps这种图片处理软件,比如我想训练一个某动漫角色的Lora模型,那就需要这个角色的一些图.
当然有了图之后,也需要标注,也就是label标签,可以选择deepbooru或者BLIP生成标注数据.
然后进行配置训练参数,如果用的有GUI的直接读入配置json文件即可.下面是一套低显存配置.
实际配置的时候,可以多在C站看看好的Lora模型然后拉到stable-diffusion中看看别人的训练信息.
然后存训练的图片也有讲究,文件夹命名有格式要求,这里后面细说.
脚本会询问是否安装一些可选项,我基本没有装特别的.
安装完成后开始准备数据集,推荐两个图片搜集软件,这样不用自己到处爬取了.一个是Grabber和Hydrus.我用了一下,Grabber是不错的,下载链接在参考资料里.
如果使用Grabber下载图片,可以直接设置下载图片的同时得到标签文件.设置如下
如果要获取自己的图像文件标签并编辑,可以使用很多软件,比如stable diffusion web ui的插件,比如stable-diffusion-webui-wd14-tagger和stable-diffusion-webui-dataset-tag-editor.
除了stable-diffusion web ui中有打标签的,本身kohya_ss的GUI也有打标功能
本质上是使用一些已有的模型得到图片的信息。
有了生成的标签后需要自己对标签进行一些处理,这里的处理是为了后面训练lora达到效果,一般叫pruning captions.
一般的准则:
比如关于一个人物的Lora模型,那么这个人物名字就没必要作为prompt了,所以就要去掉这个tag.
编辑标签可以用上述说的stable diffusion中的dataset-editor或者软件BooruDatasetTagManager.
其中的txt文件就是caption文件,而其中的5_ConceptA是概念文件夹,5表示其中的图片每张训练5次.
Concept 概念文件夹遵循这种格式:<编号>_<名称>
<编号>决定了你的训练脚本将在该文件夹上进行的重复次数。只要你有匹配的txt标题文件,<名称>就纯粹是装饰性的。
caption文件是强制性的,否则LoRAs将使用概念名称作为标题进行训练。
需要一个根目录,根目录下面是多个concept文件夹.同时可以在这个根目录同级创建一个reg文件夹用于正则化防止过拟合.
比如这里 train_girls里面是训练数据,下面放置多个概念文件夹,reg_girls里放图片.
在 "来源 "下勾选你希望搜索的任何一个Booru(s)。(注意:不是所有的Boorus都能立即工作,Danbooru需要配置)在 "目的地 "下选择你希望保存图像的文件夹(!确保这与日志是同一个文件夹!)。要下载,只需右击任何图像缩略图并点击保存即可如果你想批量下载,你可以在底部选择 "获取本页 "或 "获取全部 "来组成一个下载队列。你也可以使用ctrl + click,然后使用get selected。然后导航到上面的 "下载 "选项卡,开始下载你下载的所有图片都会有一个包含标签的同名文本文件
注意可能图片样式会有很多,包括nsfw的,等会在训练的时候可以设置多个概念文件夹.
同时设置下载图片时增加tag文件,按下图设置即可.Filename要跟下载图片的路径一样.
Grabber这个软件还是不错的,此外还有另一个软件之前推荐过Hydrus,不过设置相对麻烦,这里就不使用了.
最后下载内容如下
你可以将人物不同风格和样式的图片放到不同文件夹.
然后注意,我们需要一个所谓的触发词,也就是使用你这个Lora模型的词汇,这里可以使用hoshino_ai这个tag,所以我们需要添加这个触发词,操作如下
然后使用Dataset Tag Editor插件编辑tag
最终tag如下,注意这是其中一个概念文件夹的图片
最后不要忘了保存
对于其他concept文件夹操作类似.
后面发现我的笔记本竟然显存只有4G,所以后面把图片进行了统一裁剪并减少了数量,大概三十张图片,concept在3~6之间并且只训练Unet,最后终于不提示显存溢出了.
只训练了10个epoch每两个epoch生成一个模型,最终结果如下.走完了一套流程,虽然显存只有4G,最终效果可能也一般,但还是希望能帮到一些人.
最后测试了一下训练结果,可以说是莫名其妙,惨不忍睹.根本看不出训练集是星野爱的.