返回列表

15th place solution: single stage object tracking

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

开始: 2020-11-16 结束: 2021-01-04 运动员表现 数据算法赛
第15名方案:单阶段目标跟踪

第15名方案:单阶段目标跟踪

作者:Camaro | 比赛排名:第15名 | 发布日期:2021-01-05

首先,感谢 Kaggle 和主办方举办了如此有趣的比赛。同时也祝贺所有的获奖者。我认为这是最艰难的比赛之一,因为虽然参赛总人数相对较少,但其中不乏许多才华横溢的 Kaggle 大神。

在这里,我将简短总结我的解决方案,以及我失败的地方。

太长不看版 (TLDR)

  • 无集成的单阶段模型
  • 以 FairMOT 作为头盔跟踪的基线
  • 增加了撞击检测分支和球队特征分支
  • 大量涉及跟踪 ID、球队和位置的后处理

基线模型

乍一看,这个任务似乎是目标跟踪的最佳应用场景,因为由于评估指标的设计,我们需要聚合时间序列信息。所以我选择了 FairMOT 作为我的基线,因为它是 MOT 基准测试中的 SOTA(当前最佳)模型。简而言之,FairMOT 是一个目标跟踪框架,它基于 CenterNet 并加入了基于度量学习的 ID 特征分支。除了头盔跟踪外,我的模型还预测每种撞击类型的概率以及用于区分对手头盔的球队特征。因此,我模型的总输出如下:

  • 头盔图像坐标、边界框宽高和置信度 (N * 5)
  • ID 特征 (N * 128)
  • 球队特征 (N * 128)
  • 撞击概率 (N * 6)

其中 N 是头盔的数量。

作为一个小技巧,我在两个视角中为同一个球员添加了相同的跟踪标签,这样我的模型应该在两个视角中为同一个球员输出相同的 ID 特征。在跟踪过程中,我关联了两个视角中的头盔。此外,我将视图中的头盔分为两组(即两队)。我只是简单地使用了 K-means 进行聚类,效果非常好。跟踪之后,我的模型输出如下(除上述内容外):

  • 跟踪 ID (N,)
  • 在另一个视角中匹配的跟踪 ID (N,)
  • 球队类别 (0 或 1) (N,)

其他训练细节:

  • 主干网络:HRNet32
  • 图像尺寸:(708, 1280)
  • 训练轮数:Endzone 视角 20 轮,Sideline 视角 35 轮
  • 将撞击标签扩展到前后各 4 帧 (+- 4 frames)

后处理

尽管我的模型预测了所有撞击类型的撞击概率,但在最佳提交中,我只使用了头盔之间撞击的预测结果。我的后处理过程严重依赖于一个假设,即头盔撞击发生在来自不同队伍的一对头盔之间。

我的后处理包括以下步骤:

  1. 计算与对手头盔的最大 IOU(交并比)。
  2. 取 IOU 最高的一对头盔之间的最大撞击概率。
  3. 计算与对手头盔的最小像素距离,并按帧中的平均框大小对其进行归一化。
  4. 根据头盔检测置信度阈值进行过滤。
  5. 根据距离阈值进行过滤。
  6. 根据撞击概率阈值进行过滤。
  7. 在同一 ID 的时间轴上进行最大池化非极大值抑制。
  8. 移除在附近帧中没有配对头盔的孤立头盔。

如你所见,这里有很多超参数。我使用 Optuna 分别针对 Endzone 和 Sideline 优化了这些阈值。这样做之后,我的 CV(交叉验证)分数在 Endzone 上约为 0.42,在 Sideline 上约为 0.53,总体为 0.45。CV 和 LB(排行榜)的相关性还不错,我的最终得分在 Public 和 Private LB 上实际上都是 0.45。

我失败的地方?

显然,我错过了聚合时间序列信息的机会,例如大多数其他解决方案中使用的 3D 模型或两阶段模型。相反,我在最后一个月花了大部分时间来聚合同一帧和另一个视角中实例之间的关系。我相信这应该会有所突破,但我没能成功实现。我尝试过的方法包括:

  • 利用另一个视角的预测。(例如,如果另一个视角没有预测结果,则更多地过滤掉)。
  • 利用匹配 ID,尽管在我尝试过的方法中它具有最佳的匹配精度。
  • Endzone 和 Sideline 之间或图像与传感器跟踪位置之间的单应性估计和优化。
  • 使用 SuperGlue 进行训练和匹配。我使用 ID 特征作为描述符,中心点作为关键点。我在 FairMOT 之上添加了 SuperGlue 并同时进行训练。它在某种程度上有效,但简单的线性分配算法比这个效果更好。
同比赛其他方案