一、说明
在读本文之前,我想你一定使用过sd作图程序,并且对ai工具有一定的了解,本文主要介绍如何使用免费的Google GPU算力训练自己的ai模型,并将其应用到你的stable diffusion程序中。 毕竟如果要自己购买一套中高端性能的GPU服务器用来训练,成本还是挺高的。
二、Google colab介绍
Google Colab是一个基于云的编程环境, 你可以把它想成是一个云端虚拟服务器,然后Google给你提供了一套开发套件,你可以在里面直接运行python程序或者编写markdown文档,最主要的是你可以直接切换运算核心:CPU或者GPU,并且这一切都是免费的,只需要你拥有一个google账号。
默认情况下Google Colab就像一台没有硬盘的电脑,里面的所有内容都是即时重置的,只在你的这一次会话过程中存在,一旦你退出本次使用,里面的东西会全部被重置。不过我们不用担心,Google Colab允许和Google云硬盘搭配使用,你可以将google云硬盘直接挂载到Google Colab运行环境中,然后你就可以像一般的电脑一样使用它,你所有的文件都可以直接存档到云硬盘中,再也不用担心工作进度丢失,正确的运行环境如下:
三、环境配置
3.1:准备工作
》国内用户需要科学上网
》需要一个Google账号(没有的自己想办法注册,这里不再详细介绍注册步骤)
3.2:打开Colab环境
https://colab.research.google.com/https://colab.research.google.com/
3.3:选择GPU计算核心
3.4:链接启动colab环境
3.5:挂载Google云硬盘
四、开始训练
4.1:模型知识
Ai模型的本质其实是一套计算规则,这套规则里面包含了绘图的风格,关键词,拟合信息,生成算法等内容, 然后GPU通过加载模型进行并行计算,最终生成一张符合该模型风格的图像。实际上ai的出图过程跟我们人脑作图的过程是差不多的,通过下图我们可以做一下类比:
所以我们可以把模型类比做我们人类的技能点,训练模型的过程其实就是我们人类学习某项技能的过程。
4.2:训练过程
同样我们类比人脑学习技能的过程,我们学习一项技能所需的要素内容如下:
人脑技能 |
模型规则 |
说明 |
技能示例 |
训练图 |
明确目标是什么 |
技能介绍 |
文本摘要 |
介绍讲解目标 |
学习方法 |
训练算法 |
如何达到目标 |
学习过程 |
训练过程 |
重复训练,达到目标 |
我们看到其实模型训练主要有4个要素,下面我们依次看一下这几个要素
4.2.1:训练图
训练图其实就是我们想要达到什么样的效果,如下图:
现在我们要训练一个给人自动更换这套衣服的模型,那么我们就需要先找一批这套衣服的示例图,最好是高清模特图,一般需要8张以上不同角度的同类型模特图:
图片不能过少,否则训练的效果不佳,尽量保证图片数量为偶数。
然后我们需要对图片进行技术调整,去掉杂色背景,去掉头和脚(因为我们只换衣服),调整为正方形(边长>512):
最终我们得到10张纯白背景的训练图。
4.2.2:文本摘要
文本摘要其实就是对这10张训练图进行一个关键字提取,主要是用在文生图模式下,通过文本关键字能够匹配到这个模型效果,我们自己写肯定不太合适,还是交给训练脚本吧,训练脚本会自动对这10张图进行翻译,输出一套关键字摘要:
首先我们要把这10张图上传到Google云硬盘,然后在Colar可以看到:
然后我们下载训练程序,开源社区有很多的训练程序,这里选一个比较受欢迎的kohya-ss/sd-scripts
https://github.com/kohya-ss/sd-scripts.githttps://github.com/kohya-ss/sd-scripts.git
!git clone https://github.com/kohya-ss/sd-scripts.git
!pip install --upgrade -r /content/sd-scripts/requirements.txt
执行摘要提取程序,提取训练图关键字
!python3 "/content/sd-scripts/finetune/make_captions.py" \
--batch_size="8" \
--num_beams="10" \
--top_p="0.9" \
--max_length="75" \
--min_length="22" \
--beam_search \
--caption_extension=".txt" \
"/content/drive/MyDrive/lora/chilloutmix/input/girl_clothes/150_pics/" \
--caption_weights="https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_large_caption.pth"
摘要提取完成
提取完成的摘要,我们需要做一下后置处理
4.2.3:训练算法
其实这个要素是最简单的,因为开源社区都帮我们做了,我们这里用训练程序的实际就是上一步中的kohya-ss/sd-scripts, 执行过第二步之后,本要素不需要再额外安装
4.2.4:训练过程
紧接着上一步,我们新建训练代码,继续执行训练程序
基础大模型站内下载地址https://download.csdn.net/download/ma_jian_ping/88380149
!pip install xformers
!python3 "/content/sd-scripts/train_network.py" \
--enable_bucket \
--pretrained_model_name_or_path="/content/drive/MyDrive/lora/chilloutmix/safetensors.safetensors" \
--train_data_dir="/content/drive/MyDrive/lora/chilloutmix/input/girl_clothes" \
--resolution=768,768 \
--output_dir=trainDir+"/content/drive/MyDrive/lora/chilloutmix/output" \
--network_alpha="96" \
--save_model_as=safetensors \
--network_module=networks.lora \
--text_encoder_lr=5e-5 --unet_lr=0.0001 \
--network_dim=96 \
--cache_latents\
--output_name="ports_printed_panel_dress_2023_model" \
--lr_scheduler_num_cycles="1" --learning_rate="0.0001" \
--lr_scheduler="constant" \
--train_batch_size="2" --max_train_steps="750" \
--save_every_n_epochs="1" --mixed_precision="fp16"\
--save_precision="fp16" --optimizer_type="AdamW8bit"\
--max_data_loader_n_workers="1" \
--caption_extension=".txt" \
--clip_skip=2 \
--max_bucket_reso=2048 \
--xformers
这个训练过程比较漫长,主要跟训练程序参数中设置的训练次数有关,训练次数越多,模型越精确,但是相应的耗时也会更长。
最大训练次数 = 图片目录名前缀(150) * 图片数量(10) / 2
本示例中:750 = 150 * 10 / 2
耐心等待训练程序完成
4.3:测试模型
将上一步训练后下载的模型文件放到stable diffusion web ui的model目录,然后我们测试一下该模型
选择文生图模式
我们看到,stable diffusion 已经正确的生成了我们想要的衣服款式。说明我们的模型生效了。
五、训练中遇到的问题
问题1:生成图片摘要的那一步,训练程序依赖安装报错
解决方案:这个错误是因为下载的sd-scripts的requirement文件格式有问题,导致自动安装依赖失败,解决如下
问题2:生成图片摘要的那一步,摘要程序报错,找不到依赖
解决方案:这个错误的原因是,Colab默认运行目录不是sd-scripts根目录,所以执行sd程序的时候,运行路径不正确,导致找不到正确的依赖程序,正确的解决方案是切换执行目录,
但是免费版的Colab不允许切换执行目录,所以我们要采用迂回的方式解决这个问题,如下图: