第5名解决方案
第5名解决方案
作者: Tamo (队友: Takashi Someya, nomorevotch, fuumin621)
比赛: NFL Player Contact Detection
感谢主办方和 Kaggle 举办了如此有趣的比赛。我也要感谢所有的参赛者和队友(@takashisomeya @nomorevotch @fuumin621)带来的美好时光。
我们的解决方案由两个阶段组成:NN(神经网络)和 GBDT(梯度提升决策树)。我们将详细介绍具体细节。
■ 第一阶段:NN 部分概述
- 输入为追踪数据和图像(球员-球员距离 < 2 以及 球员-地面)
- 一次性推理连续帧
- CNN + LSTM
NN 的输入
[1] 追踪数据
使用以下追踪数据:
- distance(距离)
- distance_1(球员1)
- distance_2(球员2)
- speed_1(速度1)
- speed_2(速度2)
- acceleration_1(加速度1)
- acceleration_2(加速度2)
- same_team(同队,布尔值)
- different_team(不同队,布尔值)
- G_flag(地面标志,布尔值)
如果球员是 G(地面),则用 -1 填充 distance 和 XXXX_2 的值。
same_team 和 different_team 是标志,用于判断球员是否属于相同/不同的队伍。
G_flag 表示球员-地面对的标志。
[2] 图像 + Bbox(边界框)
- 在通道方向上拼接以下三项:
- 头盔周围裁剪的 +-1 帧视频画面。
- 头盔 bbox 掩码
- 图像大小:
- 球员-球员对:裁剪尺寸 = max(平均 bbox 宽度, 平均 bbox 高度) * 3
- 球员-地面对:裁剪尺寸 = max(bbox 宽度, bbox 高度) * 3
- 将裁剪后的图像调整为 128x128。
我们使用了至少包含一帧距离 < 2 的连续帧。
(此时数据可能包含距离 > 2 的帧。)
- [1]:B x N x 10
- [2]:B x N x 3 x 128 x 128
(B: batch_size, N: 连续帧数 (如 16,32,48,64))
在训练和推理过程中,以不同的步长截取连续帧 (N)。
训练:无重复帧 (stride == N)
推理:有重复帧 (stride < N,重复帧的结果取平均值。)
训练时的数据增强
使用以下数据增强方法:
- HorizontalFlip(水平翻转)
- RandomBrightnessContrast(随机亮度对比度)
- OneOf(以下选一)
- MotionBlur(运动模糊)
- Blur(模糊)
- GaussianBlur(高斯模糊)
- Random frame dropout(随机帧丢弃,图像 40-60%,追踪数据 20-60%)
NN 模型
整体 NN 模型架构如下:
- Endzone/sideline(端区/边线)图像通过共享的 CNN 骨干网络。
- CNN 骨干网络使用 TSM 模块。
同比赛其他方案