返回列表

2nd Solution - YOLOv5

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

开始: 2021-11-22 结束: 2022-02-14 环境监测 数据算法赛
第二名方案 - YOLOv5

第二名方案 - YOLOv5

作者: Chenglu (snaker) | 比赛排名: 第2名 | 点赞数: 116

感谢 Kaggle 主办这场有趣的比赛,也感谢我的队友们的所有努力。这也是我第一次参加检测比赛,感谢社区分享的所有知识。

就像方案的标题一样,我们的解决方案中没有什么花哨的东西 : )

总结

我们的方案完全基于 YOLOv5,我认为这次比赛有三个关键点:训练/验证集划分分辨率运气

划分 - 按 video_id

在比赛初期,我们看到有一种非常可靠的划分数据集的方法叫“子序列”。在几次提交后,LB(排行榜)不够稳定,所以最后我们使用了 video_id 3折划分,因为那个时候我们猜测 LB 和 Private(私有榜单)数据可能是完全不同的视频序列,此外,CV(交叉验证)分数现在几乎与 LB 呈正相关。

预处理 - 旋转是关键

有效的增强方法,继承了 YOLOv5 的默认增强,我们增加了:

  • mosaic 概率 @0.25
  • mixup 概率 @0.25
  • 随机旋转90度 (random rotate90)

随机旋转90度会在 CV 和 LB 上提升约 0.02,并且它也有利于不同旋转角度的模型集成。

训练

  • 更大的模型效果更好

YOLOv5 s/m/l/x 的多样性并不是很大,所以为了速度和性能的平衡,我们只使用了 YOLOv5l6 模型。

  • 仅训练有真实标签的图像

根据 YOLOv5 文档,训练时加入 10% 的背景会产生最好的结果,但根据我们的实验,0% 的背景产生了最好的结果。

  • 多尺度 +/- 50%

YOLOv5 内置了多尺度开关,据我所知,缩放在检测中非常重要,特别是对于基于锚框的检测方法,所以我们直接启用了它。

后处理/跟踪

后处理主要关注跟踪。我们没有使用现有的跟踪方法(效果不好),而是使用了一种更简单的方法,我称之为“关注区域”。它的运作方式如下:

  1. 模型在第 N 帧预测了一些边界框 B。
  2. 从 B 中选择具有高置信度(大于阈值 T)的框,这些框被标记为“关注区域”。
  3. 在第 N + 1 帧,所有预测框(实际上不是所有,而是置信度阈值 > 0.01),如果它与“关注区域”的 IoU 大于 0.5,则将这些框的分数提升 S,然后进行置信度过滤。

T=0.15 和 S=0.1 是一个可靠的选择,该方法将 CV 和 LB 都提升了约 0.01。

集成

@sheep 发布了高分辨率技巧后,我们知道一个模型用不同分辨率推理会有巨大的差异。根据我们的实验,单模型用 2400 分辨率训练并用 4800 分辨率推理会获得最高的 LB 约 0.73,我们在这里需要小心,因为 CV 并不准确。

训练分辨率 推理分辨率 平均 OOF F2 LB
240012800.4384-
240018000.6342-
240024000.6865~0.6
24003200