363. Bengali.AI Handwritten Grapheme Classification | bengaliai-cv19
首先,我要感谢我的队友 Marios (Kazanova)。如果没有他,我不确定我是否能在这次比赛中获得奖牌。其次,我要感谢所有分享经验的人。对于像我这样在计算机视觉方面经验很少的人来说,这简直是一座金矿。我希望我当时能多关注其中的一些讨论,例如关于测试集中未见过的音素的讨论,或者将预测音素而不是组件作为次要目标。最后,非常感谢 Bangali AI 赞助商和 Kaggle 提供了一个数据集相当小的具有挑战性的图像分类问题。硬件(使用最新 GPU 的机会)在这里并不是决定性因素。
在公共排行榜上一度升至第 7 名之后,我对于最终跌出金牌区感到有些失望。同时,我的第一次提交距离比赛结束仅 13 天。而且我可以与起步较早的 Marios 组队。尽管如此,时间紧迫的问题在于你必须正确选择尝试什么以及决定不尝试什么。鉴于训练计算机视觉模型需要时间,你很容易在无效的想法上浪费一两天时间。我不会再在比赛结束前不到 2 周才参加计算机视觉比赛了。这是学到的第一个教训。
我们没有关注哪些目标难以预测。总的来说,我对数据的观察不够。这是第二个教训。
我提到了一些我们不幸没有尝试的方法,以下是我们尝试过的方法,成功程度不一。
在组队之前,我处理的是 64x64 的图像,以及使用 seresnext50 处理了一些 128x128 的图像。较小的图像尺寸会带来较高的 epoch 吞吐量,并允许进行大量实验。我没有在图像增强上下功夫,而是专注于学习 pytorch,理解损失函数和图像预处理。当我组队时,Marios 已经有一个带有良好增强流程的 efficientnet-b4 模型。他使用了 cutout、grid mask、mixup、albumentation,并发现 cutmix 没有效果。他还使用了 ohem loss 和余弦学习率调度器。除了 ohem loss 之外,我们在组队后没有重新审视这些设置。
组队后,我们探索了增加多样性的方法,以及如何在评分内核中组合尽可能多的模型。事后看来,这也导致了对公共测试数据的过拟合。我们的 CV(交叉验证)和 LB(排行榜)分数差距相当稳定,这也解释了为什么我们没有更多地探索公共/私有数据分布差异的可能性。学到的第三个教训,要更加注意这一点。
最终我们使用了 14 个 efficientnet-b4 模型预测的平均值。我们的评分内核可以在 2 小时内处理多达 18 个模型。对于每个模型,我们平均了几个检查点的权重。模型的区别在于:
我们在结束前的最后几个小时研究了预测结果的后处理。这显然很有希望,有一次提交确实比我们最好的融合结果提高了一点。
我们在比赛结束前两天才查看外部数据 BanglaLekha-Isolated。我们使用最好的融合模型预测目标,然后选取多数类,并通过目视检查 BanglaLekha 论文与 class_map csv 之间的映射关系。我们的映射在少数情况下是错误的。然后我们为 R 目标分配修正值,为 V 和 C 分配 0 目标。CV 和 LB 分数并没有真正变好,但它增加了融合的多样性。在这里,我们同样必须进行保持图像长宽比的裁剪调整大小。
总而言之,我在很短的时间内学到了惊人的东西。这就是 Kaggle 的伟大之处,你可以在很短的时间内瞥见最先进的实践。同样,这完全归功于社区成员的分享。老实说,我现在很期待下一场计算机视觉比赛!
我希望我没有遗漏太多,特别是 Marios 在我们组队之前所做的工作。如果需要,我会让他补充/纠正我。