CRNN:端到端不定长文字识别算法
点击上方“AI搞事情”关注我们
❝
论文:《An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition》
Git code:
https://github.com/bgshih/crnn 官方lua实现
https://github.com/meijieru/crnn.pytorch
https://github.com/bai-shang/crnn_ctc_ocr_tf
❞
这是2015年就发表的一篇基于深度学习的OCR文章,且不用文字切割、可以处理任意长度的端到端文字识别方法。总的来说,CRNN由卷积神经网络从图像中提取文字特征序列,RNN进行文本序列学习,CTC进行网络输出与文本序列的对齐转换。
CRNN = CNN + RNN + CTC,如下图所示:
CRNN借鉴了语音识别思想,引入LSTM+CTC的建模方法解决不定长序列对齐问题。CRNN一般会结合文字检测算法(如:CTPN)一起使用,进行文字定位与识别的整个流程。
一、CNN特征序列提取
CNN通过卷积、池化操作提取输入图像的序列特征,输入图像在输入网络之前被缩放到了固定的高度(文中采用32),经过CNN计算输出RNN所输入的序列特征,由多列向量组成,由于卷积池化具有平移不变性,每一列特征可以映射到原图的矩形感受野。
论文采用VGG结构作为图像特征提取网络,为了适应LSTM的输入格式,文中将第三和第四个max-pooling的核尺度从 2×2 改为了 1×2;同时加速网络收敛,为后面的卷积加上了BN层。
二、RNN序列标记
使用双向RNN网络对CNN输出的特征序列进行进行分类,每一个输入都有一个对应的softmax概率输出。利用LSTM将OCR转为序列化识别问题,既避免了单字符切分与单字符识别的传统处理方式,利用了文字的上下文依赖信息,同时,LSTM可以通过BP算法进行训练优化,可以和CNN进行联合训练,实现端到端任意长度的字符序列识别。
三、CTC转录联结时序分类(Connectionist Temporal Classification, CTC),一种常用在语音识别、文本识别等领域的算法,主要用于处理不定长序列对齐问题,通常接在RNN的后面,体现在RNN输出与标签的损失计算上。假设LSTM最终输出的概率序列为,一种对齐和的对齐方式是先对输入的每个分量 对应一个输出字符,然后将相邻的字符进行去重合并得到对应的输出序列,具体如下图所示。
但是,像hello、happy这样有相邻重复的单词就会无法完整识别,同时对于输入语音或者文字图像往往存在空白区域,不可能每个部分都会有对应的字符映射。于是CTC引入了空白符 ϵ 进行空白占位和重复切分,有效地避免了以上问题。
CTC具有以下几种特性:
「条件独立性」,CTC做了一个假设就是不同时间步的输出之间是独立的。这个假设对于很多序列问题来说并不成立,输出序列之间往往存在联系。
「单调对齐」,CTC只允许单调对齐,在语音识别中可能是有效的,但是在机器翻译中,比如目标语句中的一些比较后的词,可能与源语句中前面的一些词对应,这个CTC是没法做到的。
「多对一映射」,CTC的输入和输出是多对一的关系。这意味着输出长度不能超过输入长度,这在手写字体识别或者语音中不是什么问题,因为通常输入都会大于输出,但是对于输出长度大于输入长度的问题CTC就无法处理了。
所以,输出 的长度一定不大于 。具体CTC原理和推导可以看参考链接【1】,还是比较难懂的。转录时,有两种方式,一种是带字典的,一种是没有字典的。带字典的方式输出的会包含字典所有元素的概率,取概率最大的作为预测结果。不带字典的方式,预测时直接选取输出概率最大的作为最终的预测字符串(ps:没太明白这两个啥意思 ̄□ ̄||)。论文在在无词典和基于词典的场景文本识别任务中都取得了显著的性能。
参考:
Sequence ModelingWith CTC
https://distill.pub/2017/ctc/
【OCR技术系列之七】端到端不定长文字识别CRNN算法详解
https://www.cnblogs.com/skyfsm/p/10335717.html
带你看懂CTC算法
https://zhuanlan.zhihu.com/p/161186907
推荐阅读
DeepHSV:号称可以商用的计算机笔迹鉴别算法
CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention
PolarMask:单阶段实例分割框架,FCOS进阶!
真正意义的Anchor-Free,FCOS目标检测算法了解一下
Windows10下的AlphaPose配置,人体摔倒姿态识别
长按二维码关注我们
有趣的灵魂在等你
CRNN:端到端不定长文字识别算法相关推荐
- chinese-ocr自然场景下不定长文字识别(ctpn + densenet)
chinese-ocr自然场景下不定长文字识别(ctpn + densenet) 注:本文中多处使用各位前辈的经验,项目代码不方便提供,可参考: https://github.com/YCG09/ch ...
- 文字识别(六)--不定长文字识别CRNN算法详解
转自:https://www.cnblogs.com/skyfsm/p/10335717.html 在以前的OCR任务中,识别过程分为两步:单字切割和分类任务.我们一般都会讲一连串文字的文本文件先利用 ...
- 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别
GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...
- OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting
OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting 端到端文本识别(End-to-End Text Spotting)是将文本阅读问题看成一个整体 ...
- DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别
DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别 目录 输出结果 实现代码 输出结果 后期更新-- 实现代码 后期更新-- image_ocr代 ...
- 基于PP-OCR的文字识别算法移植与测试
课程全程将在SOPHGO(算能)云平台上进行. 本次课程将介绍: 1. SOPHGO(算能)云平台环境搭建 2. PP-OCR的文字识别算法 3. 通过BMNNSDK进行PP-OCR模型转换和量化 4 ...
- 【OCR技术系列之八】端到端不定长文本识别CRNN代码实现
CRNN是OCR领域非常经典且被广泛使用的识别算法,其理论基础可以参考我上一篇文章,本文将着重讲解CRNN代码实现过程以及识别效果. 数据处理 利用图像处理技术我们手工大批量生成文字图像,一共360万 ...
- 电脑端怎样具体操作图片文字识别?
办公室职员最离不开的就是电脑了,那么大家平时会不会操作图片文字间的转换呢?并且是电脑端的图片文字识别.如果不会的话,可以看看今天小编的分享哈. 图片转文字的具体操作: 第一步:打开OCR文字识别软件, ...
- attention 文字识别算法_支持40种语言的图片文字识别(OCR)项目
Hi!大家好呀!我是你们努力的喵哥! OCR(光学字符识别)是我们日常很常用的人工智能技术.我们总会有从图片中提取文字的需求.你是不是有需要从图片复制文字的经历?手打是最低效的选择.我们可以使用 OC ...
最新文章
- 嵌入式开发从业人员生存状况
- python中国地图热力图是什么意思_python实现输入的数据在地图上生成热力图效果...
- 从hadoop框架与MapReduce模式中谈海量数据处理
- QML创建C ++插件
- crf java实现_Tensorflow实现crf损失
- Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅
- redhat6.4 安装oracle 10g error
- Android 开发之旅:深入分析布局文件又是“Hello World!”
- git add remote_git命令
- 二分求值(二分适合求答案在两个数之间的题目)
- 半监督学习(semi-supervised learning)
- vscode 使用技巧(持续更新)
- 5 Tips for creating good code every day; or how to become a good software developer
- 读《菜鸟学习***必看,不看别后悔》有感
- linux安装yum报错Unable to locate package yum
- Java课程设计—— 图书管理系统
- 【Web安全从入门到放弃】06_文件包含漏洞
- C# signtool error:no certificates were found that met all the given criteria 错误解决方案
- nginx直接打印输出_ngnix配置打印请求入参和出参消息
- win10修改桌面图标大小