ABCNet、Deep TextSpotter、SEE、FOTS…你都掌握了吗?一文总结OCR必备经典模型(三)
机器之心专栏
本文将分 3 期进行连载,共介绍 17 个在OCR任务上曾取得 SOTA 的经典模型。
第 1 期:CTPN、TextBoxes、SegLink、RRPN、FTSN、DMPNet
第 2 期:EAST、PixelLink、TextBoxes++、DBNet、CRNN、RARE
第 3 期:ABCNet、Deep TextSpotter、SEE、FOTS、End-to-End TextSpotter
您正在阅读的是其中的第 3 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
第 1 期回顾:CTPN、TextBoxes、SegLink、RRPN、FTSN、DMPNet…你都掌握了吗?一文总结OCR必备经典模型(一)
第 2 期回顾:EAST、PixelLink、TextBoxes++、DBNet、CRNN…你都掌握了吗?一文总结OCR必备经典模型(二)
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
---|---|---|
ABCNet | https://sota.jiqizhixin.com/project/abcnet 收录实现数量:2 支持框架:PyTorch | ABCNet: Real-time Scene Text Spotting with Adaptive Bezier-Curve Network |
Deep TextSpotter | https://sota.jiqizhixin.com/project/deep-textspotter | Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework |
SEE | https://sota.jiqizhixin.com/project/see-2 收录实现数量:1 支持框架:TensorFlow | SEE: Towards Semi-Supervised End-to-End Scene Text Recognition |
FOTS | https://sota.jiqizhixin.com/project/fots 收录实现数量:7 支持框架:PyTorch、TensorFlow | Fast Oriented Text Spotting with a Unified Network |
End-to-End TextSpotter | https://sota.jiqizhixin.com/project/end-to-end-textspotter 收录实现数量:1 | An end-to-end TextSpotter with Explicit Alignment and Attention |
光学字符识别(Optical Character Recognition,OCR)是指对文本资料进行扫描后对图像文件进行分析处理,以获取文字及版面信息的过程。一般来说,在获取到文字之前需要首先对文字进行定位,即执行文本检测任务,将图像中的文字区域位置检测出来;在找到文本所在区域之后,对该区域中的文字进行文字识别。文字识别就是通过输入文字图片,然后解码成文字的方法。OCR解码是文字识别中最为核心的问题。传统技术解决方案中,分别训练文本检测和文字识别两个模型,然后在实施阶段将这两个模型串联到数据流水线中组成图文识别系统。
对于文本检测任务,主要包括两种场景,一种是简单场景,另一种是复杂场景。简单场景主要是对印刷文件等的文本检测,例如像书本扫描、屏幕截图,或是清晰度高、规整的照片等。由于印刷字体的排版很规范,背景清晰,现在的检测、识别技术已经很成熟了,检测的效果都比较好。通过利用计算机视觉中的图像形态学操作,包括膨胀、腐蚀基本操作,即可实现简单场景的文字检测。复杂场景主要是指自然场景,由于光照环境以及文字存在着很多样的形式,例如灯箱广告牌、产品包装盒、设备说明、商标等,存在角度倾斜、变形、背景复杂、光线忽明忽暗、清晰度不足等情况,这时要将文本检测出来难度就比较大了,此时主要考虑引入深度学习模型进行检测。
对于文字识别任务,一般由下面的步骤组成:首先是读取输入的图像,提取图像特征,因此,需要有个卷积层用于读取图像和提取特征;然后,由于文本序列是不定长的,因此需要处理不定长序列预测的问题;再次,为了提升模型的适用性,最好不要要求对输入字符进行分割,直接可进行端到端的训练,这样可减少大量的分割标注工作,这时就要引入 CTC 模型(Connectionist temporal classification, 联接时间分类)来解决样本的分割对齐的问题;最后,根据一定的规则,对模型输出结果进行纠正处理,输出正确结果。
最近流行的技术解决方案中,考虑用一个多目标网络直接训练出一个端到端的模型以替代两阶段模型。在训练阶段,端到端模型的输入是训练图像及图像中的文本坐标、文本内容,模型优化目标是输出端边框坐标预测误差与文本内容预测误差的加权和。在实施阶段,原始图像经过端到端模型处理后直接输出预测文本信息。相比于传统方案,该方案中模型训练效率更高、资源开销更少。
我们在这篇报告中分别总结了OCR中必备的文本检测模型、文字识别模型和端到端的方法。其中,文本检测模型主要考虑复杂场景中的深度学习模型。
一、文字识别模型
1、 ABCNet
ABCNet是一个端到端的可训练框架,用于定向或弯曲的场景文本发现,首次使用参数化的贝塞尔曲线来表示定向或弯曲的文本。ABCNet通过贝塞尔曲线的适应性实现了定向或弯曲场景的文本检测,与标准的矩形边界框检测相比,它引入的计算开销可以忽略不计。此外,设计了一个新颖的特征对齐层—BezierAlign,以精确计算弯曲形状的文本实例的卷积特征,因此可以在不引入很多计算成本的情况下实现高识别精度。
图1 ABCNet框架。使用立方贝塞尔曲线和BezierAlign,利用贝塞尔曲线的检测结果来提取弯曲的序列特征。整个框架是可以端到端训练的,效率很高。紫色的点代表立方贝塞尔曲线的控制
ABCNet的框架如图所示。ABCNet采用single-shot、anchor-free的卷积神经网络作为检测框架。探测是在探测头的输出特征图上密集预测的,它由4个堆叠的卷积层构成,跨度为1,填充为1,核为3×3。ABCNet由三个部分组成,第一部分共享的检测头预测两条贝塞尔曲线的四个顶点以及四个控制点的坐标偏移;第二部分Bezier Align用于对齐特征;第三部分是一个轻量级的识别模块,用于从对齐后的特征中识别出文字。
贝塞尔曲线表示一条以伯恩斯坦多项式为基础的参数曲线c(t)。其定义如下所示:
为了用贝塞尔曲线拟合任意形状的文本,作者从现有的数据集和现实世界中全面观察定向或弯曲的场景文本,并通过经验表明,立方贝塞尔曲线(即n为3)足以拟合不同类型的定向或弯曲的场景文本。如图2所示。
图2立体贝塞尔曲线。bi代表控制点。绿色线条构成控制多边形,黑色曲线是立方贝塞尔曲线。注意,只有两个端点b1和b4,贝塞尔曲线就会退化为一条直线
根据如下公式计算出贝塞尔曲线控制点的坐标。b0—b3 对应一条贝塞尔曲线上四个控制点的坐标其中两个端点坐标已知;p0—pm 对应弯曲边界标注的点的坐标。有2m+2个方程,m+5个未知数,可通过最小二乘法得到方程的解:
为了实现端到端的训练,以前的方法大多采用各种采样(特征对齐)方法来连接识别分支。通常情况下,抽样方法代表了网络内区域裁剪程序。换句话说,给定一个特征图和感兴趣的区域(RoI),使用采样方法选择RoI的特征,并有效地输出一个固定大小的特征图。然而,以前基于非分割的抽样方法,如RoI Pooling、RoIRotate、Text-Align-Sampling或RoI Transform,都不能正确地对齐定向或弯曲文本的特征。通过利用紧凑贝塞尔曲线bounding box的参数化性质,本文提出了BezierAlign的特征取样。
定向或弯曲网格的每一列都与文本的贝塞尔曲线边界正交。采样点在宽度和高度上分别有等距的间隔,这些间隔是相对于坐标而言的双线性插值。形式上,给定一个输入特征图和贝塞尔曲线控制点,同时处理矩形输出特征图的所有输出像素,大小为h_out × w_out。以位置为(g_iw, g_ih)的像素g_i(来自输出特征图)为例,通过以下方式计算t:
根据t可以索引到贝塞尔曲线上下两条边上对应的点,然后根据这两个点的坐标进行线性插值可以索引到这两个点之间所有采样点的位置,以此类推可以得到贝塞尔曲线包围的区域所有采样点的位置坐标。最后根据op ,可以得到双线性插值后的结果:
识别分支由六个卷积层、一个双向LSTM和一个全连接层组成,最终输出分类分数,采用CTC loss用于字符串的对齐。在训练期间,直接使用生成的Bezier曲线GT(Ground truth)来提取RoI特征,因此,检测分支不会影响识别分支。在推理阶段,RoI区域由检测得到的贝塞尔曲线代替。
项目 | SOTA!平台项目详情页 |
---|---|
ABCNet | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/abcnet |
二、端到端方法
1、 Deep TextSpotter
Deep TextSpotter是一个端到端可训练场景文本检测和识别框架,其创新之处在于:在一个单一的端到端通道中对文本检测和识别进行训练,识别CNN的结构及其输入层的几何形状保留了文本的方面并使其分辨率适应数据。
图3方法概述。由区域建议网络( Region Proposal Network)生成文本区域。通过双线性抽样将每个具有足够文本置信度的区域规范化处理为一个可变宽度的特征张量。最后,每个区域都与一连串的字符相关联,或者被判定为非文本而拒绝
Deep TextSpotter在一个给定的场景图像中定位文本区域,并为所有有文本的区域提供文本转录的字符序列。Deep TextSpotter采用的是YOLOv2架构,是因为YOLOv2的准确性较高,而复杂度明显低于标准VGG16架构(完整的VGG-16架构仅仅处理一张224×224(0.05 Mpx)的图像就需要300亿次操作)。使用YOLOv2架构使我们能够以更高的分辨率处理图像,这是文本识别的关键能力---需要以更高的分辨率进行处理,因为1Mpx的场景图像可能包含10个像素高的文本,所以缩小源图像会使文本无法阅读。Deep TextSpotter使用YOLOv2架构中的前18个卷积层和5个最大池层,该架构以3×3卷积滤波器为基础,在每个池化步骤后将通道数量增加一倍,并增加1×1滤波器以压缩3×3滤波器之间的表征。去掉全连接层,使网络完全卷积,所以模型最终层的尺寸为W/32×H/32×1024,其中,W和H表示源图像宽度和高度。
使用区域建议网络(RPN)来生成区域建议,但增加了旋转r_θ,这对成功的文本识别至关重要。在最后一个卷积层的每个位置,该模型预测了k个旋转的bounding boxes,对于每个bounding box r,预测了6个特征—它的位置r_x、r_y,尺寸r_w、r_h,旋转r_θ和分数r_p,它捕捉了该区域包含文本的概率。bounding boxes的位置和尺寸是使用逻辑激活函数对预定义的anchor boxes进行编码的,因此,源图像中实际的bounding boxes位置(x, y)和尺寸(w, h)计算方式如下:
其中,c_x和c_y表示最后一个卷积层中的网格的偏移量,a_w和a_h表示某个anchor box a预定义的高度和宽度。通过r_θ直接预测bounding box的旋转角度θ∈( - π2,π2)。
通过聚合训练集上的kmeans聚类找到合适的anchor box尺度和宽高比。要求IoU具有至少60%的时候,得到k = 14个不同的anchor boxes尺寸。对于每个图像,RPN生成大小为W/32 x H/32 x 6k的bounding box,其中,k是每个位置的anchor box数量,6是预测参数的数量(x,y,w,h,θ和文本分数)。
图4 anchor box的宽度和高度,是通过训练集的K-均值聚类得到的。要求每个ground-truth box与一个anchor box的交集至少达到60%,共k = 14个箱子
在训练阶段,使用YOLOv2方法通过采集源图像中的所有正样本和负样本,其中每20个批次随机将输入维度大小更改为{352,416,480,544,608}中的一个。正样本是与ground-truth结合最高的交叉点的区域,其他交叉区域是负样本。在运行时,作者发现最好的方法是推迟得分r_p高于特定阈值p_min的所有区域,并在识别阶段后推迟非最大值抑制,因为具有非常相似的r_p得分的区域可以产生非常不同的转录,因此在这个阶段选择具有最高r_p的区域并不总是对应于正确的转录。
在前一阶段中检测到的每个区域具有不同的尺寸和旋转角度,因此有必要将特征映射到规范尺寸的张量,这可以用于识别。使用双线性采样将来自源图像的w×h×C区域映射到固定高度wH'/h×H'×C的张量(本文的H '= 32,即固定高度为32)。与标准RoI方法相比,此特征表示具有关键优势,因为它允许网络规范化旋转和缩放,但同时保持单个字符的宽高比和位置。
给定检测到的区域特征U,利用下式将其映射到固定高度张量:
考虑到来自源图像的规范化区域,每个区域都与一连串的字符相关联,或在以下过程中被拒绝为非文本。给定来自源图像的归一化区域,每个区域与字符序列相关联,或者在下面的过程中作为非文本被拒绝。在该步骤中必须解决的问题是,不同大小的文本区域必须被映射到不同长度的字符序列。模型采用如下的网络结构,采用可变宽度特征张量W×H ×C作为输入并输出矩阵W4×| A | ,其中A是字母表(例如所有英文字符)。矩阵高度是固定的(它是字符类的数量),但它的宽度随着源区域的宽度而增加,因此随着预期字符序列的长度而增长。
表2 用于文本识别的全卷积网络
该模型使用CTC将可变宽度特征张量转换为标签序列上的条件概率分布。然后使用该分布为文本区域选择最可能的标记序列。令y = y1,y2,...,yn表示从用空白符号“ - ”扩展的字母A中的长度为n的网络输出的矢量。然后给出路径π的概率为:
进一步定义多对一映射B:A n→A≤n,其中A≤n是长度更短或相等的所有序列的集合。映射B删除所有空白和重复标签,这对应于每次标签预测改变时输出新标签。在训练中,使用最大化目标标记p(w | y)的对数似然的目标函数。在每个训练步骤中,使用类似于HMM训练的前向算法有效地计算小批量中每个文本区域的概率p(w_gt | y),并且使用目标函数导数来更新网络权重,使用标准反向传播算法。在测试时,分类输出w *应该由最可能的路径p(w | y)给出,遗憾的是它不易处理,因此作者采用了最可能的标记的近似方法:
在此过程结束时,图像中的每个文本区域都具有字符序列形式的关联内容,或者当所有标签都为空白时,它被拒绝为非文本。该模型通常对图像中的单个文本区域产生许多不同的方框,因此作者通过基于文本识别置信度的标准非最大值抑制算法来抑制重叠的方框,该置信度是由文本长度归一化的p(w∗|y)。
项目 | SOTA!平台项目详情页 |
---|---|
Deep TextSpotter | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/deep-textspotter |
2、SEE
SEE是一个端到端的半监督文本检测和识别模型,不需要提供文本检测的 bounding box ,只需要提供正确的 label,然后通过预测误差反向传播修正文本检测结果。SEE使用一个单一的深度神经网络,以半监督的方式学习从自然图像中检测和识别文本。SEE是包括一个定位网络,学习检测图像中的文本区域;以及一个文本识别网络,识别出的文本区域及其文本内容。
图5 SEE由两个主要部分组成。首先是定位网络,它接收输入图像并预测N个变换矩阵,这些矩阵用于创建N个不同的采样网格,采样网格有两种使用方式:(1)计算已识别的文本区域的边界框 ;(2)提取N个文本区域。然后,识别网络对这些提取的区域进行文字识别。整个系统通过只提供每个文本区域的文本标签信息进行端到端的训练
用空间变换器检测文本
SEE使用的空间变换器是DNN的一个可微调模块,它接受一个输入特征图I,并对这个特征图进行空间变换,生成一个输出特征图O。空间变换器模块由三部分组成:第一部分是一个计算函数f_loc的定位网络,它预测要应用的空间转换的参数θ。这些预测的参数在第二部分中被用来创建一个采样网格,它定义了一组应该对输入map进行采样的点。第三部分是一个可微调的插值方法,它采用生成的采样网格,生成空间转换的输出特征图O。
定位网络。定位网络接受输入的特征图I∈R^C×H×W,有C个通道,高度H和宽度W,输出变换参数θ。在系统中,使用定位网络(f_loc)来预测N个二维仿生变换矩阵(A_θ)^n:
其中,N是定位网络应定位的字符、单词或文本行的数量。以这种方式预测的仿生变换矩阵允许网络对输入图像进行翻译、旋转、缩放和倾斜。在SEE中,N个转换矩阵(A_θ)^n是通过使用一个前馈CNN和一个RNN产生的。N个转换矩阵中的每一个都是使用全局提取的卷积特征c和RNN每个时间步长的隐藏状态h_n来计算的。
文中使用ResNet架构的一个变体作为CNN用于定位网络。定位网络中使用的RNN是一个LSTM单元,使用这个LSTM生成隐藏状态h_n,而这些隐藏状态又被用来预测仿生变换矩阵。
旋转Dropout。旋转Dropout的作用是随机dropout负责旋转的仿生变换的参数。这可以防止定位网络输出进行过度旋转的变换矩阵。
网格生成器。网格生成器使用一个有规则间隔的网格G_o,其坐标为y_ho,x_wo,高度为H_o,宽度为W_o。网格G_o与仿生变换矩阵(A_θ)^n一起使用,生成N个规则网格G^n,其坐标为输入特征图I的(u_i)^n、 (v_j)^n:
在推理过程中,可以提取N个结果网格G^n,其中包含定位网络发现的文本区域的bounding box。高度H_o和宽度W_o可以自由选择。
本地化的特定正则器。作者发现增加额外的正则化处理是有益的,这些正则化项会对网格进行惩罚,这些网格会沿着任何轴线进行镜像。作者还发现,该网络倾向于预测在训练过程中变得更大的网格,因此又加入了一个正则化项,根据其面积对大网格进行惩罚。最后,还加入了一个正则化项,鼓励网络预测宽度大于高度的网格,因为文本通常是在水平方向书写的,通常比高度宽。
图像采样器。网格生成器生成的N个采样网格G^n用于在每个n∈N的坐标(u_i)^n、 (v_j)^n处对特征图I的值进行采样。这些点不会总是与输入特征图中的离散值网格完全一致。作者使用了双线性抽样,并将N个输出特征图O_n在给定位置i,j(其中i∈Ho,j∈Wo)的值定义为:
文字识别阶段
文本检测阶段的图像采样器生成一组N个区域,这些区域是从原始输入图像中提取的。文字识别阶段使用这N个不同的区域并利用一个CNN对它们进行独立的处理。这个CNN也是基于ResNet架构的。识别阶段的CNN预测了标签空间L上的概率分布yˆ,其中L=L∪{ε},L是用于识别的字母表,并代表空白标签。该网络的训练是通过运行LSTM的固定数量的T个时间段,并计算每个时间步长的输出的交叉熵损失。时间步长T是基于数据集中最长的单词的字符数选择的。损失L的计算方法如下:
项目 | SOTA!平台项目详情页 |
---|---|
SEE | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/see-2 |
3、 FOTS
FOTS是一个统一的端对端训练的快速多方向文本定位网络,在文本检测和识别任务中共享计算和视觉信息。FOTS引入旋转感兴趣区域(RoIRotate), 可以从卷积特征图中生成水平轴对齐且高度固定的文本区域,支持倾斜文本的识别。FOTS的整体结构包括4部分:shared convolutions(共享特征),the text detection branch(检测分支),RoIRotate operation(仿射变换分支),the text recognition branch(识别分支)。利用主干网络提取输入数据的共享特征,经过检测分支来预测文本框位置和方向,利用仿射变换在共享特征图上将文本框的内容变换到标准x、y坐标轴上,最后经过识别分支得出文本内容。具体的,FOTS使用的检测分支为EAST,识别分支为CRNN,所以就整个网络来说,此网络的关键创新点为:提出了RoIRotate ,类似于roi pooling 和roi align,该操作主要池化带方向的文本区域,通过该操作可以将文本检测和文本识别端到端的连接起来。
图6 FOTS整体架构,在一次前向传递中同时预测文本区域和文本标签
图7 共享卷积结构。Conv1-Res5是来自ResNet-50的操作,Deconv包括一个卷积以减少特征通道和一个双线性上采样操作
图6展示了FOTS框架概况。文本检测分支和识别分支共享卷积特征,共享网络的结构如图7所示。FOTS的backbone为ResNet50 with FPN,共享卷积层采用了类似U-net的卷积共享方法,将底层和高层的特征进行了融合,即将低级别的特征图和高级别的语义特征图连接起来。由共享卷积产生的特征图的分辨率是输入图像的1/4。文本检测分支使用共享卷积产生的特征输出密集的每像素文本预测。通过检测分支生成的定向文本区域建议,RoIRotate将相应的共享特征转换为固定高度的表示,同时保持原始区域的长宽比。最后,文本识别分支识别出区域建议中的单词。采用CNN和LSTM对文本序列信息进行编码,然后是一个CTC解码器。
文本检测分支
采用一个全卷积网络作为文本检测器。由于自然场景图像中存在大量的小文本框,在共享卷积中把特征图从原始输入图像的1/32放大到1/4大小。在提取了共享特征后,应用一个卷积来输出密集的每像素的文字预测。第一个通道计算每个像素是正样本的概率。原始文本区域的缩减版的像素被认为是正的。对于每个正样本,以下4个通道预测其与包含该像素的bounding box的上、下、左、右四边的距离,最后一个通道预测相关bounding box的方向。最终的检测结果是通过对这些正样本进行阈值处理和NMS产生的。检测分支损失函数由两项组成:文本分类项和bounding box回归项。文本分类项可以被看作是下采样得分图的像素级分类损失。只有原始文本区域的缩减版被认为是正区域,而bounding box和缩减版之间的区域被认为是 "NOT CARE",并且不对分类损失做出贡献:
RoIRotate
RoIRotate的目的是将有角度的文本块(文本检测算法得到的)经过仿射变换,转化为正常的axis-align的、高度固定且长宽比保持不变的文本块,以满足后续识别分支的输入要求。ROIRotate分为两步:一是,通过text proposals的预测值或者text proposals真实值计算仿射变换矩阵M;二是,分别对检测分支得到的不同的文本框实施仿射变换,通过双线性插值获取水平feature map。第一步如下:
有了变换参数,使用仿生变换生成最终的RoI特征:
最终输出值为:
文字识别
文字识别分支旨在利用共享卷积提取的区域特征并通过RoIRotate进行转换来预测文本标签。考虑到文本区域中标签序列的长度,LSTM的输入特征通过共享卷积从原始图像中沿宽度轴减少了两次。紧凑文本区域的可识别特征,特别是那些狭窄形状的字符,将被消除。文字识别分支包括类似于VGG的顺序卷积,只沿高度轴减少的集合,以及一个双向LSTM、一个全连接和最后的CTC解码器。整个文字识别分支就是一个标准的CRNN。
整个网络的损失函数为一个多任务损失函数:
项目 | SOTA!平台项目详情页 |
---|---|
FOTS | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/fots |
4、 End-to-End TextSpotter
End-to-End TextSpotter将文字检测和识别整合到一个端到端的网络中,检测使用PVAnet,识别使用RNN,此外还加入一个Text-alignment layer和字符attention和mask机制,通过利用Text-alignment layer中的采样网格将文字区域固定为64 x 8大的feature map,再输入双向LSTM进行识别。
模型是一个建立在PVAnet框架上的全卷积结构。如图27所示,引入了一个新的用于文字识别的循环分支,它与现有的用于文字bounding box回归的检测分支平行整合到CNN模型中。RNN分支由一个新的文本对齐层和一个基于LSTM的循环模块组成,应用了字符注意力嵌入机制。文本对齐层在检测到的区域内提取精确的序列特征,防止对无关的文本或背景信息进行编码。字符注意力嵌入机制通过提供更详细的字符监督来调节解码过程。textpotter以端到端的方式直接输出最终结果,除了简单的非最大抑制(NMS),没有任何后处理步骤。
图8方法框架。提出了文本配准层,在检测到的多方位的四边形中提取准确的序列特征。将一个新的字符注意力机制应用于指导具有明确监督的解码过程。整个框架可以以端到端的方式进行训练
整体架构。本文模型是一个全卷积结构,其中,将PVA网络用作backbone,因为它的计算成本很低。与一般物体不同的是,文本在尺寸和长宽比上都有很大的变化。因此,它不仅需要为小规模的文本实例保留局部细节,还需要为长的文本实例维持一个大的接受域。通过逐渐结合conv5、conv4、conv3和conv2层的卷积特征来利用特征融合,目的是维护局部细节特征和高级上下文信息。这样可以对多尺度文本实例进行更可靠的预测。为简单起见,顶层的大小是输入图像的1/4。
文本检测。顶部卷积层包含两个子分支,设计用于联合文本/非文本分类和多方向bounding box回归:第一个子分支返回具有顶部特征图的相等空间大小的分类图,使用softmax函数指示预测的文本/非文本概率。第二个分支输出五个具有相同空间大小的定位图,这些定位图为每个具有任意方向的bounding box在文本区域的每个空间位置估计五个参数。这五个参数代表了当前点到相关bounding box的上、下、左、右四边的距离以及它的倾斜方向。通过这些配置,检测分支能够为每个文本实例预测任意方向的四边形。然后,通过下面描述的文本对齐层将检测到的四边形区域的特征馈送到RNN分支以进行单词识别。
文本对齐层。作者为单词识别创建了一个新的循环分支,提出了一个文本对齐层,用于从任意大小的四边形区域精确计算固定大小的卷积特征。文本对齐层是从RoI pooling扩展而来的,它广泛用于一般的目标检测。RoI池化通过执行量化操作,从任意大小的矩形区域计算固定大小的卷积特征。它可以集成到卷积层中,用于网络内区域裁剪,这是端到端训练检测框架的关键组成部分。但是,直接将RoI池应用于文本区域将导致由于未对齐问题导致的字识别性能显着下降。因此,作者开发了一个新的文本对齐层:提供了强大的字级对齐和精确的每像素对应,这是至关重要的从卷积图中提取精确文本信息的重要性,如图9所示。
具体来说,给定一个四边形区域,首先建立一个大小为h x w的采样网格。w在顶部卷积图上。采样点在区域内以等距间隔生成,并且采样点(p)在空间中生成的特征向量(v_p)位置(px, py),通过双线性采样计算如下:
图9标准RoI Pooling(顶部)和文本对齐层(底部)。本文方法可以避免对无关的文本和复杂的背景进行编码,这对文本识别的准确性至关重要
字符注意力的单词识别。文字识别模块建立在文本对齐层上,其中输入是从文本对齐池化层、大小为 w x H x C的输出固定大小的卷积特征,其中C是卷积通道的数量。卷积特征被馈送到多个初始模块并生成一系列特征向量,如图10所示。
图10 识别分支的子网结构,通过使用字符空间信息作为监督,在解码过程中提供指导
Attention Mechanism。在编码过程中,利用双向LSTM层来编码顺序矢量,编码来自过去和未来信息的强顺序上下文特征。本文引入一种增强文字识别中字符注意力的新方法。开发了明确编码的字符对齐机制强大的字符信息,以及mask监督任务,为模型学习提供有意义的局部细节和角色空间信息。此外,还介绍了注意力位置嵌入。它从输入序列中识别出最重要的点,进一步增强了推理中相应的文本特征。作者这些技术改进无缝集成到端到端可训练的统一框架中。
图11 提出的方法与传统的注意力LSTM的比较。热图表示每个时间步长的聚焦位置
注意力机制引入了一个新的解码过程,在每次解码迭代中自动学习注意力权重(α_t∈R^w),解码器通过使用这个注意力向量预测一个字符标签(y_t):
解码器过程直到遇到序列结束符号(EOS)而结束。注意力向量的计算方法是:
其中,e_t,j是衡量隐藏状态和编码特征h_e,j之间的匹配相似性的对齐因子。进一步的,作者提出了新的注意力排列和增强方法,明确地对每个字符的注意力进行编码。为了处理现有的隐性注意力模型所引起的错位问题,提出了一种明确编码字符空间信息的注意力排列,通过引入额外的损失作为监督。具体来说,假设p_t,1, p_t,2, ..., p_t,w是采样网格每一列中的中心点。在第t个时间步长,这些中心点可以通过以下方式计算出来:
在没有监督的情况下,很可能会导致错位,从而导致不正确的序列标签。直观地说,可以构建一个损失函数来描述注意力点是否集中在正确的地方:
其中,k_t为ground-truth(GT)坐标,w¯t是当前字符y_t的GT宽度。它们都被投射到文本方向的轴上。T是一个序列中的字符数。
为了进一步提高字符的注意力,通过利用字符掩码引入了另一个额外的监督,它提供了更多有意义的信息,包括字符的局部细节和空间位置。生成一组二进制掩码,其空间大小与最后的卷积图相同。掩码的数量与字符标签的数量相等。在每个空间位置应用一个softmax损失函数,称为mask损失ℓ_mask。这明确地将字符的强细节信息编码到注意力模块中。在训练过程中,ℓ_mask和ℓ_align损失都是可选的,在那些没有提供字符级别注释的图像上可以忽略。
从注意力向量中生成一个独热向量:
然后,直接将独热向量与上下文向量(g_t)连接起来,形成一个带有额外独热注意力信息的新特征表示。然后,解码器可以修改为:
最后,通过将所有这些模块整合到一个端到端的模型中,我们得到了一个包括四个部分的整体损失函数:
其中,ℓ_word是单词识别的softmax损失,ℓ_loc是文本实例检测的损失函数,λ1和λ2是相应的损失权重(均设为0.1)。
项目 | SOTA!平台项目详情页 |
---|---|
End-to-End TextSpotter | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/end-to-end-textspotter |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。
微信扫码关注该文公众号作者