412. NFL 1st and Future - Impact Detection | nfl-impact-detection
[更新]
我们的代码已发布在 这里。
首先,感谢主办方组织了这场精彩的挑战!
祝贺所有的获胜者,并非常感谢我优秀的队友 @tereka、@hidehisaarai1213、@rishigami,能与这样的人才合作是一个绝佳的机会。
我们真的很想庆祝一位新 GrandMaster 的诞生,但时间会等待的!
对我来说也是一个巨大的挑战,因为这是我儿子出生后我参加的第一场 Kaggle 比赛……
.png?generation=1609822336590711&alt=media)
我们的解决方案基于两阶段流水线:第一阶段检测撞击候选框,第二阶段对候选框进行分类,判断其是真阳性还是假阳性。
检测器
我们分别针对 Endzone 和 Sideline 视频训练了两个独立的检测器。在我们的实验中,训练独立的检测器能获得更好的 CV(交叉验证)分数。
检测后处理 (PP)
.png?generation=1609822406670388&alt=media)
我们面临的一个挑战是必须过滤掉撞击时刻之外的撞击框。为了解决这个问题,我们使用了 time-nms(时间非极大值抑制),即在一定持续时间(30帧)内将 IoU > 0.3 的框分组,只提取中位数框,该框应代表撞击时刻,其他候选框则被过滤掉。我们还会过滤掉在一定帧数内未同时存在于 End 或 Side 视频中的框。
第一阶段的输出分数为 精确率 0.2,召回率 0.6,F1 0.2。参数经过调整,以便检测器能达到较高的召回率。
就像第3名队伍的解决方案一样,我们在候选框周围裁剪出前后各 4 帧(+- 4 frames)的头盔图像,并使用 Resnet3D 对其进行分类。我们基于 torchvision 的视频分类器模型实现了这一点。我们集成了 8 个分类器,并使用了水平翻转 TTA(测试时增强)。我们使用 Endzone 和 Sideline 视频训练了分类器。
由于每个视频的撞击次数约为 10~20 次,我们自适应地控制预测阈值,使每个视频的最终预测数量保持在 15-25 个范围内。这使得模型对阈值调整更加稳健,这一点非常重要,因为单个视频中大量的 FP(假阳性)可能会破坏整个分数。
最终的 CV 分数为 精确率:0.56,召回率 0.4,F1:0.47,还有很大的提升空间!
对我们来说,训练检测器相当困难,因为有很多选择。我们使用了 mixup+cutmix 数据增强,并在训练期间对有撞击的图像进行了过采样。我们也使用了没有撞击的图像,这提高了检测器的精确率。
我们受到 Deepfake 第3名解决方案 的启发,并在分类器中使用了 3D CNN。
我们使用所有裁剪为 96x96 或 128x128 像素的头盔图像来训练分类器。由于有很多负样本,我们使用 focal loss 作为损失函数。此外,mixup 也对 CV 分数有贡献。
由于我们没有太多时间训练,检测器和分类器都是