返回列表

10th place solution

341. Open Images 2019 - Object Detection | open-images-2019-object-detection

开始: 2019-06-03 结束: 2019-10-01 计算机视觉 数据算法赛
第10名解决方案

第10名解决方案

作者:dingwoai (Master) | 比赛排名:第10名

太长不看版 (TL;DR)

  • 我使用了 mmdetection 框架,它真的非常方便;
  • 最佳单模型(带有 ImageNet 预训练 ResNeXt101 的 Cascade RCNN)+ TTA(水平翻转,多尺度测试 (600, 900), (800, 1200), (1000, 1500), (1200, 1800), (1400, 2100))在 Public LB 上达到了 0.499;
  • 根据频率将数据集分为 6 个子集,然后对它们进行微调 1-2 个 epoch。 —> 大约提升了 0.05+;
  • 父类扩展带来了大约 0.01+ 的提升;
  • 对我所有高分提交进行加权集成(来自 ZFTurbo 去年的解决方案) —> 最终 Public 得分为 0.608。

1. 单模型

在最开始,我打算参加“视觉关系检测”赛道。但后来我意识到我没有一个好的目标检测模型来应对那个比赛。所以我从 Faster RCNN+ResNeXt101 开始,我花了大约 20 天训练了 24 个 epoch,在 Public LB 上的结果是 0.446。

同样地,我分别训练了 Cascade RCNN+ResNeXt101 和 Cascade RCNN+SENet154 各 12 个和 8 个 epoch。

我就让这些模型训练几周,做我的日常工作,然后放弃了“视觉关系检测”。

最好的单模型是 Cascade RCNN+ResNeXt101,它意外地被训练了 19 个 epoch(比计划多 6 个 epoch)。所以也许我应该把每个模型都训练得更久一点 :)。

结论:我的单模型很弱。它们应该被训练更长时间。

2. 微调

由于类别非常不平衡,我简单地根据频率将数据集类别分为 6 个子集,并使用 Faster RCNN+ResNeXt101 模型对它们进行微调:

  • 类别 0-50,约 1411368 张图片,2 个 epoch,lr 0.001
  • 类别 51-100,约 308352 张图片,2 个 epoch,lr 0.001
  • 类别 101-200,约 208096 张图片,2 个 epoch,lr 0.001
  • 类别 201-300,约 93140 张图片,2 个 epoch,lr 0.001
  • 类别 301-400,约 45840 张图片,1 个 epoch,lr 0.001
  • 类别 401-500,约 19316 张图片,1 个 epoch,lr 0.001

在最终截止日期前两周,我在代码中发现了一个巨大的 bug。

解决这个 bug 后,集成微调模型的预测结果在 Public LB 上带来了大约 0.05+ 的提升。

结论:解决类别不平衡问题是获得银牌或金牌的关键。

3. TTA 和最终集成

一些队伍合并了,我可能有机会获得单人金牌。

所以我做了以下工作:

  • 对每个模型进行 TTA:水平翻转,多尺度测试,图像尺寸为 (600, 900), (800, 1200), (1000, 1500), (1200, 1800), (1400, 2100);
  • 推理后对每个预测扩展父类;
  • 对所有模型进行加权集成(来自 ZFTurbo 去年的解决方案)。

其他技巧:

  • 增加每张图片的检测框数量限制,即使它们的置信度较低。我在最终提交中选择了 600 作为上限。
  • 我没能完成 Cascade RCNN+SENet154 模型的 12 个 epoch 训练。尽管如此,集成它还是带来了轻微的提升。

对我无效的方法:

Soft-NMS:尝试将其用于集成,效果不佳。

计划但未实现:

  • 使用分割赛道的 Mask 标注;
  • 多尺度训练和 Mixup 数据增强。

最后的话:

让我们公平竞争。

Peace & Love。 👍

同比赛其他方案