第6名方案 [Private LB: 0.6023]
第6名方案 [Private LB: 0.6023]
作者:Schwert
发布时间:2019-10-02
首先,我要感谢比赛主办方和所有的参赛者!这是我第一次参加 Kaggle 比赛,真的度过了一段美好的时光 😀
以下是我的简要解决方案说明:
1. 数据集
- 无外部数据集。正如我在官方外部数据线程中所描述的,我只使用 FAIR 的 ImageNet 预训练权重进行初始化。
- 类别平衡。对于每个类别,对图像进行采样,使得至少包含该类别一个实例的概率在 500 个类别中是相等的。例如,模型遇到非常罕见的“高压锅”图像的概率为 1/500。对于非罕见类别,图像的数量受到限制。
2. 模型
基线模型是带有 ResNeXt152 主干网络的特征金字塔网络(Feature Pyramid Network)。主干网络中引入了调制可变形卷积层。模型和训练流程是基于 maskrcnn-benchmark 仓库开发的。
3. 训练
- 单 GPU 训练。训练条件针对单 GPU(V100)进行了优化。基线模型训练了 300 万次迭代,并计划在最后 120 万次迭代中进行余弦衰减。Batch size 为 1(!),并对 4 个批次累积损失。
- 父类扩展。模型在训练时使用不包含父类扩展的真实边界框。父类框是在推理后添加的,根据经验,这比多类训练能获得更好的 AP。
- 迷你验证集。使用了由 5,700 张图像组成的验证数据集子集。使用 K80 GPU 实例每 20 万次迭代进行一次验证。
4. 模型集成
- 集成八个模型。选择了具有不同图像采样种子和不同模型条件(ResNeXt 152 / 101,带和不带 DCN)的八个模型进行集成(在 NMS 之后)。
- 最终 NMS。对集成后的边界框逐类再次执行 NMS。仔细选择 NMS 的 IoU 阈值,以使结果 AP 最大化。重叠度高于阈值的框对的分数被相加。
- 结果。模型集成将 Private LB 分数从 0.56369(单模型)提高到了 0.60231。