DeepFake的安装和测试(⼆)
接上⽂,在
中,我们测试了deepfake的extraction部分,抽取了图⽚的部分⼈脸。现在我们研究train部分。train部分顾名思义,是训练⼀个模型,⽤以更换source和target的脸,⽐如很多营销号⿎吹的杨幂换朱茵或者18禁换脸视频的哪些操作。
Train部分概览
朱茵DeepFake的基本神经⽹络模型是⽐较经典的端到端模型,包含⼀个encoder和⼀个decoder。从作者给出的教程来看,encoder主要⽤于编码输⼊的⼈脸。decoder则是将encoder的脸部编码还原为最接近原图的脸部。⾮常经典的cv⽅法。优化⽅法也很传统,计算loss并简单的更新权重。
上述NN的⽬的是⽣成⼀个与原图⾮常相似的图⽚,其⽬的⾃然是希望换脸之后⽣成的脸部更加⾃然。⽽换脸操作也依赖于该模型,其做法为共享encoder。
如图所⽰,作者将source face和target face视为两个数据集,但这两个数据集A B使⽤同⼀个encoder进⾏编码(也就是将两种图⽚在同⼀向量空间表⽰),然后输⼊不同的decoder中,单个decoder只负责⽣成单⼀的图⽚种类,在训练过程中,数据A由deocoderA解码⽣成A脸,但在换脸中则由decoderB⽣成B脸。也是⾮常常规和经典的cv操作。回到软件
参数设定
⾸先是⼀些global参数的设定。在GUI软件中设置这些参数相当简单,⾸先进⼊Settings>Configure Train Plugins:
可以看到所有的global参数
分块解释这些参数含义:
Global
Face:输⼊模型的脸部选项
  Coverage:裁剪率。也就是裁剪输⼊脸部的多少进⼊训练。具体的裁剪质量如下所⽰:
Mask:⽤以选择训练过程中mask的⽣成。
  Mask的任务是通过遮挡告诉模型输⼊的脸部哪部分是我们关注的需要swap的部分,哪部分是⽆关紧
要的。教程给出了⼀个例⼦:
  上述例⼦中,红⾊部分是算法给出的不重要的部分,也即是“masked out”部分,⽽中间没有红⾊覆盖的部分称为“masked in”,是我们关注的重要部分。  注意:如果使⽤mask,则需要在extraction时给出mask的相关选项并写⼊alignment⽂件中。
initialization:模型初始化选项,给了两个选项可以⼀起选。这并不是⼀个很复杂的模型,实际运⾏中我们发现初始化位置对最终结果的影响并不太⼤。
Network:附加⽹络层的选择。给了两个选项,基本上是对⼀些特定⽹络的补充。
Subpixel Upscaling-放⼤图⽚的⽅法,作者已不建议使⽤
Reflect Padding-处理DFL-SAE模型会出现灰边问题的补充⽅案。
Loss:Loss function的选择
Optimizer:选learing rate。常规选择,建议保持默认。
Model:对于特定模型的参数选择,建议直接保持默认。
Trainer:对于训练部分的最后的数据扩充,包括增强⾊差,修改分辨率等。如果不是expert建议不要乱改。
开始训练
相当简单的选择,选择图⽚位置,选择模型类型,选择Batch Size和循环次数,都是常规参数。参数选择完可以直接开始训练,作者很贴⼼的给了preview界⾯可以实时的看到训练效果。
Convert部分
Convert部分作者没有给出详细的使⽤指南, 事实上也不需要给出, 实际上Convert部分就是我们深度学习中的test或者evaluation部分. 使⽤训练好的模型进⾏脸部的交换. 界⾯如下所⽰:
我们只需要给出简单的⽂件位置, ⼯具就可以⾃动的选取模型进⾏脸部转换. 前⾯分析Train部分代码的时候我们可以发现, 这个模型⼀次只训练两个简单的decoder, 这也就代表着如果⼀次训练得到的模型只能换⼀种脸. 举例来说, 我在训练中换的是杨幂和徐锦江,  那么在测试中不管我的输⼊脸部是杨幂, 是杨紫还是张⼀⼭, 都只会换成徐锦江的脸.  这也是DeepFake⼀个⽐较⼤的问题所在了,  缺少泛化.
下⾯是测试的⽰意图:
由于训练并不充分并且数据量不⾜, 所以会很模糊,但可以看得出来有徐锦江的样⼦(.