Kaggle | Bengali 比赛总结(孟加拉字符分类 )

Bengali.AI 总结

Bengali.AI Handwritten Classification 

https://www.kaggle.com/c/bengaliai-cv19 

比赛内容:孟加拉字符分类 

赛题解析

每一个字符由三部分组成:

  • grapheme root (共168类)

  • vowel diacritics (共11类)

  • consonant diacritics (共7类)

比赛任务需要对每一个字符识别的三个元素类别,因此这个比赛的任务是很常见的CNN分类任务,只不过Bengali是三个类别的多类别分类比赛。这个比赛非常有意思,竟然让榜单shake的天翻地覆,过拟合A榜简直不要太简单:

  • 普通模型可以A榜得分0.97~0.99;

  • A榜得分和本地CV一致,但与B榜不一致;

设想一下一个多类别分类任务,CNN精度竟然可以达到99%的准确率,所以对于绝大部分选手都是过拟合,99%的人都翻车了,随便提交一个baseline都可以达到银牌和铜牌;

为什么会有这么大的变化呢,原因在于训练集中字符标签的空间与测试集的空间是不一样的,也就是说在测试集会出现unseen的样本。

对于类别分布不一致的情况的,会导致CV和B榜成绩不一致,虽然在比赛期间已经有类似的帖子,但我本人并没有注意到: 

https://www.kaggle.com/karishmakunder/validation-with-unseen

Solution: 1st Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/135984

第一名思路:CycleGAN ZeroShot solutions,考虑所有类别的组合情况,共14784 (168 * 11 * 8) 种情况,这是首次GAN模型在Kaggle比赛中成功应用;

第一名将数据按照可见和不可见进行了划分:

模型1:Out of Distribution Detection Model

预测图像是Seen class,还是Unseen Class(与训练数据相比):使用模型类别输出的大小确定,如果所有类别的输出概率都很低,则是Unseen;反之则是Seen;

模型2:Seen Class Model

预测图像属于训练数据中Seen class对应的类别;

模型3:Unseen Class Model

分为两步:(1)生成新字符:使用ttf字体文件生成字符图像;(2)字符风格转换:使用CycleGAN将生成的字符在变换为比赛的风格;

第一名的方法非常清晰,通过ttf字体文件生成了unseen的样本,同时利用CycleGAN进行风格转换操作,这些都是认真分析赛题后做的。第一名整体的流程可以参考Model Overview图。

Solution: 2nd Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/135966

Solution: 3rd Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/135982

预训练模型: 使用hflip and vflip扩增3倍数据集;

for seen grapheme and unseen grapheme:

  • 模型1:encoder>gem>bn>fc

  • 模型2 :encoder>avg>bn>dropout>fc

arcface,用来类别距离检测unseen

  • encoder>avgpool>conv1d>bn

  • s 32(train), 1.0(test)

  • m 0.5

训练

  • seen 字符: 使用3倍数据集进行预训练,然后在原始数据集上进行finetune;

  • arcface and unseen 字符: 使用arcface在预训练上进行finetune

  • replace softmax with pc-softmax

  • loss function: negative log likelihood

  • SGD with CosineAnnealing

  • Stochastic Weighted Average

预测

  • use cosine similarity between train and test embedding feature

  • threshold: smallest cosine similarity between train and validation embedding feature

Solution: 4th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/136982

与3th思路类似,也是使用arcface预测unseen类别;使用特征距离来判断预测样本是seen还是unseen,然后分别使用模型分别预测;

Solution: 5th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/136129

  • 3 heads, for consonant, vowel and root and

  • auxiliary for grapheme with arccos loss

  • root loss: CrossEntropy

  • consonant loss: Multi Binary Crossentropy

  • vowel loss : CrossEntropy

  • grapheme loss: ArcCos + CrossEntropy

挖掘consonant diacritic 3/4/6之间的关系,挖掘不同类的分布关系,转换为多个二分类,获得千分点的提升;

Solution: 6th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/136011

Solution: 7th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/135960

使用ttf生成47k额外的训练数据;

Solution: 8th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/135990

使用Arcface检测seen和unseen;

Solution: 10th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/136815

Solution: 14th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/136021

Solution: 24th Place

https://www.kaggle.com/c/bengaliai-cv19/discussion/136064

论坛上还有很多比赛总结,非常值得学习~

个人总结

  • 没有免费的午餐:任何B榜得分虽然有一定运气,但还是实力说了算。所以要认真阅读比赛数据,不要有摸奖心思;

  • 数据、模型和损失函数:为了精度,这三者都可以起作用;

  • 评价函数和后处理:也会一定程度影响精度;

虽然这次比赛翻车了,但top选手都有各自的可取之处(让人大开眼界),所以无脑调参不可取,要从具体的数据分析,找到突破点;

也可以看下包佬对此次比赛的总结:

https://zhuanlan.zhihu.com/p/114131221

往期精彩回顾




适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(pdf更新到25集)本站qq群1003271085,加入微信群请回复“加群”获取一折本站知识星球优惠券,请回复“知识星球”喜欢文章,点个在看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值