OCR-free相关论文梳理

⚠️注意:暂未写完,持续更新中

引言

通用文档理解,是OCR任务的终极目标。现阶段的OCR各种垂类任务都是通用文档理解任务的子集。这感觉就像我们一下子做不到通用文档理解,退而求其次,先做各种垂类任务。

现阶段,Transformer技术的发展,让通用文档理解任务变得不再是那么遥不可及,出现了很多OCR-free的工作。

该部分的工作可以分为三个阶段:

  1. 监督类的方法,像LayoutLM系列
  2. 只有Transformer结构
  3. 结合了LLM做通用文档理解

本篇文章着重梳理第2点和第3点涉及到的OCR-free的通用文档理解的工作。行文难免挂一漏万,还望大家多多指教。

⚠️注意:行文顺序是从新到旧

(2024 TextMonkey) TextMonkey: An OCR-Free Large Multimodal Model for Understanding Document

code: https://github.com/Yuliang-Liu/Monkey
TextMonkey
TextMoneky工作源于之前Moneky的工作,主要贡献点有以下几点:

  1. 通过使用sliding window将原始图像划分为non-overlapping 448x448 patches的方式,间接地增加了输入图像的尺寸
  2. 为了增加多个window patches彼此之间的connections, 作者引入了Shifted Window Attention层,插入到多个Endcoder Layer中间
  3. 提出了Token Sampler,用于找到其中真正起到关键作用的tokens,减少计算量。这一点有一个假设前提:image包含冗余的tokens
  4. 为了减少模型的幻觉,作者添加了一些额外的training task,例如:text spotting和reading text任务。这些任务可以确保模型学到text和location data之间的关系。
  5. 论文还探索了作为App Agent的潜力

PS: 整个工作还是比较间接有效,唯一有些缺憾的是相关中文数据用的较少,在中文上效果较差。

(2023 DocPedia) Docpedia: Unleashing the power of large multimodal model in the frequency domain for versatile document understanding

(2023 TGDoc) Towards improving document understanding: An exploration on textgrounding via mllms

(EMNLP2023 UReder) UReader: Universal OCR-free Visually-situated Language Understanding with Multimodal Large Language Model

code: https://github.com/LukeForeverYoung/UReader
UReader
UReader的工作和mPLUG-DocOwl有重合部分,也是通过一个统一的instruction format,在广泛的Visually-situated Language Understanding任务中fine-tuned得来。

亮点部分有两个:

  1. 为了增强visual text和semantic understanding的能力,作者添加了两个额外的任务,但是是一样的输入格式。这两个任务是text reading和key points generation任务。

  2. 由于现有的vision encoder是frozen,也就是说训练过程中不训练该部分,所以其输入图像的尺寸较小,一般是 224 × 224 224 \times 224 224×224。作者提出了shape-adaptive cropping module来动态将输入vision encoder的high-resolution图像切分为合适几块。
    在这里插入图片描述
    Shape-Adaptive Cropping Module,让我想到了目标检测任务中Anchor的做法,先预设一些分割类型块,然后根据IoU计算,挑选合适的分割块。

也让我想到了在做一些遥感类目标检测任务时,由于图像过于大,没有办法一下子输入到模型中去,只好使用一个滑动窗口,overlapping切分该图。

这部分工作和Moneky中的做法不谋而合。相比于Moneky,UReader反而做的更加精细一些。下图是Moneky做法,可注意看从右下角部分。
Moneky

(2023 mPLUG-DocOwl) mPLUG-DocOwl: Modularized Multimodal Large Language Model for Document Understanding

code: https://github.com/X-PLUG/mPLUG-DocOwl
mPLUG-DocOwl
mPLUG-DocOwl是在mPLUG-Owl基础上,基于统一的instruction tuning,来平衡language-only, general vision-and-language和document understanding三个任务。
在这里插入图片描述

使用的统一的instruction tuning是:<image>Human:{question} AI:{answer},不同的文档理解数据集都会通过替换{questiong}{answer}两个关键字段来统一为以上格式。

