返回列表

15th place solution: YOLO-X only, Seq-NMS

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

开始: 2021-11-22 结束: 2022-02-14 环境监测 数据算法赛
第15名方案:仅使用YOLO-X与Seq-NMS

第15名方案:仅使用YOLO-X与Seq-NMS

作者:Maxwell
比赛排名:第15名

恭喜获胜者以及所有完成本次比赛的参与者😊
在本次比赛中,许多参与者都专注于提高Public LB(公开排行榜)的分数,至少在比赛半程时,我跟不上Public LB的步伐。
然而,在我的本地实验中,我发现那些仅在推理阶段增加图像尺寸的方法,即使正确调整了阈值和集成方法,在整个训练数据上的得分也极低。
所以,我认为排名会发生震荡。虽然我没能进入金牌区,但我很高兴参加了比赛,因为我认识到了相信自己的实验结果的必要性。

好了,我的方案相当简单,但我还是想分享一下。

1. 预处理

由于视频基本上是每个序列切换一次,我基于序列构建了4折交叉验证(不过,我认为有些序列是稍微连续的)。
我做的一个尝试是让每一折中的CoTS(海星)数量几乎相同。在训练时,我没有使用不含CoTS的图像,但在验证时,我使用了所有不含CoTS的图像,以便正确检查假阳性。
图像处理很简单,只是除以255,没有进行任何降噪处理,尺寸为1952 x 3520。
由于GPU限制,我无法尝试更大的尺寸,但至少在这个尺寸下,我能在Local CV中获得一点提升。不过,我在大约两倍于原始图像尺寸时获得了最大的收益。

2. 模型:我只想用YOLO-X

这次我真的很想使用我以前从未用过的anchor-free(无锚框)YOLO-X,所以我坚持使用了它,尽管许多人在Public LB上使用YOLO-v5取得了成功。
修改YOLO-X很难,因为很多部分是硬编码的,但我尝试调整了top-K选择算法,增加了数据增强,以及一些其他不确定的修改。但最终,似乎只有数据增强有效果。从这个意义上说,YOLO-X作为一个模型的完成度可能很高😏

3. 数据增强与学习策略

除了YOLO-X默认的数据增强功能(mosaic、mixup等)外,我还添加了RandomGamma、RGBshift、Sharpen、GaussNoise等。
相反,应用mixup和mosaic的概率从默认值稍微降低了一些,并将其余的概率分配给了新添加的数据增强路径。这可能在一定程度上增加了输入图像的多样性,我能够在Local CV中获得提升(由于实验过程有些曲折,我不清楚具体的消融实验数值)。
此外,我使用了EfficientNetV2中采用的渐进式学习方法:随着学习的进行,逐渐增加图像的尺寸(例如 1280 => ... => 3520)。同时,我记得正则化(增加数据增强的应用概率)也有所加强。

4. 推理

推理过程非常简单:我使用了Flip(翻转)进行TTA(测试时增强),并对4折模型进行了WBF(加权框融合)集成(共8个模型)。我想这和大多数参与者的做法差不多。
请注意,我设置了阈值以改善本地CV。因为我们的评估指标基于混淆矩阵,F2指标对阈值设置在一定程度上很敏感。

5. 我的一个独到之处:Seq-NMS

我稍微设计的一点是后处理。
既然任务是对视频中的物体进行识别,我在比赛初期在这个帖子中发了言,并且阅读了几乎所有的论文。许多论文报告称,特征聚合——一种利用邻近过去图像丰富输入特征的方法——比跟踪等后处理方法表现更好,我也认为这可能是真的。然而,由于大多数特征聚合方法基于RPN(区域建议网络),对于坚持使用无锚框YOLO-X的我来说,应用它们的门槛太高了。所以我决定使用Seq-NMS:一种典型的后处理方法。具体来说,通过前一幅图像的预测边界框与当前图像的预测边界框之间的重叠程度来调整置信度(参考:链接)。
(实现代码可以在这里找到。核心处理是用cython编写的,速度足够快,但据我了解,python脚本中有一个严重的bug导致其无法正常工作,所以我修复了该bug才得以使用。)
根据我的实验,Seq-NMS不需要考虑很多帧,只需要前一幅图像的预测。我也尝试使用

同比赛其他方案