第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。 👍