返回列表

4th place solution

412. NFL 1st and Future - Impact Detection | nfl-impact-detection

开始: 2020-11-16 结束: 2021-01-04 运动员表现 数据算法赛
第4名方案

第4名方案

作者:Azat Davletshin | 比赛排名:第4名

当我开始解决这个比赛时,论坛上已经发布了一种基于二类检测器和后处理的解决方案。起初我想使用这种方法,但在仔细查看了数据后,我意识到为了获得高分,必须使用时间上下文。因此,我选择了一种两阶段的方法:头盔检测和使用3D卷积网络的ROI分类。

数据准备

为了方便起见,我将所有视频帧提取为单独的文件。帧数不是很多,所以我毫无问题地将它们保存到了SSD中。然后我按game_id随机将所有数据分为训练集和验证集(20%)。

头盔检测器

这是最简单的部分。我使用 detectron2 训练了带有ResNet-50 FPN主干网络的Faster-RCNN。我对 标准 配置做了以下修改:

  • 将最小锚点尺寸从32减小到16,因为数据集中有许多小头盔
  • 使用单类(仅头盔)
  • 同时使用帧和图像进行训练
  • 使用了SyncBN

第一个训练好的模型达到了相当不错的检测精度。在验证集上,AP50为93.607(具有明确冲击标签的真实框的召回率为84%)。我没有对检测器做更多的实验,但也许更精确的检测器会给出更好的最终结果。

ROI分类器

我使用FAIR的 SlowFast 库来训练ROI分类器。利用这个库,我实现了两种替代方法:

动作检测

该方法如下:将一系列完整帧输入到3D CNN中,计算特征图,并使用ROIAlign操作提取ROI的特征并进行分类。我使用了带有ResNet50主干网络的SlowFast模型,并进行了以下修改:

  • 使用了20帧的序列
  • 从主干网络中移除了stage5,并添加了3个上采样反卷积,以使特征图足够大
  • 对于每个真实冲击,在+-2个相邻帧添加了额外的真实标签
  • 通过过采样将包含冲击的帧数增加到总帧数的25%
  • 增强方式包括多尺度、随机裁剪、随机翻转和颜色增强
  • 为了在推理时去除重复项,我使用了一个IOU跟踪器。该跟踪器合并来自相邻帧的冲击框,然后从每个轨迹中选择置信度最高的预测。

该模型在私有排行榜上的结果为0.3915。

动作分类

该方法如下:裁剪目标框周围的一系列帧,然后将裁剪序列输入到3D CNN中,然后直接计算冲击概率。我再次使用了带有ResNet50主干网络的SlowFast模型,并进行了以下修改:

  • 使用了20帧的序列
  • 使用了128 x 128的输入尺寸
  • 使用了5个输入通道而不是3个RGB通道。第一个额外通道是目标头盔中心的热图。第二个额外通道是所有头盔中心的热图(见下图)。
  • 对于每个真实冲击,在+-2个相邻帧添加了额外的真实标签
  • 通过过采样将明确冲击裁剪的数量增加到总裁剪数的10%
  • 增强方式包括多尺度、随机裁剪、随机翻转和颜色增强
  • 为了在推理时去除重复项,我使用了一个IOU跟踪器。该跟踪器合并来自相邻帧的冲击框,然后从每个轨迹中选择置信度最高的预测。
输入示例

该模型在私有排行榜上的结果为0.6037。然后我添加了水平翻转作为TTA(测试时增强),将分数提高到了0.6341。最后,我将上述动作检测器添加到集成中,并获得了微小的提升:私有排行榜分数为0.6355。

同比赛其他方案