返回列表

Trust CV -- 1st Place Solution

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

开始: 2021-11-22 结束: 2022-02-14 环境监测 数据算法赛
Trust CV -- 第一名解决方案

Trust CV -- 第一名解决方案

作者: Qishen Ha (Grandmaster) | 团队成员: nvnnghia, steamedsheep
比赛: TensorFlow - Great Barrier Reef

感谢主办方,祝贺所有的获奖者以及我出色的队友 @nvnnghia@steamedsheep

这对我们来说确实非常意外。因为我们没有任何“新东西”,我们只是从头到尾一直在本地优化我们流程的交叉验证 F2 分数。

摘要

我们设计了一个两阶段的流程:目标检测 -> 分类重打分。随后是一个后处理方法。

验证策略:按 video_id 划分的 3 折交叉验证(3-fold cross validation)。

目标检测

  • 使用了 6 个 YOLOv5 模型,其中 3 个在 3648 张图像上训练,另外 3 个在 1536 张图像补丁上训练(描述如下)。
  • 图像补丁:我们将原始图像(1280x720)切割成多个补丁(512x320),移除靠近边界的框,然后只在包含刺冠海星的补丁上训练 YOLOv5。
  • 基于默认值修改了一些 YOLO 超参数:box=0.2iou_t=0.3
  • 数据增强:基于 YOLOv5 默认增强,我们添加了:旋转、mixup 和 albumentations.Transpose,然后移除了 HSV。
  • 在通过交叉验证完成优化后,我们使用所有数据训练了最终模型。
  • 所有模型在推理时使用的图像尺寸与训练时相同。
  • 集成这 6 个 YOLOv5 模型使我们的 CV 达到了 0.716,此外最好的单个模型 CV 为 0.676。

分类重打分

  • 将所有预测框(3折 OOF)裁剪为正方形,置信度 conf > 0.01。正方形的边长是预测框的 max(length, width),然后向外扩展 20%。
  • 我们将 IoU 计算为每个预测框与该图像真实框的 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.7drop_path_rate=0.5
  • 数据增强:hflip, vflip, transpose, 45° 旋转和 cutout。
    最好的分类模型可以将 CV 提升到 0.727。
  • 在集成了一些分类模型后,我们的 CV 达到了 0.73+。

后处理

最后,我们使用一个简单的后处理方法将 CV 进一步提升到 0.74+。

例如,模型在第 #N 帧预测了一些框 B,从 B 中选择具有高置信度的框,这些框被标记为“关注区域”。

在第 #N+1, #N+2, #N+3 帧中,对于 conf > 0.01 的预测框,如果它与“关注区域”的 IoU 大于 0,则提升这些框的分数:score += confidence * IOU

我们也尝试了跟踪方法,它使 CV 增加了 +0.002。但是,它引入了两个额外的超参数。因此我们选择不使用它。

小故事

在比赛开始时,我们团队的三个成员分别使用了不同的 F2 算法,后来我们发现对于同一个 oof(样本外预测),我们计算出的分数并不一样。

例如,nvnn 分享了一个 OOF 文件,显示 F2=0.62,sheep 计算为 F2=0.66,而我计算的是 F2=0.68

我们最终选择使用 nvnn 提供的分数最低的 F2 算法来评估我们所有的模型

同比赛其他方案