ASTER文字识别论文详解

简介: sklearn是机器学习中一个常用的python第三方模块,里面对一些常用的机器学习方法进行了封装,在进行机器学习任务时,并不需要每个人都实现所有的算法,只需要简单的调用sklearn里的模块就可以实现大多数机器学习任务。

阅读英文论文顺序:


1.title

2.abstract

3.introduction

4.method

5.experiments

6.conclusion


第一遍:标题、摘要、结论,看是否自己研究的相关,看完之后可以看部分实验和方法里的关键图和表,这样可以花费十几分钟时间了解到论文是否适合你的研究方向。


第二遍:忽略部分细节,看懂重要图和表里的每个词,方法对比等,需要了解重要的图和表,知道每一个部分在干什么,圈出部分重要文献。看懂文章针对的问题、解决方法、效果怎么样。觉得文章太难,可以读引用的文献。


第三遍:最详细的一遍,知道每一段和每一句干什么,脑补过程、换位思考,提出什么问题,用什么方法来解决这个问题,实验是怎么做的。合上文章,回忆每一个部分在讲什么。


文字识别论文--ASTER


原文地址: https://ieeexplore.ieee.org/iel7/34/4359286/08395027.pdf


引言:


场景文本识别的一个具有挑战性的方面是处理扭曲或不规则布局的文本。尤其是透视文字和曲线文字在自然场景中比较常见,难以识别。在这项工作中,我们引入了 ASTER,这是一种端到端的神经网络模型,包括一个整流网络和一个识别网络。


1.修正网络自适应地将输入图像转换为新图像,修正其中的文本。它由灵活的 Thin-Plate Spline 转换提供支持,该转换可处理各种文本不规则性,并在没有人工注释情况进行训练。


2.识别网络是一种注意力序列到序列模型,它直接从校正后的图像中预测字符序列。整个模型是端到端的训练,只需要图像和它们的真实文本。通过大量实验,我们验证了整改的有效性,并展示了 ASTER 最先进的识别性能。此外,我们证明 ASTER 是端到端识别系统中的一个强大组件,因为它具有增强检测器的能力。


1. 主要思路

针对不规则文字,先矫正成正常线性排列的文字,再识别;

整合矫正网络和识别网络成为一个端到端网络来训练;

矫正网络使用STN,识别网络用经典的sequence to sequence + attention

2. 方法框架和流程

方法ASTER全称为Attentional Scene TExt Recognizer with Flexible Rectification,包括两个模块,一个用来矫正(rectification network),另一个用来识别(recognition work)。

4068319b5e9831cba99a03b83e913f76_e36cbf5e48df96f8341a0cf82f182873.png

模型结构总览


ASTER是2018年提出的论文,论文的全称是《ASTER: An Attentional Scene Text Recognizer with Flexible Rectification》。本文方法主要解决不规则排列文字的文字识别问题,论文为之前CVPR2016的paper(Robust Scene Text Recognition with Automatic Rectification,方法简称为RARE)的改进版。


ASTER基于encoder-decoder的方式,整体的模型架构以下三块:


TPS(Thin-Plate-Spline):分为localization network和grid sampler,前者用于回归出控制点,后者用于在原图上进行网格采样;


encoder:卷积神经网络用的是resnet,语言模型使用的是BiLSTM,需要说明的是在后续的DTRB论文中语言模型会单独拆分出来,在这里还是和原论文保持一致;


decoder:使用的是基于bahdanau attention的decoder,这里用了两个LSTM decoder。一个从左到右,一个从右到左,进行双向的解码。

1900825214082b6055ed22098430b57c_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2hpYm9oZTEyMw==,size_10,color_FFFFFF,t_70,g_se,x_16.png


2.2 矫正器

从模型结构的总览可以看出,ASTER其实和FAN有诸多的相似之处,最大的不同就在于TPS模块。所以,我们就重点介绍一下这个模块究竟是怎么实现文字的矫正的。


首先我们看一下TPS的整体结构,对于形状为(N,C,H_in,W_in)的输入图像I,经过下采样得到I_d,然后通过localization network得到控制点C’。有了C‘我们可以通过TPS得到一个矩阵变换T,接下来我们通过grid generator得到网格P,形状为 (N, H_out, W_out, 2),最后一维的2代表xy。接下来我们通过矩阵变换T将网格P映射至原图上得到P’,形状仍然为 (N, H_out, W_out, 2)。最后根据原图的网格P'采样得到I_r.下面我们进行一一讲解。

bf4f4bd955363c449a5dffcecc93c20f_3e5ddcd6f9074bb592231192d9f7e374.png

2.2.1 Localization Network

localization network就是一个卷积神经网络,里面都是3x3的conv block,最终通过全连接层得到控制点C‘,形状为(20, 2). 20代表上下各10个点,第二维是xy坐标。在这里需要注意全连接层的数值初始化的问题。作者通过对比试验证明,当全连接层的偏置项初始化为[(0.01, 0.01), (0.02, 0.01), ..., (0.01, 0.99), ..., (0.99, 0.99)]时,即在图片的上下边缘等距采样时,模型收敛的速度更快。


定位网络(已经训练完进行测试时)的输入是待识别的未矫正前图像,输出是K个控制点的位置。

该定位网络训练时没有用K个控制点(Control Point)作为annotation进行训练,而是直接接入后面的Grid Generator + Sample利用最后的识别结果,连成一个end-to-end的框架进行训练。

网络结构采用一个自己设计的普通的卷积网络(6层卷积 + 5个max-pooling + 2个全连接)来预测K个control point的位置(K= 20),点对应关系如下图:

e9cda2267e9e933b5c78b34c21bc70d3_22074434229b49a7aa5086564128f0c9.png

2.2.2 Thin Plate Transformation

由localization network我们得到了C’,然后我们同样用等距采样得到C,C的形状跟C‘一致,但是每两点的距离不是0.01,而是0.05.接下来我们通过如下的矩阵运算得到变换矩阵T,

8916ca2a913743eae17cc65e7e64679e_985e52df22344c208e70aaaa87563383.png

6e66ee28f711ca3e1c3561f2a627ebb9_1da3a4ea413c4a54b62f622c8933ff3e.png

通过列相乘得到x'、y', 由下面公式得到上图C'矩阵公式

ce6b6fe4d5a468e6b341e73f11d9ed4d_1a6af80e42ea46f4a20e7c6107439532.png

通过上述公式变换可得出论文最终的形式:

3bf0a0bded4a54f11f7c9d042e3001db_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2hpYm9oZTEyMw==,size_14,color_FFFFFF,t_70,g_se,x_16.png

网格生成器的输入是已有的Control point点集 + 矫正后的图(还未生成,但给定图大小可以取点)上的某个点坐标,输出是该点在矫正前(原图)上的点坐标位置

下面我们将上述公式进一步展开成流程图形式:

网格生成器可以看成是一个矩阵变换操作(变换的几个参数a0-a2, b0-b2可以通过Control point位置利用优化问题求解方法求出,因为Control Point在矫正前后的图上的位置都是已知的,故可以计算出对应关系),实际做预测时也是计算该待测点与已知的control point的位置关系,通过一系列对应关系算出在原图的位置。贴个图感受一下这个对应关系如下,p为矫正后的点位置,C为矫正后的Control point的点位置,p'为矫正前的点位置,C’为Control point在矫正前的点位置:

6afde5a59b40d351721ad01eef0540f9_f4ff774ca2c1c03fdb29d9b4fed89bab.png


2.2.3 Sampler

Sampler就是给定点映射关系及原图,生成一张新的矫正后的图,用到了简单的插值(二插值),以及当超出图外时直接clip掉。另外,Sampler采用可微的采样方法,方便梯度的bp。

输入是原图 + 矫正后的图上的点在原图上的对应位置关系, 输出是矫正后的图


首先利用grid generator得到网格P,然后通过下式我们将P映射到原图的P’.注意P和P‘数值范围都在0到1之间,但在最终进行插值输出的过程中,我们会将P’映射到-1到1之间,这个会在下面的代码看出。

6838fd703117921ff0fb4d9dbed0c055_c534067e1f384e1fad7bb76d047b1536.png

bfc6ba2618800a4ee39b837c10884703_09468cd7cad34200af5b744ab422e9de.png

89513363f1d675bd6aa1f13b3d94de4f_6cca360d55e94196a4de7d5229ea8038.png

总结:从下图可以看出,其实TPS就是要得到一个变换矩阵,其中C‘是需要进行学习的参数,而C是不变的,即手动调整的参数。根据C和C’可以得到T,然后在原图上采样就得到最终矫正之后的图像。

09355b46e92fe06947848d0a957822b5_44d3506e0c7c4e108c5225bbf6764935.png


2.3 特征提取层

本文的特征提取层跟FAN一致,都是先经过resnet,然后经过双向的LSTM,最终得到形状为(B, W, C)的三维特征向量,其中B代表batch size, W是time steps,C是channels。比如说根据原文,当输入大小为(32, 100)时,输出就是(B, 25, 512)

4cbad4e0da5feaf95effaa51ae2a8c2d_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2hpYm9oZTEyMw==,size_14,color_FFFFFF,t_70,g_se,x_16.png


2.4 解码

为了扩大特征上下文,我们在特征序列上采用了多层双向stm (BLSTM)网络[18]。BLSTM网络双向分析特征序列,捕获两个方向的长期依赖关系。输出相同长度的新特征序列,记为H = [ h 1 , h 2 . . . . h n ] H = [h_{1},h_{2}....h_{n}]H=[h1,h2....hn],其中h c o n v h_{conv}hconv。

7290820f8f214d43cf3793da10204187_412ff51c93cc42c3860636374fc2e20e.png

在前文CRNN网络中,其算法转录层接在LSTM层后直接连接CTC函数,而ASTER则采用Attention机制,根据LSTM每个时刻输入ht进行attention计算,attention值经过softmax处理,最终针对从h0-ht每项进行加权求和,其中w和v为可学习参数,St-1为前一时刻的信息,具体计算公式如上。


  本文的解码层和FAN基本类似,但有两处改进。第一点是将原先FAN的单向attention解码改成了双向的attention解码,这点改进的出发点是非常直观的。比如当解码到一个特定的字符时,该字符不仅与左边的语义信息相关,也与右边的相关。双向解码具体的做法如下,分别从左到右以及从右到左进行解码输出,然后去log-softmax得分高的作为最终的输出。这里使用的attention与FAN中的一致,都是bahdanau attention,公式如图示。

7365babc37c44a45e950872338d44012_aede8c9e18bd42f7bf0285fb33d49874.png

第二处改进是在最终预测输出的时候,原先我们一般取每个时间步概率最大的字符进行输出,本文改成了束搜索,搜索宽度一般设置成5


3. 代码解读

我们重点看看TPS以及attention decoder,这里的attention decoder用的还是单向的。如果想改成双向的话,直接将(B, L, C)中L的顺序改为从右至左就行。


3.1 TPS

首先我们看看如何回归得到C‘,注意是如何对最后一个全连接层进行初始化的。


3.2 attention decoder


这个实现是用GRU进行解码的,而FAN里使用的是LSTM。另外这个实现是将输入(B, L, W)中的L变成1,所以可以直接用GRU,而不是GRUCell进行解码。但其实我觉得用GRUCell解码更为直观一些。


4.总结:

论文主要解决了不规则,扭曲,变形的文本的识别问题


对扭曲图片进行纠正->识别,网络包括两个部分,实现了目前最好的文本识别效果

扭曲纠正网络(STN),实际是对原始图片进行仿射变换,让扭曲图片变得好识别。关键在于找到这个仿射变换的方程,仿射变换的方程是通过找原始图片矫正后图片的对应点实现的,所以问题的核心变成了预测控制点的位置,也就是原始图片上某些点在新的图片上的位置。

找位置的过程是无监督的,因为矫正的不好,识别的就不好,所以他们之间有一种隐形的连接关系,最后的loss在表面上只和识别有关系,实际上矫正结果影响识别结果。

找位置的参数初始化很重要,随机的参数找的位置都是随机的,矫正网络就无法收敛,所以通过使得全连接层weights = 0,bias = 特殊值,让一开始找的位置就是原始图片上对应点的位置,也就是初始化的矫正后的图片 = 原始图片,最开始网络是没有矫正功能的,

矫正网络最后没有使用tanh激活函数,输出任意大小矫正预测值,需要同时对于超出原始图像范围的矫正点要进行限制。

通过预测矫正图像上20个控制点的位置,与原始图像上20个点的位置进行映射 ,STN的基本原理是利用点之间的映射关系进行仿射变换,通过采样生成矫正后的图片。

整个过程是端到端训练的,很神奇,效果不错。

ASTER在一般attention based的encoder-decoder基础上,加上了TPS作为矫正模块,可以部分缓解由于弯曲文字导致的识别不准确问题。后续也有不少论文是沿着这个方向进行改进的,比如说MORAN、ESIR等等。下一篇我会继续沿着识别弯曲文本的方向,介绍利用2d attention进行文字识别的论文SAR.


目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理
自然语言处理技术(NLP)
自然语言处理技术(NLP)
38 1
|
6月前
|
机器学习/深度学习 文字识别 算法
文字识别技术3
文字识别技术3
35 2
|
机器学习/深度学习 人工智能 文字识别
CRNN文字识别
近几年来,CRNN在计算机视觉文本识别领域取得不错成果。CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。CRNN网络实现了不定长验证结合CNN和RNN网络结构,使用双向LSTM循环网络进行时序训练,并在最后引入CTC损失函数来实现端对端的不定长序列识别,
629 0
CRNN文字识别
|
5天前
|
机器学习/深度学习 自然语言处理 算法
什么是自然语言处理的机器翻译?
【4月更文挑战第8天】
13 2
|
5月前
|
机器学习/深度学习 存储 人工智能
一文综述:自然语言处理技术NLP
一文综述:自然语言处理技术NLP
212 0
一文综述:自然语言处理技术NLP
|
1月前
|
机器学习/深度学习 自然语言处理
自然语言处理机器翻译
自然语言处理机器翻译
16 4
|
6月前
|
机器学习/深度学习 文字识别 算法
文字识别技术2
文字识别技术2
47 2
|
6月前
|
机器学习/深度学习 文字识别 自然语言处理
文字识别技术1
文字识别技术1
62 2
|
7月前
|
机器学习/深度学习 自然语言处理 算法
NLP(自然语言处理)自学习平台可能是一个很好的选
NLP(自然语言处理)自学习平台可能是一个很好的选
86 3
|
11月前
|
机器学习/深度学习 自然语言处理 分布式计算
自然语言处理NLP面试问题
自然语言处理NLP面试问题