同时,论文中构建了一个指令理解(instruction understanding)的测评集,名为LLMDoc,来评估多样文档理解能力。

PS: 本篇工作主要贡献点就只有上述两个地方。值得称赞的是,开源的相关的代码和模型,为后续学者研究提供了极大便利。

(2023 UniDoc) Unidoc: A universal large multimodal model for simultaneous text detection, recognition, spotting and understanding

code: 无
UniDoc
UniDoc是一个可以同时做文本检测、文本识别和文档理解的多模态模型。具体所做的任务如下图:
UniDoc Framework
UniDoc,在我看来,算是第一个用LLM做OCR任务的。因此,该论文主要工作在于构建了instruction following数据集,但是没有开源。同时代码和模型权重也没有开源。这让我有些难以评论哈!

由于UniDoc输入图像尺寸是224x224的,因此不能提取fine-grained visual features。这一点也是其后续工作的主要创新点。

(2023 Vary) Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

code: https://github.com/Ucas-HaoranWei/Vary
Vary
该篇工作着眼于dense and fine-grained vision perception任务,例如文档级别OCR和图表理解任务。这一点和Nougat工作有些类似。论文主要可分为两个阶段:

  1. 设计一个vocabulary network,通过自回归的方式产生所需要的vocabulary
  2. 将上一阶段的new vocabulary与LLM中现有的vanilla vision vocabulary融合,使得LLM获得新的能力。

因为在第一阶段训练Vary-tiny时,image encoder用的是在ViTDet上训练所得SAM-base模型,所以其输入图像尺寸是1024x1024x3。这一点可以有效缓解文档类图像在较小尺寸下输入,文字模糊变形问题。但是并未从实际上提高模型的输入尺寸。

PS: 整个Vary工作,我个人认为最大的一点价值是提供了合成中文文档数据的思路,但是并未开源任何合成的相关代码,同时也未开源其模型。 这也难怪后续的工作,很少有与Vary做对比的。这一点从TextMoneky工作中就可看出来。因为Vary用了私有数据集,模型也未开源,所以不能相比。

(2023 Pix2struct)Pix2struct: Screenshot parsing as pretraining for visual language understanding

code: https://github.com/google-research/pix2struct
Pix2struct
该篇工作主要是将网页上masked screenshots转换简单的HTML代码,示例图如上面所示,第一列是模型的输入,第二列是模型对应的输出结果。首次证明了一个模型在多个不同visual-language understanding任务中都能取得较好效果。

Pix2struct是基于ViT的标准image-encoder-text-decoder结构,论文中并没有给出具体框图,只是说明了相对于标准的结构,做了哪些改变:

  1. 由于观察到在一些visual-language task中,对同样图像,输入不同aspect ratio图像,结果有很大影响。因此作者在保持宽高比的基础上,对图像做了scaling,具体做法可参考下图:
    在这里插入图片描述
  2. 为了能够处理图像中variable resolutions unambiguously,作者引入了2维绝对位置embedding。直白一些,就是加入了位置编码。

以上两点,使得标准的ViT网络更加鲁棒。

值得注意的是,Pix2struct是针对不同任务,都需要重新训练对应的模型。也就是说,我有6个不同visual-language tasks,我就需要分别训练对应6个模型,虽然这6个模型的网络结构是一样的。

PS: 整篇文章看得我有些懵逼,始终没有找到用了多少数据训练的。🤦🏻‍♀️

(2023 Nougat) Nougat: Neural Optical Understanding for Academic Documents

code: https://github.com/facebookresearch/nougat
Nougat
该篇工作基于Donut,整个网络结构都是来自Donut。因此该篇工作的主要贡献不在算法侧,而是在于数据侧,主要有以下三点:

  1. 训练了pre-trained model,可以转换PDF到轻量的mardown格式,包括PDF中表格和公式
  2. 通过构造了一个完整pipeline,来构造一个将PDF转换为对应MMD格式的数据集
  3. 该方法其输入仅仅是图像,且能够处理扫描的论文和书籍

