本篇文章为比赛第一名方案解析,该比赛涉及到CV-目标检测-环保
介绍:本次比赛的目标是通过构建在珊瑚礁水下视频上训练的物体检测模型,实时准确地识别海星。此项工作将帮助研究人员识别威胁澳大利亚大堡礁的物种,并采取明智的行动为子孙后代保护珊瑚礁。
网址:www.kaggle.com/competition…
摘要
我们设计了一个两阶段流水线。目标检测 -> 分类重新评分。然后跟随一个后处理方法。
验证策略:按 video_id 进行 3 折交叉验证分割。
目标检测
- 6 个 yolov5 模型,其中 3 个在 3648 张图像上训练,3 个在 1536 个图像块(如下所述)上训练
- 图像块:我们将原始图像(1280x720)切割成许多块(512x320),移除了边界附近的框,然后在那些块上仅训练 yolov5。
- 修改了一些基于默认值的 YOLO 超参数:
box=0.2,iou_t=0.3 - 增强:基于 yolov5 默认增强,我们添加了:旋转、mixup 和 albumentations。转置,然后移除 HSV。
- 在交叉验证优化完成后,我们使用所有数据训练了最终模型。
- 所有模型都使用与训练时相同的图像大小进行推断。
- 集成这 6 个 YOLOv5 模型给我们带来了 CV0.716,此外最好的一个是 CV0.676。
分类重新评分:
- 裁剪出所有预测框(3 倍 OOF)成边长大于 0.01 的方形。方形的边长为预测框的
max(length, width),然后扩展 20%。 - 我们计算 IOU 作为每个预测框和此图像的 GT 框的 IOU 值中的最大值。
- 分类目标每个裁剪框:iou>0.3, iou>0.4, iou>0.5, iou>0.6, iou>0.7, iou>0.8 和 iou>0.9 简而言之,iou 被分为 7 个区间。例如:
[1,1,1,0,0,0,0]表示 iou 在 0.5 和 0.6 之间。 - 在推理过程中,我们将 7 个二进制输出平均作为分类得分。
- 然后我们使用 BCELoss 来通过 256x256 或 224x224 的大小训练这些裁剪框。
- 非常高的 dropout_rate 或 drop_path_rate 可以大大提高分类模型的表现。我们使用
dropout_rate=0.7和drop_path_rate=0.5。 - 增强:水平翻转、垂直翻转、转置、45°旋转和裁剪。
最佳分类模型可将 CV 提升至 0.727 - 在集成一些分类模型后,我们的交叉验证准确率达到了 0.73+
后处理
最后,我们使用简单的后处理进一步将我们的 CV 提升到 0.74+。
例如,模型在#N 帧中预测了一些框 B,从 B 中选择置信度高的框,这些框被标记为“关注区域”。
在#N+1、#N+2、#N+3 帧中,对于置信度> 0.01 的预测框,如果它与“关注区域”的 IoU 大于 0,则通过score += confidence * IOU提升这些框的得分。
我们也尝试了跟踪方法,它给我们带来了+0.002 的 CV。然而,它引入了两个额外的超参数。因此,我们选择不使用它。
小故事
比赛初期,我们为团队的三名成员分别使用了不同的 F2 算法,后来我们发现对于相同的 oof,我们没有计算出相同的分数。
例如,nvnn 分享了一个 OOF 文件,其中 F2=0.62,sheep 计算了 F2=0.66,而我计算了 F2=0.68。
我们最终选择使用 nvnn 中得分最低的 F2 算法来评估所有我们的模型。
这里是我们最终的 F2 算法,如果您感兴趣,可以使用这个算法来比较您的 CV 与我们的!