手写英文字体识别(名企内推)
最后更新 2020/10/27 16:03
阅读 544
ResNeXt ResNeSt
别人的公园
8
获得赞0
发布的文章1
答辩的项目Batch大小为32,循环次数为10次,通过在线上环境完成训练,模型最优精度评分为87.06。
最后更新 2020/10/27 16:03
阅读 544
ResNeXt ResNeSt
大家好,我是别人的公园。
我的介绍主要分三个部分展开,分别是数据处理、模型方法和感想与建议。
一、数据处理
首先是数据这一块训练数据最大的特点就是,碎片化,很杂乱,看上去分布似乎一样,其实包含了很多噪声。
但是由于标签只提供了数据的内容,没有提供bounding box或者是mask,因此这也是整个比赛提分的最大障碍。
针对这个问题,我用了一个最笨的办法。就是引入个人强先验知识。
我首先针对所有图像进行了数据长宽分布的统计,横轴是长,纵轴是宽,可以看到这个分布就是这个样子,然后我根绝图片尺寸的分布对不同尺寸的图像进行了裁切。
当然这个裁切的设计并不准确,很多时候也没切准,但是也该让模型有点鲁棒性,所以就这样考虑了。当然可以尝试一些其他方法,比如可以用opencv工具进行投影法、连通图等进行预处理切割。
我同时对数据分布也进行了统计,大部分数据的长度分布在5-10个字符的长度。
参数设置
epoch设置为23,为什么是23是因为我的生日是23号,哈哈哈,batchsize设置为64。
关于数据增强,值得一提的是,在文字识别中不能用水平翻转,给弄反就弄巧成拙了,大概就是进行了
二、模型方法
模型方法用的是最经典的文字识别模型,CRNN,是录用在2017年的人工智能顶刊上。
说到文字识别,主要可以分为定长和变长,定长主要是针对固定长度的文字识别,如验证码,这种场景比较简单。
变长更常见,就是标签长度可长可短,变长的方法目前主流的有两种,一种是CRNN为代表,一种是基于Attention的方法了。我用的是基于CRNN,训练更快,且推理速度也更快,Attention更擅长挖掘序列关系,适合短语句识别。
在比赛当中,我使用的不是最原始的CRNN,我对它进行了一点微小的改进,不再是简单地用几层CNN堆叠,所以我用了resnext和resnest去替换了前面的CNN层,用resnext50的前6层替换了原来CRNN的前面4层卷积。并且修改了resnext50的第一个卷积层,改小了kernelsize,stride和padding,相当于调小了第一层的感受野。
后面就几乎一样了,送到双向的LSTM中。然后resnest同理,最后对两个模型预测进行了融合,也没有用更多模型了。
三、感想与建议
首先还是要非常感谢flyai平台,提供这个机会能大家一起交流。
首先是对CRNN的改进,比如针对CNN的backbone的一些修改还可以尝试,大模型可以考虑senet等,如果是想落地,可以尝试mobilenet,shufflenet或者ghostnet等。
还可以对rnn的结构进行一些调整,比如采用gru等等。
也可以考虑使用基于attentiuon的模型,或者像paddleocr提供的starnet模型的方法,都可以去尝试一下。
前期我尝试了很久,每次运行到一段时间就卡死了一样,然后就放弃了。最后一个礼拜看评论区说是环境版本配置的问题,才尝试,终于训练起来。确实浪费不少时间和积分呀,也没有太多时间进行改进和炼丹。
最后感谢大家的收听,如果有什么问题,可以在评论区提出大家一起讨论。谢谢了。
ResNeXt ResNeSt
请先绑定您的微信账号 点击立即绑定
敬请谅解,如有疑问请联系FlyAI客服