LORA金字塔噪声ai绘画训练详解

首先呢,感谢一下星空秋叶还有五月lax,以及整个ai社群的好友们(包括不限于:镜中人 沅月弯刀 琳果),帮助我解答了不少疑问。否则也不会有这篇。
同时对于青龙圣者,也感谢他第一个写了国内这边的金字塔相关的教程,让我们知道了这个么东西。
首先很抱歉,这个内容非常多,因为它是以我能想象到的目前刚好具备能掌握ai绘画金字塔噪声基础知识,但又不具备实操经验或者训练中带有疑问的人准备的,所以我已经尽可能的把所有可能产生疑问的内容放了进去。
同时,我也自诩不是什么专业训练专家,只是有训练经验,并且成果在社区内尚受到认可。

如果各位同学有疑问,有更好的训练方法,也欢迎交流,只是我也不是时刻在b站,难以及时回复。
训练也不是谁都有条件,能成功的,对于那些始终努力最后还是失败的朋友,我只能说“等待并且心怀期望吧。”
毕竟ai学习知识日新月异,很快n卡老黄也打算亲自下场,训练可能又会变更。
视频内容也异常枯燥,90%都在讲参数调节和概念整理。因为没有兴趣或者缺乏目标被劝退也是很正常的。
发这个教程甚至主要是为了自己那鱼一样的记忆,免得每次出了小问题就去缠着lax和群友们问,然后过15秒就忘记自己问了什么。没做视频也是因为内容写的太多了。
一、训练的前期门槛:
在ai训练学习之前,我想说的是,不是所有人都适合训练。
AI训练不像其他学习,不存在零成本一说。当然那些“零成本”学绘画的也是实打实的骗子。
要么付出电费,要么去租云服务器,这都时明显能看到的资金投入,更重要的是比那更贵的时间成本投入其中。
我们的好群友某人曾经这样说过:“ai训练出问题,要么人不行,要么机器不行。”

