《深入浅出OCR》第三章:OCR文字检测

2,084 阅读22分钟

注:本文内容仅为初版,后续更新完整文章内容请访问CSDN专栏:点击访问链接

image.png

专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。

💙个人主页: GoAI |💚 公众号: GoAI的学习小屋 | 💛交流群: 704932595 |💜个人简介 : 掘金签约作者、百度飞桨PPDE、领航团团长、开源特训营导师、CSDN、阿里云社区人工智能领域博客专家、新星计划计算机视觉方向导师等,专注大数据与人工智能知识分享。

💻文章目录

《深入浅出OCR》前言知识(二):深度学习基础总结 (✨文末深度学习总结导图)

《深入浅出OCR》前言知识(一):机器学习基础总结 (✨文末机器学习总结导图)

《深入浅出OCR》第一章:OCR技术导论

《深入浅出OCR》第二章:OCR技术发展与分类

《深入浅出OCR》第三章:OCR文字检测 (本篇)


👨‍💻本篇导读: 上一章我们介绍到OCR流程包括两阶段算法和端到端算法,目前在通用场景识别效果下,两阶段OCR相比端到端OCR技术更成熟,所以工业界大多采用两阶段OCR。 本篇为 【《深入浅出OCR》第三章:OCR文字检测】,主要对深度学习OCR文字检测方法进行介绍,本人将从经典算法结构、代码、论文解读等角度展开,配合作者总结的思维导图,深入浅出OCR知识。

《深入浅出OCR》第三章:OCR文字检测

一、文字检测介绍

OCR技术是一种可以从扫描或拍摄的图片中提取文本信息的技术。它的主要任务是找到图片中的文字区域,并将其转换成可以编辑的文本。如下图所示,在医疗领域中,高效准确地检测出医疗文本区域对OCR识别系统的整体性能至关重要。

Quicker_20230725_211221.png

二、传统的文字检测方法

传统的文字检测方法主要是基于图像处理和机器学习的算法,大致可分为两类:基于连通域的方法和基于滑动窗口的方法。

2.1 基于连通域的自然场景文本检测方法:

传统文本检测方法最常见的是基于连通性检测算法。 基于连通区域分析通过检测像素值相等、且前景像素点位置邻近区域的形状、大小、位置等特征,判断是否为文本区域。通过获取候选文本区域,可以将搜索范围缩小。但是这种方法很大程度上依赖于检测出来的文本连通区域,对于文本检测的召回率和文本轮廓的准确性有很大影响。

2.1.1 基于边缘检测的文本检测方法:

基于各类算子的边缘检测的算法,如Canny边缘检测、Sobel边缘检测等,通过检测图像中的边缘来定位文本区域。

2.2 基于滑动窗口的文本检测方法:

这种方法通常是基于单个字符的分类器的,它使用滑动窗口来处理候选框。方法是在图像上设置一个滑动子窗口,并在每个位置应用检测算法。然而,在复杂的场景中(如光照、阴影等),这种方法可能导致字符分类效果不好。同时,如何选择适当的检测窗口滑动步长也很复杂。

image.png

2.3 传统文字检测技术总结:

image.png

传统的文字检测方法通常结合了图像处理技术和机器学习算法,比如边缘检测、连通域和形态学等。虽然这些方法在理论上和稳定性上表现良好,但由于光照变化、褪色、噪声等因素的干扰,以及文本区域的不规则性、多方向性和多尺度性等复杂场景,使得检测的效果不太理想。 然而近年来,基于深度学习的文字检测方法逐渐成为主流。

接下来,本人将按时间发展及方法分类对OCR文字检测进行详细介绍。

三、基于深度学习的文字检测方法

3.1 深度学习文字检测技术发展

深度学习的文本检测方法是从通用目标检测算法(比如faster rcnn和ssd)启发而来的。研究人员开始尝试修改这些算法中的锚框尺寸来适应文本目标的特点。例如,在2016年出现的CTPN算法是在faster rcnn的基础上做的改进,通过修改锚框的尺寸来更好地检测文本。而在2017年,Textbox算法则是在ssd上做了改进,同样是为了适应文本的特点。 随后,研究人员在这些基础上提出了各种改进方法,不断优化文本检测算法的性能。目前主流的文字检测算法包括DB算法及其改进算法等。

