自给自足?实用简明Lora训练教程

如果想要快速训练,使用B站up主秋叶的整合包搭配视频【AI绘画】最佳人物模型训练!保姆式LoRA模型训练教程 一键包发布_哔哩哔哩_bilibili即可.

训练的基本逻辑就是首先进行预处理,可以通过stable diffusion web ui中的预处理,也可以通过ps这种图片处理软件,比如我想训练一个某动漫角色的Lora模型,那就需要这个角色的一些图.

当然有了图之后,也需要标注,也就是label标签,可以选择deepbooru或者BLIP生成标注数据.

然后进行配置训练参数,如果用的有GUI的直接读入配置json文件即可.下面是一套低显存配置.

{
  "pretrained_model_name_or_path": "runwayml/stable-diffusion-v1-5",
  "v2": false,
  "v_parameterization": false,
  "logging_dir": "C:/Users/ohmni/AI/SAMPLE IMAGES/ADAMS/LORA OUTPUT/log",
  "train_data_dir": "C:/Users/ohmni/AI/SAMPLE IMAGES/ADAMS/LORA OUTPUT/img",
  "reg_data_dir": "",
  "output_dir": "C:/Users/ohmni/AI/SAMPLE IMAGES/ADAMS/LORA OUTPUT/model",
  "max_resolution": "512,512",
  "learning_rate": "0.0001",
  "lr_scheduler": "constant",
  "lr_warmup": "0",
  "train_batch_size": 1,
  "epoch": "1",
  "save_every_n_epochs": "1",
  "mixed_precision": "fp16",
  "save_precision": "fp16",
  "seed": "1234",
  "num_cpu_threads_per_process": 2,
  "cache_latents": true,
  "caption_extension": ".txt",
  "enable_bucket": false,
  "gradient_checkpointing": true,
  "full_fp16": false,
  "no_token_padding": false,
  "stop_text_encoder_training": 0,
  "use_8bit_adam": true,
  "xformers": true,
  "save_model_as": "safetensors",
  "shuffle_caption": false,
  "save_state": false,
  "resume": "",
  "prior_loss_weight": 1.0,
  "text_encoder_lr": "5e-5",
  "unet_lr": "0.0001",
  "network_dim": 128,
  "lora_network_weights": "",
  "color_aug": false,
  "flip_aug": false,
  "clip_skip": 2,
  "gradient_accumulation_steps": 1.0,
  "mem_eff_attn": true,
  "output_name": "Addams",
  "model_list": "runwayml/stable-diffusion-v1-5",
  "max_token_length": "75",
  "max_train_epochs": "",
  "max_data_loader_n_workers": "1",
  "network_alpha": 128,
  "training_comment": "",
  "keep_tokens": "0",
  "lr_scheduler_num_cycles": "",
  "lr_scheduler_power": ""
}

实际配置的时候,可以多在C站看看好的Lora模型然后拉到stable-diffusion中看看别人的训练信息.

然后存训练的图片也有讲究,文件夹命名有格式要求,这里后面细说.

流程梳理

主要使用derrian-distro/LoRA_Easy_Training_Scripts: A set of two training scripts written in python for use in Kohya's SD-Scripts repository. (github.com)这个仓库学习.

下载安装即可,Windows平台下载installer.py文件,作者推荐使用3.10.6,当然3.10版本应该都能跑.

<img src="https://s2.loli.net/2023/04/19/Y6SarqXbRyIU3Ki.png" alt="image-20230419215740689" style="zoom:67%;" />

脚本会询问是否安装一些可选项,我基本没有装特别的.

[图片上传失败...(image-d34da9-1682243737343)]

数据集准备

安装完成后开始准备数据集,推荐两个图片搜集软件,这样不用自己到处爬取了.一个是Grabber和Hydrus.我用了一下,Grabber是不错的,下载链接在参考资料里.

此外还可以使用Release first release · derrian-distro/Quick_Image_Sort (github.com)来进行图片整理排序.

图片裁剪和修改

