阅读英文论文顺序:

1.title
2.abstract
3.introduction
4.method
5.experiments
6.conclusion

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

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

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


ASTER方法概述

本文方法主要解决不规则排列文字的文字识别问题,论文为之前CVPR206的paper(Robust Scene Text Recognition with Automatic Rectification,方法简称为RARE)的改进版。

1. 主要思路

  • 针对不规则文字,先矫正成正常线性排列的文字,再识别;
  • 整合矫正网络和识别网络成为一个端到端网络来训练;
  • 矫正网络使用STN,识别网络用经典的sequence to sequence + attention

2. 方法框架和流程

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

模型结构总览

ASTER是2018年提出的论文,论文的全称是《ASTER: An Attentional Scene Text Recognizer with Flexible Rectification》。ASTER基于encoder-decoder的方式,整体的模型架构以下三块:

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

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

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

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.下面我们进行一一讲解。

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),点对应关系如下图:

2.2.2 Thin Plate Transformation

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

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

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

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

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

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

2.2.3 Sampler

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

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

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

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

2.3 特征提取层

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

2.4 解码

前文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,公式如图示。

第二处改进是在最终预测输出的时候,原先我们一般取每个时间步概率最大的字符进行输出,本文改成了束搜索,搜索宽度一般设置成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. 总结

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

本文参考及学习资料推荐:

论文阅读(XiangBai——【PAMI2018】ASTER_An Attentional Scene Text Recognizer with Flexible Rectification ) - lilicao - 博客园

文字识别领域经典论文回顾第四期:ASTER_chibohe123的博客-CSDN博客

文字识别方法之ASTER_哔哩哔哩_bilibili

ASTER文字识别详解相关推荐

  1. 调用百度ai接口实现图片文字识别详解

    调用百度ai接口实现图片文字识别详解 首先先介绍一下这篇博文是干嘛的,为了不浪费大家时间.公司最近和短视频公司合作,需要监控app的截图上的文字是否符合规范,也就是确保其没有违规的文字.到网上找了一些 ...

  2. 『方案』《女友十年精华》 ORC 图片 文字识别 详解

    目的需求: 2008年,遇到一本电子书 <女友十年精华> 觉得很美,想 私藏 这些文章: >网络搜索文章 -- 没有找到: >反编译程序 -- 所有文字 都是图片格式(部分文章 ...

  3. OpenCV-Python实战(17)——人脸识别详解

    OpenCV-Python实战(17)--人脸识别详解 0. 前言 1. 人脸识别简介 2. 使用 OpenCV 进行人脸识别 2.1 使用 OpenCV 进行人脸识别流程示例 3. 使用 dlib ...

  4. OpenMV多颜色识别详解

    需提前观看:OpenMV单颜色识别详解: 多颜色识别和单颜色识别差不多,只需要改动[thresholds[threshold_index]]这个地方 #更改之前 for blob in img.fin ...

  5. python获取屏幕文字_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)...

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

  6. Python爬虫教程:验证码的爬取和识别详解

    今天要给大家介绍的是验证码的爬取和识别,不过只涉及到最简单的图形验证码,也是现在比较常见的一种类型. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里 ...

  7. Python爬虫基础:验证码的爬取和识别详解

    今天要给大家介绍的是验证码的爬取和识别,不过只涉及到最简单的图形验证码,也是现在比较常见的一种类型. 运行平台:Windows Python版本:Python3.6 IDE: Sublime Text ...

  8. left join 一对多只取一条_Python爬虫教程:验证码的爬取和识别详解

    目前,很多网站会采取各种各样的措施来反爬虫,验证码就是其中一种,比如当检测到访问频率过高时会弹出验证码让你输入,确认访问网站的不是机器人.但随着爬虫技术的发展,验证码的花样也越来越多,从最开始简单的几 ...

  9. OCR识别--详解驾驶证识别技术

    驾驶证识别是我们以ocr技术为核心推出的应用,OCR文字识别在很多领域得到了广泛的应用,给人们的生活提供了更多的方便.驾驶证识别api.sdk能为交通管理.移动警务.车辆管理所等带来无需手动输入的快捷 ...

最新文章

  1. 互联网协议 — IPSec 安全隧道协议
  2. 原创文章收录不高从根源找问题
  3. 【转】ssh服务器启动和客户端常用操作
  4. ASP.NET配置错误页面浅析
  5. C++常见面试题(2019年校招总结)
  6. android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试
  7. 怎么监听linux防火墙,linux怎么查看防火墙是否开启并清除防火墙规则?
  8. mysql数据库快捷添加外键_mysql 数据库添加外键的几种方式
  9. python字符映射与文件加密
  10. pythonassert关键字_Python assert 关键字
  11. java xstream json_详解XML,Object,Json转换与Xstream的使用
  12. 设计模式-行为型软件设计模式(六)
  13. 数字信号和模拟信号的区别
  14. 很自由的PDF在线转换器
  15. CrossOrigin注解的方式实现接口的跨域访问
  16. Three.js坐标系与变换矩阵快速入门
  17. Linux引导过程和GRUB引导器
  18. Android 悬浮窗基本使用
  19. Android Room之数据库加密
  20. artifact is missing.

热门文章

  1. 【Hadoop Summit Tokyo 2016】中型组织的数据基础设施架构:收集、存储和分析的技巧...
  2. XML PUBLISHER输出excel存在科学计数
  3. 《.NET应用架构设计:原则、模式与实践》新书博客-2.1.1-设计原则简述
  4. ubuntu 上 nvidia-smi 没显示所有的GPU
  5. 【Docker】练习-在容器中部署静态网站
  6. mysql的安装与卸载
  7. kubernetes源码阅读笔记——Kubelet(之三)
  8. python之路第一天
  9. 【算法导论】第5章,概率分析和随机算法
  10. windows 域的安装方法