虽然我记不清楚是谁了,但应该不是乔斯达说的,毕竟他亲口说:“我没说过。”
但这句话是一句真理。
从人的角度上讲:
第一条:心里兴趣上,你是否愿意学。
如果您对ai学习持抵制态度,如果您和《东郭先生与禽兽》里面那个狼一样,用着ai骂ai。我劝你直接点右上角,我不知道你浪费时间特意点进来是想干嘛,但我觉得你的智商还是能找到右上角的关闭按钮或者主页按钮退出去的。
第二条:你是否有已经具备了相关计算机知识的基础和一定的英语知识,理解什么是显存,什么是内存,什么是CUDA核心流处理器,什么是虚拟内存,如何使用鼠标和键盘。如果你没有这些知识,很遗憾你没有具备学习这项技术的最基本条件,您可以在将来的学习中补全相关知识,等到您已经完成了相关学习,再来学习这份知识。
第三条,艺术相关知识,这一条比较特殊,您可以不具备这条知识,但是美术相关知识的掌握决定了您ai绘画学习研究的“上限”缺乏相关知识,会使您在样本筛选和处理相关能力方面捉襟见肘。
第四条,也是最重要的一条。您是否具备不怕失败不怕挫折,愿意不耻下问求教的精神,他决定了你是否会中途放弃学习。
从机器的角度上讲,您是否拥有一台电脑。
您的电脑的配置是什么样的?
您是否掌握了在线训练,云电脑使用的基本知识。
对于训练,这里推荐使用电脑的显卡显存至少要在7gb以上,cuda核心最好在3000以上,显卡支持半精度功能。
直白点说就是(包括)3060以上级别的显卡。当然像是1060之类的显卡不是说就不能用,只是很多优化器和性能方面会出问题。
然后因为砍了带宽和cuda,40系列除了90都是……(发不出声音。)
之前新手推荐文章里也写了各种显卡的选择,可以去参考一下。
二、训练环境和软件安装:
首先是环境 安装python(自己去搜一下就有安装包)注意勾选add python.exe to path
最好也装下git
关于安装包:这里推荐使用秋叶最新发布的lora训练包,星空(b站:独立研究员-星空 记得关注一下)的我也用过,肯定能训练,但是我不习惯,而且既然用金字塔噪声训练,肯定要用这个我更习惯的。
首先秋葉aaaki(记得关注一下,他的动态也很有用。)
下载地址在他的视频里请去看人家的原视频:
https://www.bilibili.com/video/BV1AL411q7Ub
下载后解压到你准备进行训练的盘符(不要有任何中文路径名)
在网络畅通的情况下,这里并不会解决您的网络问题,请自行解决。如果有装360全家桶的记得要么关闭要么卸载了。
找到 强制更新.bat,
更新成功后,找到install.ps1,右键使用power shell运行,直到Install completed
直到这一步,你的基本训练环境就算准备的差不多了。
三、输入数据部分:
输入数据,包含我们使用的底模,图片素材,还有tag(Prompt)
要进行训练,第一步就是对于底模的挑选,为了求快,求稳,可能最好呃选择就不是官模,而是专门训练过的更贴合你需要画风的模型。
而图片素材的挑选,正是选对画风。
有人误以为画风不就是一股脑的把一个作家的作品全塞进去么?
错,大错特错。
画风的分类其实逃不出所谓的“绘画三角形”
晚三千在知乎上的文章这样写到:绘画就是三维物体在二维平面上投影出的线条和色块。
虽然不完全对,但是起码是一个比较让人好理解的解释。
我已经忘记原本的绘画三角形是由谁提出的了。
甚至还忘记了三角的三个极限分别对应了什么。
但我可以毫不犹豫的说,只要固定后形成了最终作品的二次平面艺术,就逃不出这个平面直角坐标系一样的残酷理科分类。
我个人的归类分别是:
(1)颜色变化层次
(2)写实度与符号化(又称变形度)
(3)立体化程度
因为这种分类更符合ai绘画的扩散模型理解。
简单说,不管怎么说,所有风格的极致其实都已经被人类所发现,人类也无法超越这个极限去发现不存在于这个三角形所规定之外的存在。
某个人(或者说是一群人),在某个时期的绘画风格,其实不过是这个平面直角坐标系里的一个范围锚点罢了。
而且对于训练素材的准备恰恰是在这个这里找对锚点选择处训练时所有风格相近的图片素材来训练对应画风。
新人对于ai绘画素材选择最容易犯的一个误区。
错误点一,就是把同一画家的线稿和彩稿归类于同一ai训练画风。
同一时期,同一画家,同一角色,同一变形程度的线稿和彩稿,其实在ai训练中是两种“画风”,正确的来讲是两个概念。
因为扩散模型中,线稿的像素点中的变化规律严重少于彩稿。这也是为什么我说他们根本不一样。
错误点二,误以为不同作家的绘画素材不宜归类为同一画风。
不好意思,画风和作家不绑定。不然为什么印象派是一群人不是一个人。
不然为什么又有所谓的90s动画片风格?
所以进行画风训练时,我们推荐把风格相似的作家作品放到一起训练。
甚至可以把你自己的ai“伪作”也放进去。
错误点三,ai作品不适合训练ai。
正好相反,ai作品比人类作品更适合训练ai。
因为ai作品本来就包含的扩散模型的规律信息,对于自身是强诱导,唯一的问题是对于不会修正ai作品的人会导致更严重的扭曲变形或者很难得到最佳训练素材。这也是为什么,我说美术造诣决定了你ai训练的上限。
虽然自动裁剪很方便,但是手动修正和调整,始终是最佳的保留绘画元素和信息内容的手段。
另外,简单粗暴来讲,图片主体分辨率越大,素材效果越好,绘画清晰度也就越好。
用来训练文本编码器的tag(Prompt)部分就更要求你的美术造诣了。
因为除了归纳总结画面的主要内容外,还有更重要的视角和光照效果:
视角(或称拍摄镜头)类包括且不限于以下:
Cowboy Shot 七分身镜头
from behind 背后镜头
from side 侧面镜头
from above 从上向下看的俯瞰镜头
from below 低身位镜头 从下往上看。
upper body 上身限定镜头
lower body 下身限定
close-up 近距离特写
光照效果:
rim light ,edge light 轮廓光
raking light 侧光
backlighting 背光
top light 顶光
shadow on body, 阴影遮蔽
各种人体姿势,白背景等等。
虽然在目前控制网的加持下,光照已经相对的得到了补偿,可以更好的利用控制网绘制,但输入素材时的镜头方位和光照其实对于素材影响依旧很重要。
对于画风训练,tag的标注尽量以泛化不至于导致元素污染的程度比较好,类似1girl,1boy之类的大范围标签是没有关系的,但是角色名之类的内容,应尽量减少。
与角色lora相反,不需要为了更换衣服或者保持衣服特性而刻意去标注dress,t-shirt,之类。当然标注也就标注了,毕竟现在大家都用控制网了,污染也能通过降低权重和调整控制网解决。
四,参数部分。
1.基本参数方面
秋葉aaaki训练包其实提供了参数解读。
首先找到lora-scripts目录下的run_gui.ps1文件。
右键使用power shell运行,网页就会自动弹出。
在整个界面的左边有新手和专家两个选项。
而在这两个选项之下,还有个参数详解。
推荐可以认真的看一看。
而在训练时要使用金字塔噪声,那么就必须选择专家选项。
训练模型中,参数详解已经明确说明了,你选择的底模如果追求泛用性就最好使用官模。
当然我肯定是根据自己的需求选更贴近训练目标的模型。
注意下默认路径中的模型路径指的是程序下的目录文件,如果你本身目录文件建立时就不慎搞成了中文名,各种出错就不可避免了。请一定要用英文名。模型名字要改成你使用的底模的名字。