对于以上三点,我个人最能受益的是第2点。可以说,构造PDF → mmd格式数据集是整个问题的关键。这一点在后续OCR-free与LLM结合的工作中,体现的更加明显。我自己的确也真正跑通了构造数据集的代码,并得到了大约34w 英文文档数据集。在这里不得不为Nougat的工作点赞。
Data porcessing

(ECCV 2022 Donut) OCR-free Document Understanding Transformer

code: https://github.com/clovaai/donut
Donut
该工作将OCR中多个子任务都集成到了一个End-to-End的网络中,网络是基于transformer的编解码结构。这应该是第一篇将Transformer 编解码结构应用到整个OCR任务中的工作,包括文档分类、文档信息提取和文档问答三个任务。

虽然之前有基于Transformer的文本识别工作–TrOCR,但是也仅仅限于文本识别这一个单一任务。与之前工作相比,Donut与之前工作的差异,可以用下图中清晰体现出来:Pipeline Overview
Donut的结构有些像Text Spotting任务(检测和识别都在一个模型中完成),但是Donut做的要比Text Spotting任务更进一步。Text Spotting任务只是将图像中文本和对应框坐标提了出来,并没有做进一步操作,而Donut则是在理解图像中文本内容基础上做结构化内容任务。

下图就是Text Spotting任务常见结构图(选自PGNet):

PGNet
值得一提的是,论文中提出了一种合成文档数据的Pipeline-- SynthDoG。这为后续开展进一步研究提供了极大的便利。
在这里插入图片描述

PS: 这篇工作可谓是经典之作,打开了新思路。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

App Inventor 2 Clipboard 拓展:实现剪贴板的复制粘贴功能

效果如下&#xff1a; 此 Clipboard 拓展由中文网开发及维护&#xff0c;最新版本 v1.0&#xff0c;基于 TaifunClipboard 开发。 使用方法 属性及方法很简单&#xff0c;默认操作成功后显示提示信息&#xff0c;SuppressToast设置为 假 后&#xff0c;则不显示提示信息。 经测…

工业界真实的推荐系统(小红书)-重排:多样性算法-MMR、DPP、结合业务规则

课程特点&#xff1a;系统、清晰、实用&#xff0c;原理和落地经验兼具 b站&#xff1a;https://www.bilibili.com/video/BV1HZ421U77y/?spm_id_from333.337.search-card.all.click&vd_sourceb60d8ab7e659b10ea6ea743ede0c5b48 讲义&#xff1a;https://github.com/wangsh…

Java面试题11MySQL之执行计划到事务及慢查询

你对MySQL执行计划怎么看 执行计划就是SQL的执行查询的顺序&#xff0c;以及如何使用索引查询&#xff0c;返回的结果集的行数 在MySQL中&#xff0c;我们可以通过explain命令来查看执行计划。其语法如下&#xff1a; EXPLAIN SELECT * FROM table_name WHERE conditions;在…

OpenGL model 模型

9.9.2 model 模型 一个模型拥有多个网格组成&#xff0c;并配有相应的处理函数&#xff0c;如节点处理、网格处理、加载模型、加载纹理、渲染等 模型类&#xff1a; class Model{ public:Model(char* path) {loadModel(path);}void Draw(Shader shader);private:std::vector…

掌握SWOT分析:深入了解企业战略利器

在当今充满挑战和机遇的商业世界中&#xff0c;SWOT分析成为了企业战略制定和执行的不可或缺的工具。SWOT分析是一种系统性方法&#xff0c;用于评估企业内部的优势和劣势&#xff0c;以及外部环境中的机遇和威胁。本文将深入探讨SWOT分析的各个方面&#xff0c;揭示其深层次的…

数据结构从入门到精通——堆

堆 前言一、二叉树的顺序结构及实现 (堆&#xff09;1.1二叉树的顺序结构1.2堆的概念及结构 二、堆的练习题答案 三、堆的实现3.1堆向下调整算法3.2堆的创建3.3建堆时间复杂度3.4堆的插入3.5堆的删除3.6堆的代码实现 四、堆的具体实现代码Heap.hHeap.cTest.c堆的初始化堆的销毁…

数据结构(二)——顺序表和链表的比较

1、存取(读/写)方式 顺序表可以顺序存取&#xff0c;也可以随机存取&#xff0c;在第i个位置上执行存取操作&#xff0c;顺序表仅需一次访问. 链表只能从表头开始依次顺序存取&#xff0c;链表在第i个位置执行存取则需从表头开始依次访问i次. 2、逻辑结构与物理结…

vue2和vue3的区别?

1. 性能优化&#xff1a; Vue 3在底层进行了重写&#xff0c;重写了虚拟DOM的实现&#xff0c;优化Tree- Shaking&#xff0c;使用了更高效的响应式系统&#xff0c;提供了更快的渲染速度和更小的包体积。Vue 3虚拟 DOM 的优化&#xff0c;提高了渲染性能。 2. Composition A…

短视的双曲贴现

双曲线贴现模型以其函数形式为双曲线而得名&#xff0c;基本特征是贴现率不再是一个常数&#xff0c;而变成与时间相关的变量随时间递减。 贴现率&#xff1a;现在的价值除以未来的价值的比率。 学习应该包括三个层次&#xff1a; 一、知识的输入 二、知识的理解 三、知识的运用…

unity显示当前时间

1建立文本组件和一个空对象 2创建一个脚本并复制下面代码 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine;public class showtime: MonoBehaviour {public TextMeshProUGUI time;private void Update(){string currentTime Sy…

sqllab第十五关通关笔记

知识点&#xff1a; 布尔盲注 无任何有价值的回显&#xff1b;但是回显信息只有两种&#xff08;区别正确和错误&#xff09;通过布尔盲注爆破处正确的信息利用过滤条件对数据进行过滤&#xff1b;只显示自己想要的信息 尝试进行admin admin登录发现没有任何的回显信息 通过b…

TCP网络通信-在C#/Unity中的知识点

导语 TCP编程&#xff0c;作为网络编程的重要一环&#xff0c;常常通过Socket API来实现。了解TCP的API&#xff0c;尤其是在Unity中的应用&#xff0c;是构建可靠网络通信的基础。本文将探讨TCP的相关API&#xff0c;重点聚焦于Unity环境下的System.Net.Sockets命名空间。 正…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像&#xff08;C&#xff09; Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过NE…

Diffusion模型

https://www.zhihu.com/tardis/zm/art/599887666?source_id1005 真值加上noise得到noisy image然后再用网络去predicted noise比较真值的noise和predicted noise之间的差值&#xff0c;来计算lossdenoised image noisy image - predicted noise

1055:判断闰年

【题目描述】 判断某年是否是闰年。如果公元a年是闰年输出Y&#xff0c;否则输出N。 【输入】 输入只有一行&#xff0c;包含一个整数a(0 < a < 3000)。 【输出】 一行&#xff0c;如果公元a年是闰年输出Y&#xff0c;否则输出N。 【输入样例】 2006 【输出样例】…

视觉单目测距原理及实现

视觉单目测距原理及实现 结尾附赠非常宝贵的自动驾驶学习资料 附赠最全自动驾驶学习资料&#xff1a;链接

Vue3:watch监视的5种情况

一、情景说明 在Vue2中&#xff0c;watch的用法如下 https://blog.csdn.net/Brave_heart4pzj/article/details/135604394 这一篇&#xff0c;来学习Vue3中的watch用法 二、案例 1、监视ref定义的数据【基本类型】 引入函数 import {ref,watch} from vue定义变量 // 数据le…

基于Java+SpringBoot+vue的智能农场管理系统详细设计和实现

基于JavaSpringBootvue的智能农场管理系统详细设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

android开发给图片添加水印,水印中包含图片或者图标

之前写过一篇文章&#xff0c;给图片增加水印&#xff0c;不过那个是增加纯文本水印&#xff0c;今天介绍的是以图片叠加的那个是来增加水印。 国际惯例&#xff0c;上代码&#xff1a; private String getWaterMask(String pic) {Bitmap bitmap ImageUtil.fileInputStream(…