476. TensorFlow - Help Protect the Great Barrier Reef | tensorflow-great-barrier-reef
首先我想说,我在数据科学方面并没有太多经验。我不完全了解数据科学中的所有门道,但我热爱学习和实验。就这次比赛而言,我学到了很多关于目标检测的知识,真的非常有趣!
我对序列使用了 GroupKFold 分割,因为 Private LB 中的数据将是新的序列。验证模型的最佳方式(至少在我这个新手看来)是使用它未曾见过的新序列。我只在同一个折上进行模型训练,没有使用集成,也没有通过 OOF 预测来验证模型。
我的解决方案主要围绕 YOLO-Z 论文展开,该论文研究了如何改进原始 YOLO5 架构在小目标检测方面的表现。看起来他们提出的模型在某种程度上已包含在 YOLO5v6 中。他们在实验中提到,将“宽度”乘数修改为下一层级(例如在 M 或 S 模型中使用 L 或 M 的“宽度”),在小目标检测中取得了更好的结果。由于 YOLO5v6 已经包含了更小的层(参见此讨论帖),我着手修改 YOLO5v6 模型以增加宽度乘数(看看效果是否优于原版)。这增加了参数数量,但没有增加层数。这样可以在保持比使用更大模型更低的推理时间的同时,兼顾两个层级的优势。
| 模型 | 层数 | 参数量 (M) | FLOPs |
|---|---|---|---|
| YOLOv5s6 | 280 | 12.6 | 16.8 |
| YOLOv5s6-wide | 280 | 27.6 | 35.8 |
| YOLOv5m6 | 378 | 35.7 | 50.0 |
| YOLOv5m6-wide | 378 | 62.6 | 86.5 |
| YOLOv5l6 | 476 | 76.7 | 111.4 |
为了不必重新训练模型,我不得不使用下一个模型的迁移权重(如果我想用 YOLOv5s6-wide,就使用 YOLOv5m6 的权重,以此类推)。因为我删除了很多层,所以我仍然希望对权重进行预训练。
我只选择训练并使用了 YOLOv5s6-wide 和 YOLOv5m6-wide。
因为“更宽”的模型删除了许多层,我认为重新训练有助于模型更好地拟合。经过一番搜索,我找到了基于此处列出的比赛的 Detecting Underwater Objects (DUO) 数据集。
我使用重数据增强训练了 100 个 epoch(参见 wandb 输出)。
我使用 COT 掩码数据集制作了 10,000 张“假”图像,将 COT 粘贴在不同透明度的位置上。我发现使用该数据集训练提高了最终模型的召回率(感谢 @alexandrecc)。但我不完全确定这是否对 Public LB 有帮助。请参阅此Notebook和
同比赛其他方案