0xSoul 发表于 2023-4-8 19:22:41

Stable Diffusion web UI x Kohya's GUI:训练 LoRA 模型教学,快速上手最流行的 AI

我知道大家已经等了这篇图文教程很久了!站长一直在等待软件和时机成熟,网络上有更多的参考资料和资源时才开始研究 LoRA 训练。过去我自己最常使用的是超网络(Hypernetwork)训练小模型来达成特定画风或人物(物件)的绘制,但训练步数要 2000 至 10000 步,我都设置每 500 步存一个小模型,训练完后自己去挑选 LOSS 值较低且效果较佳的模型,整个流程相当耗时费力(通常耗时约两至三小时),成功率不一定很高。

而 LoRA 训练小模型有特定的公式,每张图最少训练 100 步,总步数不低于 1500 步,也就是说建议训练图片大于 15 张,若小于则用这个公式计算每张步数:“1500/图片张数=每张训练步数”,举例来说,我训练的图片共 10 张,那我就是每张训练 150 步即可,只要依照这个公式去训练产生的小模型效果就会很好,若不好就是要去检查训练图片是否合适,图片品质很重要(建议都用 R-ESRGAN 4x+ Anime6B 去跑一次去除杂音及优化),尺寸统一都是 1:1,而我就设为基本的 512 x 512 px,效果就很好了!如果显卡够力可以试着 768 x 768 px 的图片拿去训练看看!训练 LoRA 最低显卡 VRAM 为 7G!所以市售 8G、12G VRAM 的显卡都适合拿来用。

LoRA 训练出来的小模型文件不大,顶多 100 多 MB 而已,而且每训练一个模型只要不到十分钟,很快就能让 AI 学会一个物件如何绘制,非常强大,实际产图成功率极高,能非常接近我想要的模样,二次元动漫风格用 LoRA 训练出来的模型绘制非常合适,这次就以「孤独摇滚!」(ぼっち・ざ・ろっく!,Bocchi the Rock!)中的登场角色以「喜多郁代」(きた いくよ,Kita Ikuyo)为例进行训练,并编写本篇教程供大家参考。

使用软件列表

Stable Diffusion web UI:处理训练图片、AI 绘图用
Kohya's GUI:训练 LoRA 模型
※备注:请先点入个别软件链接去依照教学安装好,熟悉软件界面操作后再往下看教学。



为了准备训练图像,我将D盘作为主要工作位置,文件夹的排列如下:

文件夹排列:
📂 D:\ai\source -> 存放训练图像的文件夹(已去噪声并裁剪为1:1比例)
📂 D:\ai\model -> 存放 LoRA 模型输出的位置
📂 D:\ai\destination -> 存放整理过后的训练图像的位置,训练时从该文件夹读取(包括 txt 提词注释)

我一共准备了17张训练图像,每张图像训练100次,预计完成LoRA模型的训练需要1700步。


▲ 这是我已经裁切处理好的 17 张要训练的图片,都是喜多郁代!特别注意,建议多个角度、表情,以脸为主,全身的图几张就好,这样训练效果最好。


首先使用 Stable Diffusion web UI 生成提词注释的文本文件(txt格式),然后在“训练”->“图像预处理”页面中清晰地写下源目录和目标目录,勾选“使用deepbooru生成说明文字(标记)”,最后点击“预处理”。




最后,您可以在目标目录中找到配有txt文件的训练图像,并将它们整理到一个子目录中,命名方式为“每张步数+底线+模型名称”,前文已经说明了每张步数的计算公式!按照公式计算就不会出问题!在这里,我将其命名为“100_kita_ikuyo”,软件将直接读取每张步数。




接下来切换到Kohya's GUI,进入“Dreambooth LoRA”,点击“Configuration file”加载快速配置文件。在这里,我整理了以下两种快速配置文件,参考了外国网友的教程,请将其全文复制并存储为.json文件,并在此处加载。(* *只需加载一种配置文件)

LoraBasicSettings.json (基础设置文件)

{
"pretrained_model_name_or_path": "runwayml/stable-diffusion-v1-5",
"v2": false,
"v_parameterization": false,
"logging_dir": "",
"train_data_dir": "D:/ai/destination",
"reg_data_dir": "",
"output_dir": "D:/ai/model",
"max_resolution": "512,512",
"learning_rate": "0.0001",
"lr_scheduler": "constant",
"lr_warmup": "0",
"train_batch_size": 2,
"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": false,
"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": false,
"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": ""
}
LoraLowVRAMSettings.json (低VRAM设置文件)

