412. NFL 1st and Future - Impact Detection | nfl-impact-detection
感谢比赛组织者,这是一个非常有趣的任务!
我的方法与其他顶尖解决方案非常相似:对所有头盔进行2D检测、头盔跟踪、裁剪图像的3D分类以及抑制误报的后处理。
我使用了在全分辨率下基于1万张图像训练的YoloV5-l模型。
我最初尝试使用基于EfficientDet的检测器,修改了锚点集以更好地匹配头盔尺寸分布,并在视频帧上进行了训练,但YoloV5的效果更好。
对于每个检测到的头盔,我计算了其与周围几帧之间的光流。
我尝试使用OpenCV或RAFT(感谢 @daigohirooka 提供的优秀notebook并推荐RAFT)。我利用光流在帧之间跟踪头盔,并估算图像平面上几帧范围内的平均头盔速度。我认为RAFT效果稍好一些,但我最终提交的最佳方案仍使用OpenCV进行头盔跟踪。
在分类方面,我使用了 16x3x128x128 的裁剪图像,并进行缩放,使得当前帧中的头盔中位尺寸映射到中心的40个像素。这提供了一致的尺度,对检测到的边界框变化具有鲁棒性,特别是对于部分可见的头盔。
我还修正了帧间头盔的线性运动。第8个切片位置的当前帧始终居中,但所有其他帧都使用在跟踪阶段估算的当前边界框速度进行偏移。因此,当球员以恒定速度奔跑或摄像机平移时,头盔保持在帧中心,但在加速期间它会移向或移出中心。
其背后的直觉是——加速度对分类很重要,但在由于摄像机运动可能产生的快速移动之上,估算加速度更困难。
对于分类模型,我没有使用3D卷积,而是使用了 时间偏移模块:
与N个2D模型相比,TSM的开销非常小,可以重用任何ImageNet预训练的2D分类模型,并且在视频理解任务中表现相当不错。
我还在 MotionSqueeze: Neural Motion Feature Learning for Video Understanding 方法上取得了有希望的结果,该方法在基于TSM的模型中增加了流估算,但实现起来并不简单,且未指定许可证。
我发现将TSM添加到残差块开头的小模型效果很好,通常易于训练且速度快(每个模型训练时间从一小时到几小时不等)。我使用了EfficientNet B0-B3、Resnet18和Resnet34的集成。当将TSM方法与3D卷积进行比较时,很容易注意到时间维度上缺乏池化,因此我没有将特征偏移一帧,而是在resnets/efficient nets的最后几个块中偏移了2和3帧,以模拟膨胀卷积。
在训练期间,我将撞击点周围的3帧标记为正样本,并使用了5%或10%的正样本。
除了标注的训练标签外,我还添加了一些未充分训练的检测模型的误报预测。我使用了4折交叉验证,在提交时,我平均了所有4折中多个模型的预测结果。为了加快预测速度,我首先在几个快速模型上运行分类,以过滤掉95%易于预测的负样本。
后处理非常简单,我选择具有最高撞击置信度的检测/分类框,并使用光流/跟踪信息抑制同一球员在周围帧中的检测结果,抑制程度从当前置信度衰减到0,持续16帧。我对所有视频文件和帧使用了相同的阈值。
我检查了这种后处理是否会抑制训练数据集中的正样本,惊讶地发现同一球员在3-10帧内存在大量正样本。大多数此类连续撞击属于不同类型,例如头盔对头盔撞击后紧接着头盔对身体撞击。为了解决这个问题,我修改了分类模型以同时预测撞击类型,并仅抑制预测的撞击类型。分数提升非常小,在本地CV上估算不到