374. Deepfake Detection Challenge | deepfake-detection-challenge
恭喜大家,希望那些遇到分数错误问题的人能顺利解决……这确实非常令人沮丧。
我认为复杂的模型反正也无法正确识别这些难例,而且因为容易过拟合,最终还会把简单的样本也搞砸。最终我在 Private LB 上排名第 39(分数 0.477);在 Public LB 排名第 100 左右(分数 0.328)。
我主要担心的是模型泛化能力不强,这主要是因为我们可用的训练数据有限。我对规则的理解是,任何外部数据充其量处于灰色地带,更有可能是被禁止的,所以我只使用了提供的数据。
我构建了一个尽可能简单且小的模型,我知道这无法检测出高难度的深度伪造,但我认为它能更稳健地检测出简单的样本。
我使用了 @humananalog 的 Blazeface 解决方案,将每个视频中的 32 帧(在视频中均匀分布)的人脸保存到硬盘。我对视频进行了筛选,只允许所有面部器官(眼睛、鼻子、嘴巴等)在所有帧中都可见的训练样本。这减少了约 25% 的训练集,我认为这对模型正确收敛很重要。
我在每个 epoch 中对真实/伪造视频进行了 50-50 的采样(所有真实视频 + 1 个采样的对应伪造视频,每个 epoch 选择一个随机组合)。一旦采样了一个视频,我会从该视频中置信度最高的 10 帧中随机采样 1 帧。总的来说,我不确定采样方案对分数有多大影响。它对我的验证集或公共排行榜没有产生巨大影响,但也许在私有排行榜上起到了一些作用。
随机水平翻转、JPEG 压缩、亮度对比度调整。如上所述随机选择帧也起到了部分增强的作用。
我使用了 EfficientNet-b0,因为它是能给出合理结果的最小模型。
我使用了三种不同的输入尺寸(每种对应单独的模型):180、196、224。为了使模型更加稳健(原因如上所述),我选择了较小的分辨率而不是较大的分辨率。
每个模型都在 5 折样本上进行拟合(按文件夹划分)。最终结果是对这些预测的平均值。