Koolo233

  • 7

    获得赞
  • 2

    发布的文章
  • 1

    答辩的项目

手写英文字体识别比赛第三名答辩

Batch大小为16,循环次数为3次,损失函数优化完,最终完成评分为84.61。

最后更新 2020/10/27 16:03 阅读 185

手写英文字体识别(名企内推)

最后更新 2020/10/27 16:03

阅读 185

PyTorch Xception HRNet

1.    问题分析与问题定义 

     本次比赛的项目为手写英文字符识别,有超过40万张手写英文姓名图片,而且风格各异,观察下载到本地的数据集可以发现姓名字符序列长度不一,且为三通道黑白图片,由于字符识别以及本数据集的特殊性,不方便使用各种数据增强方法。整体上定义问题为不定长字符识别问题,且文字区域已切出。

      通过分析数据集,最后决定使用CRNN+CTC Loss框架,其中CNN负责特征的提取,RNN负责序列的预测,CTC Loss负责翻译得到最终结果。通过不断改进CNN特征提取模块,最终准确率达到84.61。

 2.    模型改进以及训练策略 

      由于决定使用CRNN+CTC Loss 框架,在这个框架下的模型优化空间较小,主要是尝试使用更为有效的特征提取,即CNN模块。

      在原论文中,作者使用的是简单的7层卷积进行特征提取,而在本次比赛中我尝试使用更为有效的特征提取方式。在改进特征提取模块的过程中,我逐步尝试了ResNet、DenseNet、Xception以及HRNet等十分有效的框架,其中Xception的基础模块十分有效,而DenseNet和HRNet的整体设计十分有效。最终,我实现了基于Xception基础模块的HRNet,取得了我目前的最高分。 

      HRNet对显存的占用十分庞大,受限于显存大小,我对网络进行了压缩并在进行了一次降采样后才送入HRNet框架,这和HRNet原论文中以原分辨率送入网络有较大差别。以DenseNet为整体设计并以Xception为基础模块的网络设计在本地测试中的效果与单纯的Xception网络效果基本持平;而以HRNet为整体设计并以Xception为基础模块的网络设计在测试中提分了约0.4分,但是显存占用增加了1倍,训练时长增加了1倍,测试时长增加了约1倍。 

      在比赛中,我也尝试使用其他技巧来稳定训练过程。由于数据集较大,如果喂入所有数据可能造成训练初期震荡不收敛,因此选择逐次喂入数据;由于框架中存在RNN模块,容易发生梯度爆炸,因此在训练中使用梯度裁剪来避免出现梯度爆炸,同时发现梯度裁剪能加快模型收敛,是一个十分值得尝试的策略。

本文为作者在FlyAI平台发布的原创内容,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请附上原文出处链接和本声明。
本文链接地址:https://www.flyai.com/n/153457
立即参加 手写英文字体识别(名企内推)
代码展示

PyTorch Xception HRNet

选择查看文件
$vue{codeKeys}
  • $vue{ix}
赞赏贡献者还可以查看和下载优质代码内容哦!
赞赏 ¥36.88元
©以上内容仅用于在FlyAI平台交流学习,禁止转载、商用;违者将依法追究法律责任。
讨论
500字
表情
每日优质讨论奖励 20FAI
发送
每日优质讨论奖励 20FAI
删除确认
是否删除该条评论?
取消 删除
感谢您的关注
该篇内容公开后我们将会给你推送公开通知
好的
发布成功!
您的公开申请已发送至后台审核,
通过后将公开展示本详情页!
知道了
向贡献者赞赏
¥36.88
微信支付
支付宝

请先绑定您的微信账号 点击立即绑定

立即支付
温馨提示:
支付成功后不支持申请退款,请理性消费;
支付成功将自动解锁当前页面代码内容,付款前请确认账号信息。
微信扫码支付
请前往Web网页进行支付

敬请谅解,如有疑问请联系FlyAI客服

知道了
举报
请选择举报理由
确定
提示
确定要删除?
取消删除