据说Stable Diffusion 1.5 模型吗,十几张图就能调出来不错的效果。

现在实验室有16G的卡,可以尝试一下啦。( •̀ ω •́ )✧

数据集准备

现在有强大的自动预处理,数据集的准备可以说是只要有图片就行了。

自动预处理

首先是准备用于微调的图片。

此处我拿之前用于三维重建的小车的60张左右的图片作为微调数据。

接下来需要Stable Diffusion WebUI

SD模型的微调需要提示词,而我的小车显然是没有提示词的。

接下来我需要给这些图片加上提示词,同时,扣掉背景以及缩放图片。

在WebUI,附加功能中,选择从目录批量预处理。

做如下处理:

手动贴标签

这里我的这个训练数据集感觉是不需要手动贴标签的,我就是想让他输入car的提示词时能够画出这个小车出来。

假如是要为某一个角色做微调,那么就需要从自动生成的标签里面把这个角色拥有的特征删除掉。

举个例子,我现在要训练一个叫伊雷娜的角色:

如你所见,她带有以下显而易见的标签: 魔女、呆毛、魔法帽、灰头发···

训练集中,所有图片应当删除属于角色的标签,并添加名叫伊雷娜的这个标签。

这样,训练的Lora可以通过伊雷娜 这个标签触发,绘制特定角色。ψ(`∇´)ψ

文件夹命名

把预处理生成的所有文件放在一个文件夹中,文件的名字无所谓,但是文件夹需要遵循一定的命名规范。

按照这样的格式命名: 迭代次数_Lora触发提示词

只要注意迭代次数就可以了。

实际训练的时候,会跑N轮,每轮每张图片会训练前面写的迭代次数。

上面这种文件夹可以创建多个,指定不同的迭代次数。

然后将上面的一个或多个文件夹再放到一个文件夹里面,作为一个数据集。

训练

训练使用秋叶大佬的lora-scripts

环境安装

首先,仓库提供了环境安装脚本,正常来说直接克隆下来,直接跑安装脚本就可以啦。

但在我这里总是不会那么顺利的,看这个环境安装单独一个标题你就知道这个坑不小`(*>﹏<*)′

解决Windows不允许执行PowerShell脚本的问题

环境初始化脚本和训练脚本什么的都是PowerShell脚本,默认情况下系统是不允许执行ps脚本的。

因此,需要对系统做一些手脚。

挺简单的,首先打开管理员权限的PowerShell,然后在里面输入 Set-ExecutionPolicy Unrestricted ,然后输入Y接受。

Python环境

我的先天BUG体质导致各种东西在我手上跑总是出BUG,比如安装脚本在我机器上就跑不起来。`(*>﹏<*)′

即使是能跑自动安装脚本,有些东西也是要手动装的。

我为了节约空间,没有使用虚拟环境,全部手动装的。

其中大部分是缺什么装什么,报什么错装什么包。

但有几个包需要注意。

首先是torch包,这个包去Torch官方找一个适合自己机器的装,直接装似乎会装成CPU版本的。

还有xformers包,这个无脑install似乎是不行的(为此我还把CUDA重装了,也没装上),直接install是编译安装,官方Github仓库提供了预编译安装的方法。

除了这两个包,其他似乎是没什么坑的。至少我没遇到

训练配置

几个比较重要的配置:

  • Batch大小,每次往显卡里面送多少条数据,根据显存调整到最大值,经测试512情况下、16G显存情况下,8是可以的(似乎可以更高一点)

  • Epoches数量,训练多少次,取个稍微大一点的值,大了可以终止,小了的话就比较麻烦。(但是实际测试并不需要太大的值,60张图,每图5次,10轮以内就可以。)

  • 底膜

  • 数据集

  • 优化器和参数

小神童优化器

据说神童优化器(prodigy),是目前最棒的优化器。

那么,其他优化器,我就也不考虑了,直接奔着神童优化器去吧。

使用神童优化器需要装prodigyopt包。

然后需要把学习率调高(一共有三个学习率的值要改)(据测试,不改高会报错`(*>﹏<*)′),别人说1~2左右合适。

正式训练

一切准备就绪,没什么好说的,直接跑脚本就好了。

但是不要浪费电跑很多轮,像我这个数据集可能跑几分钟就够了。

结果

在我的数据集上,我跑了130多轮,loss掉了很多,但是,最终的结果是,过拟合。画什么都是那几张训练的图片。

实际测试四轮和六轮的效果最好,分别如下:

四轮:

六轮:

训练到第20轮问题就很大了:

第一百多轮就是直接过拟合了。


咱也是能调大模型的人啦!

v2-8c93162207c613a926848bbdcbe34d00_720w.gif

我能想到的,最大的成功就是无愧于自己的心。