当前位置: 首页 > news >正文

4.Stable Diffusion WebUI 模型训练

        本文看了知乎训练Embedding - Stable Diffusion WebUI使用手冊 - Stable Diffusion文档中心的文章,这篇文章写的很详细,可能是我的SDW版本升级了,有的地方和这篇文章的不同,所以内容有部分的改动,但最后还是可以正常训练了,这里作为笔记用。

        如果要更全面了解Stable Diffusion WebUI 的使用,建议大家看上面那篇知乎的文章,文章写的很全,包括文生图、图生图的细节及模型训练、模型合并的细节,都讲的很详细。

1.为什么要训练模型?

        为什么要训练自己的模型?训练自己的模型可以在现有模型的基础上,让AI懂得如何更精确生成/生成特定的风格、概念、角色、姿势、对象。

        举例来说,如果喂给AI十几张我精挑细选的「Hara老师绘制的、不同角度、FGO的斯卡萨哈」做训练,那么就能让AI更懂得如何生成斯卡萨哈的脸部,风格也会比较固定。

        以下是一个具体例子,通过使用自行训练的HyperNetwork,便改善单靠Anything模型无法生成出Hara老师画风的缺点。在不使用HyperNetwork的情况下,风格永远是左边那样;一使用HyperNetwork,右边的风格就能轻松生成出来了。

        训练模型是复杂的议题,基于哪个现有模型,以及喂给AI学习的图片品质,还有训练时的参数,都会影响模型训练结果。

        本文提及的Embedding、HyperNetwork、LoRA都是「小模型」,这是相对于网络动辄好几GB的checkpoint「大模型」而言。这些小模型训练时间短,文件约几MB而已,训练成本不高。主要是用于生成特定人物/对象/画风,并且训练的模型可以多个混用。

        如果硬件条件许可的话,搜集大量图片训练特定领域的checkpoint大模型,再上传到HuggingFace造福他人也是不错的选项,只不过此任务过于庞大。要知道Stable Diffusion 1.5版的模型可是输入了23亿张图片训练出来的!网络上其他人训练的模型至少也准备了几万张图片。因此要生成特定的人物/对象/画风,训练小模型对一般人来说比较划算。

        各个模型的原理差异请参考下图。技术原理以及训练参数设置请参阅「参考数据」一章,碍于篇幅无法一一细讲,本章以操作过程为主。

        就训练时间与实用度而言,目前应是 LoRA > HyperNetwork > Embedding

        本章节以AUTOMATIC1111开发的Stable Diffusion WebUI为中心撰写,因其图形化且好操作。后面简称SD WebUI。

        接着选择部署在本机或是云端?

        训练模型至少需要10GB的VRAM,也就是RTX3060等级以上的GPU。

        如果你有Nvidia RTX3060以上等级的GPU,那就参考安装教学部署在本机,想训练多久就训练多久。训练数据不到50张图片的小模型训练时间约只要1~3个小时。

        如果没有强力的GPU,那就用云端训练,例如Google Colab。

2.准备训练数据

2.1 取得高品质图片

训练用的图片最少最少要准备10张。重质不重量。因为我要训练的是单一人物且风格固定,图片不宜有复杂背景以及其他无关人物。

网络图片一张一张右键下载当然可以,不过要大量下载图片的话我会使用Imgrd Grabber或Hydrus Network。

这里我是在视觉中国视觉中国图片-视觉中国素材-视觉中国图片下载-视觉中国VCG.COM搜索FGO的斯卡萨哈,然后挑取合适的图片一张一张手动下载的图片,下载的图片如下:

2.2 裁剪图片

        下载图片后,要将训练图片裁切成512x512像素。你可以选择用SD WebUI自动裁切,或是手动裁切。

2.2.1 自动裁剪图片

裁切图片不会用到显卡计算。

  1. 将要裁切的图片放到同一个目录下,例如/home/user/桌面/input
  2. 打开SD WebUI,进到Train → Preprocess images页面

  1. 第一个字段Source directory填写原始图片的路径
  2. 第二个字段Destination directory填写输出路径,例如/home/user/桌面/cropped
  3. Width和Height设置为512x512
  4. 点击Preprocess ,图片即会自动裁切。在那之后原始图片就可以删除,只留下裁切后的图片。

2.2.2 手动裁剪图片

手动把图片转成512x512理由是避免重要的部分被裁掉。

  1. 1安装修图软件GIMP,点击文件→添加512x512像素的项目

  1. 2点油漆桶将其漆成白色

  1. 3将图片拖曳进画面,成为新的图层

  1. 4点击工具→变形工具→缩放,缩放图片使其符合目前画布大小,再按Enter。

  1. 5点击文件→Export,导出成png。

  1. 6为加快后面图片的处理速度,按右下角删除目前图层,再拖新的图片进来,重复操作。

  1. 7将33张Hara绘制的斯卡萨哈裁切后,统一放到名为raw的目录。

2.3 预先给图片上提示词

 1.进入 Extras页面

2.再进入Batch from Directory页面

在该页面的input directory下面输入自己裁剪好的图片路径文件夹路径,在out direcyory下面输入自己要输出图片的文件夹路径,然后勾选create flipped copies 和 Caption,再点击Generate。之后在输出图片的文件夹会有如下文件:

        里面的txt文件对应每张图片的标签,可以进入txt文件把一些不需要的标签删去。在这里,训练前的数据准备就结束了。

3.训练embedding

3.1 embedding 训练

接着要给图片预先上提示词,这样AI才知道要学习哪些提示词。由于我的版本和知乎文章的版本不同,这里与知乎文章的有一些不同,大家可以根据自己的版本自行看着完成这个步骤。

1.启动SD WebUI,进入Train页面。

2.进入Train页面的Create embedding页面

        在该页面的name下面写入heraembedding,并将Number of vectors per token改为7,然后按Create embedding.

完成以上步骤后,进入Train页面,如下图所示

        在该页面的embedding下面输入heraembedding,在Dataset directory下面输入刚才的那个有txt文件和图片的文件夹路径,然后点击最下面的Train Embedding即可训练。

  1. SD WebUI应会显示剩余时间,通常是一小时起跳,每500步会在右边显示训练该步数的成果。
  2. 你也可以到SD WenUI根目录下的texual_inversions查看训练成果。里面image_embeddings目录会存放第几步所训练的成果。

  1. 待训练完成后,至SD WenUI根目录下的texual_inversions/embeddings,对照image_embeddings目录的图片挑选合适的成品。

  1. 例如觉得9500步的不错,那就将该pt档从里面挑出,将其放到SD WebUI程序目录下的embeddings

3.2 embedding模型使用

  1. 于SD WebUI的生图界面,点击右上角Show Extra Networks

  1. 接着选取要使用的embedding,点击将其加入提示词字段。Embedding只能配合训练时使用的模型来算图。

  1. 然后按照Embedding训练时使用的提示词下提示词,这样算出来的图便会有该Embedding的人物了。

4.训练HyperNetwork

        HyperNetwork训练方式和embedding训练方式相同,只是在train页面选择Create hypernetwork即可。

5.训练Lora

LoRA (Low-rank adaptation)是用来微调大型模型的技术,其生成的模型训练时间短,文件更小。

DreamBooth内含LoRA,可作为SD WebUI的扩充功能安装。

本机训练还可以用LoRA_Easy_Training_Scripts,支持Linux和Windows系统。

有用Google Colab的采用Linaqruf/kohya-trainer会比较好上手。Reddit有一图流教学。

1. 安装环境

"LoRA Easy Training Scripts"这个Python程序Linux和Windows都可以用,下面以Ubuntu为例。

  1. 安装Anaconda,创建虚拟环境
conda create --name loratraining python=3.10.6
conda activate loratraining
  1. 拷贝保存库
git clone https://github.com/derrian-distro/LoRA_Easy_Training_Scripts.git
cd LoRA_Easy_Training_Scripts
git submodule init
git submodule update
cd sd_scripts
pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt
pip install -U xformers
  1. 设置加速选项
accelerate config
#依序回答:
#- This machine
#- No distributed training
#- NO
#- NO
#- NO
#- all
#- fp16
  1. LoRA的训练数据目录结构不太一样,需创建目录结构如下。已经上好提示词的训练数据要放在img_dir下面,将目录名称取名为数字_概念,目录名称前面加上数字代表要重复的步数。

  1. 添加训练设置档trainingconfig.json
vim trainingconfig.json
  1. 填入以下内容(双斜线的注解记得删除) LoRA的总训练步数计算公式为: 训练图片数量 × 重复次数 ÷ train_batch_size × epoch
{//基于何种模型训练"pretrained_model_name_or_path": "/home/user/桌面/heralora/anything-v4.5-pruned.ckpt","v2": false,"v_parameterization": false,//纪录档输出目录"logging_dir": "/home/user/桌面/heralora/log_dir/",//训练数据目录"train_data_dir": "/home/user/桌面/heralora/image_dir/",//注册目录"reg_data_dir": "/home/user/桌面/heralora/reg_dir/",//输出目录"output_dir": "/home/user/桌面/heralora/output_dir",//训练的图片最大长宽"max_resolution": "512,512",//学习率"learning_rate": "1e-5","lr_scheduler": "constant_with_warmup","lr_warmup": "5","train_batch_size": 3,//训练时期"epoch": "4","save_every_n_epochs": "","mixed_precision": "fp16","save_precision": "fp16","seed": "","num_cpu_threads_per_process": 32,"cache_latents": true,"caption_extension": ".txt","enable_bucket": true,"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": true,"save_state": false,"resume": "","prior_loss_weight": 1.0,"text_encoder_lr": "1.5e-5","unet_lr": "1.5e-4","network_dim": 128,"lora_network_weights": "","color_aug": false,"flip_aug": false,"clip_skip": 2,"mem_eff_attn": false,"output_name": "","model_list": "","max_token_length": "150","max_train_epochs": "","max_data_loader_n_workers": "","network_alpha": 128,"training_comment": "","keep_tokens": 2,"lr_scheduler_num_cycles": "","lr_scheduler_power": "","persistent_data_loader_workers": true,"bucket_no_upscale": true,"random_crop": false,"caption_dropout_every_n_epochs": 0.0,"caption_dropout_rate": 0
}

2. 开始训练

有些系统需要指定CUDA安装路径

export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  1. 输入以下指令,加载json设置档。libnvinfer.so.7: cannot open shared object file的警告可以暂时忽略。
accelerate launch main.py --load_json_path "/home/user/trainingconfig.json"
  1. 之后会自动开始训练。训练好的模型位于训练设置档所写的output_dir目录。将.safetensors档移动至SD WebUI根目录下的/models/Lora

3. LoRA模型使用方式

  1. 点击SD WebUI右上角,Show extra networks

  1. 点击要使用的LoRA,将其加入至提示词字段

  1. 再加上训练时使用的提示词,即可生成使用LoRA风格的人物。

http://www.lqws.cn/news/597151.html

相关文章:

  • OpenCV CUDA模块设备层-----“大于阈值设为零” 的图像处理函数 thresh_to_zero_inv_func()
  • torch.nn
  • Postman - API 调试与开发工具 - 标准使用流程
  • Mac 部署 Dify小红书种草工作流
  • 新手向:从零开始MySQL超详细安装、配置与使用指南
  • stm32l4系列启用看门狗后,调用HAL_IWDG_Refreh()就复位
  • HakcMyVM-Arroutada
  • java生成word文档
  • 飞算JavaAI:重构软件开发范式的智能引擎
  • ABB驱动系列SCYC51213 63911607C驱动板
  • java微服务-linux单机CPU接近100%优化
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(二)
  • 再见 RAG?Gemini 2.0 Flash 刚刚 “杀死” 了它!
  • 学习面向对象
  • 第TR3周:Pytorch复现Transformer
  • 快速手搓一个MCP服务指南(九): FastMCP 服务器组合技术:构建模块化AI应用的终极方案
  • 【仿muduo库实现并发服务器】Poller模块
  • 基于中国印尼会计准则差异,中国企业在印尼推广ERP(SAP、Oracle)系统需要注意的细节
  • Pycharm命令行能运行,但绿色三角报错?
  • mac重复文件清理,摄影师同款清理方案
  • nosql项目:基于 Redis 哨兵模式的鲜花预订配送系统
  • 设计模式之组合模式
  • 将实时流的 H.264(视频)与 G.711A(音频)封装成 MP4 文件
  • 关于量子计算的一份介绍
  • 12【进程间通信——管道】
  • Vue 响应式数据传递:ref、reactive 与 Provide/Inject 完全指南
  • 基于 Three.js 与 WebGL 的商场全景 VR 导航系统源码级解析
  • 遥感云大数据在灾害、水体与湿地领域案例及GPT应用
  • 第八章:LeRobot摄像头配置与应用指南
  • 使用GeoServer发布地图shapefi(.shp)数据