返回列表

55th place solution - A frugal approach

363. Bengali.AI Handwritten Grapheme Classification | bengaliai-cv19

开始: 2019-12-19 结束: 2020-03-16 计算机视觉 数据算法赛
第55名方案 - 一种经济实惠的方法

第55名方案 - 一种经济实惠的方法

作者: Tushar
比赛排名: 第55名

感谢 Kaggle 和 Bengali.ai 举办了这场比赛。祝贺所有的获奖者以及所有让讨论区保持活跃和鼓舞人心的参与者,特别感谢 @haqishen, @pestipeti, @hengck23, @ildoonet, @bibek777, @machinelp 提供了充满想法的有趣讨论。特别感谢 @iafoss 提供的入门 notebook,以及 @drhabib 发布的以往比赛解决方案的详细代码,我对此非常依赖。

这是我在 Kaggle 两年来的第一枚比赛奖牌。公开排行榜的成绩来自单个模型。由于缺乏硬件资源,我的大部分代码都是在 Kaggle Kernels 上训练的(这就是为什么我称之为“经济实惠”的方法 ;p)。

预处理和数据增强

我将图像调整为 240x240x1 并进行了零填充。使用了简单的增强方法,如 crop_resize(裁剪调整大小)、image_wrapping(图像包裹)、rotations(旋转)和 image_lightening(图像增亮)

验证

我尝试了 5折交叉验证 (5 fold CV),而在提交的 notebook 中,我对数据集进行了 80-20 的划分。

主干网络和架构

我尝试了讨论区分享的大部分想法,使用 EfficientNet-B1 作为模型主干(取自 EfficientNet Pytorch),并根据 @iafoss 的入门 kernel 进行了一些修改。由于 Kaggle kernel 的运行时间限制在 32000 秒,EfficientNet-B3 及更大的模型计算成本过高,无法在有限时间内得到充分训练。

无效的尝试

虽然 MixUp 和 Cutmix 数据增强看起来很有前景,但对我来说没有带来实质性的提升。它们需要更多的训练轮次,这在我的情况下是完全不可行的。

根据以往比赛讨论的建议,维护实验日志文件是有帮助的。我简单地创建了实验日志,但在选择最终提交方案时,它反而让我感到困惑,而不是有所帮助。

比赛初期,硬件的缺乏对我来说是一个重大打击,公开排行榜没有进步也让人气馁。那些没有提交任何结果而被浪费的时间本可以被更关键地利用。我计算了每一个轮次的时间,然后用 32000 秒除以它,以便让模型训练更长的时间。我使用了半精度,并且不得不将代码中的 Mish 激活函数 替换为 ReLU 以加快计算速度(这给了我几乎额外一个轮次的时间)。

我在比赛中学到的(自我总结)

  • 在整个比赛过程中准备并维护一份合适的实验日志文件(如果有人能提供帮助将不胜感激)。
  • 讨论区真的很有趣,充满了可以尝试的想法,但适当的实验记录也是必要的。
  • 正确选择提交的方案极其重要,这帮助我度过了榜单洗牌。
同比赛其他方案