461. NFL Health & Safety - Helmet Assignment | nfl-health-and-safety-helmet-assignment
首先,我要感谢主办方组织了如此精彩的比赛。我很高兴能赢得我的第一枚金牌!
我的解决方案包含以下五个步骤:
我创建了自己的原创跟踪算法。基本上,我的算法利用两帧之间边界框两点(左上角 LT,右下角 RB)的距离,同时利用光流预测下一帧的边界框。光流方法的灵感来源于上一场比赛的顶级解决方案。在实现光流边界框预测时,我参考了这个 GitHub 仓库。预测边界框与检测边界框之间的 IoU 与边界框的距离一起被使用。
当某些边界框丢失跟踪时,它们会像下图那样保留两帧。结果,边界框的数量增加了。这旨在减少边界框的假阴性。由于跟踪处理了两次(正向和反向),边界框在前后帧中进行了插值。
我训练了一个球队分类 CNN,其输出尺寸为 2(球队)x len(gameKeys)。作为训练图像,我裁剪了头盔的边界框。为了利用球衣的颜色,我裁剪的边界框在底部方向上比原始边界框尺寸稍大。
训练好的 CNN 被用作特征提取器(移除了最后的全连接层)。提取的特征通过 K-means 分为两个簇。此时,我不知道哪一个是 "H" 队或 "V" 队。球队映射在下一步的“球员映射”中完成。
我的基础映射算法基于这个很棒的 Notebook。我对其进行了一些改进:
在此步骤中,通过合并跟踪结果和映射结果来确定每个边界框的最终球员标签。首先,通过 XGBoost 模型预测每一帧的映射准确率。作为 XGBoost 模型的输入特征,使用了以下内容:
其次,对于每个跟踪 ID,计算每个球员的总预测映射分数,并分配分数最高的球员。如果在同一帧中分配了相同的球员,则总分较低的边界框将被替换为分数第二高的球员。