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,加入微信群请回复“加群”获取一折本站知识星球优惠券,请回复“知识星球”喜欢文章,点个在看

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

  1. 玩转Kaggle:Classify Leaves(叶子分类)——模型设计与训练

    文章目录 一.数据加载 二.模型构建与训练 1. resnet 1.1 ResNet-50模型微调+冻结 1.2 五折交叉验证 1.3 模型预测 1.4 利用K-Fold结果投票获取最终提交数据 1. ...

  2. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  3. Kaggle 数据挖掘比赛经验分享 (转载)

     [干货]Kaggle 数据挖掘比赛经验分享 (转载) 标签: 数据挖掘数据科学家机器学习kaggle 2017-05-21 19:25 99人阅读 评论(0) 收藏 举报 本文章已收录于: 分类 ...

  4. 基于Kaggle数据的词袋模型文本分类教程

     基于Kaggle数据的词袋模型文本分类教程 发表于23小时前| 454次阅读| 来源FastML| 0 条评论| 作者Zygmunt Z 词袋模型文本分类word2vecn-gram机器学习 w ...

  5. Kaggle 数据挖掘比赛经验分享(转)

    原作者:陈成龙 简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛 ...

  6. 【干货】Kaggle 数据挖掘比赛经验分享

    [干货]Kaggle 数据挖掘比赛经验分享 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Ka ...

  7. 自然语言处理NLP星空智能对话机器人系列:NLP on Transformers 101 第16章:Kaggle BERT比赛CommonLit Readability Prize赛题解析

    自然语言处理NLP星空智能对话机器人系列:NLP on Transformers 101 第16章:Kaggle BERT比赛CommonLit Readability Prize赛题解析 第16章: ...

  8. 【干货】Kaggle数据挖掘比赛经验分享,陈成龙博士整理!

    来源:腾讯广告算法大赛(ID:TSA-Contest) 作者简介 陈成龙, 2015 年博士毕业于中山大学,研究图像篡改检测,在图像领域顶级期刊IEEE TIP上发表论文2篇,Kaggle Crowd ...

  9. 决策树详解python基于Kaggle的Titanic数据实现决策树分类

    决策树详解&&python基于Kaggle的Titanic数据实现决策树分类 一 决策树算法详解 1.前期准备 实验目的准备 2.决策树概述 2.1 决策树 2.2 ID3算法原理 2 ...

最新文章

  1. 关于接口使用抛异常还是返回错误码,下列哪些说法符合《阿里巴巴Java开发手册》
  2. Hadoop 伪分布式 配置文件详情
  3. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十六)利用PC端和移动端BUG
  4. 蚱蜢编程----leshi
  5. 嵩天-Python语言程序设计程序题--第九周:Python计算生态纵览
  6. 如何拆计算机主机箱,一种方便拆卸的计算机主机箱的制作方法
  7. 数据报拥塞控制协议:DCCP(Datagram Congestion Control Protocol)
  8. 十二 Spring的AOP开发入门,整合Junit单元测试(AspectJ的XML方式)
  9. Ubuntu通过apt安装LAMP环境
  10. CheckBoxList 只能选2个选项
  11. 手机号识别轻松对着号码扫一扫就录入了
  12. List集合排序的几种方式
  13. windows防火墙出站规则只允许访问指定域名ip,其他出站ip全部阻止的方法
  14. 云队友丨盘点,到底盘什么?
  15. Android快捷方式解密
  16. 2022年自动化专业、电气工程及其自动化专业大学生可以参加哪些专业相关的竞赛?
  17. python学习之路之:import(详细介绍import的各种调用原理和使用方法)
  18. 百度网盘怎么取消自动续费
  19. android studio 如何上传文件到模拟器的根目录
  20. 阿里云mysql怎么查看数据库_阿里云服务器如何查看数据库

热门文章

  1. window - JDK的安装与卸载
  2. 数据库 分库 分表 分区
  3. 数据结构50:二分查找法(折半查找法)
  4. OSI七层模型加协议
  5. Statement, PreparedStatement和CallableStatement的区别
  6. Linux网络编程——连接和面向连接的协议之间没有区别
  7. 【转】关于arcgis server ADF的几种超时
  8. 如何让采集的数据比原创还要原创!
  9. 单片机中如何将BCD码拆开_单片机二进制BCD码转换实验程序流程图
  10. 接口也可以创建对象吗_面试时,一个小小的设计模式可以把你虐成渣