返回列表

3rd place solution, single stage approach

537. 1st and Future - Player Contact Detection | nfl-player-contact-detection

开始: 2022-12-05 结束: 2023-03-01 运动员表现 数据算法赛
第三名方案:单阶段方法

第三名方案:单阶段方法

作者: Dmytro Poplavskiy
比赛: NFL Player Contact Detection

我要感谢组织者提供了一个非常有趣的挑战(特别是 @robikscube 提供了非常有用的回答并帮助各团队)。参赛过程非常有趣。

概述

该方法采用单阶段方式,端到端训练。每个玩家和步骤区间执行一个单独的模型(而不是针对配对或玩家),预测所有输入步骤范围内的当前玩家的地面接触以及与7个最近玩家的接触。该模型包含一个视频编码器部分用于处理输入视频帧,以及一个Transformer解码器用于结合跟踪特征和视频激活。

模型架构图

视频编码器

视频编码器使用请求步骤周围的一定数量的输入视频帧,并在下采样分辨率下生成相应步骤的激活。通常针对16个步骤,使用每秒帧作为输入,对应96帧。

我使用了几种不同的视频编码器模型:

  • 2D ImageNet预训练模型 + 3D Conv层(归功于之前某次比赛中Team Hydrogen的方案)。当前步骤周围的3个输入帧被转换为灰度图,并作为2D模型的输入,结果通过3D卷积合并。通常较大的模型表现更好,表现最好的模型基于ConvNeXt Large骨干网络。其他基于ConvNeXt的模型或DPN92效果也不错。
  • 2D ImageNet预训练模型 + TSM,每第2或第3帧输入彩色图像,并在每次卷积前进行类似TSM的激活交换。在较小的模型(如ConvNeXt Pico或ResNet 34)上效果更好(如果TSM转换后的模型在视频任务上进行了预训练,较大的模型可能会表现更好)。
  • 3D/视频模型,如CLIP-X(X-CLIP-B/16是表现第二好的模型)或Video Swin Transformer(表现尚可,但未包含在最终提交中)。

视频帧被裁剪为224x224分辨率,当前玩家的头盔位于帧的中心/顶部,并进行缩放,使周围帧中头盔的平均大小缩放为34像素。我应用了增强方法,随机移动、缩放、旋转图像,移动HSV,添加模糊和噪声。

对于视频模型激活(在32倍下采样的7x7分辨率处),我添加了位置编码和可学习的单独边线/端区标记。视频激活也可以选择使用类似于DETR的方式通过每帧Transformer进行编码,但我发现这对结果影响很小或没有影响。

Transformer 玩家特征 / 视频激活解码器

其思想是利用注意力机制将玩家特征与其他周围玩家信息结合,并查询图像的相关部分。

对于特定玩家和步骤,我选择了周围-7..+8步的当前玩家特征,并且对于每一步,我选择了2.4码内最多7个最近的玩家,因此总共是16步 * (7+1)个玩家输入。

对于每个玩家/步骤输入,我使用了以下特征,通过特征线性变换相加以匹配Transformer特征维度:

  • 边线和端区视频上头盔位置的位置编码(如果在裁剪区域128像素内)。
  • 是否在边线和端区帧上可见。
  • 步骤编号的位置编码。
  • 是否为当前选定的玩家。
  • 是否与当前玩家同队。
  • 玩家位置(不是xy,而是跟踪元数据中的角色)。
  • +- 2帧内的速度。
  • +- 2帧内的有符号加速度。
  • 到当前玩家的距离,包括数值和+- 2帧内的独热编码。
  • 相对方向,即玩家相对于player-player0的方向,以及player0相对于玩家的方向,编码为+- 2帧内的sin和cos值。
  • 对于可见的头盔,我还将头盔位置处的视频激活直接添加到玩家特征中。想法是这很可能相关,可能有助于避免注意力头执行相同的任务,但我发现最终结果没有差异。

玩家/步骤特征被用作几轮Transformer层的输入/目标:

  • 对于所有步骤
同比赛其他方案