image.png

3.2场景文字检测方法分类

从结构出发,作者将文字检测技术可以分为自顶向上和自顶向上,其一般情况下结构对比如下图所示:

OCR思维导图3.png

从识别方式上,主要分为基于回归和基于分割两种检测方式。 其中,自顶向下分为两阶段和单阶段,单阶段又分为规则与不规则文本检测,其各自代表算法将在本章具体介绍。

image.png

3.3 初期深度学习文字检测算法

在深度学习出现之前,场景文本检测的主要趋势是自下而上的,且大多数使用手工提取特征(例如MSER 或 SWT)作为基础的组件。初期深度学习检测技术通过采用SSD,R-CNN系列等算法进行检测。

R-CNN

R-CNN流程如下图所示,首先对输入图片进行提取一系列的候选区域,然后对这些候选区域用CNN提取固定长度的特征,然后用SVM对特征进行分类,最后对候选区域进行微调。

image.png

R-CNN作为R-CNN系列的初代算法,并没有过多使用深度学习思想。如在算法流程中第二阶段提取region proposal和最后阶段使用使用SVM实现分类。

Fast R-CNN

Fast R-CNN是在R-CNN和SPPnets基础上进行改进。首先将SPP的空间金字塔池化思想引入到R-CNN,其次用softmax代替SVM分类器,同时将bounding box 回归汇总到整体框架。

image.png

Faster R-CNN

Faster R-CNN为基于区域的卷积神经网络,主要用于目标检测。而在文字检测中,其首先将原始图像通过卷积神经网络提取特征,然后将特征图输入到Region Proposal Network(RPN)中生成候选文本区域,最后通过分类器判断每个候选区域是否为文本区域。

image.png

优点: Faster R-CNN采用与Fast R-CNN相同设计,只是用内部深层网络代替候选区域方法。其检测速度较快,能够处理多尺度、多方向、多形状的文本。缺点是在文字较小或者垂直排列可能会出现漏、误检。

SSD

image.png

SSD属于one-stage方法,主要有以下几点:

  1. 基于Faster R-CNN中的Anchor,提出相似先验框概念。
  2. 特征提取阶段:使用 VGG16 网络作为特征提取器,将全连接层替换成卷积层,并在最后直接采用卷积进行检测。
  3. 预测阶段;从不同比例特征图中产生不同比例预测,并明确地按长宽比分离预测。

3.4 主流深度学习文字检测算法

目前深度学习文字检测方法主要分为基于回归与基于分割算法两类,其中基于回归算法对规则文本识别较好,无法准确检测不规则文本,而基于分割方法在两种文本的检测结果不错,但存在耗时问题。

下面作者将对各自领域的文字检测方法进行展开介绍:

d6ec5ebdf1533ea3e08f2506e40e6ac.png

3.4.1 基于回归算法

针对基于回归的文本检测方法,其思想是利用若干个Anchor产生多个候选文本框,然后经过非极大值抑制NMS后处理得到检测结果。此外,在后处理此前还可以进一步精调。

基于回归算法导图

image.png

基于回归文本检测方法和目标检测算法的方法相似,文本检测方法只有两个类别,图像中的文本视为待检测的目标,其余部分视为背景。下面作者将重点介绍基于回归的文字检测方法CTPN、EAST等。

✨CTPN(2016)

论文地址:Detecting Text in Natural Image with Connectionist Text Proposal Network

参考代码:github

CTPN简介:

针对CTPN模型,首先在特征提取阶段使用VGG16作为基础网络提取各字符的局部图像特征,特征序列处理阶段使用BLSTM层提取字符序列上下文特征,然后通过FC全连接层,最后经过预测分支输出各个文字块的坐标值和分类结果概率值。在后处理阶段,将合并相邻的小文字块为文本行。因此,CTPN可以检测水平或微斜的文本行。

image.png

算法具体包括以下几个步骤:

  1. 使用VGG16b骨干网络进行提取空间特征,取VGG的conv5层输出feature map;

  2. 使用3*3的滑窗针对feature map提取空间特征形成新的feature map;

  3. 将新的feature map进行reshape,输入到双向LSTM提取每一行的序列特征;

  4. 将双向LSTM的输出重新reshape,在经过一个FC卷积层;

  5. 经过类似Faster R-CNN的RPN网络获得text proposals;

  6. 使用NMS进行后处理,过滤多余的文本框;

  7. 文本水平会将上述得到的一个文本小框使用文本线构造方法合成一个完整文本行。