数据集设置
训练数据集路径
默认为./train/aki
这里我们需要注意./train/对应的是你程序下的目录文件。
你的训练集文件应该是一个训练集的总名 例如我要训练choco的画风 那么就直接建立choco文件夹,然后在在这一个文件夹下添加概念。
因为只有一个画风作为概念,所以我们就只输入6_choco作为概念。其中6是我设定的重复次数。就算每张图被重复学习的次数。
同时把所有训练用的图片和包含对应tag的txt文件放置在文件夹下。
首先:数据集设置方面,为了提高生成图片的清晰度效果。我选择了主要为768x1024的分辨率。同时开启了arb 桶。如果你的显卡性能更好,你也可以尝试1024x1024的分辨率效果。
网络维度dim,64 alpha 32
保存设置方面,我只调整了模型保存名称
最大训练 epoch(轮数)我选择了默认的10,为了放置其他数据产生干扰项没有开启梯度累加。
训练网络模块我选择了networks.lora.
2.噪声设置方面
多分辨率(金字塔)噪声迭代次数
multires_noise_iterations = 6 用了最基础数值
多分辨率(金字塔)衰减率 也用了最小推荐数值
multires_noise_discount = 0.3
在输入完这些。同时保证noise_offset后面的赋值留空(就是默认不去动)
金字塔噪声就会被开启了。
那么在开启金字塔噪声后,其他参数该如何调节呢?
这里我提供一个参考方法来推算属于你自己的步数。在实际操作中,首先你需要完成一次成功的训练才能倒推系数。
因为:总学习步数 = (图片数量 * 重复次数 * epoch)/ 批次大小
画风训练通常是2500,学习率更大可以适当减少步数。
例如我如果有200张素材图片输入,重复次数选6, epoch使用了10,批次大小只选择1,那么最后其实训练步数在epoch10已经达到了足足12000步,远远高于了需求的基本步数。
然而,实际测试中,我的模型只是刚刚恰好没过拟合。
而模型中我使用的金字塔噪声衰减率仅仅为0.3
根据秋叶的提示,更小的值需要更多步数。
可以建立一个简单的对应的函数,也就是衰减率A,相关系数x,推荐步数2500和实际步数b.
衰减率A和实际步数b成反比关系。
A=2500x/b
此时的相关系数x=1.44
虽然正确的数字公式应该不是这样,但是这个对我也够用了。
也可以推知0.8噪声衰减率下实际步数仅仅需要4,500当然,这里仅仅时我的推算,你必须通过尝试找到最适合你的参数。
失败了也完全没有关系,毕竟”必可活用于下次。“

