一、为什么要训练模型?
训练自己的模型可以在现有模型的基础上,让AI懂得如何更精确生成/生成特定的风格、概念、角色、姿势、对象。
举例来说,如果喂给AI十几张我精挑细选的「Hara老师绘制的、不同角度、FGO的斯卡萨哈」做训练,那么就能让AI更懂得如何生成斯卡萨哈的脸部,风格也会比较固定。
以下是一个具体例子,通过使用自行训练的HyperNetwork模型,便改善单靠Anything模型无法生成出Hara老师画风的缺点。在不使用HyperNetwork的情况下,风格永远是左边那样;一使用HyperNetwork,右边的风格就能轻松生成出来了。
Anything 没训练 Anything + HyperNetwork 有训练
训练模型是复杂的议题,基于哪个现有模型,以及喂给AI学习的图片品质,还有训练时的参数,都会影响模型训练结果。
Embedding、HyperNetwork、LoRA都是”小模型”,相对于网络动辄好几GB的checkpoint”大模型”而言,这些小模型训练时间短,文件约几mb~几百mb而已,训练成本不高。主要是用于生成特定人物/对象/画风,并且训练的模型可以多个混用。
如果硬件条件许可的话,搜集大量图片训练特定领域的checkpoint大模型,再上传到HuggingFace造福他人也是不错的选项,只不过此任务过于庞大。要知道Stable Diffusion 1.5版的模型可是输入了23亿张图片训练出来的!网络上其他人训练的模型至少也准备了几万张图片。因此要生成特定的人物/对象/画风,训练小模型对一般人来说比较划算。
各个模型的原理差异请参考下图。
就训练时间与实用度而言,目前排序是: LoRA > HyperNetwork > Embedding
如果你有Nvidia RTX3060以上的GPU,那就想训练多久就训练多久。训练数据不到50张图片的小模型训练时间约只要1~3个小时。
二、准备训练用的图片
训练用的图片最少最少要准备10张。建议30-50张高质量的图片。因为训练的是单一人物且风格固定,图片不宜有复杂背景以及其他无关人物。
这里我准备了33张Hara绘制的斯卡萨哈
三、裁切图片
下载图片后,要将训练图片裁切成512×512像素。你可以选择用SD WebUI自动裁切,或是手动裁切。
1、自动裁切
裁切图片不会用到显卡计算。
第一步:将要裁切的图片放到同一个目录下,例如/home/user/桌面/input
第二步:打开SD WebUI,进到Train → Preprocess images页面。
第三步:第一个字段Source directory
填写原始图片的路径。
第四步:第二个字段Destination directory
填写输出路径,例如/home/user/桌面/cropped
第五步:Width和Height设置为512×512。
第六步:点击Preprocess ,图片即会自动裁切。在那之后原始图片就可以删除,只留下裁切后的图片。
2、手动裁切
手动把图片转成512×512理由是避免重要的部分被裁掉。
第一步:安装修图软件 GIMP,点击文件→添加512×512像素的项目。
第二步:点油漆桶将其漆成白色。
第三步:将图片拖曳进画面,成为新的图层。
第四步:点击工具→变形工具→缩放,缩放图片使其符合目前画布大小,再按Enter。
第五步:点击文件→Export,导出成png。
第六步:为加快后面图片的处理速度,按右下角删除目前图层,再拖新的图片进来,重复操作。
第七步:将33张Hara绘制的斯卡萨哈裁切后,统一放到名为raw的目录。
三、先给图片上提示词
接着要给图片预先上提示词,这样AI才知道要学习哪些提示词。
第一步:启动SD WebUI,进入Train页面。
第二步:进入Preprocess页面,Source
输入裁切图片的路径,Destination
填处理后图片输出的路径。
第三步:接着勾选Create Flipped Copies
,创建翻转图片提升训练数量。
然后用Stable Diffusion训练真实图片的勾选Use BLIP for caption
;训练动漫人物改勾选Use DeepBooru for caption
。
第四步:点击Preprocess,约几分钟后便会处理完成。输出的目录里面会含有每张图片对应的提示词txt档。
第五步:点击打开txt档,将你觉得无关的特征都删除,例如2girls
这类太笼统的提示词。
至此训练数据准备完成。