认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习

  • 图灵测试是人工智能是否真正能够成功的一个标准,“计算机科学之父”、“人工智能之父”英国数学家图灵在1950年的论文《机器会思考吗》中提出了图灵测试的概念。即把一个人和一台计算机分别放在两个隔离的房间中,房间外的一个人同时询问人和计算机相同的问题,如果房间外的人无法分别哪个是人,哪个是计算机,就能够说明计算机具有人工智能。

  • 1981年的诺贝尔将颁发给了David Hubel和Torsten Wiesel,以及Roger Sperry。他们发现了人的视觉系统处理信息是分级的。从视网膜(Retina)出发,经过低级的V1区提取边缘特征,到V2区的基本形状或目标的局部,再到高层的整个目标(如判定为一张人脸),以及到更高层的PFC(前额叶皮层)进行分类判断等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表达越来越抽象和概念化,也即越来越能表现语义或者意图

    • 边缘特征 —–> 基本形状和目标的局部特征——>整个目标 这个过程其实和我们的常识是相吻合的,因为复杂的图形,往往就是由一些基本结构组合而成的。同时我们还可以看出:大脑是一个深度架构,认知过程也是深度的。
    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第1张图片
  • 深度学习,恰恰就是通过组合低层特征形成更加抽象的高层特征(或属性类别)。例如,在计算机视觉领域,深度学习算法从原始图像去学习得到一个低层次表达,例如边缘检测器、小波滤波器等,然后在这些低层次表达的基础上,通过线性或者非线性组合,来获得一个高层次的表达。此外,不仅图像存在这个规律,声音也是类似的。比如,研究人员从某个声音库中通过算法自动发现了20种基本的声音结构,其余的声音都可以由这20种基本结构来合成!

  • 机器学习是实现人工智能的一种手段,也是目前被认为比较有效的实现人工智能的手段,目前在业界使用机器学习比较突出的领域很多,例如:计算机视觉、自然语言处理、推荐系统等等。大家生活中经常用到的比如高速上的ETC的车牌识别,今日头条的新闻推荐,天猫上的评价描述。 机器学习是人工智能的一个分支,而在很多时候,几乎成为人工智能的代名词。简单来说,机器学习就是通过算法,使得机器能从大量历史数据中学习规律,从而对新的样本做智能识别或对未来做预测。机器学习是指计算机使用大数据集而不是硬编码规则来学习的能力。基本上,机器学习是人工智能的一个子集;更为具体地说,它只是一种实现AI的技术,一种训练算法的模型,这种算法使得计算机能够学习如何做出决策。

  • 弱人工智能,也被称为狭义人工智能,是一种为特定的任务而设计和训练的人工智能系统。弱人工智能的形式之一是虚拟个人助理,比如苹果公司的Siri。

  • 强人工智能,又称人工通用智能,是一种具有人类普遍认知能力的人工智能系统。当计算机遇到不熟悉的任务时,它具有足够的智能去寻找解决方案。

  • 监督式学习需要使用有输入和预期输出标记的数据集。如果人工智能产生的输出结果是错误的,它将重新调整自己的计算。这个过程将在数据集上不断迭代地完成,直到AI不再出错。监督式学习的一个例子是天气预报人工智能。它学会利用历史数据来预测天气。训练数据包含输入(过去天气的压力、湿度、风速)和输出(过去天气的温度)。它之所以被称为监督式学习,是因为算法从训练数据集学习的过程就像是一位老师正在监督学习。在我们预先知道正确的分类答案的情况下,算法对训练数据不断进行迭代预测,然后预测结果由“老师”进行不断修正。当算法达到可接受的性能水平时,学习过程才会停止。

  • 非监督式学习是利用既不分类也不标记的信息进行机器学习,并允许算法在没有指导的情况下对这些信息进行操作。当你使用非监督式学习训练人工智能时,你可以让人工智能对数据进行逻辑分类。这里机器的任务是根据相似性、模式和差异性对未排序的信息进行分组,而不需要事先对数据进行处理。非监督式学习的一个例子是亚马逊等电子商务网站的行为预测AI。它将创建自己输入数据的分类,帮助亚马逊识别哪种用户最有可能购买不同的产品(交叉销售策略)。 另一个例子是,程序可以任意地使用以下两种算法中的一种来完成男孩女孩的图像分类任务。一种算法被称为“聚类”,它根据诸如头发长度、下巴大小、眼睛位置等特征将相似的对象分到同一个组。另一种算法被称为“相关”,它根据自己发现的相似性创建if/then规则。换句话说,它确定了图像之间的公共模式,并相应地对它们进行分类。

  • 深度学习是一种机器学习方法 , 它允许我们训练人工智能来预测输出,给定一组输入(指传入或传出计算机的信息)。监督学习和非监督学习都可以用来训练人工智能。Andrew Ng:“与深度学习类似的是,火箭发动机是深度学习模型,燃料是我们可以提供给这些算法的海量数据。”神经网络是一组粗略模仿人类大脑,用于模式识别的算法。神经网络这个术语来源于这些系统架构设计背后的灵感,这些系统是用于模拟生物大脑自身神经网络的基本结构,以便计算机能够执行特定的任务。

  • 神经元之间的每个连接都有一个权重。这个权重表示输入值的重要性。模型所做的就是学习每个元素对价格的贡献有多少。这些“贡献”是模型中的权重。一个特征的权重越高,说明该特征比其他特征更为重要。每个神经元都有一个激活函数。它主要是一个根据输入传递输出的函数。 当一组输入数据通过神经网络中的所有层时,最终通过输出层返回输出数据。训练AI的过程中,重要的是给它的输入数据集(一个数据集是一个单独地或组合地或作为一个整体被访问的数据集合),此外还需要对其输出结果与数据集中的输出结果进行对比。因为AI一直是“新的”,它的输出结果有可能是错误的。一旦我们遍历了整个数据集,就有可能创建一个函数来衡量AI输出与实际输出(历史数据)之间的差异。这个函数叫做成本函数。即成本函数是一个衡量模型准确率的指标,衡量依据为此模型估计X与Y间关系的能力。模型训练的目标是使成本函数等于零,即当AI的输出结果与数据集的输出结果一致时(成本函数等于0)。

  • 通过使用一种叫做梯度下降的方法。梯度衡量得是,如果你稍微改变一下输入值,函数的输出值会发生多大的变化。梯度下降法是一种求函数最小值的方法。在这种情况下,目标是取得成本函数的最小值。 它通过每次数据集迭代之后优化模型的权重来训练模型。通过计算某一权重集下代价函数的梯度,可以看出最小值的梯度方向。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第2张图片

    • 为了降低成本函数值,多次遍历数据集非常重要。这就是为什么需要大量计算能力的原因。 一旦我们通过训练改进了AI,我们就可以利用它根据上述四个要素来预测未来的价格。

  • OCR(Optical Character Recognition,光学字符识别)是计算机视觉重要方向之一。传统定义的OCR一般面向扫描文档类对象,现在我们常说的OCR一般指场景文字识别(Scene Text Recognition,STR),主要面向自然场景,如下图中所示的牌匾等各种自然场景可见的文字。

  • OCR技术有着丰富的应用场景,一类典型的场景是日常生活中广泛应用的面向垂类的结构化文本识别,比如车牌识别、银行卡信息识别、身份证信息识别、火车票信息识别等等。这些小垂类的共同特点是格式固定,因此非常适合使用OCR技术进行自动化,可以极大的减轻人力成本,提升效率。这种面向垂类的结构化文本识别是目前ocr应用最广泛、并且技术相对较成熟的场景。

  • 除了面向垂类的结构化文本识别,通用OCR技术也有广泛的应用,并且常常和其他技术结合完成多模态任务,例如在视频场景中,经常使用OCR技术进行字幕自动翻译、内容安全监控等等,或者与视觉特征相结合,完成视频理解、视频搜索等任务。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第3张图片
  • OCR的技术难点可以分为算法层和应用层两方面。OCR丰富的应用场景,决定了它会存在很多技术难点。这里给出了常见的8种问题:

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第4张图片
  • 在实际应用中,尤其是在广泛的通用场景下,除了上一节总结的仿射变换、尺度问题、光照不足、拍摄模糊等算法层面的技术难点,OCR技术还面临两大落地难点:

    • 海量数据要求OCR能够实时处理 。OCR应用常对接海量数据,我们要求或希望数据能够得到实时处理,模型的速度做到实时是一个不小的挑战。
    • 端侧应用要求OCR模型足够轻量,识别速度足够快 。OCR应用常部署在移动端或嵌入式硬件,端侧OCR应用一般有两种模式:上传到服务器 vs. 端侧直接识别,考虑到上传到服务器的方式对网络有要求,实时性较低,并且请求量过大时服务器压力大,以及数据传输的安全性问题,我们希望能够直接在端侧完成OCR识别,而端侧的存储空间和计算能力有限,因此对OCR模型的大小和预测速度有很高的要求。
  • 虽然OCR是一个相对具体的任务,但涉及了多方面的技术,包括文本检测、文本识别、端到端文本识别、文档分析等等。学术上关于OCR各项相关技术的研究层出不穷,下文将简要介绍OCR任务中的几种关键技术的相关工作。

    • 文本检测的任务是定位出输入图像中的文字区域。近年来学术界关于文本检测的研究非常丰富,一类方法将文本检测视为目标检测中的一个特定场景,基于通用目标检测算法进行改进适配,如TextBoxes基于一阶段目标检测器SSD算法,调整目标框使之适合极端长宽比的文本行,CTPN则是基于Faster RCNN架构改进而来。但是文本检测与目标检测在目标信息以及任务本身上仍存在一些区别,如文本一般长宽比较大,往往呈“条状”,文本行之间可能比较密集,弯曲文本等,因此又衍生了很多专用于文本检测的算法,如EAST、PSENet、DBNet等等。

    • 目前较为流行的文本检测算法可以大致分为基于回归基于分割的两大类文本检测算法,也有一些算法将二者相结合。基于回归的算法借鉴通用物体检测算法,通过设定anchor回归检测框,或者直接做像素回归,这类方法对规则形状文本检测效果较好,但是对不规则形状的文本检测效果会相对差一些,比如CTPN对水平文本的检测效果较好,但对倾斜、弯曲文本的检测效果较差,SegLink对长文本比较好,但对分布稀疏的文本效果较差;基于分割的算法引入了Mask-RCNN,这类算法在各种场景、对各种形状文本的检测效果都可以达到一个更高的水平,但缺点就是后处理一般会比较复杂,因此常常存在速度问题,并且无法解决重叠文本的检测问题。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第5张图片

    • 文本识别的任务是识别出图像中的文字内容,一般输入来自于文本检测得到的文本框截取出的图像文字区域。文本识别一般可以根据待识别文本形状分为规则文本识别不规则文本识别两大类。规则文本主要指印刷字体、扫描文本等,文本大致处在水平线位置;不规则文本往往不在水平位置,存在弯曲、遮挡、模糊等问题。不规则文本场景具有很大的挑战性,也是目前文本识别领域的主要研究方向。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第6张图片

    • 规则文本识别的算法根据解码方式的不同可以大致分为基于CTC和Sequence2Sequence两种,将网络学习到的序列特征 转化为 最终的识别结果 的处理方式不同。基于CTC的算法以经典的CRNN为代表。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第7张图片

    • 不规则文本的识别算法相比更为丰富,如STAR-Net等方法通过加入TPS等矫正模块,将不规则文本矫正为规则的矩形后再进行识别;RARE等基于Attention的方法增强了对序列之间各部分相关性的关注;基于分割的方法将文本行的各字符作为独立个体,相比与对整个文本行做矫正后识别,识别分割出的单个字符更加容易;此外,随着近年来Transfomer的快速发展和在各类任务中的有效性验证,也出现了一批基于Transformer的文本识别算法,这类方法利用transformer结构解决CNN在长依赖建模上的局限性问题,也取得了不错的效果。

    • 传统意义上的OCR技术可以解决文字的检测和识别需求,但在实际应用场景中,最终需要获取的往往是结构化的信息,如身份证、发票的信息格式化抽取,表格的结构化识别等等,多在快递单据抽取、合同内容比对、金融保理单信息比对、物流业单据识别等场景下应用。OCR结果+后处理是一种常用的结构化方案,但流程往往比较复杂,并且后处理需要精细设计,泛化性也比较差。在OCR技术逐渐成熟、结构化信息抽取需求日益旺盛的背景下,版面分析、表格识别、关键信息提取等关于智能文档分析的各种技术受到了越来越多的关注和研究。

      • 版面分析(Layout Analysis)主要是对文档图像进行内容分类,类别一般可分为纯文本、标题、表格、图片等。现有方法一般将文档中不同的板式当做不同的目标进行检测或分割,如Soto Carlos在目标检测算法Faster R-CNN的基础上,结合上下文信息并利用文档内容的固有位置信息来提高区域检测性能;Sarkar Mausoom等人提出了一种基于先验的分割机制,在非常高的分辨率的图像上训练文档分割模型,解决了过度缩小原始图像导致的密集区域不同结构无法区分进而合并的问题。

        • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第8张图片
      • 表格识别(Table Recognition)的任务就是将文档里的表格信息进行识别和转换到excel文件中。文本图像中表格种类和样式复杂多样,例如不同的行列合并,不同的内容文本类型等,除此之外文档的样式和拍摄时的光照环境等都为表格识别带来了极大的挑战。这些挑战使得表格识别一直是文档理解领域的研究难点。

        • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第9张图片
      • 表格识别的方法种类较为丰富,早期的基于启发式规则的传统算法,如Kieninger等人提出的T-Rect等算法,一般通过人工设计规则,连通域检测分析处理;近年来随着深度学习的发展,开始涌现一些基于CNN的表格结构识别算法,如Siddiqui Shoaib Ahmed等人提出的DeepTabStR,Raja Sachin等人提出的TabStruct-Net等;此外,随着图神经网络(Graph Neural Network)的兴起,也有一些研究者尝试将图神经网络应用到表格结构识别问题上,基于图神经网络,将表格识别看作图重建问题,如Xue Wenyuan等人提出的TGRNet;基于端到端的方法直接使用网络完成表格结构的HTML表示输出,端到端的方法大多采用Seq2Seq方法来完成表格结构的预测,如一些基于Attention或Transformer的方法,如TableMaster。

        • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第10张图片
      • 关键信息提取(Key Information Extraction,KIE)是Document VQA中的一个重要任务,主要从图像中提取所需要的关键信息,如从身份证中提取出姓名和公民身份号码信息,这类信息的种类往往在特定任务下是固定的,但是在不同任务间是不同的。

        • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第11张图片

        • KIE通常分为两个子任务进行研究:SER: 语义实体识别 (Semantic Entity Recognition),对每一个检测到的文本进行分类,如将其分为姓名,身份证。如下图中的黑色框和红色框。RE: 关系抽取 (Relation Extraction),对每一个检测到的文本进行分类,如将其分为问题和的答案。然后对每一个问题找到对应的答案。如下图中的红色框和黑色框分别代表问题和答案,黄色线代表问题和答案之间的对应关系。

        • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第12张图片

      • 一般的KIE方法基于命名实体识别(Named Entity Recognition,NER)来研究,但是这类方法只利用了图像中的文本信息,缺少对视觉和结构信息的使用,因此精度不高。在此基础上,近几年的方法都开始将视觉和结构信息与文本信息融合到一起,按照对多模态信息进行融合时所采用的的原理可以将这些方法分为下面四种:

        • 基于Grid的方法
        • 基于Token的方法
        • 基于GCN的方法
        • 基于End to End 的方法
  • 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题。文本在图像中的表现形式可以视为一种‘目标‘,通用的目标检测的方法也适用于文本检测,从任务本身上来看 ,目标检测和文本检测同属于“定位”问题。但是文本检测无需对目标分类,并且文本形状复杂多样:

    • 目标检测:给定图像或者视频,找出目标的位置(box),并给出目标的类别;
    • 文本检测:给定输入图像或者视频,找出文本的区域,可以是单字符位置或者整个文本行位置;
  • 先从直观上理解文本检测任务。给定一张图片,我们需要找出这张图里文字出现的所有位置位置,那这个任务其实跟目标检测任务差别不大,即找出每个物体在图片中的位置,并标出该包围框里的物体的类别。而文本检测就是,找出每个文本在图片中出现的位置,因为我们的类别只有2个(有文字和没文字),看起来就像一个简单的单类别目标检测的任务,自然而然我们就会想到用经典的目标检测网络来进行文本检测,比如经典的Faster R-CNN。

  • Faster RCNN做文本检测感觉问题不大,但是从效果来看,仅套用Faster RCNN来做文本检测效果并不好,原因在于,文本有自己独有的特点,这种通用的文本检测框架并不能很好地解决文本的这些特点。那文本有什么特点呢?我总结如下:

    • 文本大多数以长矩形形式存在,即长宽比一般较大或较小,这与普通的目标检测中的物体不一样(这些长宽比较接近1)
    • 普通物体(比如猫)存在明显的闭合边缘轮廓,而文本没有;
    • 文本中包含多个文字,而文字之间是有间隔的,如果检测做得不好,我们就会把每个字都当成文本行给框出来而非整行作为文本框,这与我们的期望不一样。
  • 当前所说的文本检测一般是自然场景文本检测,其难点在于:自然场景中文本具有多样性:文本检测受到文字颜色、大小、字体、形状、方向、语言、以及文本长度的影响;复杂的背景和干扰;文本检测受到图像失真,模糊,低分辨率,阴影,亮度等因素的影响;文本密集甚至重叠会影响文字的检测;文字存在局部一致性,文本行的一小部分,也可视为是独立的文本;

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第13张图片
  • 基于回归文本检测方法和目标检测算法的方法相似,文本检测方法只有两个类别,图像中的文本视为待检测的目标,其余部分视为背景。早期基于深度学习的文本检测算法是从目标检测的方法改进而来,支持水平文本检测。比如Textbox算法基于SSD算法改进而来,CTPN根据二阶段目标检测Fast-RCNN算法改进而来。在TextBoxes算法根据一阶段目标检测器SSD调整,将默认文本框更改为适应文本方向和宽高比的规格的四边形,提供了一种端对端训练的文字检测方法,并且无需复杂的后处理。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第14张图片

    • 采用更大长宽比的预选框; 卷积核从3x3变成了1x5,更适合长文本检测; 采用多尺度输入

  • CTPN基于Fast-RCNN算法,扩展RPN模块并且设计了基于CRNN的模块让整个网络从卷积特征中检测到文本序列,二阶段的方法通过ROI Pooling获得了更准确的特征定位。但是TextBoxes和CTPN只支持检测横向文本。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第15张图片

    • 《Detecting Text in Natural Image with Connectionist Text Proposal Network》,这个深度神经网络叫做CTPN,直到今天这个网络框架一直是OCR系统中做文本检测的一个常用网络,极大地影响了后面文本检测算法的方向。

    • 文本行一般以水平长矩形的形式存在,而且文本行中每个字都有间隔。针对这个特点,CTPN提出一个新奇的想法,我们可以把文本检测的任务拆分,第一步我们检测文本框中的一部分,判断它是不是一个文本的一部分,当对一幅图里所有小文本框都检测之后,我们就将属于同一个文本框的小文本框合并,合并之后就可以得到一个完整的、大的文本框了,也就完成了文本的检测任务。这个想法真的很有创造性,有点像“分治法”,先检测大物体的一小部分,等所有小部分都检测出来,大物体也就可以检测出来了。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第16张图片

    • 如图所示,左边的图是直接使用Faster RCNN中的RPN来进行候选框提取,可以看出,这种候选框太粗糙了,效果并不好。而右图是利用许多小候选框来合并成一个大文本预测框,可以看出这个算法的效果非常不错,需要说明的是,红色框表示这个小候选框的置信度比较高,而其他颜色的候选框的置信度比较低。

    • CTPN还提出了在文本检测中应加入RNN来进一步提升效果。为什么要用RNN来提升检测效果?文本具有很强的连续字符,其中连续的上下文信息对于做出可靠决策来说很重要。我们知道RNN常用于序列模型,比如事件序列,语言序列等等,那我们CTPN算法中,把一个完整的文本框拆分成多个小文本框集合,其实这也是一个序列模型,可以利用过去或未来的信息来学习和预测,所以同样可以使用RNN模型。而且,在CTPN中,用的还是BiLSTM(双向LSTM),因为一个小文本框,对于它的预测,我们不仅与其左边的小文本框有关系,而且还与其右边的小文本框有关系!这个解释就很有说服力了,如果我们仅仅根据一个文本框的信息区预测该框内含不含有文字其实是很草率的,我们应该多参考这个框的左边和右边的小框的信息后(尤其是与其紧挨着的框)再做预测准确率会大大提升。

    • CTPN借助了Faster RCNN中anchor回归机制,使得RPN能有效地用单一尺寸的滑动窗口来检测多尺寸的物体。当然CTPN根据文本检测的特点做了比较多的创新。比如RPN中anchor机制是直接回归预测物体的四个参数(x,y,w,h),但是CTPN采取之回归两个参数(y,h),即anchor的纵向偏移以及该anchor的文本框的高度,因为每个候选框的宽度w已经规定为16个像素,不需要再学习,而x坐标直接使用anchor的x坐标,也不用学习,所以CTPN的思路就是只学习y和h这两个参数来完成小候选框的检测!跟RPN相类似,CTPN中对于每个候选框都使用了K个不同的anchors(k在这里默认是10),但是与RPN不同的是,这里的anchors的width是固定的16个像素,而height的高度范围为11~273(每次对输入图像的height除以0.7,一共K个高度)。当然CTPN中还是保留了RPN大多数的思路,比如还是需要预测候选框的分数score(该候选框有文本和无文本的得分)

    • 文本行构建很简单,通过将那些text/no-text score > 0.7的连续的text proposals相连接即可。文本行的构建如下。首先,为一个proposal Bi定义一个邻居(Bj):Bj−>Bi,其中:Bj在水平距离上离Bi最近,该距离小于50 pixels,它们的垂直重叠(vertical overlap) > 0.7。如果同时满足Bj−>Bi和Bi−>Bj,会将两个proposals被聚集成一个pair。接着,一个文本行会通过连续将具有相同proposal的pairs来进行连接来构建。

    • 首先CTPN的基础网络使用了VGG16用于特征提取,在VGG的最后一个卷积层CONV5,CTPN用了3×3的卷积核来对该feature map做卷积,这个CVON5 特征图的尺寸由输入图像来决定,而卷积时的步长却限定为16,感受野被固定为228个像素。卷积后的特征将送入BLSTM继续学习,最后接上一层全连接层FC输出我们要预测的参数:2K个纵向坐标y,2k个分数,k个x的水平偏移量。看到这里大家可能有个疑问,这个x的偏移到底是什么,为什么需要回归这个参数?如果需要X的参数,为什么不在候选框参数回归时直接预测成(x,y,h)三个参数呢,而要多此一举把该参数单独预测?这个X的作用作者提到这也是他们论文的一大亮点,称之为Side-refinement,我理解为文本框边缘优化。我们回顾一下上面提到的一个问题,文本框检测中边缘部分的预测并不准确。CTPN就是用这个X的偏移量来精修边缘问题。这个X是指文本框在水平方向的左边界和右边界,我们通过回归这个左边界和右边界参数进而可以使得我们对文本框的检测更为精准。在这里想举个例子说明一下回归这个x参数的重要性。

    • 我们观察下图,第一幅图张我们看到我们有很多小候选框,位于左边的候选框我标记为1、2、3、4号框,1号框和2号框为蓝色,表明得分不高我们不把这两个框合并到大文本框内,对于3号框和4号框那就比较尴尬了,如果取3号框作为文本框的边缘框,那么显然左边边缘留白太多,精准度不够,但如果去掉3号框而使用4号框作为左边缘框,则有些字体区域没有检测出来,同样检测精度不足。这种情况其实非常容易出现,所以CTPN采取了Side-refinement 思路进一步优化边缘位置的预测即引入回归X参数,X参数直接标定了完整文本框的左右边界,做到精确的边界预测。第二幅图中的红色框就是经过Side-refinement后的检测结果,可以看出检测准确率有了很大的提升。 side-refinement确实可以进一步提升位置准确率,在SWT的Multi-Lingual datasets上产生2%的效果提升。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第17张图片

    • 当然,CTPN也有一个很明显的缺点:对于非水平的文本的检测效果并不好。CTPN论文中给出的文本检测效果图都是文本位于水平方向的,显然CTPN并没有针对多方向的文本检测有深入的探讨。

  • TextBoxes++在TextBoxes基础上进行改进,支持检测任意角度的文本。从结构上来说,不同于TextBoxes,TextBoxes++针对多角度文本进行检测,首先修改预选框的宽高比,调整宽高比aspect ratio为1、2、3、5、1/2、1/3、1/5。其次是将1∗5的卷积核改为3∗5,更好的学习倾斜文本的特征;最后,TextBoxes++的输出旋转框的表示信息。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第18张图片
  • EAST针对倾斜文本的定位问题,提出了two-stage的文本检测方法,包含 FCN特征提取和NMS部分。EAST提出了一种新的文本检测pipline结构,可以端对端训练并且支持检测任意朝向的文本,并且具有结构简单,性能高的特点。FCN支持输出倾斜的矩形框和水平框,可以自由选择输出格式。

    • 如果输出检测形状为RBox,则输出Box旋转角度以及AABB文本形状信息,AABB表示到文本框上下左右边的偏移。RBox可以旋转矩形的文本。

    • 如果输出检测框为四点框,则输出的最后一个维度为8个数字,表示从四边形的四个角顶点的位置偏移。该输出方式可以预测不规则四边形的文本。

    • 把文本检测切割成多个阶段来进行,这无疑增大了文本检测精度的损失和时间的消耗,对于文本检测任务上中间处理越多可能效果越差。所以有篇CVPR2017的文章提出,我们有一种方法能优雅且简洁地完成多角度文本检测,这个算法叫做EAST,论文为《EAST: An Efficient and Accurate Scene Text Detector》。

    • 考虑到FCN输出的文本框是比较冗余的,比如一个文本区域的邻近的像素生成的框重合度较高,但不是同一个文本生成的检测框,重合度都很小,因此EAST提出先按行合并预测框,最后再把剩下的四边形用原始的NMS筛选。通过下图我们知道,一个文本检测有多个阶段,就以region proposals系的检测算法为例,他们通常包含候选框提取、候选框过滤、bouding box回归、候选框合并等阶段,EAST的作者认为,一个文本检测算法被拆分成多个阶段其实并没有太多好处,实现真正端到端的文本检测网络才是正确之举。所以EAST的pipeline相当优雅,只分为FCN生成文本行参数阶段和局部感知NMS阶段,网络的简洁是的检测的准确性和速度都有了进一步的提高。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第19张图片

    • EAST网络分为特征提取层+特征融合层+输出层三大部分。特征提取层: backbone采取PVANet来做特征提取,接下来送入卷积层,而且后面的卷积层的尺寸依次递减(size变为上一层的一半),而且卷积核的数量依次递增(是前一层的2倍)。抽取不同level的feature map,这样可以得到不同尺度的特征图,目的是解决文本行尺度变换剧烈的问题,size大的层可用于预测小的文本行,size小的层可用于预测大的文本行。特征合并层,将抽取的特征进行merge.这里合并的规则采用了U-net的方法,合并规则:从特征提取网络的顶部特征按照相应的规则向下进行合并。

    • 网络输出层:网络的最终输出有5大部分,他们分别是:

      • score map:一个参数,表示这个预测框的置信度;
      • text boxes: 4个参数,(x,y,w,h),跟普通目标检测任务的bounding box参数一样,表示一个物体的位置;
      • text rotation angle: 1个参数,表示text boxe的旋转角度;
      • text quadrangle coordinates:8个参数,表示任意四边形的四个顶点坐标,即(x1,y1),(x2,y2),(x3,y3),(x4,y4)。
    • EAST目标函数分两部分,如下,第一部分是分类误差,第二部分是几何误差,文中权衡重要性,λg=1。Ls称为分类误差函数,采用 class-balanced cross-entropy,这样做可以很实用的处理正负样本不均衡的问题。其中β=反例样本数量/总样本数量 (balance factor)

      • L = L s + λ g L g , L s = b a l a n c e d − x e n t ( Y ^ , Y ∗ ) = − β Y ∗ l o g Y ^ − ( 1 − β ) ( 1 − Y ∗ ) l o g ( 1 − Y ^ ) β = 1 − ∑ y ∗ ∈ Y ∗ y ∗ ∣ Y ∗ ∣ L g = L A A B B + λ θ L θ L A A B B = − l o g I O U ( R ^ , R ∗ ) = − l o g ∣ R ^ ∩ R ∗ ∣ ∣ R ^ ∪ R ∗ ∣ L θ ^ , θ ∗ = 1 − c o s ( θ ^ − θ ∗ ) L=L_s+\lambda_gL_g,\\ L_s=balanced-xent(\hat Y,Y^*)=-\beta Y^*log\hat Y-(1-\beta)(1-Y^*)log(1-\hat Y)\\ \beta=1-\frac{\sum_{y^*\in Y^*}y^*}{|Y^*|}\\ L_g=L_{AABB}+\lambda_\theta L_\theta L_{AABB}=-logIOU(\hat R,R^*)=-log\frac{|\hat R∩R^*|}{|\hat R∪R^*|}\\ L_{\hat\theta , \theta^*}=1-cos(\hat\theta-\theta^*) L=Ls+λgLg,Ls=balancedxent(Y^,Y)=βYlogY^(1β)(1Y)log(1Y^)β=1YyYyLg=LAABB+λθLθLAABB=logIOU(R^,R)=logR^RR^RLθ^,θ=1cos(θ^θ)

  • MOST提出TFAM模块动态的调整粗粒度的检测结果的感受野,另外提出PA-NMS根据位置信息合并可靠的检测预测结果。此外,训练中还提出 Instance-wise IoU 损失函数,用于平衡训练,以处理不同尺度的文本实例。该方法可以和EAST方法结合,在检测极端长宽比和不同尺度的文本有更好的检测效果和性能

  • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第20张图片

  • 利用回归的方法解决弯曲文本的检测问题,一个简单的思路是用多点坐标描述弯曲文本的边界多边形,然后直接预测多边形的顶点坐标。CTD提出了直接预测弯曲文本14个顶点的边界多边形,网络中利用Bi-LSTM层以细化顶点的预测坐标,实现了基于回归方法的弯曲文本检测

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第21张图片
  • LOMO针对长文本和弯曲文本问题,提出迭代的优化文本定位特征获取更精细的文本定位,该方法包括三个部分,坐标回归模块DR,迭代优化模块IRM以及任意形状表达模块SEM。分别用于生成文本大致区域,迭代优化文本定位特征,预测文本区域、文本中心线以及文本边界。迭代的优化文本特征可以更好的解决长文本定位问题以及获得更精确的文本区域定位

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第22张图片
  • Contournet基于提出对文本轮廓点建模获取弯曲文本检测框,该方法首先使用Adaptive-RPN获取文本区域的proposal特征,然后设计了局部正交纹理感知LOTM模块学习水平与竖直方向的纹理特征,并用轮廓点表示,最后,通过同时考虑两个正交方向上的特征响应,利用Point Re-Scoring算法可以有效地滤除强单向或弱正交激活的预测,最终文本轮廓可以用一组高质量的轮廓点表示出来。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第23张图片
  • PCR提出渐进式的坐标回归处理弯曲文本检测问题,总体分为三个阶段,首先大致检测到文本区域,获得文本框,另外通过所设计的Contour Localization Mechanism预测文本最小包围框的角点坐标,然后通过叠加多个CLM模块和RCLM模块预测得到弯曲文本。该方法利用文本轮廓信息聚合得到丰富的文本轮廓特征表示,不仅能抑制冗余的噪声点对坐标回归的影响,还能更精确的定位文本区域

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第24张图片
  • 基于回归的方法虽然在文本检测上取得了很好的效果,但是对解决弯曲文本往往难以得到平滑的文本包围曲线,并且模型较为复杂不具备性能优势。于是研究者们提出了基于图像分割的文本分割方法,先从像素层面做分类,判别每一个像素点是否属于一个文本目标,得到文本区域的概率图,通过后处理方式得到文本分割区域的包围曲线。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第25张图片

    • 此类方法通常是基于分割的方法实现文本检测,基于分割的方法对不规则形状的文本检测有着天然的优势。基于分割的文本检测方法主体思想为,通过分割方法得到图像中文本区域,再利用opencv,polygon等后处理得到文本区域的最小包围曲线

  • Pixellink采用分割的方法解决文本检测问题,分割对象为文本区域,将同属于一个文本行(单词)中的像素链接在一起来分割文本,直接从分割结果中提取文本边界框,无需位置回归就能达到基于回归的文本检测的效果。但是基于分割的方法存在一个问题,对于位置相近的文本,文本分割区域容易出现“粘连“问题。Wu, Yue等人提出分割文本的同时,学习文本的边界位置,用于更好的区分文本区域。另外Tian等人提出将同一文本的像素映射到映射空间,在映射空间中令统一文本的映射向量距离相近,不同文本的映射向量距离变远

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第26张图片
  • MSR针对文本检测的多尺度问题,提出提取相同图像的多个scale的特征,然后将这些特征融合并上采样到原图尺寸,网络最后预测文本中心区域、文本中心区域每个点到最近的边界点的x坐标偏移和y坐标偏移,最终可以得到文本区域的轮廓坐标集合。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第27张图片
  • 针对基于分割的文本算法难以区分相邻文本的问题,PSENet提出渐进式的尺度扩张网络学习文本分割区域,预测不同收缩比例的文本区域,并逐个扩大检测到的文本区域,该方法本质上是边界学习方法的变体,可以有效解决任意形状相邻文本的检测问题。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第28张图片

    • 假设用了PSENet后处理用了3个不同尺度的kernel,如上图s1,s2,s3所示。首先,从最小kernel s1开始,计算文本分割区域的连通域,得到(b),然后,对连通域沿着上下左右做尺度扩张,对于扩张区域属于s2但不属于s1的像素,进行归类,遇到冲突点时,采用“先到先得”原则,重复尺度扩张的操作,最终可以得到不同文本行的独立的分割区域

  • Seglink++针对弯曲文本和密集文本问题,提出了一种文本块单元之间的吸引关系和排斥关系的表征,然后设计了一种最小生成树算法进行单元组合得到最终的文本检测框,并提出instance-aware 损失函数使Seglink++方法可以端对端训练。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第29张图片

    • CVPR2017的一篇spotlight论文《Detecting Oriented Text in Natural Images by Linking Segments》介绍以一种可以检测任意角度文本的检测算法,我们一般称这个算法为SegLink,这篇论文既融入CTPN小尺度候选框的思路又加入了SSD算法的思路,达到了当时自然场景下文本检测state-of-art的效果。【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST) - 最难不过二叉树 - 博客园 (cnblogs.com)

    • 文本的特点就是高宽比特别大或小,而且文本通常存在一定的旋转角度,如果我们对于带角度的文本仍然使用目标检测那个思路回归四个参数(x,y,w,h)来指定一个目标的位置的话(如下图红色框),那显然误差太大了,这个检测效果并不是我们所能接受的。作为对比,下图的绿色框的检测效果才是我们的终极目标。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第30张图片

    • 一个最直接的思路就是让模型再学习一个参数θ!这个θ表示文本框的旋转角度,也就是我们最终要回归的参数从原来的(x,y,w,h)变成(x,y,w,h,θ)。SegLink确实也采取了这个思路,除此之外,他还提出了Segment和Linking两个重要概念,这个才是这篇CVPR论文的核心创新点。

    • segment从中文上理解为文本行的一部分,这一部分可以是一个字符或文本行的任意一部分。如下图示,黄色框表示一个segment,一个完整的文本行中包含多个segment,每个sgment之间通过link(图中的绿色线)连接组合起来。那么Segment做文本检测的思路其实跟CTPN的思路很像,先检测文本行的一部分,再把他们连接起来构成一个完整文本行。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第31张图片

    • 我们把图片的关键部位放大看看细节:首先每个segment是有一定的重合区域的,然后每两个segment连接的部位是两个segment的中心点。每一个segment和link仅依靠局部图像的纹理信息即可完成检测,而无需整张图像的信息。

    • 下图是SegLink的网络架构,显然这个架构采取了SSD的思路,首先使用VGG16作为backbone进行特征提取,其中VGG16的全连接层(fc6,fc7)替换成卷积层(conv6,conv7),再接卷积层conv8到conv11。值得说明的是,conv4~conv11之间的尺寸依次减少(每一层是前一层的1/2)。这个做法是为了做多尺度下的目标检测,即大的feature map擅长做小物体的检测,而小的feature map则擅长检测大物体。借助多个不同尺度的feature map,从6个feature layer上检测segment和link,我们就可以检测出不同尺寸的文本行了。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第32张图片

    • 观察后面的卷积层可以发现,对不同层的feature map使用3×3的卷积层产生最终的输出(包括segment和link),不同特征层输出的维度是不一样的,因为除了conv4_3层外,其它层存在跨层的link。这里segment是text的带方向bbox信息(它可能是个单词,也可能是几个字符,总之是文本行的部分),link是不同segment的连接信息(文章将其也增加到网络中自动学习)。当所有segments都被检测出来后,我们就可以通过融合规则(combining segments),将各个feature map的segment的box信息和link信息进行融合,得到最终的文本行。

    • SegLink所使用的目标函数由三个部分构成,是否是text的二类分类的softmax损失,box的smooth L1 regression损失,是否link的二类的softmax损失。λ1和λ2控制权重,最后都设为1。

    • L ( y s , c s , y l , c l , s ^ , s ) = 1 N s L c o n f ( y s , c s ) + λ 1 1 N s L l o c ( s ^ , s ) + λ 2 1 N l L c o n f ( y l , c l ) L(y_s,c_s,y_l,c_l,\hat s,s)=\frac1{N_s}L_{conf}(y_s,c_s)+\lambda_1\frac1{N_s}L_{loc}(\hat s,s)+\lambda_2\frac1{N_l}L_{conf}(y_l,c_l) L(ys,cs,yl,cl,s^,s)=Ns1Lconf(ys,cs)+λ1Ns1Lloc(s^,s)+λ2Nl1Lconf(yl,cl)

    • 现在计算一下每个feature map输出的参数有哪些呢?segment的位置信息:(x,y,w,h,θ),一共5个参数; 每个segment内的分类分数,即判断框内有字符还是无字符的分数(2分类),共2个参数; 同层(within-layer)的每个segment的link的分数,表示该方向有link还是没link(2分类问题),而一个segment有八邻域所以有八个方向,参数一共有2×8=16; 相邻层(cross-layer)之间也存在link,同样是该方向有link还是没link(2分类问题),而link的个数是4个,所以参数总数为2×4=8。输出参数总数为(2+5+16+8=31)。假设当前的feature map的尺度为(w,h),那么该层卷积后输出为w×h×31。

    • within-layer link表示在同一层feature layer里,每个Segment与8邻域内的segment的连接状况,如下图(a)所示。且每个link有2维,一维是正分,表示两个segment属于同一文本,一维是负分,表示两个segment不属于同一文本。所以,每个predictor输出16(8×2)维向量。

    • cross-layer link:在不同的feature layer上有可能会检测到同一文本的segments,造成冗余,cross-layer link的提出就是为了解决这个问题。cross-layer link连接了两个相邻feature layer上的segments,如图(b)所示。需要注意的是,由于下采样使后一层为前一层scale的1/2,定义一个segment的cross-layer邻居为前一层4邻域更小的segment,即前一层是后一层的邻居,但后一层不是前一层的邻居,所以conv4_3的feature layer没有cross-layer邻居。图中所示的黄框为当前层的segment,蓝框为上一层更小更细的segment,绿色的线代表cross-layer link有连接,属于同一文本,在后续的combine算法中会将他们融合,即去除了冗余。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第33张图片

    • 已经知道如何获取segment和相应的link了,那接下来要做的就是怎么把这些link和segment合并成一个完整的文本行。

      • 假设我们有一个集合B,里面有很多相关联的segment待合并;
      • 每一个segment都有自己的角度θ,那我们求集合B中所有segment角度的平均值 θ b θ_b θb;
      • 求一条直线 L 使得所有segment的中心到这条直线的距离最小,也就是最小二乘法线性回归啦;
      • 每个segment的中心往直线L做垂直投影;
      • 从所有投影点中选出相距最远的两个点,记做 ( x p , y p ) (x_p,y_p) xp,yp ( x q , y q ) (x_q,y_q) xq,yq;
      • 最终合并好的文本框的位置参数记为 ( x b , y b , w b , h b , θ b ) (x_b,y_b,w_b,h_b,θ_b) (xb,yb,wb,hb,θb)那么 x b : = 1 / 2 ( x p + x q ) ; y b : = 1 / 2 ( y p + y q ) x_b:=1/2(x_p+x_q); y_b:=1/2(y_p+y_q) xb:=1/2(xp+xq);yb:=1/2(yp+yq)
      • 文本行的宽度 w b w_b wb 就是两个最远点的距离(即(xp,yp)和(xq,yq))再加上最远两个点所处的segment的宽度的一半(Wp和Wq)。
      • 文本行高度hb就是所有segment高度求平均值
      • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第34张图片
  • 虽然分割方法解决了弯曲文本的检测问题,但是复杂的后处理逻辑以及预测速度也是需要优化的目标。PAN针对文本检测预测速度慢的问题,从网络设计和后处理方面进行改进,提升算法性能。首先,PAN使用了轻量级的ResNet18作为Backbone,另外设计了轻量级的特征增强模块FPEM和特征融合模块FFM增强Backbone提取的特征。在后处理方面,采用像素聚类方法,沿着预测的文本中心(kernel)四周合并与kernel的距离小于阈值d的像素。PAN保证高精度的同时具有更快的预测速度。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第35张图片
  • DBNet针对基于分割的方法需要使用阈值进行二值化处理而导致后处理耗时的问题,提出了可学习阈值并巧妙地设计了一个近似于阶跃函数的二值化函数,使得分割网络在训练的时候能端对端的学习文本分割的阈值。自动调节阈值不仅带来精度的提升,同时简化了后处理,提高了文本检测的性能。

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第36张图片
  • FCENet提出将文本包围曲线用傅立叶变换的参数表示,由于傅里叶系数表示在理论上可以拟合任意的封闭曲线,通过设计合适的模型预测基于傅里叶变换的任意形状文本包围框表示,从而实现了自然场景文本检测中对于高度弯曲文本实例的检测精度的提升

    • 认识OCR,从文字检测到文字识别,从任务定义到下游任务,从形态学方法到深度学习_第37张图片
  • Faster RCNN来做文本检测从任务上分析是可行的,毕竟文本说到底还是一个Object。我们回顾一下Faster RCNN做目标检测的关键步骤有哪些:

    • 基础网络做特征提取;
    • 特征送入RPN做候选框提取;
    • 分类层对候选框内物体进行分类,回归层对候选框的(x,y,w,h)进行精细调整。

你可能感兴趣的:(深度学习,ocr,深度学习,人工智能)