总结:

CTPN将文字沿文本行方向切割成更小且宽度固定的Proposal,提高检测定位的精度。同时,考虑到文本水平行的语义上下文信息,使用双向LSTM编码水平行的文本信息,进一步提高网络的文本特征表示能力,但缺点是对于不规则的文本的检测效果并不好

CTPN学习参考: 链接

DeepTextSpotter

【ICCV2017】Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework.

论文地址:Deep TextSpotter

参考代码: code

image.png

Textboxes

TextBoxes: A Fast Text Detector with a Single Deep Neural Network

TextBoxes是一种针对多方向文本检测的算法,使用多个检测框对文本区域进行精细化检测,并可以对文本区域进行旋转。主要对SSD算法进行优化,采用更大长宽比的预选框,采用1x5的卷积核;但只支持横向文本检测。

模型简介:

Textboxes为基于SSD框架检测模型,在其基础上进行改进,采用28层的全连接卷积网络,采用端到端训练,其主要改进如下:

  • 为了适应文字行细长型的特点,候选框的长宽比增加不同初始值。
  • 为适应文本行细长型特点,特征层也用长条形卷积核代替了其他模型中常见的正方形卷积核。
  • 为防止漏检文本行,还在垂直方向增加了候选框数量。
  • 为检测大小不同的字符块,在多个尺度的特征图上并行预测文本框,然后对预测结果做NMS过滤。

image.png

Textboxes++

TextBoxes++: A Single-Shot Oriented Scene Text Detector

Textboxes++是Textboxes的升级版本,主要增加对倾斜文本的支持。为此,将标注数据改为了旋转矩形框和不规则四边形的格式;对候选框的长宽比例、特征图层卷积核的形状都作了相应调整。

image.png

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。

详细介绍:

image.png

如下图所示,该模型能够同时从6种尺度的特征图中检测小文字块。这种方案方便于识别长度变化范围很大的、带方向的单词和文本行,相比于CTPN等文本检测模型,SegLink的图片处理速度快很多。

image.png

✨EAST(2017)

EAST: An Efficient and Accurate Scene Text Detector

论文地址:EAST: An Efficient and Accurate Scene Text Detector

参考代码:github.com/argman/EAST

简介:

EAST在Seglink基础上的改进算法,在DBnet算法出现前,EAST成为主流的文本检测算法之一。其采用全卷积神经网络来进行像素级别的文本区域检测。通过卷积池化层、上采样层等操作将原始图像转换为特征图,然后通过两个分支网络来检测文本的边界框和方向,在识别倾斜和弯曲文本的效果上比较好。

详细介绍:

image.png

EAST模型主要思想是FCN+NMS,首先使用全卷积网络 生成多尺度融合的特征图,然后在此基础上直接进行像素级的文本块预测。该模型的执行速度很快且检测英文单词效果较好。支持旋转矩形框、任意四边形两种文本区域标注形式。

  • 对应于四边形标注,模型执行时对特征图中每个像素预测其到四个顶点坐标差值。

  • 对应于旋转矩形框标注,模型执行时会对特征图中每个像素预测其到矩形框四边的距离、以及矩形框的方向角。

image.png

缺点 : 检测中文长文本行效果欠佳。由于感受野不够大,且分数采用sigmod函数,样本不均衡。

总结:尽管EAST算法解决了CTPN算法无法处理的旋转和倾斜文本的问题,但它仍然无法很好地处理扭曲的文本。而在现实生活中,扭曲的文本场景非常常见,这就导致像DBNet这样的基于分割的自然场景文本检测方法变得流行起来。

EAST学习参考: 链接

总结:

总的来说,在OCR文字检测领域,深度学习方法取得了非常重要的进展,并且在许多实际应用中被广泛使用。为了提高OCR文字检测的准确性和稳健性,基于分割的方法在处理规则和不规则文本方面表现得更好。

3.4.2 基于分割算法

下图展示了基于分割的文本检测方法的流程。基本的思路是使用一个分割网络结构来实现像素级别的语义分割,然后根据分割的结果构建文本行。

