⚠️本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!
✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。
💙个人主页: GoAI |💚 公众号: GoAI的学习小屋 | 💛交流群: 704932595 |💜个人简介 : 掘金签约作者、百度飞桨PPDE、领航团团长、开源特训营导师、CSDN、阿里云社区人工智能领域博客专家、新星计划计算机视觉方向导师等,专注大数据与人工智能知识分享。
💻文章目录
《深入浅出OCR》前言知识(二):深度学习基础总结 (✨文末深度学习总结导图)
《深入浅出OCR》前言知识(一):机器学习基础总结 (✨文末机器学习总结导图)
《深入浅出OCR》第三章:OCR文字检测 (本篇)
👨💻本篇导读: 上一章我们介绍到OCR流程包括两阶段算法和端到端算法,目前在通用场景识别效果下,两阶段OCR相比端到端OCR技术更成熟,所以工业界大多采用两阶段OCR。 本篇为 【《深入浅出OCR》第三章:OCR文字检测】,主要对深度学习OCR文字检测方法进行介绍,本人将从经典算法结构、代码、论文解读等角度展开,配合作者总结的思维导图,深入浅出OCR知识。
《深入浅出OCR》第三章:OCR文字检测
一、文字检测介绍
OCR技术是指从扫描或拍摄的图像中提取文本信息的技术,其中最核心的问题是文字检测和文字识别。文字检测是指在图像中定位和检测出所有的文本区域,而文字识别则是将检测出来的文本区域转换成可编辑文本。如下图所示,医疗文本检测的准确性和效率对于OCR识别系统的整体性能至关重要。
二、传统的文字检测方法
传统的文字检测方法主要是基于图像处理和机器学习的算法,大致可分为两类:基于连通域的方法和基于滑动窗口的方法。
2.1 基于连通域的自然场景文本检测方法:
传统文本检测方法最常见的是基于连通性检测算法。 基于连通区域分析通过检测像素值相等、且前景像素点位置邻近区域的形状、大小、位置等特征,判断是否为文本区域。通过获得文本候选区域,缩小搜索范围。然而这类方法大量依赖文本连通区域的检测结果,对文本检测召回率和文本轮廓的准确性的影响很大。
2.1.1 基于边缘检测的文本检测方法:
基于各类算子的边缘检测的算法,如Canny边缘检测、Sobel边缘检测等,通过检测图像中的边缘来定位文本区域。
2.2 基于滑动窗口的文本检测方法:
该类方法通常是基于单个字符的分类器,将滑动窗口作用于候选框。通过在图像中设定滑动子窗口,并在其滑窗的各位置应用检测算法,然而该方法在复杂场景(如光照、阴影)容易导致字符分类效果不佳,同时如何选取合适检测窗口滑动步长也比较复杂。
2.3 传统文字检测技术总结:
传统的文字检测方法通常采用图像处理技术,如边缘检测、连通域、形态学等结合机器学习算法,虽然有着良好的理论基础和稳定性,但由于光照变化、褪色、噪声干扰等因素,且文本区域不规则、多方向、多尺度等复杂场景检测难度增加导致效果表现较差,近几年来基于深度学习的文字检测逐渐成为检测主流方法。
接下来,本人将按时间发展及方法分类对OCR文字检测进行详细介绍。
三、基于深度学习的文字检测方法
3.1 深度学习文字检测技术发展
从时间顺序出发,深度学习的文本检测方法启发于通用目标检测算法(faster rcnn 、ssd),尝试修改锚框尺寸来适应文本目标 ,例如CTPN是在faster rcnn(2016)基础上做修改,2017年的Textbox是在ssd上做改进,后续则在前面基础上产生各种改进方法,目前主流的文字检测算法为DB算法及其改进算法等。
3.2场景文字检测方法分类
从结构出发,作者将文字检测技术可以分为自顶向上和自顶向上 。而从识别方式上,主要分为基于回归和基于分割两种检测方式。 其中,自顶向下分为两阶段和单阶段,单阶段又分为规则与不规则文本检测,其各自代表算法将在本章具体介绍。
3.3 早期深度学习文字检测算法
在深度学习出现之前,场景文本检测的主要趋势是自下而上的,且大多数使用手工提取特征(例如MSER 或 SWT)作为基础的组件。早期深度学习检测通过采用SSD,R-CNN系列等算法进行物体检测。
R-CNN
R-CNN流程如下图所示,首先对输入图片进行提取一系列的候选区域,然后对这些候选区域用CNN提取固定长度的特征,然后用SVM对特征进行分类,最后对候选区域进行微调。
R-CNN作为R-CNN系列的初代算法,并没有过多使用深度学习思想。如在算法流程中第二阶段提取region proposal和最后阶段使用使用SVM实现分类。
Fast R-CNN
Fast R-CNN是在R-CNN和SPPnets基础上进行改进。首先将SPP的空间金字塔池化思想引入到R-CNN,其次用softmax代替SVM分类器,同时将bounding box 回归汇总到整体框架。
Faster R-CNN
Faster R-CNN为基于区域的卷积神经网络,主要用于目标检测。而在文字检测中,其首先将原始图像通过卷积神经网络提取特征,然后将特征图输入到Region Proposal Network(RPN)中生成候选文本区域,最后通过分类器判断每个候选区域是否为文本区域。
优点: Faster R-CNN采用与Fast R-CNN相同设计,只是用内部深层网络代替候选区域方法。其检测速度较快,能够处理多尺度、多方向、多形状的文本。缺点是在文字较小或者垂直排列可能会出现漏、误检。
SSD
SSD属于one-stage方法,主要有以下几点:
- 基于Faster R-CNN中的Anchor,提出相似先验框概念。
- 特征提取阶段:使用 VGG16 网络作为特征提取器,将全连接层替换成卷积层,并在最后直接采用卷积进行检测。
- 预测阶段;从不同比例特征图中产生不同比例预测,并明确地按长宽比分离预测。
3.4 主流深度学习文字检测算法
目前深度学习文字检测方法主要分为基于回归与基于分割算法两类,其中基于回归算法对规则文本识别较好,无法准确检测不规则文本,而基于分割方法在两种文本的检测结果不错,但存在耗时问题。
下面作者将对各自领域的文字检测方法进行展开介绍:
3.4.1 基于回归算法
针对基于回归的文本检测方法,其思想是利用若干个Anchor产生多个候选文本框,然后经过非极大值抑制NMS后处理得到检测结果。此外,在后处理此前还可以进一步精调。
基于回归算法导图
基于回归文本检测方法和目标检测算法的方法相似,文本检测方法只有两个类别,图像中的文本视为待检测的目标,其余部分视为背景。下面作者将重点介绍基于回归的文字检测方法CTPN、EAST等。
✨CTPN(2016)
论文地址:Detecting Text in Natural Image with Connectionist Text Proposal Network
参考代码:github
CTPN简介:
CTPN可以检测水平或微斜的文本行。在CTPN模型的图像预测流程中,在特征提取阶段使用VGG16做基础网络提取各字符的局部图像特征,中间使用BLSTM层提取字符序列上下文特征,然后通过FC全连接层,最后经过预测分支输出各个文字块的坐标值和分类结果概率值。在数据后处理阶段,将合并相邻的小文字块为文本行。
算法具体包括以下几个步骤:
-
使用VGG16位backbone提取空间特征,取VGG的conv5层输出feature map;
-
使用3*3的滑窗针对feature map提取空间特征形成新的feature map;
-
将新的feature map进行reshape,输入到双向LSTM提取每一行的序列特征;
-
将双向LSTM的输出重新reshape,在经过一个FC卷积层;
-
经过类似Faster R-CNN的RPN网络获得text proposals;
-
使用NMS进行后处理,过滤多余的文本框;
-
假如理想的话(文本水平),会将上述得到的一个文本小框使用文本线构造方法合成一个完整文本行,如果还有些倾斜,会做一个矫正的操作。
总结:
CTPN将文字沿文本行方向切割成更小且宽度固定的Proposal,极大的提高检测定位的精度。同时,考虑到文本水平行的语义上下文信息,使用双向LSTM编码水平行的文本信息,进一步提高了网络的文本特征表示能力。
缺点: 对于非水平的文本的检测效果并不好。
CTPN学习参考: 链接
DeepTextSpotter
【ICCV2017】Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework.
论文地址:Deep TextSpotter
参考代码: code
Textboxes
TextBoxes: A Fast Text Detector with a Single Deep Neural Network
TextBoxes是一种针对多方向文本检测的算法,使用多个检测框对文本区域进行精细化检测,并可以对文本区域进行旋转。主要对SSD算法进行优化,采用更大长宽比的预选框,采用1x5的卷积核;但只支持横向文本检测。
模型简介:
Textboxes为基于SSD框架检测模型,在其基础上进行改进,采用28层的全连接卷积网络,采用端到端训练,其主要改进如下:
- 为了适应文字行细长型的特点,候选框的长宽比增加不同初始值。
- 为适应文本行细长型特点,特征层也用长条形卷积核代替了其他模型中常见的正方形卷积核。
- 为防止漏检文本行,还在垂直方向增加了候选框数量。
- 为检测大小不同的字符块,在多个尺度的特征图上并行预测文本框,然后对预测结果做NMS过滤。
Textboxes++
TextBoxes++: A Single-Shot Oriented Scene Text Detector
Textboxes++是Textboxes的升级版本,主要增加对倾斜文本的支持。为此,将标注数据改为了旋转矩形框和不规则四边形的格式;对候选框的长宽比例、特征图层卷积核的形状都作了相应调整。
SegLink(2017)
Detecting Oriented Text in Natural Images by Linking Segments
论文地址: Detecting Oriented Text in Natural Images by Linking Segments
参考代码: code
简介:SegLink是在CTPN基础上进行改进,在SegLink模型的标注数据中,先将每个单词切割为更易检测的有方向的小文字块,然后用邻近连接将各个小文字块连接成单词。从论文的结果来看,在复杂场景下的识别效果要好于CTPN。
详细介绍:
如下图所示,该模型能够同时从6种尺度的特征图中检测小文字块。这种方案方便于识别长度变化范围很大的、带方向的单词和文本行,相比于CTPN等文本检测模型,SegLink的图片处理速度快很多。
✨EAST(2017)
EAST: An Efficient and Accurate Scene Text Detector
论文地址:EAST: An Efficient and Accurate Scene Text Detector
简介:
EAST是在Seglink基础上的改进算法,采用全卷积神经网络(FCN)来进行像素级别的文本区域检测。通过卷积层、池化层、上采样层等操作将原始图像转换为特征图,然后通过两个分支网络来检测文本的边界框和方向。 在识别倾斜和弯曲文本的效果上比较好,在DBnet算法出现前,EAST成为主流的文本检测算法之一。
详细介绍:
EAST模型主要思想是FCN+NMS,首先使用全卷积网络 生成多尺度融合的特征图,然后在此基础上直接进行像素级的文本块预测。该模型的执行速度很快且检测英文单词效果较好。支持旋转矩形框、任意四边形两种文本区域标注形式。
-
对应于四边形标注,模型执行时对特征图中每个像素预测其到四个顶点坐标差值。
-
对应于旋转矩形框标注,模型执行时会对特征图中每个像素预测其到矩形框四边的距离、以及矩形框的方向角。
缺点 : 检测中文长文本行效果欠佳。由于感受野不够大,且分数采用sigmod函数,样本不均衡。
总结:虽然EAST解决了CTPN无法解决的问题:旋转、倾斜文本,但是仍然无法解决扭曲的文本,但是在现实中依旧是存在十分多的这一类场景,因而像DBNet这些基于分割的自然场景文本检测方法变得流行起来。
EAST学习参考: 链接
总体来说,深度学习方法在OCR文字检测领域中取得了非常显著的进展,并且已经在很多实际应用中得到了广泛的应用。然而,随着OCR技术的不断发展,我们可以期待更多更先进的算法和技术的出现,从而进一步提高OCR文字检测的准确性和鲁棒性。
3.4.2 基于分割算法
下图为基于分割的文本检测方法流程,其基本思路是通过分割网络结构进行像素级别的语义分割,进而基于分割的结果构建文本行。
导图
针对基于分割算法包含2018年PixelLink,2019年PSENet、PAN(pse改进)等,目前DBNet是主流的基于实例分割的方法。 接下来,作者将对主流的文字检测算法进行文字检测介绍。
PixelLink
Pixellink采用分割的方法解决文本检测问题,分割对象为文本区域,将同属于一个文本行(单词)像素链接在一起来分割文本,直接从分割结果中提取文本边界框,达到同基于回归的文本检测效果。
PixelLink的主要思想是将像素点分为文本像素点和非文本像素点,然后通过连接相邻的文本像素点来得到文本区域。
PSENet
2019 PSENET
代码:code
针对基于分割的文本算法难以区分相邻文本的问题,PSENet提出渐进式的尺度扩张网络学习文本分割区域,预测不同收缩比例文本区域,并逐个扩大检测到的文本区域,可有效解决任意形状相邻文本的检测问题。
模型结构:
Psenet网络采用了resnet+fpn的架构,通过resnet提取特征,取不同层的特征送入fpn进行特征融合,其结构如下图所示:
✨DBNet
论文地址:Real-time Scene Text Detection with Differentiable Binarization
参考代码: DBNet
简介:
DBNet是近年来的主流自然场景文本检测算法,其改进版本在准确率和速度相比以往都再创新高。
DB提出可微分阈值,通过一个近似于阶跃函数的二值化函数使得分割网络在训练时学习文本分割的动态阈值,使模型提升精度,简化后处理。主要思想是先获取图像中的文本区域,再利用opencv等后处理得到文本区域的最小包围曲线;
模型结构:
网络输入假设为w * h * 3。DB的backbone网络整体结构采用FPN设计思想,由多层上采样和下采样的特征图concat完成,总计进行5次下采样,3次上采样操作。最终的输出特征图大小为原图的1/4 。网络头部部分,分别引出2个分支。一个负责预测概率图 (probability map),另一个负责预测阈值图 (threshold map)。概率图经过阈值图处理,进行二值化后得到二值图 (approximate binary map)。最后经过后处理操作得到最终文字的边。
-
图像输入特征提取主干,提取特征;
-
特征金字塔上采样到相同的尺寸,并进行特征级联到特征F;
-
特征F用于预测概率图(probability map P)和阈值图(threshold map T);
-
通过P和F计算近似二值图(approximate binary map B^)
DBNet学习参考: Paddle-DBNet
PAN
论文地址:链接
分割方法在一定程度解决弯曲文本检测问题,但是后处理逻辑较为复杂以及预测速度较慢。因此,PAN针对以上问题,从网络设计和后处理方面进行改进,提升算法性能。具体改进如下:
- PAN使用轻量级的ResNet18作为Backbone,。
- 设计轻量级的特征增强模块FPEM和特征融合模块FFM增强Backbone提取的特征。
- 后处理采用像素聚类方法,沿着预测的文本中心(kernel)四周合并与kernel的距离小于阈值d的像素。PAN保证高精度的同时具有更快的预测速度。
PAN++
【TPAMI'2021】 PAN++
FCENet
2021 FCENet 论文视频
论文提出针对场景文本中的任意形状的文本框利用傅里叶变换进行建模的方法,骨干网络采用ResNet+FPN的架构,算法对文本中心置信度大于阈值的像素点所对应的傅里叶特征向量进行傅里叶反变换,并经过非极大值抑制得到最终的检测结果。
FCENet算法流程如图所示:
-
输入图像会经过主干网络和 FPN 提取特征。FPN 上不同层负责不同尺度的文本目标,提取的特征会送入到共享的检测头中。
-
共享的检测头Head部分具有两个分支,其中分类分支预测文本区域和文本中心区域的概率图,相乘得到属于文本中心分类的得分图;回归分支则负责预测傅里叶特征向量。
✨ DBNet++
2022 Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion
论文地址 DBNet++
参考代码:Github
在以往的分割算方法中,多尺度特征图大都是通过FPN
后直接进行concatenate来实现,这样做并没有考虑不同尺度特征图的重要性是不一样的。而DBNet++在DBNet的基础上增加了ASF(Adaptive Scale)模块
。不同尺度的特征通过ASF模块处理,可以得到更佳的融合特征。
ASF模块:
具体如下图所示,自适应特征图融合模块ASF使用空间注意力机制,对每个通道取均值得到特征图每个像素位置上的重要性,再将其加到原输入特征图上,增强每个位置的特征值,再通过卷积输出通道为N个的注意力权重,使得输出的权重能衡量每个尺度特征图的重要性。
DBNet系列总结:
- 速度快,精度高,能检测任意形状的文本多种类型的文本。
- 通过提出DB(Differentiable Binarization),类似额外约束的loss,使得模型训练效果更佳。
- DBNet++在DBNet的基础上,通过引入ASF模块,在少量耗时增加的代价下,提升了准确性。
- 缺点是DBNet,DBNet++不能解决环形文字里面还有文字的情况。
3.4.3 深度学习文字检测总结
名称 | 代表方法 | 优点 | 缺点 |
---|---|---|---|
基于回归的方法 | TextBoxes++,EAST,DeepReg,DeRPN | 后处理简单,只需NMS操作 | 针对任意形状的文本效果不佳 |
基于部件(Part-based)的方法 | SegLink,SegLink++ | 擅长长文本行 | 算法比较复杂 |
基于分割的方法 | Mask TextSpotter,PSENet,SAE | 可检测任意形状的文本 | 后处理较为麻烦,花费时间更多 |
四、文字检测常见指标
IOU
IOU(IntersectionOverUnion,交并比)是目标检测中常见的评价标准,主要是衡量模型生成预测检测框(PredictedBoundingBox)和标注(GroundTruthBox)间的重叠程度,计算公式如下:
NMS:
NMS(Non-MaximumSuppression,非极大值抑制)是检测算法中经典的后处理步骤,对检测最终性能的影响至关重要。这是因为原始的检测算法通常会预测出大量的检测框,其中产生了大量错误的、重叠的和不准确的样本,需要通过大量的算法计算来过滤这些样本。如果处理得不好,则会大大降低算法的性能,所以利用一个有效的算法来消除多余的检测框以获得最佳的预测就显得非常必要。
OCR文字检测评估指标结果
通过对比上述方法在不同数据集上的的文字检测评估指标,参考其他资料如下结果。评价指标为准确率 召回率及F1值。
注:指标介绍可参考本专栏前几篇文章。
五、总结
本篇为 【《深入浅出OCR》第三章:OCR文字检测】,主要对深度学习OCR文字检测方法进行介绍,本人将从经典算法结构、代码、论文解读等角度展开,配合作者总结的思维导图,深入浅出OCR知识,下一篇将对OCR文字识别技术进行详细介绍。