返回列表

3rd place solution - Team Hydrogen

476. TensorFlow - Help Protect the Great Barrier Reef | tensorflow-great-barrier-reef

开始: 2021-11-22 结束: 2022-02-14 环境监测 数据算法赛
第3名解决方案 - Team Hydrogen

第3名解决方案 - Team Hydrogen

作者: Psi (Philipp Singer) & Yauhen Babakhin
比赛: TensorFlow - Great Barrier Reef

感谢主办方和所有参与者带来这场有趣的比赛。这是 Team Hydrogen 的 @ybabakhin(非常感谢在这个比赛中的出色团队合作)与我共同撰写的联合解决方案。

摘要

我们的解决方案是五种不同目标检测模型类型与跟踪技术的融合。

交叉验证

对于交叉验证,我们使用了两种策略:一种是简单的按视频划分,另一种是基于子序列制作5折交叉验证。我们主要关注子序列交叉验证的分数,不时检查视频划分的性能。这一策略在整个比赛过程中使我们的 CV(交叉验证)分数与 Public LB(公开排行榜)分数之间保持了良好的相关性,但在 Private LB(私有排行榜)上却失效了。您可以在下文中阅读我们对这种行为的看法。

模型

我们的最终解决方案是五种不同模型类型的融合。我们所有的模型都在 1152x2048 的分辨率上训练,并且只使用包含标注框的图像。对于数据增强,我们采用了随机翻转、缩放、平移、旋转、亮度、对比度、cutout、cutmix 的混合组合。

我们在大多数模型中使用的另一种增强方法是所谓的“背景混合”。在这里,我们将一张带有标注框的图像与一张没有标注框的随机图像随机混合。这保证我们不会重叠或扭曲任何现有的标注框,但能更好地泛化到未见过的背景,并且还能随机化目标的强度。此外,一些模型通过简单地将目标剪切并粘贴到其他帧中,从而受益于 cut&paste 数据增强。

CenterNet
我们采用了原始 CenterNet 的思想,并将主干网络替换为 HRNet。CenterNet 架构中的目标检测任务被视为关键点估计,因此我们使用了下采样 4 倍的标签(288x512)来预测热力图,包括:目标中心、宽度和高度以及中心偏移量。最终提交包含两个主干网络:hrnet_w18 和 hrnet_w32,它们产生的本地性能相似。模型训练了 10 个 epoch,并使用了 cut&paste 数据增强。

FasterRCNN
我们实现了 FasterRCNN 以适配任何 timm 主干网络,并发现 NFNet 模型表现特别好,因为它们具有泛化能力,且易于在小批量尺寸上训练。我们的最终模型使用了 eca_nfnet_l1 和 dm_nfnet_f0 主干网络。我们使用 4 个特征层和 256 个 FPN 输出通道。模型训练了 10 个 epoch。

FCOS
与 FasterRCNN 类似,我们将 FCOS 集成到我们的流程中以适配任何 timm 主干网络,并使用相同的主干网络进行训练。在这里,我们使用 3 个特征层和 256 个 FPN 输出通道。模型同样训练了 10 个 epoch。

EfficientDet
我们使用 efficientdetv2_dt 主干网络训练 EfficientDet 模型,该主干网络在复杂性、内存使用和运行时间之间取得了很好的平衡。模型训练了 20 个 epoch。

YoloV5
我们使用矩形训练 训练了 yolov5l-6。我们调整了原始代码以直接优化 F2 分数,并且使矩形训练能够与随机打乱、mixup、cutout 和其他粒度设置正确配合。模型使用 Adam 优化器训练了 40 个 epoch。推理是在训练分辨率下进行的,没有使用 TTA(测试时增强)。

融合与跟踪

对于融合,我们采用平均 WBF(加权框融合)融合,这在这里特别有用,因为它自动结合了框的投票机制,从而降低了并非所有模型都存在的框的权重。

对于跟踪,使用卡尔曼滤波 添加缺失框的问题相当棘手,因为在那里也很难估计宽度和高度,而且当模型变得更好时,公开的 kernel 解决方案效果不佳。所以我们以稍微不同的方式使用跟踪。我们使用中心点上的欧几里得距离来寻找轨迹,但我们保留低置信度的框来寻找轨迹。然后,我们将低置信度框的置信度设置为该轨迹置信度的最大值。假设我们有一个轨迹,其置信度为 0.8、0.7、0.9、0.15——在这种情况下,我们将 0.15 框的置信度提高到 0.9。模型在寻找框方面相当出色,但有时它们只是置信度不够,所以这显然比用卡尔曼滤波或类似估计从轨迹中估计新框要好。这种跟踪在本地带来了约 0.01 的提升。

我们在比赛最后几天探索的另一种跟踪技术是光流估计。我们使用了 OpenCV 的 goodFeaturesToTrack() 和 calcOpticalFlowPyrLK() 方法的实现。它产生了非常好的潜水员/相机运动估计,使我们能够更好地预测海星在帧中的位置。不幸的是,它在 CV 和 LB 上仅带来了 0.001 的提升。

标签紧密度与 Public LB

可能和大多数人一样,在比赛的上半段,我们的 Public LB 明显低于我们的 CV。然而,我们很快注意到 Public LB 与训练数据之间肯定存在某些不同,主要是因为 LB 较高的参赛者报告的 CV 比我们在本地看到的要差得多。过了一段时间,关于更高分辨率的讨论出现了,我们只是在 LB 上盲目尝试了一下,它立即将单个 CenterNet 和 RCNN 模型的分数推到了 0.70 以上。

于是论坛上出现了一些有趣的理论,显然我们也试图理解这种事情是如何发生的。在几个失败的理论之后,我们终于发现,比训练时更高的分辨率会产生更紧(精确)地围绕 COTS(

同比赛其他方案