返回列表

5th - baseline with 11 epochs CE+SE-ResNext50

379. Herbarium 2020 - FGVC7 | herbarium-2020-fgvc7

开始: 2020-03-09 结束: 2020-05-26 作物智能识别 数据算法赛
第5名 - 训练11个Epoch的基线模型 CE+SE-ResNext50

第5名 - 训练11个Epoch的基线模型 CE+SE-ResNext50

作者: Miroslav Valan | 比赛排名: 第5名

祝贺所有的获胜者。

我很享受去年的 Herbarium 2019 比赛,当时我只使用了极少量的计算资源(仅依赖 Kernels),却击败了 Facebook AI 团队。所以我原本希望今年也能如法炮制。哎,我大错特错了……

数据集的规模立刻就把我难住了。但我还是决定做一个实验,那就是重跑去年的代码,然后在后处理上下功夫:)。

训练基线模型

我借了一张 1080Ti,在一个长周末里跑了 11 个 epoch:)。我只使用了交叉熵损失,在整个数据集上训练,只做了一些很小的数据增强以加快学习速度,完全没有处理类别不平衡问题。输入尺寸是原始尺寸的 1/2,使用了梯度累积来达到 256 的 batch size,并使用余弦退火调整学习率。你可以把我的方案看作是一个默认配置或者基线。

压榨基线模型 —— 提交你拥有的一切

比较检查点

我在每个 epoch 结束后都进行了提交,试图更好地理解发生了什么。最后两个检查点在 Public LB 上的得分是 0.64+。我注意到,随着后期检查点分数的提高,预测出的唯一类别数量也呈线性增加。从第 5 个 epoch(得分 0.55,18K 个类别)一直增加到第 11 个 epoch(得分 0.64,24K 个类别)。

后处理 1

我将 softmax 输出乘以类别频率的倒数,分数提升了 0.05,达到了 0.69+,唯一类别数增加到了 27K。

后处理 2

测试集中的类别分布与训练集相同,但最大值被截断到了 10。我计算了预期数量和我预测数量之间的差异,然后相应地调整了概率。

例如,如果我预期的数量是 10,但预测得到了 15,我需要减少 0.66%(调整值)。为了防止波动太大,我对调整值进行了开平方根归一化,并重复了几次。我关注预测出的唯一类别数量,当它达到 32K 时停止。这让我提升了 0.04+,所以分数达到了约 0.74。水平翻转又给我带来了额外的 0.005 分。

同比赛其他方案