![f5dc4c45e8b50e7065b9f44ff2b895fe.gif](https://i-blog.csdnimg.cn/blog_migrate/936b63c10fa77724e8e6e3ea724ffc77.gif)
作者:竞赛大佬导师Mozak
Bengali.AI 总结
Bengali.AI Handwritten Classification
https://www.kaggle.com/c/bengaliai-cv19
比赛内容:孟加拉字符分类
![ede3cf6595fb64d0b2c3cb405759624c.png](https://i-blog.csdnimg.cn/blog_migrate/e54c0e9516e6d647d534b801dd16b6a8.png)
每一个字符由三部分组成:
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都可以达到银牌和铜牌;
![3e1bba5010997c3c8ecae0090942a5f6.png](https://i-blog.csdnimg.cn/blog_migrate/ca64bb4876644829fbb9e51f4ef95928.png)
为什么会有这么大的变化呢,原因在于训练集中字符标签的空间与测试集的空间是不一样的,也就是说在测试集会出现unseen的样本。
对于类别分布不一致的情况的,会导致CV和B榜成绩不一致,虽然在比赛期间已经有类似的帖子,但我本人并没有注意到:
https://www.kaggle.com/karishmakunder/validation-with-unseen
1
Solution: 1st Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135984
![ad8aa33ab55538fdffe25423993982db.png](https://i-blog.csdnimg.cn/blog_migrate/6d058e6c82cf50515760124c39791b38.png)
第一名思路:CycleGAN ZeroShot solutions,考虑所有类别的组合情况,共14784 (168 * 11 * 8) 种情况,这是首次GAN模型在Kaggle比赛中成功应用;
第一名将数据按照可见和不可见进行了划分:
![ad72de908dd3eefd8329a3d61391214d.png](https://i-blog.csdnimg.cn/blog_migrate/df752a993f63defb27feb5c6639074d3.png)
模型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将生成的字符在变换为比赛的风格;
![7d07dd068ff0ce777302b8a6a78c60ef.png](https://i-blog.csdnimg.cn/blog_migrate/6417f427db4fbdfc4e68943e46602500.png)
![c8688f6b7e449bfc35a79531c471a352.png](https://i-blog.csdnimg.cn/blog_migrate/af2b0455dd92bff803ce8f97a8ed310f.png)
第一名的方法非常清晰,通过ttf字体文件生成了unseen的样本,同时利用CycleGAN进行风格转换操作,这些都是认真分析赛题后做的。第一名整体的流程可以参考Model Overview图。
2
Solution: 2nd Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135966
3
Solution: 3rd Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135982
![5cca36d8ab42f48fa229b439a1ba24cd.png](https://i-blog.csdnimg.cn/blog_migrate/f3e61410e71ae0da35b013da8f0c5aef.png)
预训练模型: 使用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
4
Solution: 4th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136982
与3th思路类似,也是使用arcface预测unseen类别;使用特征距离来判断预测样本是seen还是unseen,然后分别使用模型分别预测;
5
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
![5294304cf6efb48371684aaf9e3f8f2f.png](https://i-blog.csdnimg.cn/blog_migrate/19b07c39dbb9196c12285c75a97ded97.png)
root loss: CrossEntropy
consonant loss: Multi Binary Crossentropy
vowel loss : CrossEntropy
grapheme loss: ArcCos + CrossEntropy
挖掘consonant diacritic 3/4/6之间的关系,挖掘不同类的分布关系,转换为多个二分类,获得千分点的提升;
6
Solution: 6th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136011
![ca5981bba9b631c932770da730116ef7.png](https://i-blog.csdnimg.cn/blog_migrate/6d827e21b2cc4b48f94dc00bfff23657.jpeg)
7
Solution: 7th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135960
![06a7b3e0683fcf89820eda5df770aa99.png](https://i-blog.csdnimg.cn/blog_migrate/efa6d4a57fad1baafce373352d1f4253.png)
使用ttf生成47k额外的训练数据;
8
Solution: 8th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135990
![5b2854bbb0070173af33068f981da586.png](https://i-blog.csdnimg.cn/blog_migrate/1b66eebc05c36b54b0ac50f09c54af90.png)
使用Arcface检测seen和unseen;
10
Solution: 10th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136815
![c04f9f79c202b13705ecbf37bb2522c1.png](https://i-blog.csdnimg.cn/blog_migrate/87e369ea32e0bb55abd0d7c8524ab4c9.png)
11
Solution: 14th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136021
![599086504b5edfcb9658f50fa13036d4.png](https://i-blog.csdnimg.cn/blog_migrate/f5e301b75285bf63a83f32c71f7f0fcb.png)
12
Solution: 24th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136064
![21923c990f1aceccc515004163fe87b6.png](https://i-blog.csdnimg.cn/blog_migrate/01fab68436c3f6194537df4b7cc27ac9.png)
论坛上还有很多比赛总结,非常值得学习~
个人总结
没有免费的午餐:任何B榜得分虽然有一定运气,但还是实力说了算。所以要认真阅读比赛数据,不要有摸奖心思;
数据、模型和损失函数:为了精度,这三者都可以起作用;
评价函数和后处理:也会一定程度影响精度;
虽然这次比赛翻车了,但top选手都有各自的可取之处(让人大开眼界),所以无脑调参不可取,要从具体的数据分析,找到突破点;
近期优质竞赛项目汇总
![f41fcda9c76df4dc0f64e24098588028.png](https://i-blog.csdnimg.cn/blog_migrate/fea1c552587990c180032392bc7e7de5.jpeg)
![62d926f63342c02a1bf9fd08375ad960.png](https://i-blog.csdnimg.cn/blog_migrate/f393b4e2de059431e64f95cba1727869.jpeg)
添加课程顾问咨询详情
![e08e2b627142c371c0915006933ce2f8.png](https://i-blog.csdnimg.cn/blog_migrate/d37f0461b7209be020626337f264bb3e.jpeg)
![b93c7c6999590ba49a2b17bb683c1729.png](https://i-blog.csdnimg.cn/blog_migrate/1f97d51b8e6a67c2356d6308c883ae20.jpeg)
点个在看
持续为你提供更多求职干货