412. NFL 1st and Future - Impact Detection | nfl-impact-detection
感谢所有的参与者和组织者!
特别感谢 @its7171 和 @nvnnghia 分享了精彩的笔记本代码!
我的解决方案由以下两个阶段组成:
(阶段1) 使用 EfficientDet-d5 检测所有的头盔
(阶段2) 使用 resnet18 将所有头盔分类为受撞击或未受撞击
我训练了 EfficientDet-d5 用于单类头盔检测。
在训练中,我使用了存在碰撞的帧和不存在碰撞的帧。训练图像是从视频中每隔10帧提取一次,以及碰撞帧的前后5帧提取的。
图像被放大到 1280*1280,并且只使用了水平翻转进行增强,因为这样损失收敛得更快。
推理过程是在两张图像上进行的,即原始图像和水平翻转后的图像,结果使用 WBF(加权框融合)进行合并。
我训练了 resnet18 用于2类分类(撞击或非撞击),并用它来分类目标头盔是否发生了碰撞。
对于 resnet18 的输入,我裁剪了头盔周围的图像,并从前后的4帧中准备了9张图像。
裁剪图像的大小是头盔矩形最长边的三倍(max(w,h) * 3)。
裁剪后的图像被填充为正方形,并调整为 112*112 大小。
与阶段1一样,训练图像是从视频中每隔10帧提取一次,并且只提取碰撞帧。
在创建训练数据时,使用相同的评估标准来标记是否发生了碰撞(impact=1, confidence>1, visibility>0)。
关于数据增强,我使用了 alubumentation 库并应用了以下操作:
除了上述内容,我还使用了以下增强方法:
在进行数据增强时,9帧中的所有图像都应用相同的增强。
我训练了两个 resnet18 模型(2d卷积和3d卷积)。
对于 2d 卷积 resnet18 输入,9帧图像在 RGB 通道中组合形成 27 通道的图像。
对于 3d 卷积 resnet18 输入,9帧图像被转换为9帧的电影片段。
推理过程在这两个模型上进行,最终输出是各自输出的集成。
我还使用了与阶段1相同的翻转 TTA(测试时增强)。
如果在4帧内在相同位置检测到了头盔,则只保留中间的一帧,其他的将被忽略。
此外,我忽略了视频最开始和最后10帧,因为预计这些位置发生碰撞的概率较低。
EfficientDet-d5 的 CV 分数:0.926(针对所有头盔)
2d 卷积 resnet18 的 roc_auc:0.964
3d 卷积 resnet18 的 roc_auc:0.967
本地 CV 分数:0.53
公开榜单分数:0.56
私有榜单分数:0.59