image.png

基于分割的检测算法导图

基于分割的文本检测方法.png

针对基于分割算法包含2018年PixelLink,2019年PSENet、PAN(pse改进)等,目前DBNet是主流的基于实例分割的方法。 接下来,作者将对主流的文字检测算法进行文字检测介绍。

PixelLink

Pixellink算法采用了一种分割的方法来解决文本检测问题。该方法的目标是将图像中的文本区域分割出来。算法首先将图像中属于同一个文本行(也可以是一个单词)的像素相互链接在一起,形成一个连续的区域。这相当于将文本区域看作是一个整体,而不是单独的像素点。通过这种像素链接的方式,Pixellink算法可以直接从分割结果中提取出文本的边界框。这样就可以达到同使用回归方法进行文本检测的效果。

image.png

PixelLink的主要思想是将像素点分为文本像素点和非文本像素点,然后通过连接相邻的文本像素点来得到文本区域。

PSENet

2019 PSENET

论文:arxiv.org/abs/1806.02…

代码:code

PSENet算法提出了一种解决基于分割的文本算法难以区分相邻文本问题的方法。这个算法使用了渐进式的尺度扩张网络来学习文本的分割区域。其主要思想是,通过预测不同收缩比例的文本区域,然后逐个扩大检测到的文本区域。这一过程可以有效地解决任意形状相邻文本的检测问题。

image.png

模型结构:

Psenet网络采用了resnet+fpn的架构,通过resnet提取特征,取不同层的特征送入fpn进行特征融合,其结构如下图所示:

image.png

✨DBNet

论文地址:Real-time Scene Text Detection with Differentiable Binarization

参考代码: DBNet

简介:

image.png

DBNet是近年来的主流自然场景文本检测算法,其改进版本在准确率和速度相比以往都再创新高。

DB算法提出了一种新的方法来动态地学习文本分割的阈值,从而提高模型的准确性并简化后续的处理步骤。它引入了一个可微分的阈值函数,该函数类似于阶跃函数,用于实现文本分割网络在训练过程中学习适应不同图像的动态阈值。 算法的主要思想是首先通过分割网络获取图像中的文本区域。然后,利用一些后处理方法,比如使用opencv等工具,可以找到文本区域的最小包围曲线,即将文本区域框起来。

db.png

模型结构:

DBNet的骨干网络整体结构采用FPN设计思想,由多层上采样和下采样的特征图级联完成,总计进行5次下采样,3次上采样操作。假设网络输入为w * h * 3,则最终的输出特征图大小为原图的1/4。针对网络头部部分,分别引出2个分支。其一负责预测概率图(probability map),其二负责预测阈值图(threshold map),概率图经过阈值图处理,进行二值化后得到二值图(approximate binary map)。最后经过后处理操作得到最终文字的边。 image.png

  1. 图像输入特征提取主干,提取特征;

  2. 特征金字塔上采样到相同的尺寸,并进行特征级联到特征F;

  3. 特征F用于预测概率图(probability map P)和阈值图(threshold map T);

  4. 通过P和F计算近似二值图(approximate binary map B^)

DBNet学习参考: Paddle-DBNet

zhuanlan.zhihu.com/p/94677957

PAN

论文地址:链接

参考代码:mmocrpaddle

分割方法在一定程度解决弯曲文本检测问题,但是后处理逻辑较为复杂以及预测速度较慢。因此,PAN针对以上问题,从网络设计和后处理方面进行改进,提升算法性能。具体改进如下:

  1. PAN使用轻量级的ResNet18作为Backbone,。
  2. 设计轻量级的特征增强模块FPEM和特征融合模块FFM增强Backbone提取的特征。
  3. 后处理采用像素聚类方法,沿着预测的文本中心(kernel)四周合并与kernel的距离小于阈值d的像素。PAN保证高精度的同时具有更快的预测速度。

image.png

PAN++

【TPAMI'2021】 PAN++

github.com/whai362/pan…

FCENet

2021 Fourier Contour Embedding for Arbitrary-Shaped Text Detection

论文地址:链接

参考讲解:链接

