Visual-Semantic Transformer for Scene Text Recognition论文解读及复现

2023-11-07

Visual-Semantic Transformer for Scene Text Recognition论文解读及复现

这篇文章就基于上面的这篇论文VST中结构设计进行阅读,并将其项目Visual-Semantic Transformer进行开源。

该论文中的5个主要构成部分

在这篇论文中作者并没有使用现如今场景文本识别任务中把语言规则建模这一方法,而是通过一个Visual-Semantic Alignment Module对齐模块把经过ConvNetVisual Module提取到的视觉特征 V i s u a l 1 Visual_1 Visual1向Semantic特征对齐得到 S e m a n t i c 1 Semantic_1 Semantic1。这里的 S e m a n t i c 1 Semantic_1 Semantic1可以认为是我们输出的字符序列的高维特征表示,可以直接使用一个线性映射层便可以将高维特征映射为识别任务的输出,因此该论文并不是基于串行的输出,而是推理速度更快的并行输出,效率更好。之后为了将这两个模态的特征进行交互以获得更好的特征表示,作者想到了Transoformer Encoder它可以实现长距离的特征建模,因此作者提出了一个基于Transformer Encoder的Interaction Module去联合的建模两个模态已达到交互的效果,之后分别得到 S e m a n t i c 2 , V i s u a l 2 Semantic_2,Visual_2 Semantic2,Visual2。最后作者再次使用Visual-Semantic Alignment Module V i s u a l 2 Visual_2 Visual2转化为 S e m a n t i c 3 Semantic_3 Semantic3。之后还可以加上一个Semantic Module来对其进行语义的推理最终得到融合之后的 S e m a n t i c Semantic Semantic特征之后接入线性层便可以将输入的Tensor转化为sequence。如下图所示,展示该论文中的所有相关Module和数据流向。
VST Architecture
下面的部分一一介绍上面提到的5个在本文中使用到的Module。

ConvNet

本文的特征提取模块使用了Resnet网络,给定一个输出尺寸为 C × H × W C \times H \times W C×H×W的图片,我们将会得到一个 C 1 × H 8 × W 4 C_1 \times \frac{H}{8} \times \frac{W}{4} C1×8H×4W的输出。具体的Resnet一共使用了4个layers(1,2,5,3)。

Visual Module

该模块中作者将上面得到的特诊图进行展平进而得到一个一维的向量输入。之后使用Transformer Encoder结构将这些特征进行全局的建模得到输出我将其记做为 V i s u a l 1 Visual_1 Visual1。但是不同于Transform Encoder他这里做了一个小小的改进,便是先Layer Norm之后在进行多头注意力机制。

Visual-Semantic Alignment Module

vsalign
如上图所示:我们使用并行的注意力机制在计算每一个位置上字符的概率分布,因此该论文在推理的过程中是并行输出的而不需要Transform Decoder的那种自回归预测。如下面的公式一样可以计算出 S e m a n t i c 1 Semantic_1 Semantic1
S e m a n t i c 1 = s o f t m a x ( Q × V i s u a l 1 T ) V i s u a l 1 Semantic_1=softmax({Q \times Visual_1^{T}})Visual_1 Semantic1=softmax(Q×Visual1T)Visual1
上面的 Q Q Q是一个可训练的参数用来表示视觉和语义之间的关系。作者还认为将该模块进行参数共享的另一个作用就是使得下面的交互模块可以有更好的作用。因为第一次使用该模块以后可以有更大的机会去使用交互模块来对齐进行校正,这是在不使用语言规则之后便可以得到的效果。

Interaction Module

简单来说也就是一个Transformer的编码器结构,只不过在MHSA中计算的公式改为下面的计算:
[ V i s u a l 1 ; S e m a n t i c 1 ] = s o f t m a x ( [ V i s u a l 1 ; S e m a n t i c 1 ] K ) [ V i s u a l 1 ; S e m a n t i c 1 ] [Visual_1; Semantic_1] = softmax(\frac{[Visual_1; Semantic_1]}{\sqrt{K}})[Visual_1; Semantic_1] [Visual1;Semantic1]=softmax(K [Visual1;Semantic1])[Visual1;Semantic1]
除此之外便没有什么其他的东西。经过这个模块之后得到 [ V i s u a l 2 ; S e m a n t i c 2 ] [Visual_2; Semantic_2] [Visual2;Semantic2],多的地方就是再次使用VS Align将得到的 V i s u a l 2 Visual_2 Visual2转换为
S e m a n t i c 3 = V s a l g i n ( V i s u a l 2 ) Semantic_3 = Vsalgin(Visual_2) Semantic3=Vsalgin(Visual2)

Semantic Module

该模块将 S e m a n t i c 2 , S e m a n t i c 3 Semantic_2, Semantic_3 Semantic2,Semantic3进行在样本长度上Concatenate。之后加上Transformer Encoder进行建模。便可以得到融合后的结果 S e m a n t i c Semantic Semantic

损失函数

由于上面我们有3可用的Semantic( S e m a n t i c 2 , S e m a n t i c 3 , S e m a n t i c Semantic_2, Semantic_3, Semantic Semantic2,Semantic3,Semantic)因此在训练的过程中一共有三个损失,将其相加便可以得到总的损失函数。在推理的过程中可以使用 S e m a n t i c Semantic Semantic进行推理。

复现结果

前三个epoch

由于数据集较大我在训练三圈之后在IC15, IC13, SVTP,SVT, CUTE, IIIT5k数据上的最好的cwr(也就是每一个样本完全预测正确才算是预测正确)平均正确率是89.06。反观论文中在这几个数据集上的平均正确率为92.483。后续出来更好的结果我会在github和这里进行更新。

更多关于OCR相关的论文阅读

我的知乎
如果大家觉得写的不错或者有用的还请点赞一下啦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual-Semantic Transformer for Scene Text Recognition论文解读及复现 的相关文章

