本文介绍使用DeepFaceLab这款开源产品,它基于python和tensorflow。
这里要说下,使用DeepFaceLab最好需要足够好的电脑配置,因为AI深度训练的过程基于cpu以及gpu,显卡性能越好意味着其速度越快效果越好。但这不是绝对,如果有足够的耐心也是能够合成出一定效果的,一切都只是娱乐嘛。(ps:我写本文时用到的是win7电脑,非高配置,这不重要)
安装完毕后,你会在DeepFaceLab_NVIDIA\下看到类似下图的文件:
然后双击2)extractimagesfromvideodata_src.bat,此命令将data_src视频每一帧提取为图片,回车,再回车默认选择图片格式为png。
等待命令行窗口运行完毕便可关掉,以上是deepfacelab使用ffmpeg提取帧。然后,在workplace/data_src文件夹下就会看到data_src.mp4的每一帧图片,如图:
执行4)data_srcfacesetextract.bat,这意味着将从data_src下的每一张图片里获取人脸。操作如下:
回车,Facetype选择wf(wf=整个脸,基于情况而定,本教程基于默认选择此),Maxnumberoffacesfromimage默认回车键,提取最大的数量。ImageSize是图片大小,默认回车512,Jpegquality是图片质量,越高越好,默认回车90。Writedebugimagestoaligned_debug这个选项默认回车,在data_src文件下我们可以不需要,但在操作data_dst时就需要了(程序会自动)。然后等待进程的执行,依据电脑配置,配置越高速度越快。
完成后,在data_src/aligned文件夹下会看到全部提取到的人脸,对就是沈腾的大头贴。
同样,我们在这里删除掉模糊的照片。其实前面在data_src/下删除了不合规图片,现在应该没有模糊的大头贴了。
这是第一帧的图片,我们只想用沈腾的脸替换掉吴孟达老师的脸,因此用鼠标抓取。轻轻移动鼠标,程序会根据当前区域而绘制轮廓图,可以滚动滚轴放大缩小,左键锁定右键解锁,按回车确定,意味着每一张图片都需要这样,不过可以连续按住回车,当脸部大幅度变动时再重新调整。
最后到了关键一步了,就是训练模型,利用AI算法不断训练。
Deepfacelab提供了两种训练方式:quick96和SAEHD。如何选择?若你的显卡显存低于6gb,建议使用前者,而saehd是更高清晰度的模型,用于具有至少6GB显存的GPU。两种模型都可以产生良好的效果,但显然SAEHD功能更强大,因此面向非新手。为什么要训练模型?因为我们要给AI学习的这些素材,AI通过算法识别A和B两者的脸部,然后根据前者脸部的特征学会面部表情,以及如何换向另一个的脸。训练就是AI学习两个脸部的过程。
本文选择使用quick96。执行6)trainQuick96.bat,第一次训练时会让你命名此模型的名字,然后就会开始训练。
当你觉得不需要再训练时,可以做最后一步了。执行7)mergeQuick96.bat,开始调整合并你的模型。提示Useinteractivemerger时按y进入交互选项界面,如图:
下图是执行Meger的进度,当交互界面的选项更新时,命令窗口会更新选项信息。若在交互界面按了按钮卡住不动时,通常是发生错误了,可在命令窗口看到python的错误日志(遇到此情况,则需要关闭重来)。
当前操作执行完毕后,在data_dst下多出了两个文件夹merged以及merged_mask,前者是用于合成最终视频的已换脸的图片,后者是遮罩图。好的,我们执行本文教程的最后一步8)mergedtomp4.bat,意味着将诞生最终的换脸视频,进程执行完毕后,在wprkspace目录下会看到result.mp4这个文件,如果你设置得不太好以及训练太短了,效果都会不尽人意。好,来欣赏最终的换脸视频吧。