其他方面
clip skip参数
其实并没单纯的二次元模型选2,写实模型选1,而是根据你底模的clip skip修复判定的,如果你的模型在clip 1进行绘画后的效果更贴近于你训练目标的效果,那么就要选1,如果是2更贴近就要选2。
关于AdaFactor优化器问题,lax推荐了这个优化器。但是我只要把它和金字塔噪声同时开启就报错,所以我觉得可能这个优化器和硬件有关。
用AdaFactor的时候,batch_size最好大一些,因为本身低秩分解会带来误差,而如果batch_size过小,那么梯度估算本身也带来较大的误差。
学习率的选择。
简单的说,成功的那次,我用的是默认的学习率,但是后面我也尝试了不同的学习率。
结果得到的结论是:默认学习率在批次大小为1的情况下依旧有些容易欠拟合。
而当我把它加大到2e-4之后,效果有了明显的好转。
之所以选择2e-4,也是因为看到了验证率达到75%的一篇文章,别人劳动我抄结果直接享受胜利果实岂不美哉。对于一幅画75%效果已经相当好了。
当然你也可以学青龙那样直接把学习率拉到5e-4来尝试,毕竟每个人都有自己不同的直观感觉之类的。
如果喜欢更直观的自己感受每次训练时候学习率带来的波动,秋叶的训练包还贴心的准备了TensorBoard。
只要在左侧勾选出你的对应日期就可以直观的看到学习率曲线了。

另外,我没有更改batch size和梯度检查点。
就像我之前在【2.噪声设置方面】中讲过的一样,牵一发动全身,一旦你真的为了节省时间去调整训练批次,那你所有的参数都要重新调整。
至于梯度检查点,其实是为了显卡在有限的性能下能更好的进行大形训练的时间换空间的方法。
不过,我本身按照上述参数已经可以正常训练,且gpu占用仅仅为6.6gb左右(峰值有时能达到7gb左右)
自然也就不需要去换那点空间了。
另外作为结果方面。
为了进一步验证训练结果参数的影响,我拉上了lax五月。
进行了对比实验。
我使用3060显卡,没有开启金字塔噪声,AdaFactor优化器采取lycoris的loha训练。
而五月使用更好的显卡则用开启金字塔噪声,AdaFactor优化器采取lycoris的loha训练。
在输入数据一致的情况下,二者产生的结果差异几乎微乎其微。
后来我也独自进行了几次训练。
从经验角度上讲,如果训练输入材料更接近平涂画风,明暗差距不明显,那么金字塔噪声的优势就越弱。
但是金子塔噪声确实在训练的直观效果上提升了拟合优度。即使不采用lycoris训练。效果也依旧不错。
因为从之前得到的信息反馈看。lycoris系列普遍出现有些人不会用,用不好的问题。
同时lycoris目前也有天生的弱项,如果我们后期要融合模型,lora显然要优势比lycoris大。
至于分层训练,很多人都提供了相关参考,我只能说如果是画风学习,分层肯定会损失原本画风的一些细节刻画。
所以我索性就不使用分层。
常见的报错问题如可以参考以下两篇文章:
https://www.bilibili.com/read/cv22794864
https://www.bilibili.com/read/cv22909933/
其中包括且不限于:
1 CUDA out of memory 系列
显卡性能不足以满足现有训练参数需求,或者是配置显卡时产生错误。
2 No data found. Please verify arguments
文件目录配置错误,中文路径名导致或者文件结构出错。
3远程主机强迫关闭了一个现有的连接。
网络链接需要辅助来保证网络畅通。
当然,你也可以直接到社区里问。
只要你不是目前被社区抵制的某组织成员。
最后,祝大家身体健康,都能利用训练技术画出自己喜欢的ai作品。