返回列表

21st Place Solution - Hungarian Algorithm, Frame Filling

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

开始: 2021-08-10 结束: 2021-11-02 运动员表现 数据算法赛
第21名方案 - 匈牙利算法, 帧填充

第21名方案 - 匈牙利算法, 帧填充

作者: Kumar Shubham | 排名: 21 | 发布日期: 2021-11-03

非常感谢主办方组织这次比赛,也向所有获奖者致以最美好的祝愿。这是我在 Kaggle 参加过的最有趣的比赛之一。我很高兴能在这里获得一枚单人银牌。

简要总结我的第21名解决方案:

步骤 1:头盔检测

最终提交使用了两个模型:YoloV5l 和 YoloV5x。两者均在 1280 的图像尺寸上进行了训练。

步骤 2:头盔映射

(线性分配问题 - 匈牙利算法)

1. 每一帧的头盔分配问题被构建为如下的线性分配问题:

输入:视频帧边界的球员,旋转角度
输出:视频帧中的所有球员

a. 假设你已经解决了视频帧边界(左、右、上、下)4名球员的问题,并且你知道旋转角度。
b. 通过将所有球员的地面位置(x中心,y中心)旋转角度,然后应用最小-最大缩放,来转换这些位置。
c. 使用最小-最大方法缩放视频坐标
d. 计算加权欧几里得距离矩阵:
    对于 Sideline(边线):(0.5*x距离 + 0.5*y距离)
    对于 Endzone(端区):(0.8*x距离 + 0.2*y距离)
e. 使用匈牙利算法解决线性分配问题以获取所有球员

2. 对边界球员和旋转角度的所有可能候选者进行网格搜索

假设 N_VIDEO = 视频中检测到的头盔数量
N_GROUND = 22
OFFSET = N_GROUND - N_VIDEO

a. 如果地面上由这些球员围成的矩形内的球员数量为 N_VIDEO-1、N_VIDEO 或 N_VIDEO+1,则称这4名球员的集合为有效候选者。
b. 对所有可能的4名球员和视图允许的旋转角度进行网格搜索,以通过线性分配方法获得最小距离。
c. Endzone 允许的旋转角度 = (90, 270)
d. Sideline 允许的旋转角度 = (-30, -15, 0, 15, 30, 150, 165, 180, 195, 210)
e. 如果 N_VIDEO > 22,反转问题 -> 从视频中选取4个有效框,并对地面上的边界球员应用网格搜索。
f. 如果 OFFSET <= 8,问题可以在不到1000次迭代内解决。
g. 如果 OFFSET > 8,为每个方向选取前8个候选者 -> 对坐标进行排序,并选取距离最近球员最远的那些。

    例如:如果偏移量 = 9,且左侧球员的坐标为:[1,5,8,9,13,15,18,22,25]
                            -> 剔除 9,因为它与左侧最近球员的距离最小。然后对剩余的8个进行网格搜索。

步骤 3:头盔追踪 (Deepsort with IOU)

  1. 修改了公共 Deepsort 代码中的分配部分。
  2. 计算了 Deepsort 坐标和 Yolo 坐标的 IOU 矩阵。应用匈牙利算法进行 Deepsort 聚类分配。
  3. 正如在公共笔记本中那样,选择每个聚类中出现频率最高的标签。

步骤 4:集成

  1. 头盔映射和追踪部分分别针对每个模型运行。
  2. 对于每个球员和每一帧,通过以下方法集成预测:
    • a. 如果模型1对该球员有某种分配,则添加模型1对该球员的解决方案。
    • b. 如果模型1对该球员没有分配,则添加模型2的解决方案。
  3. 注意:如果两个模型同样优秀,这种方法效果最好。

步骤 5:后处理 (前向 & 后向填充)

  1. 如果对于某个球员,我们在第 t 帧没有解决方案,则在属于 (t-5, t+5) 的帧中搜索解决方案。
  2. 如果找到,则添加来自最近帧的解决方案。这种方法有效,因为比赛指标不会对误报进行惩罚,而且在大多数情况下,5帧内的移动并不多。

CV 策略 (交叉验证策略)

每个视频大约有15次撞击。因此,公共测试集中大约有90次撞击。比赛指标受这些边界框的影响很大。基于这些观察,我决定采用完全 CV 的方法:

  • 公共最佳笔记本的 LB 大约为 0.6,但 CV 只有 0.45-0.48。
  • 我的 CV-LB 差异要
同比赛其他方案