图片的分辨率影响模型的生成,同时也要注意你机器的配置,比如512x512是一般8G以上的图片大小,最好将获取的图片裁剪或调整到相同的分辨率同时可以进行重命名.这写步骤可以在一些在线图片编辑网站BIRME - Bulk Image Resizing Made Easy 2.0 (Online & Free)操作,web ui中也有相关选项用于图片裁剪.同时注意图片中背景处理,可以使用Cleanup.pictures - Remove objects, people, text and defects from any picture for free清除图片中的一些东西.

数据集打标签与编辑标签

如果使用Grabber下载图片,可以直接设置下载图片的同时得到标签文件.设置如下

<img src="https://s2.loli.net/2023/04/21/6fMnyFKOdgaibW2.png" alt="image-20230421194316595" style="zoom:50%;" />

<img src="https://s2.loli.net/2023/04/21/yphdqStR8AHF4xU.png" alt="image-20230421194257509" style="zoom: 50%;" />

也可以参考链接https://i.imgur.com/XHvfAkj.png

如果要获取自己的图像文件标签并编辑,可以使用很多软件,比如stable diffusion web ui的插件,比如stable-diffusion-webui-wd14-taggerstable-diffusion-webui-dataset-tag-editor.

或者使用软件https://github.com/starik222/BooruDatasetTagManager编辑标签.值得一提的是这里的"标签"一般叫caption或者tag.

<img src="https://s2.loli.net/2023/04/21/3z2iNLMyJVlHa9R.png" alt="image-20230421201313975" style="zoom:50%;" />

除了stable-diffusion web ui中有打标签的,本身kohya_ss的GUI也有打标功能

<img src="https://s2.loli.net/2023/04/23/tl3FcAoI5ajW8iY.png" alt="image-20230422113936860" style="zoom:67%;" />

本质上是使用一些已有的模型得到图片的信息。

有了生成的标签后需要自己对标签进行一些处理,这里的处理是为了后面训练lora达到效果,一般叫pruning captions.

Pruning Captions

一般的准则:

  1. 如果你要训练一个画家作品的Lora,那给这些作品打标签时需要去掉关于这个作家的标签,如果是一个人物Lora,那需要去除人物的名字相关tag以及一些决定性的特征.这样这种风格或人物就存在与其他标签上.
  2. 剔除任何应该隐含在所有生成结果中的标签或任何会偏离训练数据的标签

比如关于一个人物的Lora模型,那么这个人物名字就没必要作为prompt了,所以就要去掉这个tag.

编辑标签可以用上述说的stable diffusion中的dataset-editor或者软件BooruDatasetTagManager.

设置图片文件夹

<img src="https://i.imgur.com/zpbs8FB.png" alt="Directory Example" style="zoom:50%;" />

其中的txt文件就是caption文件,而其中的5_ConceptA是概念文件夹,5表示其中的图片每张训练5次.

Concept 概念文件夹遵循这种格式:<编号>_<名称>

<编号>决定了你的训练脚本将在该文件夹上进行的重复次数。只要你有匹配的txt标题文件,<名称>就纯粹是装饰性的。

caption文件是强制性的,否则LoRAs将使用概念名称作为标题进行训练。

需要一个根目录,根目录下面是多个concept文件夹.同时可以在这个根目录同级创建一个reg文件夹用于正则化防止过拟合.

[图片上传失败...(image-cee94c-1682243737343)]

比如这里 train_girls里面是训练数据,下面放置多个概念文件夹,reg_girls里放图片.

实战

实战训练一个人物Lora,这里就懒得在网上一个一个找角色的图了,使用Grabber搜索角色名,比如星野爱,hoshino_ai.注意设置所有来源

[图片上传失败...(image-980535-1682243737343)]

在 "来源 "下勾选你希望搜索的任何一个Booru(s)。
(注意:不是所有的Boorus都能立即工作,Danbooru需要配置)
在 "目的地 "下选择你希望保存图像的文件夹(!确保这与日志是同一个文件夹!)。
要下载,只需右击任何图像缩略图并点击保存即可
如果你想批量下载,你可以在底部选择 "获取本页 "或 "获取全部 "来组成一个下载队列。
你也可以使用ctrl + click,然后使用get selected。
然后导航到上面的 "下载 "选项卡,开始下载
你下载的所有图片都会有一个包含标签的同名文本文件

注意可能图片样式会有很多,包括nsfw的,等会在训练的时候可以设置多个概念文件夹.

