Pytorch AttentionOCR 中文端到端的文字识别(Attention_ocr.pytorch)

怡宝2号 • 129 次浏览 • 0 个回复 • 2019年01月05日

Pytorch AttentionOCR中文端到端的文字识别 程序完全可用

一、总体结构

本项目在CRNN的基础上进行修改完成的,基于Pytorch实现,程序完成可用
整体流程为:encoder+decoder

  • encoder采用CNN+biLSTM模型
  • decoder采用Attention模型

Pytorch AttentionOCR 中文端到端的文字识别

二、encoder

  • encoder部分采用和crnn一样的模型结构,输入是32pix高的字符图片,宽度不定,但为了batch训练,图片的宽度需要统一,输出为特征矩阵。

  • cnn特征提取部分,高度方向经过了4pooling和一个卷积(valid模式),总共会使得原图的高度缩小pow(2,5)倍,即缩小32倍,宽度方向只是经历2pooling和一个卷积(valid模式),最后的尺寸为width/4+1。举个例子,假设输入的是432* 280的彩色图片,最后的特征矩阵为:4 * 1 * 71* 512

  • encoder第二部分,通过BidirectionalLSTM进行前后序列特征的增强。举个例子,前面cnn的特征矩阵输出为4* 1 * 71*512,这里以一张图片为例,一张图片为71 * 51271可以理解为宽度方向有71个字符,512可理解为每个字符的特征向量,送入BiLSTM时,就是第1个字符的512,第2个字符的512,第3个字符的512......,特征的宽度方向看成序列,依次送入BiLSTM。总结,其实就是一个特征增强。看资料这里也可以用con1d代替,有待实验。经过BiLSTM之后特征为4 * 71 * 256,256BiLSTM隐藏节点的个数

三、Attention decoder

decoder部分主要做不定长文字的识别,和图像描述很像,就是不定长序列(文字)的生成,所以需要用到RNN

总体流程

  1. 根据一定的规则求取权值;
  2. CNN特征乘以权重送入RNN
  3. RNN后接一个linear,再接一个softmax

1.求取Attention权重

  • 对前一次的输出做一个词嵌入(embedding)升维,
  • 联合上一次的输出和RNN隐含层的状态,做一个linearsoftmax,求得Attention权重

2.Attention权重乘以CNN特征

  • Attention权重乘以CNN输出的特征矩阵,最后输出为4* 1*256,其实就是将71个字符,根据Attention权重合并成1个最大概率的字符

3.RNN不定长字符识别

  • 现在就可以将4* 1*256输入RNNRNN后在接一个linearsoftmax,但是很多模型都会对权重CNN特征在做一些操作,不过最后送入RNN的为4 * 1 * 256,表示当前时刻最可能(attention权重)出现的字符。

四、优势

  • 1、可以端到端训练,不需要进行字符分割等操作
  • 2、推理时,只需要将图片的高度保持为32pix就行,宽度无限制
  • 3、模型小,速度快

五、效果

picture predict reading confidence
美国人不愿意与朝鲜人 美国人不愿意与朝鲜人 0.33920
在这里插入图片描述 现之间的一个分享和 0.81095
中国通信学会主办 中国通信学会主办、《 0.90660
此在战术上应大胆、勇 此在战术上应大胆、勇 0.57111
年同期俱点83 年同期俱点83.50 0.14481
留言无恶意心态成 。留言无恶意心态成 0.31054

六、程序

详细程序在本人github仓库Attention_ocr.pytorch,预训练模型,数据集,标注文件都做好了,可以直接下载训练或者使用,最良心的是推理程序都写好了,克隆下来就能用。


原创文章,转载请注明 :Pytorch AttentionOCR 中文端到端的文字识别(Attention_ocr.pytorch) - pytorch中文网
原文出处: https://ptorch.com/news/228.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
Pytorch是什么?关于Pytorch! [ python opencv中文文档 ] 性能测量和改进技术