LAST论文翻译

《Read Ten Lines at One Glance: Line-Aware Semi-Autoregressive Transformer for Multi-Line Handwritten Mathematical Expression Recognition》论文翻译

文章目录

  • 《Read Ten Lines at One Glance: Line-Aware Semi-Autoregressive Transformer for Multi-Line Handwritten Mathematical Expression Recognition》论文翻译
    • ABSTRACT
    • 1 INTRODUCTION
    • 2 RELATED WORK
      • 2.1 手写的数学表达式识别
      • 2.2 非自回归和半自回归解码
      • 2.3 数学表达式数据集
    • 3 PROPOSED METHOD
      • 3.1 Overview
      • 3.2 Line-wise Dual-end Decoding
      • 3.3 Line-partitioned Dual-end Mask
      • 3.4 Line-aware Positional Encoding
      • 3.5 Shared-task Optimization
    • 4 THE M2E DATASET
    • 5 EXPERIMENT
      • 5.1 Implementation Details
      • 5.2 Evaluation Metrics
      • 5.3 Comparisons with State-of-the-arts
      • 5.4 Ablation Study
    • 6 VISUALIZATION

论文地址: https://dl.acm.org/doi/pdf/10.1145/3581783.3612499
代码地址: https://github.com/HCIILAB/LAST

ABSTRACT

我们提出了一种具有线感知能力的半自回归变换器(LAST),它将多线数学表达式序列视为二维双端结构。该LAST利用线向双端解码策略并行解码多线数学表达式,并在每行内执行双端解码。具体地说,我们引入了一个线感知位置编码模块和一个行分区双端掩码,以赋予LAST线顺序感知和方向性。

1 INTRODUCTION

人类很难一次阅读长串的文本。同样,随着序列长度的增加,基于注意力的自回归编-解码器模型也会出现误差积累。当自回归识别多行手写的数学表达式时,我们观察到注意机制有时会将当前的行与其他行混淆,使这些行无法被识别,称为跨行混淆。如下图:

在这里插入图片描述

基于上述思想,我们将多行数学表达式序列视为二维双端结构,并进一步提出了一种线感知半自回归变换器(LAST)模型来实现对该二维序列的解码。具体来说,我们提出的LAST采用了行的双端解码策略,并行解码多行数学表达式,并在每行内执行双端解码。此外,我们提出了一个行感知的位置编码模块和一个行分区的双端掩模,以赋予模型的行顺序感知和方向性。此外,为了结合半自回归任务和自回归任务的优势,我们采用了一种共享任务优化策略来共同训练这两个任务。

综上所述,我们的工作有以下贡献:

  • 我们提出了一个LAST模型,该模型结合了行级双端解码策略和行感知位置编码模块,以半自回归地识别多行数学表达式,减轻了跨行混淆和缓慢的解码速度。
  • 我们提出了一个包含约10万幅图像的多行数学表达式数据集,以更好地评估模型在实际应用场景中的性能。
  • LAST模型具有最先进的性能,更快的解码速度

2 RELATED WORK

2.1 手写的数学表达式识别

2.2 非自回归和半自回归解码

2.3 数学表达式数据集

3 PROPOSED METHOD

3.1 Overview

在这里插入图片描述

如图所示,我们提出的行感知半自回归变换器(LAST)遵循编解码器框架。在Dense-WAP之后,一个Densenet提取输入图像的视觉特征。然后将用二维位置信息编码的视觉特征作为交叉注意的查询输入到变压器解码器。二维位置编码与BTTR 相同。通过行感知位置编码和一个可学习的行指数向量和两个逆正弦位置编码,使模型具有行序感知和方向性。在行感知自注意中,将行分区掩模应用于注意映射,以忽略尚未生成的令牌。在推理过程中,根据行双端解码策略对输出序列进行解码,得到当前时间步长生成的每一行的左到右和右到左字符。解码结果可以看作是一个二维序列,然后重新排列成一个一维序列,作为下一个时间步长的输入。

3.2 Line-wise Dual-end Decoding

我们将一个具有多行的完整表达式序列视为一个二维双端结构。显式的二维结构建模增强了模型的行序感知,从而保证了解码过程中多行结构的完整性。此外,我们还采用了双端解码策略来缩短行内字符的长度。

行解码: 对于多行数学表达式,我们可以根据视觉特征将标签序列分割成行。我们使用n行 y = ( y 1 1 , y 2 1 , y 3 1 , … , y k 1 1 , y 1 2 , y 2 2 , y 3 2 , … , y k 2 2 , … , y 1 n , y 2 n , y 3 n , … , y k n n ) y=(y^{1}_{1},y^{1}_{2},y^{1}_{3},\dots,y^{1}_{k_{1}},y^{2}_{1},y^{2}_{2},y^{2}_{3},\dots,y^{2}_{k_{2}},\dots,y^{n}_{1},y^{n}_{2},y^{n}_{3},\dots,y^{n}_{k_{n}}) y=(y11,y21,y31,,yk11,y12,y22,y32,,yk22,,y1n,y2n,y3n,,yknn)数学表达式序列。其中 k i k_{i} ki表示第i行中的第k个字符。逐行解码的目的是在当前时间同时解码所有行中的第一个字符。在时间步长𝑡,解码器预测一个字符序列 ( y t 1 , y t 2 , … , y t n ) (y^{1}_{t},y^{2}_{t},\dots,y^{n}_{t}) (yt1,yt2,,ytn)

双向解码: 除了按行解码外,我们还提出了一种双向解码策略来解决跨线混淆问题和加快解码速度。与BTTR 和ABM ,采用完整的双向解码的整个序列,我们的双向解码策略停止在中间的序列,引入两个更具有挑战性的任务: 1)从两端同时检测行结构,2)与相反方向的解码序列进行交互,以确定解码何时完成。

