前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >06. OCR学习路径之CRNN文本识别

06. OCR学习路径之CRNN文本识别

原创
作者头像
Aalto
修改2020-01-02 11:21:17
3.1K0
修改2020-01-02 11:21:17
举报
文章被收录于专栏:晓说AI晓说AI

前言

在了解了如何检测到文本之后,我们需要识别出检测文本内的文字信息。在文本识别完成之后,整个OCR光学字符识别的过程才算基本完成。那么,本次课程主要讲述识别文本的算法。

一.算法简介

检测出的文本片段一般是一行文字,具有sequence-like属性,因此此类文本识别归属为image-based sequence recognition的问题。这就与常规的物体识别不同,它有一系列的标签,识别出的结果是序列化的字符,而不是单个标签,类序列对象的另一个特点是其长度不统一,标签也是长度变化的。因此,解决此类问题,就不能采用固定输入和输出的传统CNN模型了。

对于此类识别问题,目前比较流行的算法就是CRNN+CTC的方式,我们将展开来说。

一篇比较经典的文章:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition。

链接:https://arxiv.org/pdf/1507.05717.pdf

优点:不需要预处理(二值化、切割等)、可以直接从sequence的target上学习(label为语句)、不受序列长度约束。

CRNN+CTC网络架构
CRNN+CTC网络架构

架构包括三部分:

1) 卷积层,从输入图像中提取特征序列;

2) LSTM层,预测每一帧的标签分布,从卷积层获取的特征序列的标签(真实值)分布

3) 转译层,将每一帧的预测变为最终的标签序列。

CRNN借助了语音识别中解决不定长语音序列的思路。对于序列问题的解决,通常使用循环网络RNN,为了消除RNN网络常见的梯度爆炸问题,引出LSTM,这些算法在语音识别领域都已相当成熟,有很好的表现,现在就是设计特征,让图像特征可以有近似于语音的特征表达。

语音识别中的时间对应着图像的横向尺度W。

如何获取上述特征呢?

现在输入有个图像,为了将特征输入到Recurrent Layers,做如下处理:

l 首先会将图像缩放到 32×W×1 大小

l 然后经过CNN后变为 1×(W/4)× 512

l 接着针对LSTM,设置 T=(W/4) , D=512 ,即可将特征输入LSTM。

l LSTM有256个隐藏节点,经过LSTM后变为长度为T × nclass的向量,再经过softmax处理,列向量每个元素代表对应的字符预测概率,最后再将这个T的预测结果去冗余合并成一个完整识别结果即可。

网络配置如下图,

CRNN网络配置
CRNN网络配置

其中,‘k’, ‘s’ 和‘p’ 代表 kernel size, stride 和padding size

以上都比较好理解,但是最后一步,经过LSTM后变为长度为T × nclass的向量,再经过softmax处理,列向量每个元素代表对应的字符预测概率,最后再将这个T的预测结果去冗余合并成一个完整识别结果即可。如何去冗余呢?这可是个技术活了。

当然,语音识别也早就做好了,文字识别在这里所做的一切都是为了吧图像特征与语音特征近似化,其他的工作都交给语音识别算法了。

二.CTC

详细的CTC推导过程网上已经有很多,说一下我的理解就是。由于输出的T=W/4是一个不定长的结果,而我们需要做的就是将该序列结果翻译成最终的识别结果。但是LSTM进行时序分类时的输出有一个特点,就是同一个字符被连续识别两次,因此需要一个去冗余机制,但是简单粗暴地去处冗余也不行,比如“--hh-e-l-ll-oo--”,直接去冗余就变成helo了,那就识别错误了。

因此CTC为了解决这种二义性,提出了插入blank机制,比如下图的以符号“-”代表blank。若标签为“aaa-aaaabb”则将被映射为“aab”,而“aaaaaaabb”将被映射为“ab”。引入blank机制,就可以很好地处理了重复字符的问题了。

-s-t-aatte转译成state
-s-t-aatte转译成state

但是通常一个正确的输出序列可以有多条路径达成,比如直接贴一张其他博主的图吧,下面酱紫的:

可以看出,这4条路线都能达到正确的结果输出,那么如何找出最优的路径呢?就引出下一个公式,

其中

Β 的作用就是maps π onto l by firstly removing the repeated labels。

y^t_πt是时刻t在能输出正确值πt的情况下,所输出某一个字符的概率。

每一个字符的输出都对应着一个softmax计算出的概率ytπt ,再把每一个字符输出对应的概率相乘,得出这条路径的概率为p(π|y),那所有路径的概率总和就是p(l|y),也就是以上公式想表达的意思了。

三.Loss设计

由以上分析,知道了最佳路径的概率值,那么现在就可以设计一个训练的Loss函数来寻找一个最大概率的输出序列,

Ii是训练图片,I_i是真实标签。

通过对概率的计算,就可以对之前的神经网络进行反向传播更新。类似普通的分类,CTC的损失函数O定义为负的最大似然,为了计算方便,对似然取对数。我们的训练目标就是使得损失函数O优化得最小即可。

四.训练阶段

训练的时候,为了加速训练,所有的图片都scale到100*32

测试的图片固定高度为32的比例,宽度按对应比例缩放。

总结

该算法在识别乐谱上也有良好的表现,这显然证实了它的泛化性。

可以实现端到端的训练。

1) 不依赖字符切分;

2) 不限定语料范围;

3) 模型参数相对较少;

4) 可充分学习到上下文的关系,等等。

缺点:

1) CTC每次都要计算概率,采用前缀搜索算法解码或者约束解码算法;

2) 受CTC算法对速度的要求,输出长度因此受到限制,不能太长。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 一.算法简介
      • 二.CTC
        • 三.Loss设计
          • 四.训练阶段
            • 总结
            相关产品与服务
            文字识别
            文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档