返回列表

Team Hydrogen: 1st place solution

522. DFL - Bundesliga Data Shootout | dfl-bundesliga-data-shootout

开始: 2022-07-29 结束: 2022-12-20 计算机视觉 数据算法赛
Team Hydrogen: 第一名解决方案

Team Hydrogen: 第一名解决方案

作者: Psi (Philipp Singer), Yauhen Babakhin, Pascal Pfeiffer
比赛: DFL - Bundesliga Data Shootout
排名: 第1名

非常感谢 Kaggle 和主办方为我们带来了这场非常有趣的比赛。两阶段的比赛总是令人激动的体验,看到模型在完全未见过的数据上表现如此出色,真的让人兴奋不已。

我们的解决方案基于单阶段模型,结合了 2.5D 和 3D 数据,以正确提取视频数据中的时间信息。该方案在公开和私人排行榜上均排名第一。接下来,我们将对该方案进行高层次的概述。

验证设置

在本次比赛中,我们使用了固定的训练/验证划分来调整模型:验证视频包括 4ffd5986_0407c5a9e_19a97dae4_1ecf251d4_0。我们最好的本地分数是 0.857,并且我们观察到本地验证与公开排行榜(LB)之间存在很强的相关性。对于最终的提交,我们在我们可获得的所有数据上重新训练了最佳模型,这是我们在最后阶段总是尝试采取的常规步骤。

模型设置

如前所述,我们完全依赖单阶段模型架构。模型的输入是 1024x1024 的灰度图像,其通道是在时间维度上堆叠的三个相邻帧。我们选择使用灰度图像而不是全彩图像,是因为它提供了更好的泛化能力和运行时性能——而且它似乎在未见过的私人数据上也泛化得非常好。

该单阶段架构结合了 2.5D 和 3D 技术。模型的主干网络是 efficientnetv2_b0efficientnetv2_b1,因为我们发现更大的主干网络在这个小数据集上往往会迅速过拟合。3D 卷积层仅用于最后一个块和池化前的最终卷积,这使我们能够在主干网络的大部分保持在 2.5D 状态,并通过缓存实现快速推理。

具体来说,如果我们当前的帧是 t=15,我们首先将三个相邻帧 {14,15,16} 堆叠为输入的通道,并分别传递五个不同的时间步(前后各 2 个),每个时间步同样堆叠了三个通道。如果我们的时间步长为 3,这意味着我们将 {8,9,10},{11,12,13},{14,15,16},{17,18,19},{20,21,22} 通过主干网络,最后的 3D 层通过额外的池化聚合这 5 个独立的时间步。

我们还尝试了在时间域上进行不同的堆叠,发现 15 帧(结合 2.5D 和 3D)在我们的最终提交中效果最好。

我们应用了常用的增强方法,并使用了 Mixup。损失函数是具有三个目标列的二元交叉熵。我们在如何设置训练的硬标签或软标签方面还有改进的空间。最终,我们最好的解决方案在实际事件周围的小窗口中使用了硬标签。

在这次比赛中,我们大部分时间都只在比赛数据的标记区域上进行训练。在一些 Soccernet 标签上进行预训练使分数提高了大约 0.02,但在未标记区域和片段上进行伪标签预训练没有成功。

推理

将推理分辨率增加 128 也略微提高了我们的交叉验证(CV)和 LB 分数。我们花了大量时间优化推理内核以尽可能高效地运行,利用线程使用了两个 CPU 核心。对于单个模型,我们只预测每隔一帧,最终方案混合了两个模型的结果,逐帧交替进行。然后我们应用后处理来减少误报的数量。

单个模型在内核中的运行时间为 2.5 小时,处理单个视频需要 25 分钟。我们包含两个模型的最终方案运行时间约为 5 小时。虽然有使用更多模型的潜力,但我们选择尽可能保持简单。

向我的队友 @ybabakhin@ilu000 致以崇高的敬意!

同比赛其他方案