随机推荐

  • 【华为OD机试】垃圾短信识别(python, java, c++, js)

    垃圾短信识别 前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email n
  • vue.js中created方法作用

    这是它的一个生命周期钩子函数 就是一个vue实例被生成后调用这个函数 一个vue实例被生成后还要绑定到某个html元素上 之后还要进行编译 然后再插入到document中 每一个阶段都会有一个钩子函数 方便开发者在不同阶段处理不同逻辑 一般
  • 解决小程序wx.openLocation位置偏移的问题

    接口返回的经纬度是在合家欢公寓 而小程序的openLocation 地图实际却定位到了玖耀里 导致了将近1km的偏差 因为我是从第三方拿的经纬度位置 随后我又开始全网搜索找答案 有说 加 type gcj02 的 经测试 这个仅对获取当前位
  • 服务器反馈为空,反馈服务器端error的处理

    1 首先明确下顺序 Eg POST 情况 string gt NSData NSMutableURLrequest NSURLConnection NSURLResponse staticNSString body aaaaaa 要POST
  • 关于服务器上tomcat获取时间少8个小时的问题

    我的抄贴生活又开始了 哈哈 主要是在学习过程中 发现解决一些问题 然后 想记录下来 在 首选项 gt Tomcat gt JVM Settings 项 设定 JRE 的版本为 jre1 5 0 06 并且添加如下几个JVM Paramete
  • 对我们的人生数学建模

    欢迎访问我的个人博客 sky的技术小屋 本来写了好多 最后想想还是全删掉了 因为都是些婆婆妈妈的只和自己有关的小事 还是挑个最想表达的说说吧 一直以来 随着自己学习的东西越来越多 对社会现实也看的越来越多 我对人生处事的一个总结就是 人生就
  • 微信小程序通过 wxministore 实现类似于vuex的全局装填数据管理

    首先 我们打开终端 引入依赖 npm install wxministore save 然后 如果你是新版开发者工具 就 npm i 构建一下 如果你是 老版本的 微信开发者工具 就打开右上角详情 选择本地管理 勾选 使用 npm 模块 然
  • Qt-configure配置选项

    这个页面给出了一个简短的 当使用configure脚本或configure exe二进制构建Qt时的各种不同的可用选项 当使用默认选项构建Qt 只需如下所示的从命令行调用configure 在Linux Mac OS X和Unix平台下构建
  • linux 如何加载本地镜像至docker

    在 Linux 上加载本地镜像至 Docker 可以使用 docker load 命令 步骤如下 将本地镜像打包成 tar 文件 sudo dockersave o myimage tar myimage latest 使用 docker
  • java按照月份把一个时间段拆分成多个时间区间并返回相差天数

    java按照月份把一个时间段拆分成多个时间区间并返回相差天数 代码实现 package com example demo utils import java text ParseException import java text Simp
  • 双系统安装Windows和Linux(CentOS7)

    讲在前面的话 判断磁盘分区格式 判断计算机启动方式 制作USB安装盘 开始安装CentOS7 Linux系统分区 安装完毕 磁盘转换mbr 或者gpt 格式 VMware虚拟机安装Linux 网络如何配置 参考 计算机系统启动项引导设置 双
  • 数据结构“入门”—单链表(C语言实现)

    目录 1 前言 2 单链表基本概念 2 单链表的实现 2 1 单链表的创建 2 2 创建一个结点 2 3 打印链表 2 4 销毁单链表 3 增删查改 3 1 插入数据 尾插 头插 在pos之前插入 在pos之后插入 3 2 删除数据 尾删
  • 2023年第七届航空航天、机械与机电工程国际会议(CAMME 2023)

    2023年第七届航空航天 机械与机电工程国际会议 CAMME 2023 重要信息 会议网址 www camme org 会议时间 2023年5月26 28日 召开地点 中国西安 截稿时间 2023年4月26日 录用通知 投稿后2周内 收录检
  • 13.客户端Client的编程实现

    学习视频 https www bilibili com video BV1zt411G7Vn p 13 目标 通过客户端程序发布请求给spawn服务器创建第二只小海龟 一 创建功能包 打开终端 输入命令 cd catkin ws src c
  • 程序员定位解决问题方法论

    如何更快的解决问题 我们在遇到bug的时候 如果每次遇到问题都是搜索 打断点调试 那我们有什么长进呢 如果遇到那些搜索不到的 无法断点调试的问题呢 做人啊 要想得长远一点 所以我们不如现在就培养一种思维 摈弃断点调试 靠猜 先把问题列出来
  • win2008计算机无法访问,windows server2008 无法访问本机及其他服务器的所有端口

    描述如下 A机器IP 192 168 1 1 B机器IP 192 168 1 2 两台机器都是Windows Server 2008 R2 Enterprise SP1 已关闭了防火墙 没有杀毒软件 A机器安装Oracle数据库 B机器是A
  • oracle实现mysql的if exist drop table

    oracle建表的时候经常出现表已经建立的情况 mysql的话可以使用 DROP TABLE IF EXISTS T AUTH FUNCTION 这里简单写个如果表存在 drop表的语句 declare num number begin s
  • SQL之建表

    1 知识点介绍 表的创建 修改与删除 1 1 直接创建表 CREATE TABLE IF NOT EXISTS tb name 不存在才创建 存在就跳过 column name1 data type1 列名和类型必选 PRIMARY KEY
  • PCIe专题学习——4.1(物理层数据流解析)

    之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍 了解了PCIe是一种封装分层协议 packet based layered protocol 主要包括事务层 Transaction layer 数据链路层 Data link lay
  • Visual-Semantic Transformer for Scene Text Recognition论文解读及复现

    Visual Semantic Transformer for Scene Text Recognition论文解读及复现 这篇文章就基于上面的这篇论文VST中结构设计进行阅读 并将其项目Visual Semantic Transforme