这篇论文提出了一种针对场景文本的检测方法,该方法可以处理任意形状的文本框。首先,它采用了一种被称为傅里叶变换的数学方法来对文本进行建模。这种方法可以将文本的形状和特征有效地表示出来。在算法的骨干部分,采用了一种称为ResNet+FPN的架构来提取文本的特征。这个架构可以有效地捕捉文本的细节信息和上下文关系,为后续的处理做好准备。接下来,算法会根据设定的阈值,找出置信度大于阈值的文本中心点,并将这些点所对应的傅里叶特征向量进行傅里叶反变换。这一步旨在将经过傅里叶变换的文本特征重新映射回原始图像空间。最后,算法使用非极大值抑制来去除重复的检测结果,得到最终的文本检测结果。

FCENet算法流程如图所示:

  • 输入图像会经过主干网络和 FPN 提取特征。FPN 上不同层负责不同尺度的文本目标,提取的特征会送入到共享的检测头中。

  • 共享的检测头Head部分具有两个分支,其中分类分支预测文本区域和文本中心区域的概率图,相乘得到属于文本中心分类的得分图;回归分支则负责预测傅里叶特征向量。

image.png

✨ DBNet++

2022 Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion

论文地址 DBNet++

参考代码:Github

在以往的分割算方法中,多尺度特征图大都是通过FPN后直接进行concatenate来实现,这样做并没有考虑不同尺度特征图的重要性是不一样的。而DBNet++在DBNet的基础上增加了ASF(Adaptive Scale)模块。不同尺度的特征通过ASF模块处理,可以得到更佳的融合特征。

image.png

ASF模块:

image.png

具体如上图所示,自适应特征图融合模块ASF使用了一种称空间注意力机制的技术,对每个通道取均值得到特征图每个像素位置上的重要性,再将其加到原输入特征图上,增强每个位置的特征值,再通过卷积输出通道为N个的注意力权重,使得输出的权重能衡量每个尺度特征图的重要性。

DBNet系列总结:

  1. 速度快,精度高,能检测任意形状的文本多种类型的文本。
  2. 通过提出DB(Differentiable Binarization),类似额外约束的loss,使得模型训练效果更佳。
  3. DBNet++在DBNet的基础上,通过引入ASF模块,在少量耗时增加的代价下,提升了准确性。
  4. 缺点是DBNet,DBNet++不能解决环形文字里面还有文字的情况。

3.4.3 深度学习文字检测总结

名称代表方法优点缺点
基于回归的方法TextBoxes++,EAST,DeepReg,DeRPN后处理简单,只需NMS操作针对任意形状的文本效果不佳
基于部件(Part-based)的方法SegLink,SegLink++擅长长文本行算法比较复杂
基于分割的方法Mask TextSpotter,PSENet,SAE可检测任意形状的文本后处理较为麻烦,花费时间更多

检测结果对比:

image.png

四、文字检测常见指标

IOU

IOU(IntersectionOverUnion,交并比)是目标检测中常见的评价标准,主要是衡量模型生成预测检测框(PredictedBoundingBox)和标注(GroundTruthBox)间的重叠程度,计算公式如下:

image.png

image.png

NMS:

NMS(Non-MaximumSuppression,非极大值抑制)是检测算法中的一个后处理步骤,它对最终的检测结果有非常重要的影响。在原始的检测算法中,通常会预测出很多的检测框,其中可能包含了很多重叠、错误的或者不准确的样本。为了得到最准确的检测结果,需要进行大量算法计算来筛选掉这些多余的框。

NMS算法主要思想:

1.对网络预测出所有边界框,将分数由高到低进行排序。

2.选取分数最高的预测框作为目标,分别计算目标与其余预测框的IOU。

3.如果重叠程度大于某一预先设定的阈值,则认为该预测框与目标是同时预测同一个物体,后将该边界框删除,否则予以保留。

image.png

OCR文字检测评估指标结果

通过对比上述方法在不同数据集上的的文字检测评估指标,参考其他资料如下结果。评价指标为准确率 召回率及F1值。

image.png

注:指标介绍可参考本专栏前几篇文章。

五、总结

本篇为 【《深入浅出OCR》第三章:OCR文字检测】,主要对深度学习OCR文字检测方法进行介绍,本人将从经典算法结构、代码、论文解读等角度展开,配合作者总结的思维导图,深入浅出OCR知识,下一篇将对OCR文字识别技术进行详细介绍。