第9名方案:分块训练 + Seq-NMS
第9名方案:分块训练 + Seq-NMS
作者: Bilzard | 排名: 第9名
非常感谢主办方组织这次比赛,也感谢所有参与这个项目的人。
我将与大家分享我的解决方案。
流程
预处理
- 分块训练
- 将原始图像分割成 320x320 大小的图块,每个图块之间有重叠。
- 步长选择为 = (240, 200),这为每张图像生成了 5x3 个图块。此设置参考了文献 [6]。
- 重新标记
- 我注意到训练数据集中存在大量不一致的标签和缺失的标签,所以我认为重新标记可以提高模型的性能。
- 我结合原始标签和训练模型生成的伪标签进行了重新标记:
- NMS(原始标签(阈值0.501) + 伪标签)
- 阈值筛选 (置信度 > 0.5)
折划分
- 将序列分割成连续的 400 帧数据块,然后分配到各个折中,以平衡 COTS(棘冠海星)的总数,使其几乎相同。分配算法类似于文献 [4] 的贪心算法。我知道这是一种有泄露的划分方式,但我认为平衡目标计数更重要。这是因为根据论文 [5],当使用 WBF(加权框融合)时,集成性能各异的模型会产生较差的预测结果。
数据加载器
采样器
- 类别平衡采样
- 我通过实现受文献 [1] 启发的类别平衡采样器来控制前景/背景比例。
- 正/负样本比例 = 1:0.3
- 1个 epoch = 1.3 * 正样本图像数量
数据增强
- 重度畸变
- 缩放偏移:0.3-1.7
- Mosaic、Mixup、透视变换、颜色偏移等。
- 带椭圆掩码的透视变换
- 在透视变换中,我使用了由 @hengck23 分享的椭圆掩码。当配合强畸变使用时,它显著减少了框损失。
训练
- 输入图像尺寸:640px(原始尺寸的 2 倍)
- 模型:yolov5l [2]
- 轮数:45-60
- 机器:Tesla T4, 16GB (EC2 实例
g4dn.xlarge)
推理
- 图像尺寸:2560px(原始尺寸的 2 倍)
- 注意:尽管是分块训练,YOLOv5 模型在输入整张图像时仍能准确检测物体。
- TTA(测试时增强)
- (缩放, 变换) = (0.7, None), (1.0, hflip), (1.3, None) [注1]
- 后处理
- 清除低置信度、靠近边缘的框
- 由于我是用图块训练模型的,与使用整张图像训练相比,它的预测更有可能在边缘附近产生框。这在使用 Seq-NMS 时会产生负面影响,因为模型会在目标物体离开画面后继续在边缘附近预测误报。
- Seq-NMS [3]
- 原始的 Seq-NMS 算法并非为实时处理设计。所以我使用了过去 20 帧,衰减因子为 0.9。度量标准为
max。
[注1]: 原始 YOLOv5 TTA 算法有点棘手,因为缩放比例设置为 (1.0, 0.83, 0.67)。平均缩放比例小于原始尺寸。在官方文档中,说使用 TTA 时应将输入图像缩放 x1.3。但这过程较慢。所以我固定为 (0.7