返回列表

1st place solution

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

开始: 2022-12-05 结束: 2023-03-01 运动员表现 数据算法赛
第一名解决方案

第一名解决方案

作者: nvnn | 排名: 第1名

感谢 NFL 和 Kaggle 主办这场有趣的比赛。
我的方法包含三个主要部分:

  • 一个弱 XGB 模型,用于去除简单的负样本
  • 一个用于分类接触的 CNN 模型
  • 一个用于后处理输出的 XGB 模型

由于我的 XGB 预处理相比其他队伍并不是很好(CV ~ 0.72),在这份报告中我将只详细阐述我的 CNN 和后处理方法。
1. 用于视频分类的 3D CNN
1.1 输入生成器

我将球员与球员(PP)以及球员与地面(PG)接触的建模和训练分开进行。
PP 模型使用来自三个来源的输入进行训练,即端区视频、边线视频和追踪数据。另一方面,PG 模型仅使用来自两个来源的输入进行训练,即端区视频和边线视频。值得注意的是,包含追踪数据并没有提高 PG 模型的性能。

1.1.1 PP 模型的输入生成器

端区和边线视频的处理方式类似。首先,我从相邻帧中提取 18 张图像,即 {frame[-44], -37, -30, -24, -18, -13, -8, -4, -2, 0, 2, 4, 8, 13, 18, 24, 30, frame[37]}。frame[-44] 表示当前样本估计帧之前的 44 帧。这种采样技术使模型能够观察到更接近估计帧的更多帧。

接下来,我用黑色或白色圆圈遮盖接触中的球员头部,以引导模型关注相关球员。我没有使用额外的通道,而是直接将球员的头部标记在图像中。我做出这个决定是为了保持输入的 3 通道格式,从而最大限度地利用预训练权重文件。最后,我使用指定帧范围内平均头盔框大小 10 倍的裁剪尺寸,围绕球员接触区域裁剪每张图像。

为了使追踪数据能够与端区和边线的图像堆叠,我将追踪数据模拟为图像。为此,我使用 OpenCV cv2.circle 函数在黑色背景上绘制特定步骤中每个球员的位置。我为两支球队分配了两种不同的颜色,接触中的球员用更大更亮的圆圈表示(半径为 5,像素值为 255),而背景球员用更小更暗的圆圈表示(半径为 3,像素值为 127)。通过将这些信息整合到输入中,模型可以从鸟瞰视角学习所有球员的互动。PP 模型的输入显示在下面的 GIF 中。

PP Model Input

1.1.2 PG 模型的输入生成器
端区和边线视频的处理方式与 PP 模型类似,不同之处在于 PG 模型使用更长的输入序列,包含 23 个相邻帧,范围为 [-54, -48, -42, -36, -30, -24, -18, -13, -8, -4, -2, 0, 2, 4, 8, 13, 18, 24, 30, 36, 42, 48, 54]。

PG 模型不包含模拟的追踪图像,因为它们不能提高 PG CV 分数。

与 PP 模型不同,我可以在 PG 模型中使用更长的图像序列,因为不包含追踪图像。在 PP 模型中,适合我 GPU 的最大序列长度是 18 张图像。

1.2 模型
鉴于输入看起来更像是一个动作分类任务而不是标准的 3D 分类,我选择使用动作识别模型来解决这个问题。在查阅了 mmaction2 代码库后,很明显 CSN 系列在 Kinetics-400 数据集上取得了最令人印象深刻的结果。因此,我选择了 resnet50-irCSN 并针对此特定任务进行了微调。

1.3 训练

在训练期间,我对端区和边线图像应用以下增强,并随机交换它们。至于追踪图像,我只使用水平和垂直翻转作为增强。

base_aug = [
        A.RandomResizedCrop(always_apply=False, p=1.0, height
同比赛其他方案