返回列表

5th Place Solution

461. NFL Health & Safety - Helmet Assignment | nfl-health-and-safety-helmet-assignment

开始: 2021-08-10 结束: 2021-11-02 运动员表现 数据算法赛
第5名解决方案
作者: Kyle Lee | 比赛: NFL Health & Safety - Helmet Assignment | 排名: 第5名

首先感谢组织者 / @robikscube 举办这次比赛——这一定是我这段时间以来玩得最开心的一次。起初我只是想看看一些公开的 Notebooks(比如 @its7171 的精彩笔记本),满意了就撤退,结果被深深吸引住了 :D。同时祝贺获胜者们,你们中的一些解决方案确实证明了 Kagglers 的创造力有多强。这次比赛对硬件的要求也不算太高,对于像我这样还在用 1080Ti 的人来说,资源管理上非常轻松。

由于我在其他事务上已经精疲力竭,我的描述可能仅限于文字而缺乏图表,这也是我在最后两周掉链子、进度放缓的原因。加上我觉得我的一些想法与其他人的解决方案有重叠——当然,其他解决方案中也有一些独特的差异,尤其是那个非常独特的冠军方案,确实让我大开眼界 :D,这绝对是实至名归的胜利,属于另一个层级的水平。等周末我有更多时间时,我会尝试补充完善这篇文章。

主要特征

检测器

  • YOLOv5(选它准没错),从 yolov5x6.pt 预训练,输入尺寸 1280x720,使用标准增强以及 1472 版本。两者都使用了 hyp.scratch.yaml(我没有评估 p6 版本)。我使用了视频中除了 extra 给定之外的所有框。在最终提交中,我使用了 118 个视频,只留了一对用于健全性检查 [本可以使用所有视频]。
  • 对上述模型及其水平翻转 TTA 版本应用了 WBF(加权框融合),使用 iou_thres=0.35min_confidence=0.01。将框的数量限制为 22 个。
  • 我发现检测器的性能极大地影响了我的 CV(交叉验证)分数。当我使用理想框(来自真实值 Ground Truth)时,整个训练集的得分约为 0.958+,这意味着检测器性能是一个瓶颈。
  • 我没有深入研究,但考虑到 Scaled-YOLOv4 和 YOLOR 的指标据称更高,它们也许是更好的选择。

标签分配

  • 通过匈牙利算法进行欧几里得距离最小化搜索(使用 scipy.linear_sum_assignmentlapsolver 等并求和),包括扫描旋转角度、将异常值跟踪点作为矩形边界扫描、排列中心化方式(均值中心 vs 最小-最大中心)。在图像和跟踪器上都使用了最小-最大归一化。
    • 在确定一组参数的最小距离后,再次通过加权欧几里得距离使用匈牙利算法确定从跟踪器到图像的标签分配。我发现 dy^2 最好是 dx^2 的 0.25 倍左右。
  • 对于后续帧,我还添加了一个加速功能,通过前 50 帧的多数投票固定到一侧,并根据过去的帧限制旋转和跟踪器异常值边界搜索。
  • 此外,我添加了“重力特征”,通过单独的离散分类器来确定,这些特征用于缩放匈牙利标签分配的代价矩阵元素。具体包括:
  1. 数字匹配 - 我按照讨论区分享的一篇论文训练了一个多输出分类器,准确率达到了约 35+%。该分类器还有一个侧输入分支,接收一个大小为 100 的输入向量,对任何可用的现有球员数字进行独热编码(因为这些是提供的),并在不同颜色上生成的数字增加了约 50% 的增强。我使用这个分类器在初始检测框生成时生成数字特征,在最终应用于 Endzone 视频时,如果一个数字匹配,将图像-跟踪器距离缩放 0.7;如果两个数字匹配,将代价矩阵元素距离缩放 0.49。
  2. 方向匹配 - 我训练了一个 8 类分类器,每个类代表 45 度的增量。然后,分类器与变换后的跟踪器方向之间的角度差与相应的代价矩阵元素成反比缩放。对于我的最终得分,我使用了 0.5 作为缩放因子,这是在 3 个不同方向模型的集成上进行的。
  3. 运动方向匹配 - 类似于方向模型,但这里我取感兴趣框周围 +/-4 帧(类似于之前的 NFL 比赛),并将它们输入到一个生成 8 倍运动角度的 2.5D CNN 中(替换输入层)。然后角度差与代价矩阵元素成反比缩放,我使用了 0.7 作为缩放因子。根据一次提交检查,这轶事性地将我的公开/私有分数提高了 +0.01。
  4. 利用过去标签 - 如果当前框与给定标签的前一帧框的 IOU 超过阈值,则缩放代价矩阵元素。这具有一定的 IOU 跟踪器阻尼效应。这在公开集上有帮助,在私有集上不确定。

这些显著提高了跟踪前的验证/公开分数(例如从 0.75 提高到 0.8+)——尤其是方向模型——但几乎没有改变跟踪后的分数。我怀疑图像太嘈杂了,例如,如果个体被遮挡或数字不可见,分类器应该输出低置信度或空值,但这需要大量的注释清理工作,我还没准备好.. 此外,添加这些显著减慢了我的流程,我的完整提交往往要运行接近 8+ 小时。

跟踪

  • 标准的 DeepSort 在这里似乎就能工作,参数似乎表明低 max_age、高 iou 是可取的。
  • 我使用了自己的带位掩码的动态规划函数,最大化 DS(DeepSort)聚类框和 YOLO 框之间的 IOU 总和,以找到 DS-检测器框之间的最佳对应关系。我想我也可以用匈牙利分配来做这个。
  • 我做了一些额外的后处理来重新分配重复标签,基本上是获取重新分配的重复标签簇,对其标签计数进行排序,并
同比赛其他方案