图像或文字识别有什么好的方法?
一、图像或文字识别好的方法
1. 基于CTC的算法
基于 CTC 最典型的算法是CRNN (Convolutional Recurrent Neural Network),它的特征提取部分使用主流的卷积结构,常用的有ResNet、MobileNet、VGG等。由于文本识别任务的特殊性,输入数据中存在大量的上下文信息,卷积神经网络的卷积核特性使其更关注于局部信息,缺乏长依赖的建模能力,因此仅使用卷积网络很难挖掘到文本之间的上下文联系。为了解决这一问题,CRNN文本识别算法引入了双向 LSTM(Long Short-Term Memory) 用来增强上下文建模,通过实验证明双向LSTM模块可以有效的提取出图片中的上下文信息。最终将输出的特征序列输入到CTC模块,直接解码序列结果。该结构被验证有效,并广泛应用在文本识别任务中。Rosetta是FaceBook提出的识别网络,由全卷积模型和CTC组成。Gao Y等人使用CNN卷积替代LSTM,参数更少,性能提升精度持平。
2.Sequence2Sequence 算法
Sequence2Sequence 算法是由编码器 Encoder 把所有的输入序列都编码成一个统一的语义向量,然后再由解码器Decoder解码。在解码器Decoder解码的过程中,不断地将前一个时刻的输出作为后一个时刻的输入,循环解码,直到输出停止符为止。一般编码器是一个RNN,对于每个输入的词,编码器输出向量和隐藏状态,并将隐藏状态用于下一个输入的单词,循环得到语义向量;解码器是另一个RNN,它接收编码器输出向量并输出一系列字以创建转换。受到 Sequence2Sequence 在翻译领域的启发, Shi[4]提出了一种基于注意的编解码框架来识别文本,通过这种方式,rnn能够从训练数据中学习隐藏在字符串中的字符级语言模型。
3.基于校正的方法
基于校正的方法利用一些视觉变换模块,将非规则的文本尽量转换为规则文本,然后使用常规方法进行识别。RARE模型首先提出了对不规则文本的校正方案,整个网络分为两个主要部分:一个空间变换网络STN(Spatial Transformer Network) 和一个基于Sequence2Squence的识别网络。其中STN就是校正模块,不规则文本图像进入STN,通过TPS(Thin-Plate-Spline)变换成一个水平方向的图像,该变换可以一定程度上校正弯曲、透射变换的文本,校正后送入序列识别网络进行解码。
4.基于Attention的方法
基于 Attention 的方法主要关注的是序列之间各部分的相关性,该方法较早在机器翻译领域提出,认为在文本翻译的过程中当前词的结果主要由某几个单词影响的,因此需要给有决定性的单词更大的权重。在文本识别领域也是如此,将编码后的序列解码时,每一步都选择恰当的context来生成下一个状态,这样有利于得到更准确的结果。R^2AM首次将 Attention 引入文本识别领域,该模型首先将输入图像通过递归卷积层提取编码后的图像特征,然后利用隐式学习到的字符级语言统计信息通过递归神经网络解码输出字符。在解码过程中引入了Attention 机制实现了软特征选择,以更好地利用图像特征,这一有选择性的处理方式更符合人类的直觉。
5. 基于分割的方法
基于分割的方法是将文本行的各字符作为独立个体,相比与对整个文本行做矫正后识别,识别分割出的单个字符更加容易。它试图从输入的文本图像中定位每个字符的位置,并应用字符分类器来获得这些识别结果,将复杂的全局问题简化成了局部问题解决,在不规则文本场景下有比较不错的效果。然而这种方法需要字符级别的标注,数据获取上存在一定的难度。Lyu[9]等人提出了一种用于单词识别的实例分词模型,该模型在其识别部分使用了基于 FCN(Fully Convolutional Network) 的方法。[10]从二维角度考虑文本识别问题,设计了一个字符注意FCN来解决文本识别问题,当文本弯曲或严重扭曲时,该方法对规则文本和非规则文本都具有较优的定位结果。
6. 基于Transformer的方法
随着 Transformer 的快速发展,分类和检测领域都验证了 Transformer 在视觉任务中的有效性。如规则文本识别部分所说,CNN在长依赖建模上存在局限性,Transformer 结构恰好解决了这一问题,它可以在特征提取器中关注全局信息,并且可以替换额外的上下文建模模块(LSTM)。一部分文本识别算法使用 Transformer 的 Encoder 结构和卷积共同提取序列特征,Encoder 由多个 MultiHeadAttentionLayer 和 Positionwise Feedforward Layer 堆叠而成的block组成。MulitHeadAttention 中的 self-attention 利用矩阵乘法模拟了RNN的时序计算,打破了RNN中时序长时依赖的障碍。也有一部分算法使用 Transformer 的 Decoder 模块解码,相比传统RNN可获得更强的语义信息,同时并行计算具有更高的效率。
延伸阅读:
二、OCR的技术路线
其中影响识别准确率的技术瓶颈是文字检测和文本识别,而这两部分也是OCR技术的重中之重。
在传统OCR技术中,图像预处理通常是针对图像的成像问题进行修正。常见的预处理过程包括:几何变换(透视、扭曲、旋转等)、畸变校正、去除模糊、图像增强和光线校正等
文字检测即检测文本的所在位置和范围及其布局。通常也包括版面分析和文字行检测等。文字检测主要解决的问题是哪里有文字,文字的范围有多大。
文本识别是在文本检测的基础上,对文本内容进行识别,将图像中的文本信息转化为文本信息。文字识别主要解决的问题是每个文字是什么。识别出的文本通常需要再次核对以保证其正确性。文本校正也被认为属于这一环节。而其中当识别的内容是由词库中的词汇组成时,我们称作有词典识别(Lexicon-based),反之称作无词典识别(Lexicon-free)
图像预处理
传统OCR基于数字图像处理和传统机器学习等方法对图像进行处理和特征提取。常用的二值化处理有利于增强简单场景的文本信息,但对于复杂背景二值化的收效甚微。
传统方法上采用HoG对图像进行特征提取,然而HoG对于图像模糊、扭曲等问题鲁棒性很差,对于复杂场景泛化能力不佳。由于深度学习的飞速发展,现在普遍使用基于CNN的神经网络作为特征提取手段。得益于CNN强大的学习能力,配合大量的数据可以增强特征提取的鲁棒性,面临模糊、扭曲、畸变、复杂背景和光线不清等图像问题均可以表现良好的鲁棒性。
文字检测
对于文字检测任务,很自然地可以想到套用图像检测的方法来框选出图像中的文本区域。常见的一些物体检测方法如下:
Fater R-CNN Faster R-CNN采用辅助生成样本的RPN(Region Proposal Networks)网络,将算法结构分为两个部分,先由RPN 网络判断候选框是否为目标,再经分类定位的多任务损失判断目标类型,整个网络流程都能共享卷积神经网络提取的的特征信息,节约计算成本,且解决Fast R-CNN 算法生成正负样本候选框速度慢的问题,同时避免候选框提取过多导致算法准确率下降。对于受限场景的文字检测,Faster R-CNN的表现较为出色。可以通过多次检测确定不同粒度的文本区域。
相关推荐HOT
更多>>java中栈内存和堆内存的区别是什么?
一、java中栈内存和堆内存的区别Java中分为栈内存和堆内存是为了更好地管理程序的内存使用。栈和堆是两种不同的内存区域,它们具有不同的特点和...详情>>
2023-10-13 22:43:39将编译器后端编译到LLVM有什么优缺点?
一、将编译器后端编译到LLVM的优点1、简化编译器的实现LLVM提供了丰富的抽象接口和优化器,可以方便地生成优化后的目标代码,使编译器的实现变...详情>>
2023-10-13 21:13:52SCHAR_MAX/MIN和CHAR_MAX/MIN有什么区别?
一、SCHAR_MAX/MIN和CHAR_MAX/MIN的区别SCHAR_MAX/MIN 特别强调的是“带符号”的字符的最大、最小数。CHAR_MAX/MIN则是没有声明带符号、却是指...详情>>
2023-10-13 17:33:36数据屏蔽有哪些一般规则?
一、数据屏蔽的一般规则数据屏蔽技术需要遵循一些规则,以便转换后的数据仍然有用。1、数据屏蔽必须是不可逆的一旦数据屏蔽技术转换了真实数据...详情>>
2023-10-11 06:00:16热门推荐
图像或文字识别有什么好的方法?
沸内存在计算机中起什么作用呢?
热java中栈内存和堆内存的区别是什么?
热有哪些开发网站的工具?
新为什么很多编程语言用 end 作为区块结束符,而放弃花括号?
将编译器后端编译到LLVM有什么优缺点?
Notion AI和Chatgpt的区别?
maxima-sbcl和maxima-openmcl有什么区别?
PHP和Java有什么区别?
C 风格的类型转换和 dynamic_cast 有什么区别?
python中的text editor,terminal,interpreter之间的区别是什么?
脚本语言和使用JIT compilation的语言的主要区别是什么?
SCHAR_MAX/MIN和CHAR_MAX/MIN有什么区别?
720和1080p区别?