返回列表

14th Place Solution

537. 1st and Future - Player Contact Detection | nfl-player-contact-detection

开始: 2022-12-05 结束: 2023-03-01 运动员表现 数据算法赛
第14名解决方案

第14名解决方案

作者:kurupical (Grandmaster) | 比赛排名:第14名

首先,我要感谢主办方组织了这次比赛。这是我以前从未解决过的任务,尝试不同的方法既具有教育意义又充满乐趣!

摘要

解决方案摘要图

模型详情

3D-CNN (CV分数: 0.770)

  • 主干网络:r3d_18 (来自 torchvision)
  • 使用帧数:63帧 (20fps)
  • 预测步数:19步
  • 训练步长:每9步训练一次
  • 学习率调度器:StepLR (~2个epochs: lr=1e-3/1e-4)

2.5D3D-CNN (CV分数: 0.768)

  • 架构:几乎与 DFL 比赛第一名 Team Hydrogen 的解决方案相同
  • 主干网络:legacy_seresnet34
  • 使用帧数:123帧 (20fps)
  • 预测帧数:3帧
  • 下采样:g: 10%, contact: 30%
  • 标签平滑:(0.1-0.9)

3D 和 2.5D3D 的通用设置

  • 用于 g 和 contact 的线性层
# x: (bs, cnn_features)
x_contact = model_contact(x)  # (bs, n_predict_frames)
x_g = model_g(x)  # (bs, n_predict_frames)
not_is_g = (is_g == 0)
x = x_contact * not_is_g + x_g * is_g  # (bs, n_predict_frames)
  • 输出3个预测并计算损失:仅边线视角、仅达阵区视角、拼接边线-达阵区特征。
# 伪代码
def forward(self, x_sideline_image, x_endzone_image):
  x_sideline = cnn(x_sideline_image) 
  x_endzone = cnn(x_endzone_image)
  return fc(torch.cat([x_sideline, x_endzone])), fc_sideline(x_sideline), fc_endzone(x_endzone)

LGBM (CV分数: 0.740)

  • 特征数量:约1100个
  • 特征包括:
    • 球员距离 (tracking, helmet)
    • 滞后差分
    • 前n个最近球员的距离 (n为参数)
    • 距离n内的人数 (n为参数)
  • 分组:
    • game_play
    • is_g
    • is_same_team
    • 距离n内的人数

集成

加权集成,G 和 contact 分别进行加权。

对我有效的尝试

  • 图像预处理
    • 绘制边界框 -> 绘制边界框并填充
    • 使用2种颜色 -> 使用3种颜色
    • 保持纵横比裁剪图像
bbox_left_ratio = 4.5
bbox_right_ratio = 4.5
bbox_top_ratio = 4.5
bbox_down_ratio = 2.25
for col in ["x", "y", "width", "height"]:
    df[col] = df[[f"{col}_1", f"{col