374. Deepfake Detection Challenge | deepfake-detection-challenge
我们的解决方案主要基于 3D CNN(三维卷积神经网络),我们认为这种方法能很好地泛化到“不同类型”的深度伪造技术上。我们希望它不是专注于帧中的特定像素模式,而是像经常尝试但失败的 2D CNN->RNN 模型那样识别时间维度上的问题,但其过拟合倾向要低得多。3D 模型的参数数量与 2D 模型相似,但内核具有“深度”,因此它们在 2D 平面上的拟合能力相对有限。
就在一个月前,我们使用几个 3D CNN、一个 2D CNN->LSTM 和 2D CNN 的解决方案还在排行榜上排名第 3。然而,在过去几周里,我们发现很难跟上步伐,排名跌至第 22 名。
祝我们在私有排行榜上的结果好运,也祝大家好运!
流程的基础是人脸提取器。这是在比赛第一周编写的,此后只进行了微调。简而言之,每 n 帧(我们定为 10)通过 MTCNN 进行处理。然后使用边界框坐标在 3D 数组中设置掩码。在 3D 空间中连续(重叠)的人脸被假设为同一个人的脸在面部和时间上的移动。然后我们提取一个包含整个时间段内这张脸的边界框,并从该感兴趣区域创建视频,包括每一帧(不仅仅是每 10 帧)。
这种方法的一个优点是,即使忽略视频方面,它也大大减少了误报,因为“人脸”必须在视频的很长一段时间内存在才能被算作人脸。
另外,我们使用 MTCNN 的边界框进行传统的 2D CNN 推理。
我们在 4 种不同的架构(I3D, 3D ResNet34, MC3 & R2+1D)和 2 种不同的分辨率(224 x 224 & 112 x 112)上训练了 7 个不同的 3D CNN。3D CNN 的验证损失在 0.1374 到 0.1905 之间。最初,我在使用空间级增强拟合模型时遇到了困难,发现它们干扰太大,导致模型难以区分真假。因此,我当时只使用了像素级增强,如亮度(和 Hflip)和一些随机裁剪。然而,Ian 开发了一种我们希望非常成功的 3D cutmix 方法,这使得能够训练出具有良好 CV 分数的模型并加入到集成中。
为了说明集成这些模型的好处,当我们上次单独尝试 I3D 模型(验证损失最低)时,公共 LB 分数为 0.341。通过集成,我们提高到了 0.253。
这些网络和 2D CNN 都使用 AdamW(或有时是 Ranger)和 1-cycle 学习率调度器进行训练。
我们最终在集成中包含了一个 2D CNN。它经过了相当激进的增强训练。Ian 最终选择了 SE-ResNeXT50 作为最终模型,尽管我们也尝试了多种其他模型,包括 Xceptions 和 EfficientNets。
使用一系列 PNG 图像代替 MP4 视频。我觉得这很有趣。我们通过使用相同的人脸提取流程生成视频并保存人脸为 MP4(约 216,000 个假人脸,约 42,000 个真人脸,17Gb 视频)来训练这些模型。临近结束时,我们怀疑将人脸保存为 MP4 会导致保真度丢失,因此我们将这些视频的每一帧保存为 PNG 并尝试重新训练网络。这花了将近一周的时间,产生了超过 500 Gb 的数据,结果导致 3D CNN 甚至相对于验证数据很早就过拟合了。这是一次非常耗时的实验,我们仍然感到惊讶,因为 PNG 数据更接近特征提取器在测试时看到的内容。
使用更少的帧。这看起来似乎显而易见,但细节上有些微妙。我们只使用在至少 30 帧中连续的人脸,最多 100 帧。这个 100 是受时间限制设定的。然而,使用更少的帧也意味着人脸移动的空间更小。我们发现在某些视频中,有人会在一秒钟内走过整个屏幕。这意味着人脸只占整个感兴趣区域的很小一部分。因此,我们测试将最大帧数减少到比如 64,以确保我们仍然获得几秒钟的视频(我们训练的是 64 帧的块),但人脸移动较少。然而,这导致了更差的 LB 分数。