文章目录

  • 概述
    • 主要分为两个步骤
    • 运行框架
  • 完整项目举例
    • chineseocr
    • chineseocr_lite
    • chineseocr_lite 的 onnx
  • 场景文字检测OD
    • CTPN
    • Scene Text Detection via Holistic, Multi-Channel Prediction
    • EAST 模型与AdvancedEAST
      • 修改后的EAST 模型
  • 字符识别
    • CRNN+CTC 文字识别
      • 考虑训练Recurrent Layers时的一个问题
      • CTC

概述

对于OCR,我查阅资料后,认为,

主要分为两个步骤

1、场景文字检测

具体就是利用CTPN(ECCV 2016),yolo3,psenet, dbnet ,HMCP,EAST ,AdvancedEAST

2、字符识别
具体就是利用

  • Convolutional Recurrent Neural Network(https://github.com/meijieru/crnn.pytorch)
  • crnn_lstm
  • dense ocr
  • 不定长OCR训练

3、(可选)判断行文本方向

行文本方向分类网络

4、(可选)NLP相关算法对文字识别结果进行矫正(后处理)

运行框架

  • 腾讯的ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架https://github.com/Tencent/ncnn
  • darknet
  • opencv dnn
  • keras
  • pytorch

完整项目举例

chineseocr

本项目基于yolo3 与crnn 实现中文自然场景文字检测及识别

  • https://github.com/chineseocr/chineseocr
  • darknet 优化版本:https://github.com/chineseocr/darknet-ocr.git

chineseocr_lite

本项目基于chineseocr 与psenet 实现中文自然场景文字检测及识别
https://github.com/DayBreak-u/chineseocr_lite/tree/master

chineseocr_lite 的 onnx

https://github.com/DayBreak-u/chineseocr_lite

场景文字检测OD

得到的效果,就是找到文本的框框

CTPN

由于加入LSTM,所以CTPN对水平文字检测效果超级好。因为Anchor设定的原因,CTPN只能检测横向分布的文字,小幅改进加入水平Anchor即可检测竖直文字。
但是由于框架限定,对不规则倾斜文字检测效果非常一般。CTPN加入了双向LSTM学习文字的序列特征,有利于文字检测。
但是引入LSTM后,在训练时很容易梯度爆炸,需要小心处理。

Scene Text Detection via Holistic, Multi-Channel Prediction

文章源自对Face++的论文《Scene Text Detection via Holistic, Multi-Channel Prediction》的解析。

本文是在边缘检测经典算法HED[2]之上的扩展,在这篇论文中我们讲过HED算法可以无缝转移到语义分割场景中。而这篇论文正是将场景文字检测任务转换成语义分割任务来实现HED用于文字检测的。

HED之所以能用于场景文字检测一个重要的原因是文字区域具有很强的边缘特征。

论文的题目为Holistic,Multi-Channel Prediction(HMCP),其中Holistic表示算法基于HED,Multi-Channel表示该算法使用多个Channel的标签训练模型。也就是为了提升HED用于文字检测的精度,这篇文章做的改进是将模型任务由单任务模型变成是由文本行分割,字符分割和字符间连接角度构成的多任务系统。由于HMCP采用的是语义分割的形式,所以其检测框可以扩展到多边形或者是带旋转角度的四边形,这也更符合具有严重仿射变换的真实场景。

这篇论文巧妙的将语义分割用于场景文字检测领域,其三个掩码图的多任务模型的设计非常漂亮。最后通过三个掩码图生成检测框的算法技术性非常高,是一篇非常值得学习的论文。

EAST 模型与AdvancedEAST

场景文字检测基本分成基于Anchor类和基于像素类的,基于Anchor类的有RRPN,CTPN等,它们都是在Faster R-CNN的基础上再根据场景文字检测的特点修改得到。EAST 基于像素的场景文字检测算法 HMCP [2],HMCP预测的目标有三个,分别是:文本行掩码,字符掩码和字符间角度掩码

这里要介绍的EAST(Efficient and Accurate Scene Text detector)也是一个基于像素点的场景文字检测算法,但是它要比HMCP更直观一些

针对EAST不擅长检测长文本的问题,Advanced-EAST提出了添加对文本框两侧的边界的预测,有效的解决了EAST不擅长检测长文本的问题。

EAST是继HMCP之后又一篇使用分割算法进行场景文字检测的,由于场景文字检测的密集性和紧密性,此类基于分割的算法无疑比基于Anchor的算法更适用于场景文字检测。对比HMCP,EAST将输出任务拆分成了多组不同的属性,这一操作对提高模型的属性至关重要。最初版本的EAST检测的效果会非常碎,有时候会把一行文字检测成为好几块。而出现这个问题的原因是基于VGG-16的骨干网络感受野有限,使当前像素点不可能预测距离它非常远的边界框的信息。Advanced-EAST的基于边界的输出值预测它自己这一侧的边界,大幅提升了它对边界的检测能力。

修改后的EAST 模型

https://github.com/HiYx/AdvancedEAST

字符识别

本文的重点是如何对已经定位好的文字区域图片进行识别。

基于RNN文字识别算法主要有两个框架:

CNN+RNN+CTC(CRNN+CTC)
CNN+Seq2Seq+Attention

CRNN+CTC 文字识别

整个CRNN网络可以分为三个部分:

假设输入图像大小为 [公式],注意提及图像都是 [公式] 形式。

Convlutional Layers

这里的卷积层就是一个普通的CNN网络,用于提取输入图像的Convolutional feature maps,即将大小为 [公式] 的图像转换为 [公式] 大小的卷积特征矩阵,网络细节请参考本文给出的实现代码。

Recurrent Layers

这里的循环网络层是一个深层双向LSTM网络,在卷积特征的基础上继续提取文字序列特征。

由于CNN输出的Feature map是[公式]大小,所以对于RNN最大时间长度 [公式] (即有25个时间输入,每个输入 [公式] 列向量有 [公式] )。

Transcription Layers

将RNN输出做softmax后,为字符输出。

关于代码中输入图片大小的解释:

在本文给出的实现中,为了将特征输入到Recurrent Layers,做如下处理:

  • 首先会将图像在固定长宽比的情况下缩放到 [公式] 大小( [公式] 代表任意宽度)
  • 然后经过CNN后变为 [公式]
  • 针对LSTM设置 [公式] ,即可将特征输入LSTM。

所以在处理输入图像的时候,建议在保持长宽比的情况下将高缩放到 [公式],这样能够尽量不破坏图像中的文本细节(当然也可以将输入图像缩放到固定宽度,但是这样由于破坏文本的形状,肯定会造成性能下降)。

考虑训练Recurrent Layers时的一个问题

对于Recurrent Layers,如果使用常见的Softmax cross-entropy loss,则每一列输出都需要对应一个字符元素。那么训练时候每张样本图片都需要标记出每个字符在图片中的位置,再通过CNN感受野对齐到Feature map的每一列获取该列输出对应的Label才能进行训练,如图9。

在实际情况中,标记这种对齐样本非常困难(除了标记字符,还要标记每个字符的位置),工作量非常大。另外,由于每张样本的字符数量不同,字体样式不同,字体大小不同,导致每列输出并不一定能与每个字符一一对应。

当然这种问题同样存在于语音识别领域。例如有人说话快,有人说话慢,那么如何进行语音帧对齐,是一直以来困扰语音识别的巨大难题。

所以CTC提出一种对不需要对齐的Loss计算方法,用于训练网络,被广泛应用于文本行识别和语音识别中。
Connectionist Temporal Classification(CTC)详解

CTC

CTC是一种Loss计算方法,用CTC代替Softmax Loss,训练样本无需对齐。CTC特点:

引入blank字符,解决有些位置没有字符的问题
通过递推,快速计算梯度

CRNN+CTC总结

这篇文章的核心,就是将CNN/LSTM/CTC三种方法结合:

首先CNN提取图像卷积特征
然后LSTM进一步提取图像卷积特征中的序列特征
最后引入CTC解决训练时字符无法对齐的问题

即提供了一种end2end文字图片识别算法,也算是方向的简单入门。

一般情况下对一张图像中的文字进行识别需要以下步骤

  • 定位文稿中的图片,表格,文字区域,区分文字段落(版面分析)
  • 进行文本行识别(识别)
  • 使用NLP相关算法对文字识别结果进行矫正(后处理)

场景文字检测OD与字符识别OCR概述相关推荐

  1. 白翔团队新作:借助CLIP完成场景文字检测

    作者:秃头小苏 编辑:3D视觉开发者社区 原文链接:https://arxiv.org/pdf/2302.14338.pdf 代码链接:https://github.com/wenwenyu/TCM ...

  2. 基于深度学习的目标检测及场景文字检测研究

    基于深度学习的目标检测及场景文字检测研究 转载自:https://blog.csdn.net/u013250416/article/details/79591263 一.目标检测与场景文字检测定义 目 ...

  3. c++实验总结_史上最全场景文字检测资源合集(70篇重要论文 + 15个开源代码 + 176个实验结果 + 1305个统计信息)...

    本文总结了2012年以来在场景文本检测领域的70篇代表性论文.21个常用数据集.15份开源代码,包含176个实验结果以及超过1300条统计信息.Github资源链接见文末. 一.前言 许多自然场景中包 ...

  4. 史上最全场景文字检测资源合集(70篇重要论文 + 15个开源代码 + 176个实验结果 + 1305个统计信息)...

    点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:刘崇宇 转载自:CSIG文档图像分析与识别专委会 本 ...

  5. 基于YOLOv3 与CRNN的中文自然场景文字检测与识别

    (欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 52CV君曾经分享过多篇关于文字检测与识别的文章: 华科白翔老师团队ECCV2018 OCR论文:Mask Tex ...

  6. SSD: Signle Shot Detector 用于自然场景文字检测

    前言 之前我在 论文阅读:SSD: Single Shot MultiBox Detector 中,讲了这个最新的 Object Detection 算法. 既然 SSD 是用来检测物体的,那么可不可 ...

  7. CVPR 2022 | 网易华科提出特征采样与分组:基于Transformer的场景文字检测方法

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 转载自:CSIG文档图像分析与识别专委会 本文简要介绍了CVPR 2022录用的论文"Few Co ...

  8. 实现基于darknet框架实现CTPN版本自然场景文字检测 与CNN+CTCOCR文字识别的ChineseOCR搭建

    Github地址 Github源码地址 支持系统:mac/ubuntu python=3.6 实现功能 文字检测: 文字识别: 支持GPU/CPU,CPU优化(opencv dnn) docker镜像 ...

  9. 场景文字检测(一)--CTPN(Connectionist Text Proposal Network)

    论文:Detecting Text in Nature Image with Connectionist Text Proposal Network 在通用目标检测中,每一个物体都有一个定义良好的封闭 ...

  10. 中文OCR场景文字检测工具cnstd、文本框文字识别工具cnocr调试评测

    这款很好用的工具项目地址为:https://github.com/breezedeus/cnstd 目前基于PyTorch开发 首先需要安装相关依赖: pip install cnstdpip ins ...

最新文章

  1. Beaglebone Black USB联机
  2. Qt Creator支持平台
  3. 唐骏《我的成功也可以复制》1,盖婚房
  4. 中学计算机教育未得到重视,新时期中学计算机教学现状和发展趋势研究
  5. 信息学奥赛C++语言: 数字方阵
  6. linux 搭建go编译环境搭建,linux上搭建完整go语言vim开发环境
  7. 卢伟冰暗示Redmi K40轻奢版:搭载联发科天玑1100
  8. 刚刚创业的你 这几点让你的公司不断前进
  9. 云架构化-设计理念参考
  10. Bloomberg 的一些功能
  11. 图解Kafka中的数据采集和统计机制
  12. Windows自带的远程协助工具(非远程桌面)
  13. PX4 mixer load
  14. 【Rust日报】2022-09-13 Stabilize GAT
  15. c语言实现24位彩色图像二值化
  16. 中国传媒大学计算机考研调剂,2018年中国传媒大学考研调剂信息
  17. 阿里妈妈一面简历面-半小时直接挂
  18. 数据分析:在天猫开一个店需要多少成本?
  19. linux终端设备:pty设备初始化、创建过程
  20. 即将一起变革的区块链项目xx network

热门文章

  1. python爬虫-- 爬取51job网招聘信息
  2. 25 亿条/秒消息处理!Flink 又双叒叕被 Apache 官方提名
  3. android设计模式之--观察者模式
  4. 鱼哥,我怕蛇,可以搞Python么?
  5. Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程
  6. matlab中怎样提取结构体下的数据库,MATLAB如何提取结构体中数据
  7. 3 缓存文件写入失败_分布式缓存数据库一致性问题
  8. linux内核 list 使用,使用linux 内核中代码之--list
  9. python种颜色循环_如何用Python做一个RGB和16进制的互转工具
  10. python从数据库中取出文件保存到excel,csv表格中的办法: