An end-to-end TextSpotter with Explicit Alignment and Attention

论文下载:http://cn.arxiv.org/pdf/1803.03474
代码下载:https://github.com/tonghe90/textspotter

1方法概述
1.1主要思路
将文字检测和识别整合到一个端到端的网络中,检测使用PVAnet,识别使用RNN,其中加入一个Text-alignment layer和字符attention和mask机制,通过利用Text-alignment layer中的抽样网格将文字区域固定为64*8大的feature map,再输入双向LSTM进行识别。
1.2文章亮点
·提出Text alignment layer,用网格抽样方案代替RoI Pooling,处理多方向的文本区域
·增加字符attention和mask机制,使用字符的空间信息作为额外的监督,指导decode过程
·提出一个新颖的training strategy
1.3主要流程

·整个端到端识别主要有三个步骤:

·检测:用PVAnet代替ResNet50的EAST框架,得到任意方向的文本区域

·Test alignment:将四边形区域统一映射为大小为64*8的feature map

·识别:Test alignment得到的feature map经过encode-decode得到最终结果

2 方法细节

·检测

·检测的框架是用PVAnet代替ResNet50的EAST框架,通过调节IoU损失实现一个多任务预测。

·最终得到两个分支:第一个子分支返回文本分类概率。第二个子分支返回bounding box的五个参数,分别是当前点到上下左右边的距离以及倾斜角度。

·识别

上述得到的四边形将被输入RNN分支。

·Text-alignment layer:

·这步的目的:

·它可以将任意方向的region proposal固定为统一大小的feature map,精确地跟每个像素对齐

·为什么不用RoI Pooling

·RoI Pooling进行量化,不可避免地在原始RoI区域和提取出来的特性之间引入了misalignment。

·RoI Pooling是为矩形区域设计的,只能够定位水平region proposal。

·Text-alignment layer做什么

·给定一个四边形区域,首先在feature map中建立一个64*8大的采样网格,在这个区域内生成等间距的采样点,Vp代表每个采样点p空间位置(px,py)的特征向量,这个特征向量通过bilinear sampling计算,公式如下:

·Vpi是p周围的四个点,g(m,n)是双线性插值函数

·最终输出固定大小为64*8的文本区域

·Character Attention

·识别流程

·经过Text-Alignment Layer得到的feature map,经过多个inception模块,最终大小变为1*64,然后经过双向LSTM操作,encode-decode操作后输出最终识别结果。

·Attention alignment

·这张图与传统的注意力机制不同的地方是在增加了字符的attention作为监督,引入了字符对齐的损失函数,指导decode过程。这就是图中update的由来

·即attention point,它应该尽可能和字符的中心点尽可能对齐;

·是第t个字符GT的中心坐标,是当前字符的GT宽度,T是一个序列的字符数

·这个损失函数表示归一化的attention

·Character mask

·增加了binary masks,引入,mask数等于字符label数

·Position embedding

·从attention向量中生成一个one-hot向量,然后直接将one-hot向量和上下文向量直接连接起来,得到一个新的带有额外one-hot注意力信息的特征表示。

·Overall loss

·Lloc是文本检测的loss,Lword是文字识别的loss,Lalign和Lmask是可选的loss,可以不使用。λ1,λ2是平衡因子,这里面的实验都设为0.1。

·Training Strategy

·从800K张合成图像张随机抽取600K张,固定检测部分,提供Ground trut文本框进行单词识别的训练,迭代120K次,只计算识别,字符对齐和mask的loss

·打开检测部分,仍然提供GT文本框,更新权重,迭代80K次,接下来用检测部分生成抽样网格,进行端到端训练,迭代20K次

·在ICDAR2013和2015数据集上进行端到端训练,迭代60K次。

3 实验结果

·在ICDAR2013上得到的数据与最先进的结果相当,而在ICDAR2015上,这篇文章的方法大大超过了最新的结果。

·使用这篇文章的方法,一些小的文字和大幅度倾斜的文字都能很好的被识别到。

4 总结和收获

·检测部分用PVAnet代替ResNet50的EAST框架

·用bilinear sampling代替RoI Pooling,处理多方向的文本区域

·在原有的attention中增加字符的对齐信息和mask作为额外的监督,指导decode过程

·一个新颖的training strategy

An end-to-end TextSpotter with Explicit Alignment and Attention的更多相关文章

  1. 2017-2018_OCR_papers汇总

    2017-2018_OCR_papers 1. 简单背景 基于深度的OCR方法的发展历程 近年来OCR发展热点与趋势 检测方法按照主题进行分类 2. ECCV + CVPR + ICCV +AAAI ...

  2. A Survey of Visual Attention Mechanisms in Deep Learning

    A Survey of Visual Attention Mechanisms in Deep Learning 2019-12-11 15:51:59 Source: Deep Learning o ...

  3. QA系统Match-LSTM代码研读

    QA系统Match-LSTM代码研读 背景 在QA模型中,Match-LSTM是较早提出的,使用Prt-Net边界模型.本文是对阅读其实现代码的总结.主要思路是对照着论文和代码,对论文中模型的关键结构 ...

  4. 可空类型(Nullable<T>)及其引出的关于explicit、implicit的使用

    问题一:Nullable<T>可赋值为null 先看两行C#代码 int? i1 = null; int? i2 = new int?(); int? 即Nullable<int&g ...

  5. 关于Django 错误 doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

    记录一下 报错 doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS\ 这个问题出现没 ...

  6. 显示转换explicit和隐式转换implicit

    用户自定义的显示转换和隐式转换 显式转换implicit关键字告诉编译器,在源代码中不必做显示的转型就可以产生调用转换操作符方法的代码. 隐式转换implicit关键字告诉编译器只有当源代码中指定了显 ...

  7. explicit抑制隐型转换

    本文出自 http://www.cnblogs.com/cutepig/ 按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: clas ...

  8. C++ explicit关键字详解

    本文系转载,原文链接:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用 ...

  9. Implicit and Explicit Multithreading MULTITHREADING AND CHIP MULTIPROCESSORS

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION The concept of thread ...

随机推荐

  1. 课堂动手动脑验证以及自定义异常类实现对异常处理——java异常类

    异常(exception):发生在程序执行期间,表明出现了一个非法运行的情况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象.例如:数组越界和被0除. 代码验证: package test ...

  2. 快速搭建spring boot2.0 项目

    快速搭建spring boot2.0+mybatis+thymeleaf 项目 使用工具STS 3.9.7(eclipse) 首先创建一个spring boot2.0项目(具体创建方法就不写了) 然后 ...

  3. Java新特性 5、6、7、8、9、10、11、12、13

    文章转载于:https://www.cnblogs.com/hepengju/p/11595102.html 项目地址:https://github.com/hepengju/java-new-fea ...

  4. ArangoDB数据导入

    目录 arangoimp方法 参数解析 实例展示 python方法 单条导入 批量导入 1.arangoimp方法 参数解析 全局配置部分(Global configuration) --backsl ...

  5. git从远程仓库拉取内容或向远程仓库上传内容

    一.将本地文件上传到远程仓库步骤 git init git add . git commit -m "初始框架" git remote add origin https://git ...

  6. VMware问题--无法获得 VMCI 驱动程序的版本: 句柄无效

    关于VMware问题:无法获得 VMCI 驱动程序的版本: 句柄无效.驱动程序“vmci.sys”的版本不正确 问题截图: 解决 1.根据配置文件路径找到对应的.vmx文件: 2.用编辑器打开,找到v ...

  7. MIT线性代数:19.行列式和代数余子式

  8. AXI4-Stream协议总结与分析

    一.协议介绍 1.AXI4_Stream:适用于高速数据流,去掉了地址项,允许无限制的数据突发传输.除了总线时钟和总线复位,其他的接口信号都是以字母T开头. 2.信号接口描述: (1).ACLK--- ...

  9. 前端组件用 Scope 发布 npm 包的方法

    1.引言 多人.多组织或多组件发布 npm 包到同一个仓库时,可能出现命名冲突问题. 为了解决这个问题,npm 引入了“scope”(范围)概念. 在 Angular 项目中,我们通常可以看到“@an ...

  10. go语言版本测试, 一段错误代码引发的血案

    起因: 最近在学习手写docker,看到了一段会编译错误的代码. 过程: 最近在学习docker,看到一段示例代码,每次编译时会报错. 因此, 无法继续下去, 只好在网上搜索解决方案, 用了很多时间, ...