同时设置下载图片时增加tag文件,按下图设置即可.Filename要跟下载图片的路径一样.

<img src="https://i.imgur.com/TtConCM.png" alt="imgbird" style="zoom: 80%;" />

<img src="https://s2.loli.net/2023/04/23/RrVigoyXhwz3CtU.png" alt="image-20230422123208032" style="zoom:50%;" />

Grabber这个软件还是不错的,此外还有另一个软件之前推荐过Hydrus,不过设置相对麻烦,这里就不使用了.

最后下载内容如下

<img src="https://s2.loli.net/2023/04/23/eboWaBVhRzU6nZ5.png" alt="image-20230422125727350" style="zoom:67%;" />

你可以将人物不同风格和样式的图片放到不同文件夹.

然后注意,我们需要一个所谓的触发词,也就是使用你这个Lora模型的词汇,这里可以使用hoshino_ai这个tag,所以我们需要添加这个触发词,操作如下

<img src="https://s2.loli.net/2023/04/23/SuAs8UtmjHEFlWZ.png" alt="image-20230422131005321" style="zoom:50%;" />

然后使用Dataset Tag Editor插件编辑tag

<img src="https://s2.loli.net/2023/04/23/tSK2l9zrQWhOxVc.png" alt="image-20230422125853433" style="zoom:80%;" />

将包含图片和tag文件的目录加载到插件中,这里我删除了一些频率高同时没什么含义的标签比如有个++的标签.具体操作可以看看仓库写的很详细toshiaki1729/stable-diffusion-webui-dataset-tag-editor: Extension to edit dataset captions for SD web UI by AUTOMATIC1111 (github.com)

最终tag如下,注意这是其中一个概念文件夹的图片

<img src="https://s2.loli.net/2023/04/23/kBDuwpctQNqe4RE.png" alt="image-20230422130925796" style="zoom:67%;" />

最后不要忘了保存

[图片上传失败...(image-6eda1e-1682243737343)]

对于其他concept文件夹操作类似.

最后开始训练,如果使用GUi,那么需要调的值比较多,可以加载别人的配置https://pastebin.com/dl/ZgbbrE7f,自己需要改的就是底模路径,导出模型和数据路径.

也可以使用B站up主秋葉aaaki写的脚本,本质类似,不过对于新手不用跳太多参数了.

<img src="https://s2.loli.net/2023/04/23/EiqQIXu5N9a1HGW.png" alt="image-20230422183430349" style="zoom:50%;" />

后面发现我的笔记本竟然显存只有4G,所以后面把图片进行了统一裁剪并减少了数量,大概三十张图片,concept在3~6之间并且只训练Unet,最后终于不提示显存溢出了.

只训练了10个epoch每两个epoch生成一个模型,最终结果如下.走完了一套流程,虽然显存只有4G,最终效果可能也一般,但还是希望能帮到一些人.

[图片上传失败...(image-fdbd42-1682243737343)]

最后测试了一下训练结果,可以说是莫名其妙,惨不忍睹.根本看不出训练集是星野爱的.

不过也算是走完了训练流程吧,毕竟显卡能力有限.

[图片上传失败...(image-15e499-1682243737343)]

[图片上传失败...(image-d350ae-1682243737343)]

<img src="https://s2.loli.net/2023/04/23/keLWg2YdjuK8yPF.png" alt="xyz_grid-0002-3260766832" style="zoom:50%;" />

后续会写一些参数解析,欢迎关注.

参考资料

  1. LoRA Training Guide (rentry.co)

  2. 《BLIP》-用更干净更多样的数据进行多模态预训练,性能超越CLIP!代码已开源! - 知乎 (zhihu.com)

  3. Bionus/imgbrd-grabber: Very customizable imageboard/booru downloader with powerful filenaming features. (github.com)

  4. [AI绘画]《LORA模型训练超入门级教程》--人人都可以当炼金术士 - 知乎 (zhihu.com)

  5. 开源图像模型Stable Diffusion入门手册 - 腾讯云开发者社区-腾讯云 (tencent.com)

  6. Lora人物训练(多concept)导论 - 哔哩哔哩 (bilibili.com)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容