导言
训练时有许多参数,对不懂机器学习的萌新来说简直就是天书
本篇教程就带大家揭开训练时各参数的含义与效果,同时给出建议数值
我尽量用通俗易懂的语言来解释每一条参数的作用,不需要机器学习基础也能看懂。本文主讲SAEHD模型的训练脚本,QUICK96类似,不重复展开
下面以2021年0104英文版为案例讲解,附带中文翻译。
可能跟各汉化版名称说法有出入,请自行对照阅读
0. 什么是参数?
参数是控制模型结构与模型训练方法的一些值
所有参数中,有些参数只在第一次创建模型时可调整,一旦确定后不可更改。有些参数可以在后续训练中随时调整。
就好比造大厦,一旦决定造几层楼,每层有几间房间,就不可再次变更。而清洁工、保安可以随时雇佣或开除
1. 怎么输入/调节参数?
第一次运行时,会让你输入各个参数值,输入方法如下:
[0] Which GPU indexes to choose? :请输入GPU序号
问句前的[0]表示你直接按回车后,会使用的默认值你可以自行输入值,值的可选项通常在问句中会给出
如果不了解这个选项的作用,输入英文问号?按回车,会给出详细说明
当模型创建后,第N次执行训练脚本时,选择好模型和GPU后,短暂停顿后会有一行提示“Press enter in 2 seconds to override model settings”“请在2秒内按enter回车以重新修改模型参数设置”就是字面意思。如果2秒内没按enter,就会沿用上一次训练时的参数进行训练
接下来就解释各参数的作用,带*的一旦创建不可更改
1. 选择/创建模型
Choose one of saved models, or enter a name to create a new model.选择一个已有的模型,或输入名字创建新模型
[r] : rename
[d] : delete
[0] : liaef-ud512 – latest
:介绍:如果model文件夹内已经有模型,在这里会显示出来,如上图的[0] : liaef-ud512 – latest如果沿用已存在的模型,输入模型前的编号。如果要新建模型,直接输入名字后按回车。
2. 选择训练用GPU
Choose one or several GPU idxs (separated by comma).选择一个或多个GPU序号,用英文逗号隔开
[CPU] : CPU
[0] : GeForce RTX 3090
[0] Which GPU indexes to choose? :请输入GPU序号
介绍:第一次运行时首先会出现上面这段文字。要求你输入用于训练模型的GPU序号。可支持的序号已经给你列出来了,输入CPU就使用CPU训练,输入0就使用你的第一张显卡训练。土豪有多张显卡的话输入0,1,2,3…..
问句前面的[0]代表默认值,即直接按回车会采用的值
推荐值:推荐只用编号为0的GPU训练。CPU速度太慢,直接放弃。有多张GPU的话,卡间通讯会消耗大量时间,如无必要不推荐多卡同时训练。
3. 选择自动备份时间
[0] Autobackup every N hour每N小时备份 ( 0..24 ?:help ) :
介绍:自动备份会每隔N小时复制一份模型文件,以免模型崩溃后没法回退。0表示不自动备份
推荐值:6-12
3. 记录保存预览图
[n] Write preview history ( y/n ?:help ) :
介绍:每次迭代会保存一张当前训练效果图,方便你查看模型进步效果,来判断是否已经训练到顶峰了。图片保存在model内一个以history结尾的文件夹中
推荐值:n 一般人看预览窗口的图就OK了。这个功能给做专业对比测试的用
4. 指定预览图
[n] Choose image for the preview history ( y/n ) :
介绍:指定一张图片作为保存的历史预览图。选n就随机选一张
推荐值:n
5. 目标迭代次数
[0] Target iteration目标迭代数 :
介绍:模型训练迭代次数,到了这个次数就停止训练。选0就一直会训练下去,直到你手动停止
推荐值:0
6. 随机翻转人脸
[y] Flip faces randomly ( y/n ?:help ) :
介绍:图片随机左右翻转,以增多数据。src图不足时可以开,但更好的方式是增加数据。如果遇到src人脸左右不对称,比如一边有痣,一边没痣,那么开启后会导致练出来的人脸两边都会有若隐若现的痣。不推荐开,增加数据集是王道
推荐值:n
7.批尺寸大小
[2] Batch_size ( ?:help ) : ?
介绍:每次迭代程序会随机选batchsize张图来学习,数量越大模型每次进步的方向越准,单次迭代时间也越久,需要的显存也相应成倍增加
推荐值:4-16 通常显存不足报错后,把这个值改低就好
8. 模型分辨率*
[512] Resolution ( 64-640 ?:help ) : ?
介绍:模型生成人脸的分辨率。注意,这个只是尺寸大,并不是更清晰。大尺寸的结果就是训练速度更慢,通常256足够用了。一般人连256都训练不到高清,完全没必要用256以上的分辨率模型。
推荐值:128-256,要是16的倍数
9. 选择人脸类型*
[wf] Face type人脸类型 ( h/mf/f/wf/head ?:help ) :
介绍:训练用的人脸类型。什么是人脸类型呢,就是从原图中截取的人脸框大小。h是half face,mf是mid-half-face,f是full-face,wf是whole-face,head是最大的带整个头的人脸。光说没用,上图看对比
f/mf/h的对比如下:
wf的范围如下
人脸越大,最后合成环节的可调节余地越大。但相同模型分辨率下,有效面积就越小。比如256尺寸的wf,有效的人脸范围大概只有二分之一大。但在显存越来越大的今天,不用担心。
h是3年前deepfake刚问世时的人脸类型,当年显存小啊,只能将就将就。
推荐值:推荐用wf,已经把整个脸都包含进了,而且能兼容f人脸素材。 h和mf太小,在后期合成时没调整余地。head过大,没必要浪费显存。
许多人总问head模型,真没必要。我理解你们是觉得head可以把脸型也生成出来,这个wf就行,但实际上合成时用的还是dst的人脸轮廓,你训练阶段能生成没卵用。脸型问题你就认为无解吧,只能靠专业后期调整,别再向我追问head模型了。
10. 模型的架构*
[liae-ud] AE architecture ( ?:help ) : ?df keeps more identity-preserved face.liae can fix overly different face shapes.-u increased likeness of the face.-d (experimental) doubling the resolution using the same computation cost.Examples: df, liae, df-d, df-ud, liae-ud, …
介绍:模型的核心架构类型。有DF和LIAE两种架构。内容较多,具体区别细节以后单独开教程。这里你只要记住结论DF五官结构保留的更像,LIAE光影处理的更好。
除了核心架构外,还有几个附带参数可加,-u增加人脸相似度,-d在相同显存占用量下,牺牲速度换取分辨率.
核心架构和附带参数可组合使用,如 df, liae, df-d, df-ud, liae-ud
推荐值:LIAE系列
11. 模型中间瓶颈层的宽度
[256] AutoEncoder dimensions ( 32-1024 ?:help ) :
介绍:模型最中间一层神经元的数量。可以理解为越大这个模型能力越强,但要求的显存也越大。就像大脑,人脑比猪脑神经元更多,能力也越强,但需要的头骨容量也越大。
推荐值:256及以上
12. 模型编码层的宽度
[64] Encoder dimensions ( 16-256 ?:help ) :
介绍:模型前半部分神经元的数量。可以理解为越大这个模型能力越强,但要求的显存也越大。就像大脑,人脑比猪脑神经元更多,能力也越强,但需要的头骨容量也越大。
推荐值:64及以上
13. 模型解码层的宽度
[64] Encoder dimensions ( 16-256 ?:help ) :
介绍:模型后半部分神经元的数量。可以理解为越大这个模型能力越强,但要求的显存也越大。就像大脑,人脑比猪脑神经元更多,能力也越强,但需要的头骨容量也越大。
推荐值:64及以上
14. 模型解码器遮罩层宽度
[16] Decoder mask dimensions ( 16-256 ?:help ) : ?Typical mask dimensions = decoder dimensions / 3. If you manually cut out obstacles from the dst mask, you can increase this parameter to achieve better quality.
介绍:模型中有个分支是学习遮罩,次此参数控制此部分的宽度。
推荐值:三分之一解码层宽度
15. 只训练遮罩部分
[n] Masked training ( y/n ?:help ) : ?This option is available only for whole_face or head type. Masked training clips training area to full_face mask or XSeg mask, thus network will train the faces properly.
介绍:只有人脸类型是wf或head时可选。开启后模型只关注于被遮罩划分出来的人脸,不学习遮罩外的无关区域。这个遮罩需要提前用Xseg模型应用得到。不然默认使用人脸关键点围合而成的遮罩,会把头发等其他区域给囊括进来。
推荐值:y
16. 眼部嘴部优先训练
[n] Eyes and mouth priority ( y/n ?:help ) :
介绍:眼神和嘴巴口型是最难训练的区域,开启这个参数可以让模型重点优化眼部和嘴部。但如果你没有闭眼素材和张嘴素材,开这个参数也没用
推荐值:n
17. 均匀化样本中各角度的素材
[n] Uniform yaw distribution of samples ( y/n ?:help ) : ?Helps to fix blurry side faces due to small amount of them in the faceset.
介绍:一般样本中正脸图片居多,俯仰脸侧脸数量较少,这会导致纯随机选取样本时,这些大角度素材被选中训练的概率较小,模型对它们的学习不足。开启此参数后,会根据人脸角度来挑选素材,让大角度人脸样本得到较好的训练
推荐值:n 看你的目标视频,如果有很多大角度的话,建议开启
18. 记录保存预览图
[n] Write preview history ( y/n ?:help ) :
介绍:每次迭代会保存一张当前训练效果图,方便你查看模型进步效果,来判断是否已经训练到顶峰了。图片保存在model内一个以history结尾的文件夹中
推荐值:n 一般人看预览窗口的图就OK了。这个功能给做专业对比测试的用
19. 把模型和优化器放到GPU中使用
[y] Place models and optimizer on GPU ( y/n ?:help ) : ?
介绍:开启后模型权重会放在GPU上使用,减少GPU和内存通信,从而提高训练速度。显存足够就开启,显存不够就关闭
推荐值:y
20. 使用AdaBelief优化器
[y] Use AdaBelief optimizer? ( y/n ?:help ) : ?
介绍:使用最新的adabelief优化器作为训练用的迭代方法。模型收敛到最优状态的速度更快,效果更好。但会占用更多显存
推荐值:y
21. 使用学习率衰减
[n] Use learning rate dropout ( n/y/cpu ?:help ) :
介绍:学习率可以简单理解每次模型进化的步子大小。步子大了容易扯着蛋,走上歧途。步子小了可以更精准走到正确的地点,但速度就慢。
推荐值:前期不开,等你感觉画面很久没进步时开启。
22. 是否扭曲样本
[y] Enable random warp of samples ( y/n ?:help ) :
介绍:开扭曲后,给模型增大学习难度,让模型得到更高难度的锻炼,学成后就更牛逼。不开的话容易src和dst互相影响,让生成的src像dst。
推荐值:y 前期开,后期可关闭
23. GAN(生成对抗学习)的强度
[0.0] GAN power ( 0.0 .. 1.0 ?:help ) :
介绍:机器学习中有个很牛逼的算法叫GAN,能生成细节更丰富的图,眼睫毛都根根分明。但特别耗显存,高配玩家建议开启。开启后模型崩溃的概率会增大,一定要做好自动备份。
推荐值:低配0 高配0.1
24. GAN的感知域尺寸大小*
[24] GAN patch size ( 3-640 ?:help ) :
介绍:GAN每次去辨别的区域大小,越大效果越好,显存也占用越多。
推荐值:分辨率/8
25. GAN的模型宽度*
[0.0] GAN dimensions(4-512 ?:help):
介绍:类似模型编码层宽度,越大效果越好,显存也占用越多。
推荐值:16 显存大可酌情增加
26. 脸部明暗色彩学习强度
[0.0] Face style power ( 0.0..100.0 ?:help ) : ?
介绍:让生成的人脸和原本的人脸在明暗色彩上更相似。
推荐值:初期不开,后期从0.001开始慢慢增加,不要开太大,0.01差不多了,这个很容易崩
27. 背景明暗色彩学习强度
[0.0] Background style power ( 0.0..100.0 ?:help ) : ?
介绍:让生成的背景和原本的背景在明暗色彩上更相似。学背景干嘛,后面都是要扣掉的,没必要,不用开
推荐值:0
28. 对src做变色处理
[none] Color transfer for src faceset ( none/rct/lct/mkl/idt/sot ?:help ) :
介绍:src素材通常光影不够丰富,开启这个参数后,可以每次对src素材做随机颜色变化,人为营造出各种光影色彩
推荐值:rct或lct
29. 使用梯度剪裁
[n] Enable gradient clipping ( y/n ?:help ) :
介绍:梯度是什么,可以理解为每次模型更新的变化剧烈程度。开启此参数后,会把模型剧烈的变化给限制住,能极大避免模型崩溃。不然很可能遇到一次很奇怪的数据,导致模型瞬间爆炸,崩成一片纯色
推荐值:y 强烈建议开着,不会多消耗显存
30. 使用预训练模式
[n] Enable pretraining mode ( y/n ?:help ) :
介绍:一体包软件在 _internal\pretrain_CelebA\faceset.pak 放了一份综合名人人脸数据,人种、光影、角度很丰富,开启此参数后,src和dst就会使用这份数据做为训练。让模型可以先做个通识教育。为你自己的特定数据学习打下良好基础。
推荐值:n 我个人不推荐用这种方式做预训练。个人推荐你把杂七杂八的图直接放到src的aligned和dst的aligned文件夹中训练就行,效果一模一样,还方便随时增删数据。
最后给一套通用训练方式
强烈建议萌新用别人已经训练过的模型作为开始,可以节省大量时间
先开这组参数训练10-60W
face type : WF
random_flip : off
adabelief : on
eyes_mouth_prio : on
ct_mode: lct .
再开这个训练10-30W
learning rate drop:y
再关闭随机扭曲训练10-30W
random warp:n
最后开GAN训练10-30W
GAN poewer: 0.1
暂无评论内容