返回列表

Public 34th/Private 47th place insights - Part1 (Inference)

374. Deepfake Detection Challenge | deepfake-detection-challenge

开始: 2019-12-11 结束: 2020-04-23 AI安全与对抗 数据算法赛

Public 34th/Private 47th 名次见解 - 第一部分(推理)

作者: MPWARE (Grandmaster) & Tom (Grandmaster)
发布时间: 2020-04-01

大家好,

关于这次竞赛有很多东西可以分享。首先我想在这里分享我们的推理流程,之后我会再写一篇关于训练部分的文章。我们的解决方案仅使用视频/帧(完全没有使用音频),在推理过程中使用的总帧数对我们来说非常重要,越多越好。我们尝试尽早将帧移入 GPU,以便在后续阶段受益于 GPU 的快速计算。我们曾尝试使用 NVidia DALI 和 Decord,因为它们可以通过 GPU 加载/解码视频,不幸的是从未成功过。Decord 存在内存泄漏,而 DALI 在提交过程中因超时而结束(无法进行故障排除)。因此,我们使用了 OpenCV,并在解码后立即将帧移入 GPU。

然后,对于人脸提取,我们使用了带有 facenet-pytorch 的 MTCNN,并做了一些小改动以使其支持 GPU 输入张量。在 MTCNN 之前,我们在帧上添加了 GAMMA 校正(仍在 GPU 上)以辅助 MTCNN(针对一些暗视频或对比度差的视频)。输出是调整为 256x256 的人脸,保留纵横比并留有较大边距(每边 30 像素)。

下一步是人脸追踪,以识别视频中有多少张人脸,并使用不同的规则(基于追踪到的置信度和最大人脸数)清理伪影(检测到人脸但实际上不是人脸)。这是基于在均匀间隔的帧中追踪的质心框来实现的。

推理流程图

接下来是模型推理。我们有 3 到 4 个 EfficientNet CV5 模型,具有不同的输入形状(256x256、240x240、224x224),由归一化器进行裁剪。每个模型都使用不同的验证策略进行训练。有些使用完整数据,有些使用部分数据进行留出验证。

最后一步是后处理。人们可能会注意到有些视频有闪烁的假人脸(同一个视频中有几帧是真的,几帧是假的)。我们模型的概率忽上忽下,这意味着它起作用了,但在这种情况下使用简单的平均值作为最终概率是行不通的:

假帧概率图

因此,我们决定评估什么样的阈值可以检测到这种行为,并仅在这种情况下使用最大概率代替平均值。问题是我们需要多少具有高概率的帧才能认为它是假的:

阈值分析图

答案大约是 20%。因此,如果有 20% 的帧概率高于 0.85 左右,那么我们倾向于选择最大概率而不是平均值。

还有一个附加/可选步骤,即基于留出数据构建并应用于模型输出的岭回归(而非分类)。

该流程仅在我们要有足够帧的情况下才有效,我们能够在每个视频中运行多达 100 帧。每个单独的 EFB 模型大约得到 LB=0.32。集成后的岭回归得到 LB=0.29,阈值处理将分数提升至 LB=0.27。

同比赛其他方案