首先,我们先介绍下在stable diffusion体系目前常用的形象训练模式。它们分别是:
上面这个图,是国外网站解释以上四种训练差别的示意图,大家可以详细看看,理解其中的差异。
在春节期间,Adobe这个全球图像软件巨头也和清华大学一起发布了基于嵌入的新改良办法custom-diffusion,看起来像是嵌入模型+Lora的模式,这个本艺术家今天开始测试,效果我们后面聊。
现在我们先从最基本的嵌入模型开始讲,为什么先从嵌入讲呢?因为它最简单又最基础,有很多新朋友上来就和我讲要DB(dreambooth),dreambooth效果当然好,但它并不是最高效率的,我还是建议大家循序渐进掌握四种不同的训练技能。
嵌入模型训练(Embedding Training)
第一步:整理数据集
数据集是你要训练的人物的素材,也就是照片、图片等。作为原始数据,数据集是最重要的!!如果数据集很糟糕,AI的学习也不会有好的结果。
因此,你必须确保图像质量高(不模糊、没有颗粒感、没有失帧等),同时最好有一定的数量。你的照片应该有很多变化——地点、灯光、衣服、表情、活动等。使用数量更多的多样化图像意味着以更长的训练时间为代价获得更高的准确性——如果你不想你的角色形象只有一两种生硬表情的话。
一般来说,我们建议初学者使用 10 张人像作为起步,以减少训练时间,但如果你是老手,可以把人像增加到30-50张。那样你可以训练出一个几乎百分百还原真实角色的嵌入模型。
作为示例,我们给大家展示上面这一组刘天王的数据集,这一组是不是好的数据集呢?其实不完全是,因为14张照片里面大部分是半身像,对面部的特写并不够。
从理论上讲,人类非常擅长识别人脸,而 AI 则不然。我们需要给 AI 尽可能学习准确面部的最佳机会,所以,一半以上的数据集应该是高质量的脸部特写,其余的是上半身和全身照片,以捕捉他们的服装风格、姿势和体型等信息。
幸好,目前训练嵌入对照片的分辨率要求并不很高,大部分嵌入的训练数据标准是512*512,因此,我们可以很容易的使用各种改图工具调整图片,对面部进行特写。我们一般建议60%头像+30%半身像+10%全身像。当然,这并不是硬性要求。
Birme这个在线剪裁工具是目前最好用的一个在线工具,而且它实际上并没有上传照片到网上,不用怕素材泄露,所有剪裁都是基于浏览器脚本实现的,十分推荐大家使用。
裁剪好了图片,然后就是开始创建嵌入概念。
这个Name,就是你要给角色命名,比如我们可以输入andylau,但注意,目前不支持中文。
初始化文本,其实也就是分类,比如andylau是一个男人,那么你可以输入man,也可以输入male。
每个token的向量数:这个一般初学者很难理解,但实际上就是你要给andylau这个概念注入的概念层数,比如andylau,他可以包括 man, chinese,singer,actor。占用了4个单词位,这就是4个vectors。这样一般你可以把这个数值调为比4大的数值容纳更多的概念。
接下来,就是图像预处理,基于webui,这都是自动化操作。
处理完这些,就可以进入真正的训练环节了。
训练环节之中,设置好学习率,批量大小和梯度积累步数,设置好模板,就可以开始训练。
到了这个环节,这里基本上就是深度学习的范畴了。
也正是在这里,怎么训练最有效率?怎么训练才能训练好?这些问题,开始变得玄学起来。
上周谷歌团队公开的调优手册里面写到:在所有类型的机器学习问题中,没有优化器是“最好的”,也就是说,不存在固定的完美的训练参数。
大家有兴趣可以去自行阅读:https://github.com/google-research/tuning_playbook
简要来说,训练批量大小,学习率(超参数)之间有复杂的函数相关性关系,而训练批量对大多数人来说,受限于硬件特别是显存大小。
一般教程里面也会告诉你,素材样本规模应该>=批量大小*梯度积累步数
所以,一个确定性的流程大致如下(参考谷歌调优手册):
上面这段大家可能看懵了,下面举个例子:
比如说我们使用30张刘天王的照片进行训练,按照10G显存规模显卡的训练,批量大小可以有10和6两个选择,对应的梯度积累步数则是3和5。
一般而言,在6*5这个组合下,我们可以设置0.005的默认学习率,跑个600-1000步看看效果。也可以设置递减的学习率,比如 0.2:50,0.1:100,0.05:200,0.005:500。这意思是用0.2学习率先跑50步,然后用0.1学习率跑到100步,以此类推。
但如果批量大小设为1,则每批只训练1张图,那么步数可能需要跑到6000步以上,显然这是比较低效率的。
但不同的批次大小分别对应的最优学习率是未知的。甚至,有可能因为上面提到的数据质量的差异,导致类似规模的训练,也并不能应用同样的参数去学习。
这背后,就完全需要经验积累和有效总结了。
embedding的效果参考:
但是,我们也要指出,embedding的效果有一定的限制,比如上述效果是基于SD1.5模型生成的。
换成PHOTOREAL2.0模型,很明显,人物五官的细微处发生了变化。这是由于主模型切换带来的变化。也就是说,embedding在不同模型之间,并不能100%完美通用,这是由embedding的技术特征决定的。
关于嵌入模型的基础训练教程就写到这里,本文长达3000字,欢迎大家转发点赞,在下一篇我们会讲一讲学习率的选择和实例测试的情况。后面我们会更新其他训练模式的教程和心得。
注:本文内训练生成图片仅为交流技术前沿和探讨教学使用,不作为商业用途。使用深度合成技术存在一定侵权风险,风险后果请自行承担。
联系客服