如果你已经会用DeepFaceLab,那么下面的常规步骤一定是很清楚的了。
下面我准备聊聊这些步骤中的一些注意事项和技巧。
首先目标视频不能太模糊。
当然也不能过于锐利。
像电影风格的画面或者噪点很多的视频,我们在得到目标视频前,最好对视频进行一下降噪处理。
如果面部太模糊识别可能出错,或者位置偏差。
如果面部噪点太多那么训练中容易把噪点当成面部特征。
将目标视频解成图像,
这一步基本不会有什么问题:
3) extract images from video data_dst FULL FPS.bat
执行这个批处理命令后,\DeepFaceLab_NVIDIA\workspace\data_dst.mp4,
就会被解开每一帧成为若干图片,如果你机器好空间大可以选png格式,否则就选jpg吧。
解开的图片在:\DeepFaceLab_NVIDIA\workspace\data_dst\下,命名方式是00001.jpg到xxxxx.jpg。
虽然可以用这句全自动执行:
5) data_dst extract full_face S3FD.bat
但最好用下面这一句,在自动识别完成后,手动去修正未能识别到面部的帧。
如果你的目标视频面部非常清晰,没什么运动模糊的场景,也可能需要手动修正的帧为0。
5) data_dst extract full_face S3FD + manual fix.bat
有时一帧图像里有2个或多个人,我们需要去掉不需要替换的人脸。
有时也会识别错误,把不是人脸的东西识别成人脸,这也需要去掉。
我们可以检查解开后的脸部:
\DeepFaceLab_NVIDIA\workspace\data_dst\aligned\00001_0.jpg到xxxxx_x.jpg
如果出现了:xxxxx_1.jpg 甚至 xxxxx_2.jpg,说明这一帧里面有其他的脸。
我们大概浏览后,就可以直接删掉那些不用的脸。
最终我们确认,只剩一个人脸,没有别的奇怪的东西。
然后我们再检查解开脸部的debug目录:
\DeepFaceLab_NVIDIA\workspace\data_dst\aligned_debug\00001.jpg到xxxxx.jpg
如果可能的话,确认每一帧都是正确的。下面的图就是正确的例子:
有时虽然需要的脸部位置大概正确,但是五官却有些扭曲。
这里没有适合的例子……
假设下图女生的脸部是我们需要的(只是举例,这里找不到神奇女侠识别扭曲的图片),那么这张图就扭曲了。
我们需要找到类似这种我们需要的脸,但是识别扭曲了的debug目录下的图片,删掉debug图片,执行下面的脚本:
5) data_dst extract full_face MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG.bat
通过这个脚本,重新手动来识别一次删掉的图片,保证得到正确识别的脸部。
执行脚本:
5.3) data_dst mask editor.bat
检查每一张脸部遮罩,注意范围,不要有遮挡物,不要包括了头发。
PS:之前对比度太高,后来稍微调节了一下目标视频,但是头发等部位的识别还是有偏差。
有时候真的需要一帧一帧的看。。。
每个步骤我们做完以后,都可以再进行一次。
检查一下我们修正的结果。
正确的脸是最重要的。
源脸可以和目标脸一样,从一段视频中取得。
但最好事先多费点时间,先准备好脸部集合,遵从下面的规则:
准备了足够多的脸部后,我们可以执行:
4.2) data_src sort.bat
对源脸进行排序(左右方向,上下方向,模糊,相似),通过排序,我们去掉那些模糊的,遮挡的不适合的。
源脸和目标脸最大的区别是:源脸不合适直接删掉就OK了,而目标需要的脸每一帧都得识别正确。
我们可以先用Quick96模型试试:
6) train Quick96.bat
因为Quick96不需要任何参数,而且作者有经过预训练,所以出成果的时间非常短。
第一次运行我们需要给模型起一个名字。
如下,可以看到偏离的数字下降真的是非常快:
Running trainer.
[new] No saved models found. Enter a name of a new model : WW
WW
Model first run.
Choose one or several GPU idxs (separated by comma).
[CPU] : CPU
[0] : GeForce GTX 1060 6GB
[0] Which GPU indexes to choose? :
0
Initializing models: 100%|###############################################################| 5/5 [00:03<00:00, 1.40it/s]
Loading samples: 100%|############################################################| 1041/1041 [00:01<00:00, 815.12it/s]
Loading samples: 100%|################################################################| 82/82 [00:00<00:00, 285.19it/s]
...
...
Starting. Press "Enter" to stop training and save model.
Trying to do the first iteration. If an error occurs, reduce the model parameters.
[16:18:28][#000002][0257ms][6.3158][6.6779]
[16:33:23][#003987][0236ms][1.0592][0.4914]
[16:48:23][#007997][0234ms][0.7373][0.2563]
[17:03:23][#011972][0237ms][0.6592][0.2110]
[17:18:23][#015925][0236ms][0.6155][0.1879]
[17:33:23][#019846][0224ms][0.5847][0.1736]
[17:48:23][#023784][0237ms][0.5622][0.1631]
[18:03:23][#027712][0249ms][0.5421][0.1546]
[18:08:19][#029013][0225ms][0.5331][0.1666]
此例中可能也因为片段短吧,两小时不到就这个程度了:
PS:为了保护隐私,源脸我打马赛克了……
当然如果训练半天,发现偏离数值一直下不去,那么可能就得停下来检查一下了。
看看有没有下述的情况,否则是得不到理想的结果的。
如果没有问题,那么Quick96训练个8-24小时,基本效果就出来了。
既然例子里面选的是Quick96,那么就执行进行合成:
7) merge Quick96.bat
当然我们要用交互式合成器:
Running merger.
[y] Use interactive merger? ( y/n ) :
y
Choose one of saved models, or enter a name to create a new model.
[r] : rename
[d] : delete
[0] : WW - latest
:
0
Loading WW_Quick96 model...
Choose one or several GPU idxs (separated by comma).
[CPU] : CPU
[0] : GeForce GTX 1060 6GB
[0] Which GPU indexes to choose? :
0
Initializing models: 100%|###############################################################| 4/4 [00:00<00:00, 8.32it/s]
...
...
Collecting alignments: 100%|##########################################################| 82/82 [00:00<00:00, 425.96it/s]
Computing motion vectors: 100%|####################################################| 158/158 [00:00<00:00, 2597.34it/s]
Running on CPU1.
Running on CPU2.
Running on CPU0.
Running on CPU5.
Running on CPU3.
Running on CPU6.
Running on CPU4.
Running on CPU7.
Running on CPU8.
Running on CPU9.
Running on CPU10.
Running on CPU11.
Running on CPU12.
Running on CPU13.
Running on CPU14.
Running on CPU15.
Merging: 0%| | 0/158 [00:00<?, ?it/s]
MergerConfig 00001.jpg:
Mode: overlay
mask_mode: learned
erode_mask_modifier: 0
blur_mask_modifier: 0
motion_blur_power: 0
output_face_scale: 0
color_transfer_mode: rct
sharpen_mode : None
blursharpen_amount : 0
super_resolution_power: 0
image_denoise_power: 0
bicubic_degrade_power: 0
color_degrade_power: 0
================
如果你需要中文,请看上一篇,关于合成器的翻译(我更喜欢英文原版):
按Tab从帮助界面切换到主界面(预览界面)。
什么参数都没调整,是下面这个不忍直视的样子……
调整了下如下图:
按Shift+?/把这一帧的配置,覆盖后面全部帧。
再按Shift+>处理后续全部的帧。
这里只是个例子,我们需要:
执行脚本将合成后的帧,最终合成视频(包括音频):
8) merged to mp4.bat
如果你需要进一步处理视频。
那么请选个比较大的比特率来保存视频(160Mbps?)。
我们可以等Quick96训练一天再看结果。
但是如果我们通过Quick96已经确认脸部和训练都没有什么问题,而96的分辨率无法满足视频的清晰度,那么也可以停下来,用SAEHD来进行训练。
6) train SAEHD.bat
SAEHD模型有丰富的参数调整,可以取得更好的效果。
但是速度相对比较慢,而且需要自己理解各种参数。
如果你显卡很好比如1080TI级别的,那么不用考虑,提高分辨率吧。
…