{
"pretrained_model_name_or_path": "runwayml/stable-diffusion-v1-5",
"v2": false,
"v_parameterization": false,
"logging_dir": "",
"train_data_dir": "D:/ai/destination",
"reg_data_dir": "",
"output_dir": "D:/ai/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": ""
}



接下来,在“(Optional) Model Quick Pick”中选择“custom”自定义训练基础模型,左侧的“Pretrained model name or path”选择大型模型。由于我们要训练二次元动漫人物模型,因此需要选择用于绘制此类物体的大型模型作为基础模型!下面的两个选择框只需要勾选使用 Stable Diffusion 2.0 架构生成的大型模型,但目前大多数大型模型仍然是使用 Stable Diffusion 1.0 架构生成的,因此这里都不勾选。






在“Folders”部分,我已经为大家设置了路径,您可以将其更改为您喜欢的路径!“Model output name”可设置模型输出名称。





在“Training parameters”部分,基本上在快速设置文件中已经设置好了!基础设置中的“Train batch size”设置为2,意思是训练批次为2,因此原本的1700步训练只需要850步就可以完成,但相对会牺牲更多的VRAM,这取决于您的GPU性能。 “Max resolution”是训练图像的宽高,通常为512 x 512像素,除非您的GPU非常强,否则不需要更改。如果您有兴趣研究其他设置,可以进一步了解其设置!






点击“Train model”开始训练LoRA小模型,可以在终端输出端看到正在运行的画面。




▲ 训练完成!可以到输出目录找到单个小模型文件,直接复制到 stable-diffusion-webui\models\Lora 下面,这样就能用它来 AI 绘图啦!您看是不是很快,十分钟不到就生成了一个小模型!





▲ 大模型选一样的,提词、参数设置好点红色箭头处的图标。


我用了这个promet:

masterpiece, (best quality:1.2), Amazing, beautiful detailed eyes, 1girl, solo, finely detail,depth_of_field, extremely detailed CG unity 8k wallpaper, (kita_ikuyo:1.3), (upper_body), red_hair, skirt, shoes, (open_mouth:0.7), (ok_sign), school_uniform, pleated_skirt, long_hair, yellow_eyes, bow, sailor_collar, white_legwear, loafers, socks, red_bow, bowtie, smile, serafuku, brown_footwear, looking_at_viewer, long_sleeves, red_bowtie, :d.



▲ 选择「Lora」标签,点击刚刚训练好的小模型就会自动在提词处末端加入<lora:name:1>,1 代表强度为 100%,我常常设置为 0.8,即强度为 80%。如果没有看到刚刚训练好的小模型,可以点击「Refresh」重新载入哦!都确认无误就能点击「生成」开始 AI 绘图了!



左侧是无lora模型,右侧是有lora模型


▲ AI绘图生成结果,有无 LoRA 模型就是差这么多!这两张种子码一样,一次输出就有如此高的成功率,非常强大。

希望这次的教学能帮助您突飞猛进,AI绘图短短几个月发展成这样,非常惊人。当然目前要操作到训练等还是需要不少技术能力,门槛不算低,不过随着软件进步,未来入手门槛将会大大降低。当然要能好好运用 AI 绘图,还是要从基础下手啦!


排错笔记:

如果在更新 Kohya's GUI 后进行训练时遇到以下错误信息:


Traceback (most recent call last):
File "D:\kohya_ss\train_network.py", line 573, in <module>
train(args)
File "D:\kohya_ss\train_network.py", line 356, in train
"ss_noise_offset": args.noise_offset,
AttributeError: 'Namespace' object has no attribute 'noise_offset'
[...]先到 https://github.com/kohya-ss/sd-scripts 下载 ZIP 文件,将 sd-scripts-main\library 中的 train_util.py 复制到 kohya_ss\library 下取代原文件,重新跑一次训练就能正常运作了!目前发现新版软件训练时会占用更多 GPU VRAM。



页: [1]
查看完整版本: Stable Diffusion web UI x Kohya's GUI:训练 LoRA 模型教学,快速上手最流行的 AI