461. NFL Health & Safety - Helmet Assignment | nfl-health-and-safety-helmet-assignment
感谢主办方举办这场有趣的比赛,也祝贺所有坚持到比赛最后的参赛者。
由于我没有计算机视觉方面的经验,我的方案没有使用自定义的头盔检测。主要的改进在于“追踪-头盔映射”和“后处理”。以下是我的方法:
我首先运行了一个简单的 IoU 追踪算法,以获取每个头盔框的簇 ID(cluster id)和簇分数。
簇分数等于属于该簇的所有框的最大置信度分数。如果一个簇的大小大于 3,则该簇有效。当框的数量大于追踪球员数量时,簇分数被用来移除框。为了移除离群的头盔(边线头盔),我简单地只保留那些满足 且 的框。
我认为肯定有更好的方法来分配簇分数,但在比赛期间没能找出来,不过我在公开的方案中发现了一些潜在的想法,之后我会尝试一下。
我做了一些 EDA(探索性数据分析),发现当框的数量 >= 18 时,单帧的分数要高得多。因此,我只对框数量超过一定阈值(我设为 17)的帧运行追踪-头盔映射过程。我通过保留 x 在 [L, R] 且 y 在 [T, B] 范围内的球员来选择候选球员集,并使用 linear_sum_assignment(线性分配)来分配框和候选球员,然后使用簇 ID 为每个框投票标签,每帧中重复的标签被设为 np.nan。
在追踪-头盔映射的第一阶段之后,我计算每队框的顶部和左侧值的中位数,并将其与追踪坐标进行比较以确定摄像机方向。
第二阶段利用了摄像机方向和第一阶段的一些固定标签。第一阶段中的非重复标签被固定下来,并作为 linear_sum_assignment 中的约束条件。在第二阶段之后,再次使用簇 ID 来投票标签并丢弃所有重复的标签。
我在一个簇的帧序列前后各增加了 6 帧的额外框。这之所以有效,是因为在某些情况下真实标签框与额外添加的框重叠,而且当预测框和真实标签框相距太远时,评估指标不会进行惩罚。
CV 0.787 (在所有训练数据集上运行)
+ Endzone(端区视角) 0.792
+ Sideline(边线视角) 0.783
Public(公开榜) 0.756
Private(私有榜) 0.790