对于每一行𝑖,我们的双向解码策略在时间步长𝑡时同时预测了从左到右和从右到左的字符 y t i y^{i}_{t} yti y k i − t i y^{i}_{k_{i}-t} ykiti。对于普通的自回归预测[,添加了额外的标签和作为开始和结束条件。同样,对于双向解码,我们使用(左开始)和(左中间)作为从左到右解码序列的起始和终止标记,使用和作为从右到左解码序列的起始和终止标记。即,对于每一行𝑖,我们的输入序列为 y i = ( < S O L i > , y 1 i , y 2 i , … , y K i − 1 i , y k i i , < S O R i > ) y^{i}=(<SOL_{i}>,y^{i}_{1},y^{i}_{2},\dots,y^{i}_{K_{i}-1},y^{i}_{k_{i}},<SOR_{i}>) yi=(<SOLi>,y1i,y2i,,yKi1i,ykii,<SORi>)以及相应的输出序列 y i = ( y 1 i , y 2 i , … , y K i / 2 i , < M O L i > , < M O R i > , y k i / 2 + 1 i , … , y k i i ) y^{i}=(y^{i}_{1},y^{i}_{2},\dots,y^{i}_{K_{i/2}},<MOL_{i}>,<MOR_{i}>,y^{i}_{k_{i/2+1}},\dots,y^{i}_{k_{i}}) yi=(y1i,y2i,,yKi/2i,<MOLi>,<MORi>,yki/2+1i,,ykii)

对于输入序列长度为奇数的情况,我们在序列中间插入一个额外的中间终止标记,将输出从左到右和从右到左对齐,以便在同一时间步长停止。这种奇偶性预测任务进一步促进了两个双向序列之间的语义交互。在推理过程中,通过双向移动每行的输出,将预测的字符添加到输入序列中,称为对行感知的位移输出。

3.3 Line-partitioned Dual-end Mask

由于Transformer的注意力是全局的,所以Transformer 解码器利用三角矩阵防止向左的信息流,以保持自回归特性,如下图所示。为了实现所提出的行向双端解码策略,我们的LAST中的行感知注意采用了行分区双端掩模来调节不同标记之间的回归关系。

在这里插入图片描述

行分区Mask: 在行解码中,我们对不同的行并行自动回归解码。对于每一行𝑖,掩模 m ⃗ i \vec{m}^{i} m i是一个类似于Transformer中的三角形矩阵。蓝色掩模如上图c所示,我们的线分区掩模 M ⃗ \vec{M} M 将每条线的三角形矩阵对角线连接起来,以实现并行性:
M ⃗ = [ m ⃗ 1 0 … 0 0 m ⃗ 2 … 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋮ m ⃗ n ] \vec{M} = \begin{bmatrix} \vec{m}^{1} &0 &\dots &0 \\ 0 &\vec{m}^{2} &\dots &0 \\ \vdots &\vdots &\ddots &\vdots \\ 0 &0 &\vdots &\vec{m}^{n} \end{bmatrix} M = m 1000m 2000m n
双端掩码: 双端解码需要从左到右和从右到左的解码。为了在不改变序列顺序的情况下实现单线的右向自回归,我们将下三角矩阵改为上三角,如上图b所示。

双端掩模 m i ↔ \overleftrightarrow{m_{i}} mi 是从左到右和从右到左的自回归掩模的组合,如上图e所示的两个蓝色矩阵所示。双端掩模 m i ↔ \overleftrightarrow{m_{i}} mi 的数学表达式为:
m i ↔ = { 0 p < k 2 a n d p < 1 < k − p + 1 0 p > k 2 a n d k − p + 1 < q < p 1 o t h e r w i s e \overleftrightarrow{m_{i}} = \left\{\begin{matrix} 0 & p<\frac{k}{2} and p<1<k-p+1\\ 0 & p> \frac{k}{2} and k-p+1<q<p\\ 1 & otherwise \end{matrix}\right. mi = 001p<2kandp<1<kp+1p>2kandkp+1<q<potherwise

3.4 Line-aware Positional Encoding

行感知位置编码: 为了对当前解码行的位置进行编码,我们采用了一个可学习的行索引编码向量:
p l ( i ) = E m b ( W i ∣ i , W ) p_{l}(i) = Emb(W_{i}|i,W) pl(i)=Emb(Wii,W)
其中, W ∈ R n × D W\in R^{n \times D} WRn×D为可学习参数,𝑛为最大线数,𝑖为要编码的线索引, W i ∈ R D W_{i}∈R^{D} WiRD为嵌入索引𝑖in𝑊得到的线索引编码向量。多行数学表达式的阅读顺序可能相当复杂,而我们的行感知位置编码隐式地模拟了这种阅读顺序的学习

双端位置编码: 在双端解码中,感知解码方向是必不可少的。因此,我们设计了两个逆正弦编码:
p x → ( x , i ) = { s i n ( x T m / D ) i = 2 m c o s ( x T m / D ) i = 2 m + 1 p_{\overrightarrow{x}}(x,i) = \begin{cases} sin(\frac{x}{T^{m/D}}) & i=2m \\ cos(\frac{x}{T^{m/D}}) & i=2m+1 \end{cases} px (x,i)={sin(Tm/Dx)cos(Tm/Dx)i=2mi=2m+1

p x ← ( x , i ) = { s i n ( k − x − 1 T m / D ) i = 2 m c o s ( k − x − 1 T m / D ) i = 2 m + 1 p_{\overleftarrow{x}}(x,i) = \begin{cases} sin(\frac{k-x-1}{T^{m/D}}) & i=2m \\ cos(\frac{k-x-1}{T^{m/D}}) & i=2m+1 \end{cases} px (x,i)={sin(Tm/Dkx1)cos(Tm/Dkx1)i=2mi=2m+1

上述两个公式分别表示从左到右和从右到左的位置编码,其中𝑘表示当前行中的标记数,𝑥∈[0,𝑘𝑖/2),𝐷为嵌入维度,𝑇为在Transformer后设置为1000的常量。

最后,为了得到我们的行感知位置编码,将相同的行索引编码向量赋给同一行中的所有标记,然后加上两个双端位置编码:
p l a = C o n c a t ( p x →   ;   p x ← ) + p l p_{la} = Concat(p_{\overrightarrow{x}}\space ; \space p_{\overleftarrow{x}})+p_{l} pla=Concat(px  ; px )+pl

3.5 Shared-task Optimization

虽然Transformer具有并行输出的潜力,但将Transformer直接应用于半自回归任务的性能通常是次优的。我们提出了一种简单而有效的联合优化策略,它弥补了半自回归模型缺乏上下文依赖性的不足,同时也提高了自回归模型的性能。具体来说,有三个任务可以同时进行优化。与BTTR和ABM一样,我们采用了从左到右和从右到左的预测任务,即将多行表达转录标记为单行,并带有行中断。第三个任务是本文提出的半自回归任务。这三个任务在彼此之间共享部分相同的字符序列。这种训练策略可以加强该模型在直线结构之间的区别。我们利用每批样本的三个任务的交叉熵损失来同时优化参数
L ( θ ) → = − 1 N ∑ t = 1 N l o g p ( y t → ∣ y < t → )   \overrightarrow{L(\theta )} =-\frac{1}{N}\sum_{t=1}^{N}logp(\overrightarrow{y_{t}}|\overrightarrow{y_{<t}} ) \ L(θ) =N1t=1Nlogp(yt y<t ) 
L ( θ ) ← = − 1 N ∑ t = 1 N l o g p ( y N − t ← ∣ y < N − t ← ) \overleftarrow{L(\theta )} =-\frac{1}{N}\sum_{t=1}^{N}logp(\overleftarrow{y_{N-t}}|\overleftarrow{y_{<N-t}} ) L(θ) =N1t=1Nlogp(yNt y<Nt )
L ( θ ) ↔ = − 1 N ′ ∑ i = 1 n ∑ t = 1 N ′ / 2 l o g p ( ( y ↔ t ∣ y ↔ < t , > k i − t ) + ( y ↔ k i − t ∣ y ↔ < t , > k i − t ) )   \overleftrightarrow{L(\theta )} =-\frac{1}{N^{'}}\sum_{i=1}^{n}\sum_{t=1}^{N^{'}/2} logp((\overleftrightarrow{y}_{t}|\overleftrightarrow{y}_{<t,>k_{i}-t})+(\overleftrightarrow{y}_{k_{i}-t}|\overleftrightarrow{y}_{<t,>k_{i}-t}) ) \ L(θ) =N1i=1nt=1N/2logp((y ty <t,>kit)+(y kity <t,>kit)) 
L j o i n t = L ( θ ) → + L ( θ ) ← + λ L ( θ ) ↔ L_{joint} = \overrightarrow{L(\theta )} + \overleftarrow{L(\theta )} + \lambda \overleftrightarrow{L(\theta )} Ljoint=L(θ) +L(θ) +λL(θ)

4 THE M2E DATASET

在这里插入图片描述

5 EXPERIMENT

5.1 Implementation Details

  • RTX 3090 x1
  • Intel Core i7-12700KF CPU
  • batchsize=12
  • Transformer hidden dim = 256
  • number heads = 8
  • number of layers = 3
  • dropout = 0.3
  • Adadelta: weight decay 1e−4 , 𝜌= 0.9,𝜖 = 1 e−6
  • maximum line number = 16
  • λ \lambda λ = 1

5.2 Evaluation Metrics

评估指标:

  • 整行正确率
  • 推理速度(fps)

5.3 Comparisons with State-of-the-arts

  • M2E

在这里插入图片描述

  • CROHME

在这里插入图片描述

“*”表示该模型在多行CROHME数据(多个图片进行合成)上进行训练,并在单行CROHME数据上进行测试。

在这里插入图片描述

5.4 Ablation Study

消融实验:

  • 行感知位置编码

    的影响虽然行双端解码策略和行分割双端掩码调节了半自回归解码的回归关系,但由于缺乏位置感知,模型无法收敛。结合所提出的线感知位置编码显著提高了识别性能,表明我们所提出的行感知位置编码对于多线表达式的半自回归关系建模是至关重要和不可或缺的。

  • 共享任务优化策略

    我们的模型能够同时进行半自回归和普通的自回归解码,所提出的半自回归任务与自回归任务具有协同作用。

  • 解码效率

    我们提出的LAST通过减少回归迭代的次数来加速解码速度。与自回归模型相比,所提出的逐行式双端解码策略使平均迭代次数减少了78.8%,从而显著提高了解码效率

在这里插入图片描述

“LWDE”、“LAPE”和“STO”分别表示所提出的行双端解码策略、行感知位置编码策略和共享任务优化策略。"Avg“它表示在整个测试集上的解码器迭代的平均次数。

6 VISUALIZATION

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/159929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python→函数曲线

CSDN中公式一栏&#xff0c;亦可以插入Latex函数。 以函数 为例 也可以用Latex写如下代码&#xff1a; \documentclass{article} \usepackage{amsmath} \begin{document} \[ y \frac{n}{n30} \] \end{document} 如下&#xff1a; 那么&#xff0c;该函数图像如何呢&#xf…

spring-boot-maven-plugin插件 —— 默认打包配置

创建 Spring Boot 应用&#xff0c;默认会添加 Maven 插件&#xff1a;spring-boot-maven-plugin。如果项目结构比较简单&#xff0c;可以不用额外配置&#xff0c;使用默认的编译打包就可以。 执行 maven 打包命令时会自动触发 spring-boot-maven-plugin 插件的 repackage 目…

JVM判断对象是否存活之引用计数法、可达性分析

目录 前言 引用计数法 概念 优点 缺点 可达性分析 概念 缺点&#xff1a; 扩展&#xff1a; 1.GC Roots 概念 2.STW (Stop the world) 前言 JVM有两种算法来判断对象是否存活&#xff0c;分别是引用计数法和可达性分析算法&#xff0c;针对可达性分析算法STW时间长、…

ChatGpt3.5已经应用了一段时间,分享一些自己的使用心得.

首先ChatGpt3.5的文本生成功能十分强大&#xff0c;但是chatgpt有一些使用规范大家需要注意&#xff0c;既然chat是一种工具&#xff0c;我们就需要学会它的使用说明&#xff0c;学会chatgpt的引用语句&#xff0c;会极大的方便我们的使用。我们需要做以下的准备。 明确任务和目…

*ST富吉-688272 三季报分析(20231117)

*ST富吉-688272 基本情况 公司名称&#xff1a;北京富吉瑞光电科技股份有限公司 A股简称&#xff1a;*ST富吉 成立日期&#xff1a;2011-01-20 上市日期&#xff1a;2021-10-18 所属行业&#xff1a;计算机、通信和其他电子设备制造业 周期性&#xff1a;1 主营业务&#xff1a…

机器学习第8天:线性SVM分类

文章目录 介绍 特征缩放 示例代码 硬间隔与软间隔分类 主要代码 代码解释 结语 介绍 作用&#xff1a;判别种类 原理&#xff1a;找出一个决策边界&#xff0c;判断数据所处区域来识别种类 简单介绍一下SVM分类的思想&#xff0c;我们看下面这张图&#xff0c;两种分类都…

Spring接入Metric+Graphite+Grafana搭建监控系统

环境搭建 Metric 主要是记录操作记录&#xff0c;把数据传给Graphite&#xff0c;这个只需要引入依赖就可以了 日志收集系统&#xff0c;可以支持很多的监控系统一般在Spring项目中用其收集数据&#xff0c;可以发送到Graphite等监控系统中一般使用Merter和Timer分别记录成功…

【SpringBoot】 环境准备

一.SpringBoot准备 1.下载idea 社区版 2021.1 - 2022.1.4 专业版 无要求 2.Maven 是一个工具,和Java没有关系 . 主要功能是项目构建和依赖管理. 项目构建 上述对应的都是maven命令 . 依赖管理 添加坐标之后,点击刷新,右侧就会载入依赖. Maven还有依赖传递和依赖排除功…

滚雪球学Java(09-3):Java中的逻辑运算符,你真的掌握了吗?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

C# 实现腾讯云多路直播流的云端混合录制

目录 应用场景 腾讯云直播和云点播 产品架构 混流显示示例 关键代码 API实现 小结 应用场景 在云考试或视频面试中&#xff0c;除了对考生、考官的实时音视频监控以防止作弊行为的发生以外&#xff0c;对直播流的音视频录制也尤为重要&#xff0c;可做为后期证据材料进…

Spring对事务的实现

Spring对事务的支持 事务概述事务的四个处理过程事务的四个特性 引入事务场景Spring实现事务的两种方式声明式事务之注解实现方式 事务概述 在一个业务流程当中&#xff0c;通常需要多条DML&#xff08;insert delete update&#xff09;语句共同联合才能完成&#xff0c;这多…

RT-Thread STM32F407 PWM

为了展示PWM效果&#xff0c;这里用ADC来采集PWM输出通道的电平变化 第一步&#xff0c;进入RT-Thread Settings配置PWM驱动 第二步&#xff0c;进入board.h&#xff0c;打开PWM宏 第三步&#xff0c;进入STM32CubeMX&#xff0c;配置时钟及PWM 第四步&#xff0c;回到R…

鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)

一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中&#xff0c;通过使用预览器&#xff0c;可以查看应用的UI效果&#xff0c;方便开发者实时查看应用的运行效果&#xff0c;随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…

三十分钟学会zookeeper

zookeeper 一、前提知识 集群与分布式 ​ 集群&#xff1a;将一个任务部署在多个服务器&#xff0c;每个服务器都能独立完成该任务。 ​ 分布式&#xff1a;将一个任务拆分成若干个子任务&#xff0c;由若干个服务器分别完成这些子任务&#xff0c;每个服务器只能完成某个特…

有趣的按钮分享

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 广告打完&#xff0c;我们进入正题&#xff0c;先看效果&#xff1a; 废话不多&#xff0c;上源码&#xff1a; <button class&quo…

【STM32】RTC(实时时钟)

1.RTC简介 本质&#xff1a;计数器 RTC中断是外部中断&#xff08;EXTI&#xff09; 当VDD掉电的时候&#xff0c;Vbat可以通过电源--->实时计时 STM32的RTC外设&#xff08;Real Time Clock&#xff09;&#xff0c;实质是一个 掉电 后还继续运行的定时器。从定时器的角度…

C#,数值计算——插值和外推,双线性插值(Bilin_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 双线性插值 /// interpolation routines for two dimensions /// Object for bilinear interpolation on a matrix. /// Construct with a vector of x1. /// value…

How to import dgl-cu113 如何导入 dgl-cu113

参考这个 从How to import dgl-cu113 如何导入 dgl-cu113https://discuss.dgl.ai/t/how-to-import-dgl-cu113/3381https://discuss.dgl.ai/t/how-to-import-dgl-cu113/3381

Pycharm之配置python虚拟环境

最近给身边的人写了脚本&#xff0c;在自己电脑可以正常运行。分享给我身边的人&#xff0c;却运行不起来&#xff0c;然后把报错的截图给我看了&#xff0c;所以难道不会利用pycharm搭建虚拟的环境&#xff1f;记录一下配置的过程。 第一步&#xff1a;右键要打开的python的代…

Idea 创建 Spring 项目(保姆级)

描述信息 最近卷起来&#xff0c;系统学习Spring&#xff1b;俗话说&#xff1a;万事开头难&#xff1b;创建一个Spring项目在网上找了好久没有找到好的方式&#xff1b;摸索了半天产出如下文档。 在 Idea 中新建项目 填写信息如下 生成项目目录结构 pom添加依赖 <depende…