用DeepFaceLab做出如假包换的换脸视频已经不是什么新鲜事儿,即便你不会,但是肯定看过很多不错的换脸视频。但是,观察大部分视频你可以发现一个共同点,就是这些视频基本脸部都“很干净”。很干净的意思就是脸上几乎没有遮挡。很少看到那些戴眼镜,头发或手挡住脸的。之所以会这样,是因为软件对于遮挡的处理能力并不是很强,但是也并不是说完全没法处理。今天就来说一个参数FAN-X,可以处理一些简单的遮挡。
FAN-X简介
Fan-x是DeepFaceLab转换(convert)环节的一个参数,名字是:Mask mode。这个参数于20190321版本加入,仅针对SAE,DF等全脸模型。后来有经过多次修改,直到827版本,H128等半脸模型也可以使用这个参数了。
FAN-X使用
下面我以907版的H128为例演示一下遮挡的具体使用过程。
我这里已经准备好了一个高迭代的模型,并且把之前训练模型之前的步骤全部做了一遍。data_dst中特地挑选了几张有遮挡的图片,这些图片来自官方的demo,大家也可以很容易的跟着操作。
万事俱备后,点击7) convert H128.bat 开始转换。转换启动后启用动态交互,然后按Tab键盘进入预览窗口。
默认情况下,可以很清楚的看到,希亚·拉博夫的手指被托尼的脸给覆盖了。这显然不是我们要的结果。我们希望的是手指能露出来,但是脸是托尼的。
此时,只需要按键盘上的X两次,将遮罩模式(Mask mode)切换成 Fan-dst
Magic ….可以非常清楚的看到,手指出来了,脸往后贴了。这可不是我PS的哦~~~~
稍微调整一下其他参数后最终效果如上。同理,其他遮挡也可以这样处理。
单纯从这个例子来说,遮挡处理已经非常不错,但是实际应用可能没这么理想,因为Fan模式的效果直接受Fan模型的影响,因为fan模型中已经训练了官方demo中的遮挡,所以转换的时候直接使用就效果很好。而作者提供的Fan模型训练的数据非常有限,所以能力也比较有限,如果真的要处理所有奇奇怪怪的遮挡,就必须自己训练Fan。这个就不展开了,对于小白来说先学会怎么用,然后再去考虑怎么优化。
FAN-X背后的原理。
知其然而不知其所以然总是让人很难受,尤其是作为一个程序员。下面我就来简单说说这背后的原理,这一部分内容不适合小白,深度学习方向的程序员可以一战,发际线越高战斗力越强O(∩_∩)O。
TernausNet: U-Net with VGG11 Encoder Pre-Trained on ImageNet for Image Segmentation
大概意思是,这是一个使用Vgg11编码器的U-NET网络,使用ImageNet进行了预训练,主要应用于图像分割。至于什么是Vgg11, 什么是U-NET,什么是ImageNet,