和上一篇基于attention机制的不规则文字识别论文是同一批作者,博客链接: Show, Attend and Read

由于show attend and read是基于LSTM-encoder-decoder结构的翻译翻译模型(以前翻译的主流框架),隔壁翻译组的同事当时看到就说说不定可以用transformer(现在的主流翻译模型)做ocr,结果。。过了两三个月就真出了基于transformer的ocr paper。由于该论文作者没有给模型去特定的名字,姑且叫做 transformer-ocr 模型(标题的英文是自己起的。。)。

本文论文地址:A Simple and Robust Convolutional-Attention Network for Irregular Text Recognition。

Transformer论文地址:Attention is all you need。


总的来说这篇论文复刻的难度小很多,结构清晰直观,效果也有很不错的表现,在transformer的基础上把encoder部分改为ResNet34,将encoder输出从文本模型的三维(batch, seq, dim)转换为图像卷积后feature map的四维输出(batch, h, w, dim),解码器部分的Multi-Head Attention也同样改为 2D-Attention,git clone整个transformer的github源码稍加修改即可。

先给一下attention机制在图像上的可视化效果(对原图进行加权)就不难理解其为何对曲形文字识别有效了:

对比一下Transformer和本论文的网络结构图:

左图:Transformer                                                            右图:Transformer-OCR

网络结构高度一致,除了Encoder部分,几乎没什么变化。下面开始从左往右,自下而上一点一点分析网络结构。

首先是左侧 ResNet34的encoder部分,文中直接使用ResNet34的输出(除了最后一层average-pool层)作为encoder输出,由于网络的输入部分是将一个batch的图片全部resize成 128 x 400 x 3后的输入,所以此输出的尺寸也是固定的(4 x 13 x 512)。作者提到几个细节:

  • 一个是采用ResNet34的效果和尝试更深的网络(ResNet50, ResNet152)的效果相差无几,因此使用ResNet34就已经足够;
  • 另一个就是对比实验发现图像尺寸越大最后识别效果越好,所以输入时将图像resize成128x400;
  • 再就是图像resize成固定尺寸带来的问题,一些长条文本框的效果会变差,这也是此论文较大的一个问题,作者的意思是leave for future work,确实要想落地为实际应用这个问题是必须要解决的。

而右侧的decoder部分基本是基于Transformer(可以发现Transformer的encoder部分和decoder部分的设计也是高度相似),除了开始说到的Multi-Head Attention和2D Attention的区别,还有就是可以看到左侧transformer结构中灰色椭圆框边上有个Nx,表示这个部分可以叠加N次(论文中 N=6),而对于右侧的transformer-ocr模型,论文中称实验证明叠加一次的效果和叠加多次的效果并没有明显的差别,因此只需叠加一次即可。

对于decoder部分,从下往上看,训练时首先是将原始图像对应的字符label中的每一个字符从左往右经过embedding编码(即一个线性变换)后和其对应的位置索引(1,2,3,4...)经过位置编码(Positional Encoding)的输出相加作为decoder的一部分输入。其中 Positional Encoding (PE) 的公式如下:

其中的p是当前字符的位置(即是当前字符串的第几个字符),i 是从1到d的维度值,PE变换的维度和embedding输出的维度一致。

此部分输入至decoder后会依次经过以下三部分(sub-layer):

  • Masked Self-attention layer:用于寻找字符串不同字符间的关联;
  • 2D Attetention layer:用于连接encoder和decoder(也是唯一连接);
  • Point-wise Feed-Forward Layer:对每个字符单独的前馈输出;

上面说的三个sub-layer,每个都有一个残差连接(图中黑色的连接线),对于每个sub-layer的输出可以表示为:

LayerNorm (x+SubLayer(x))


一般的attention机制有两种,一种是 additive attention,另一种是 dot-product attention (点乘),二者最终的效果相似,但dot-product attention的速度更快,且更节省空间。对于本文的 Masked Self-attention layer 和 2D Attention,其都是继承自 Multi-Head Scaled Dot-Product Attention,其中Multi-Head表示将一组向量拆分为多个部分并行计算,而 Scaled Dot-Product Attention 直接体现了transformer中的attention机制的原理,attention的方程式可以表示为 query(Q) 和一组key-value(K-V之间的映射,这里的q,k,v都是向量。下图是 Scaled Dot-Product Attention 以及Multi-Head的解释示意图:

关于这三个向量 Q, K, V,一种理解就是对于一个输入X(前面说到的 embedding+PE 向量), 通过3个线性转换把X转换为Q,K,V。上图左侧的输入Q, K 是 d_k 维度的,V 是 d_v 维度的。Scaled Dot-Product Attention 总体的公式如下:

其中的QK^T会得到一个 d_k \times d_k 的矩阵,在语言模型中就是一个word2word的attention map,如下图(图片和部分描述参考:Transformer模型笔记):

左图: Self-Attention                                                    右图:Masked Self-Attention

  • QK^T得到attention map 后再乘以一个V 就是想当于对原始输入的一个加权输出了,
  • Self-Attention 就是(transformer-ocr模型中)得到每一个字符对应另一个字符的权重;
  • Masked Self-Attention 就是不给当前字符对应位置看到后面的信息;
  • Multi-Head 就是把原始输入经过线性变化后(Q, K, V 分别对应 d_k, d_k, d_v 维度)拆分成H (论文中H=8) 块,对每一块做上述操作,最后在叠加(concat)起来经过线性变换得到 d_v 维度的输出;
  • 而Scaled一词在公示中的表示就是QK^T表达式要除以\sqrt{d_k},这么做的原因是当 d_k 增大时,QK^T的值增长幅度会大幅加大,导致softmax后的梯度很小,模型效果变差。

总的 Multi-Head Scaled Dot-Production Attention 公式如下:

其中的 W^q_i,\,W^k_i,\, W^v_i 表示线性变换矩阵,论文中的参数设定为:H=8,\,d_{model}=512,\,d_k=d_v=d_{model}/H=64


终于,回到开始的模型图中,Masked Self-Attention 主要的作用是使得每一个位置的字符可以注意(attend)到在它之前的字符的信息;2D Attention 的 Q 来自 Masked Self-Attention layer 的输出,K-V 来自encoder部分的输出,这使得decoder的每一个位置可以注意到所有输入特征的信息,这是对传统的encoder-decoder attention机制的一种模拟;

最后一个sub-layer是Position-wise Feed-Forward layer,顾名思义,是单独且同样的应用在每一个位置的前馈全连接网络,这层网络包含了两个线性变换,公式如下:

最后通过一个线性变化和softmax得到预测概率,损失函数是交叉熵损失(cross-entropy loss)。

还有一点要补充的就是用于训练的字典中要有几个额外的成员(除了字符外):

start token:‘BOS’,inference时用作预测第一个字符,不然没有前面字符的输入无法开始预测;

end token :‘EOS’,inference是作为预测结束的标志,否则模型会一直往后预测,无法停止;

pad:'PAD',用于填充不同长度的字符串,使其长度统一(等于最长的字符串长度);

unknown:‘UNK’,用于预测没在字典中出现过的字符(可选);

至此,结束。

附一下效果图和榜上结果:

GT: ground truth    Pred: prediction      Res: original image resolution

曲形文字识别 - Transformer-based Convolutional-Attention Network for Irregular Text Recognition相关推荐

  1. (论文笔记)An Attention Enhanced Graph Convolutional LSTM Network for Skeleton-Based Action Recognition

    An Attention Enhanced Graph Convolutional LSTM Network for Skeleton-Based Action Recognition 文章目录 An ...

  2. 【论文翻译】An Attention Enhanced Graph Convolutional LSTM Network for Skeleton-Based Action Recognition

    An Attention Enhanced Graph Convolutional LSTM Network for Skeleton-Based Action Recognition 基于骨架的注意 ...

  3. 论文翻译-Hamming OCR A Locality Sensitive Hashing Neural Network for Scene Text Recognition

    论文翻译-Hamming OCR A Locality Sensitive Hashing Neural Network for Scene Text Recognition 原文地址:https:/ ...

  4. 阅读Decoupled Spatial-Temporal Attention Network for Skeleton-Based Action Recognition

    基于骨骼动作识别的解耦时空注意网络 paper:https://arxiv.org/abs/2007.03263 文章目录 Abstract Introduction Method 3.1 Spati ...

  5. GRN: Gated Relation Network to Enhance Convolutional Neural Network for Named Entity Recognition

    论文地址:http://ise.thss.tsinghua.edu.cn/MIG/2019-2.pdf 摘要 这个领域方法对命名实体识别(N-ER)较多适用复杂循环神经网络(RNN),例如长短句存储( ...

  6. SPIN: Structure-Preserving Inner Offset Network for Scene Text Recognition —— 论文阅读笔记

    SPIN:用于场景文本识别的保留结构的内部偏移网络 Paper : 论文地址 本文提出的方法主要解决色彩失真的图片.如下图中的(c)和(d) SPIN(Structure-Preserving Inn ...

  7. 《Focusing Attention:Towards Accurate Text Recognition in Natural Images》阅读

    论文链接:https://arxiv.org/abs/1709.02054 摘要 场景文本识别优于其广发的应用一直是 计算机识别中的研究热点之一.目前最先进的计算是基于注意力机制的编码-解码框架的,该 ...

  8. OCR论文综述(含文字识别、文本检测、端到端和数据集合)

    OCR综述概览 主要分为四个部分 文字识别.文本检测.端到端文字识别和数据集的介绍 1. 文字识别 指标为f1-score Conf. Net Title SVT IIIT5K ICDAR13 TPA ...

  9. 【ACM 2020 - Text Recognition in the Wild:A Survey】OCR识别综述

    Introduction 1. 推动基于深度学习的STR发展三要素: (1)先进的硬件系统:高性能计算支持训练大规模识别网络 (2)基于深度学习的STR算法能自动进行特征学习 (3)STR应用需求旺盛 ...

最新文章

  1. Spring环境搭建,IoC容器初体验~
  2. vb中如何才能有手型的光标?
  3. Spring Cloud Alibaba基础教程:@SentinelResource注解实现限流控制与熔断降级使用详解
  4. 进程间通信——信号量及ipcs/ipcrm 介绍
  5. abap git - commnication failure错误消息的分析和定位
  6. 现实世界的Windows Azure:采访InishTech的销售及市场部主管Andrew O’Connor
  7. Linux的实际操作:权限管理(chmod)
  8. 基于Echarts+HTML5可视化数据大屏展示—企业生产销售作战指挥室数据平台
  9. rest功能java,java – 功能翻转REST端点的注释
  10. table标签中thead、tbody、tfoot的作用
  11. 计算机理工 教学计划,教学计划格式-华南理工大学计算机科学与工程学院.DOC
  12. hfss仿真软件入门教程
  13. 扫雷代码下载地址可以打开啦!
  14. 十段均衡器开源 android,音频EQ(均衡器) - osc_1jvmu893的个人空间 - OSCHINA - 中文开源技术交流社区...
  15. islower()方法
  16. 独秀日记:童道自然大夫山徒步
  17. CMAQ-5.2安装
  18. Ubuntu怎么念?
  19. edusrc教育src漏洞平台
  20. 这个高仿小米商城项目太惊艳了

热门文章

  1. 将时间戳转日期和对应星期几
  2. springcloud微服务整合/集成swagger(knife4j-小刀)实现在线文档调试和查看功能
  3. day10-字符串作业-复写
  4. windows远程linux方法
  5. WebRTC 传输安全机制:DTLS 和 SRTP
  6. Python练习实例——判断奇偶数
  7. 【考研】(转载)考研数学高数公式知识点整理
  8. linux升级grub,如何更新 grub在 Ubuntu 或其他 Linux 发行版上
  9. CTFshow_web入门_信息收集(web1-20)
  10. SystemTap应用跟踪探测的使用