374. Deepfake Detection Challenge | deepfake-detection-challenge
我的解决方案由三个 EfficientNet-B7 模型组成(我使用了 Noisy Student 预训练权重)。除了预训练权重外,我没有使用外部数据。其中一个模型运行在帧序列上(在每个 EfficientNet-B7 块中添加了 3D 卷积)。另外两个模型逐帧工作,区别在于人脸裁剪的尺寸和训练时的数据增强。为了解决过拟合问题,我在对齐的真实-伪造对上使用了 mixup 技术。此外,我使用了以下数据增强方法:AutoAugment、Random Erasing、随机裁剪、随机翻转以及各种视频压缩参数。视频压缩增强是即时(on-the-fly)完成的。为此,裁剪后的短轨迹(每段 50 帧)被保存为 PNG 格式,在每次训练迭代时,使用 ffmpeg 以随机参数加载并重新编码。由于使用了 mixup,模型的预测变得“不确定”,因此在推理阶段,通过简单的变换增强了模型的置信度。最终预测是通过以与置信度成正比的权重平均模型的预测获得的。在 DGX-1 上的总训练和预处理时间约为 5 天。
你可以使用我的 代码 来复现结果。
这次比赛的主要困难之一是严重的过拟合。最初,所有模型在 2-3 个 epoch 内就过拟合了(验证损失开始增加)。一个对过拟合有很大帮助的想法是在真实和伪造人脸的混合数据上训练模型:对于每个伪造人脸,我们从原始视频中提取对应的真实人脸(具有相同的边界框坐标和相同的帧号),并对它们进行线性组合。用张量术语表示为:
input_tensor = (1.0 - target) * real_input_tensor + target * fake_input_tensor
其中 target 从参数 alpha=beta=0.5 的 Beta 分布中提取。使用这些参数,选取接近 0 或 1 的值(纯真实或纯伪造人脸)的概率非常高。你可以看下面的例子:
由于真实和伪造样本是对齐的,插值样本中的背景几乎保持不变,这减少了过拟合并使模型更加关注人脸。
在论文 [1] 中指出,应用于测试数据的增强接近于现实生活视频分发中看到的降质。具体来说,这些增强是:(1) 将视频的 FPS 降低到 15;(2) 将视频的分辨率降低到原始大小的 1/4;(3) 降低整体编码质量。为了使模型对各种视频压缩参数具有鲁棒性,我在训练中添加了具有随机视频编码参数的增强。在训练期间对原始视频即时应用此类增强是不可行的,因此使用裁剪后的(人脸周围 1.5 倍区域)短片段(50 帧)代替原始视频。每个片段保存为 png 格式的单独帧。下面给出了一个片段示例:
对于即时增强,使用了 ffmpeg-python。在每次迭代中,随机采样以下参数(见 [2]):
通过实验结果,我发现 EfficientNet 模型比其他模型效果更好(我检查了 ResNet、ResNeXt、SE-ResNeXt)。最好的模型是带有 Noisy Student 预训练权重的 EfficientNet-B7 [3]。输入图像的大小为 224x192(训练数据集中的大多数人脸较小)。