【论文精读】GOT-OCR2.0源码论文——打破传统OCR流程的多模态视觉-语言大模型架构:预训练VitDet 视觉模型+ 阿里通义千问Qwen语言模型

        作为本系列的开篇文章,首先定下本系列的整体基调。论文精读系列,旨在记录研读深度学习、强化学习相关论文的个人心得和理解,仅供参考,欢迎指正错误和研究探讨

        所有文章只会摘选论文部分进行分析,且不一定按原文行文顺序进行,详细内容请移步原文链接。本系列一个优势是,本人只是一个小白,会对论文中一些抽象的概念名词进行详细解读记录,尤其是一些简化的模型缩写,并且对于一些图表也会分析,因此对于初学者较为友好。


        本文记录24年9月份由中国科学院大学和清华大学团队强强联合发表的 General OCR Theory: Towards OCR-2.0 via a Unified End-to-end Model 论文研读心得。其提出了一种新的实现OCR的多模态大模型架构方式——OCR2.0,对传统的OCR1.0流程发起了挑战。

        论文链接地址:https://arxiv.org/abs/2409.01704

        项目源码地址:https://github.com/Ucas-HaoranWei/GOT-OCR2.0

        【预告】本文总体(不严谨得)从三个方面入手记录该论文内容,分别是:动机、模型架构、实验结果

一、动机

        在论文的第一和第二部分(Introduction & Related Work)主要是在讲本文创新内容的“动机”,具体来说就是几个问题,传统的OCR方法有什么不好?最近有什么好的新的解决方案?照搬新技术有什么问题?总而言之就是,取其精华去其糟粕。下面就按照这个逻辑记录一下传统的问题,和新的技术。

        1.传统OCR弊

        文章指出传统OCR,即OCR1.0的问题是“pipeline style”——流程式的解决方案。这里解释一下传统流程式的OCR1.0识别方案。

        OCR1.0流程式方案:具体来说,传统的识别字符的方案像流水线工作一样,按顺序大致分为三个独立的模块——目标检测、区域裁剪、字符识别

        (问题1:局部最优)

        三个独立的模块合在一起按顺序运作才能完成从:文章图片——>文本 的转化。这样文章指出会导致的第一个问题是每个独立的模块容易陷入自己的局部最优

        这里的意思是,比如目标检测模型只专注于检测到文本,那么其最优解就是将图片中所有的文字都用框框住,那么可能就将一些不那么相关或者说最后感兴趣的内容(如批注,水印等等干扰正文信息的文本)框进来,当前最优解变成后续的“噪音”了;

        又或者字符识别模型只关心对于裁剪图片中的文字进行提取,而关注不到检测模型看到的当前文本在整张图片中的位置空间信息,因此如行文阅读顺序,文字是否因为倾斜导致漏识别,这些都是识别模型无法解决的。

        (问题2:成本高)

        由于每个任务都是独立模型,使用起来缺乏通用性,对于不同任务,甚至要对每个模型都重新开始训练,不仅使用起来麻烦,而且成本高。

        比如说,对于中文简体和繁体两种类型的字(对应两张不同的图片页面内容),传统的OCR可能要分别训练两个不同的检测模型和识别模型(因为简体和繁体可能对应的行文顺序也发生了变化)。OCR2.0就旨在将这些都统一到一起,固定视觉方面检测,只需微调后面的语言模型即可。

        2.新技术的弊

        文章指出了一个有潜力改变传统OCR困境的技术——大语言视觉模型(LVLMs)。首先记录解释一下原文出现的几个模型和技术概念。

        LVLMs(Large Vision Language Models):是指结合视觉信息和语言信息的大规模多模态的深度学习模型,特别是基于Transformer架构的。可以处理如视觉问答、图像描述生成、图像文本匹配等任务。

        CLIP(Contrastive Language-Image Pre-Training):通过图片-文本的对比学习和相似匹配来训练的多模态深度学习模型。CLIP关键技术是将图片和文本信息嵌入到同一个空间进行学习。

        LLaVA(Large Language and Vision Alignment):结合大规模的语言模型(如GPT)和视觉模型(文中指出是CLIP)的多模态模型。

        Qwen-VL:同样是一个文本和图片相互理解相互生成的多模态模型

        文中提到了多个当前流行的多模态大模型例子,但这些模型都主要是处理文本和图像相互关系的,因此作者也指出了直接使用这些技术照搬到OCR来存在的弊端。

        (问题1:感知与推理冲突)

        文中提到的多模态大模型 LVLMs 主要的目标任务是图片和文本的相互理解转化,这意味着更多的关注是一种推理过程(如描述图片内容到文字,或根据文字生成图片)。而OCR更多关注只要识别到某个区域有字就行了。

        简单来说,OCR 比 LVLMs 对视觉的要求更低、处理更简单。举例来说,图片中有一只狗坐在树下,OCR只需认识到图片中有狗和树两个目标检测(感知)即可,LVLMs还需理解树和狗在图片中的空间信息,狗和树的颜色等等更复杂的信息(推理)。

        (问题2:标记对齐冲突)

        在LVLMs中一张图片对应一句话,也就是说图片经过编码器的输出还要跟文本信息进行一个对齐操作,这样是为了使得后续解码器理解文本和图像之间的复杂细微联系,甚至是逻辑关系。但是OCR不行,一张图片中的每个字都要准确提取出来,一张图或区域可能对应成千个字,这样的对齐是出问题的。

        可以理解为,LVLMs是一个更加复杂的任务,推理需要更多的信息准备,因此模型设计的输入上的内容更多,但是这么多信息在OCR上就有一些存在浪费,因为OCR只专注于找到这些文本,而不是去理解它们。

        3.通用OCR2.0的利

        基于以上背景,作者提出了对新型OCR2.0的目标展望。

        主要表现在三个方法:

        ①端到端(End-to-end):意思是改进传统的多个流程的复杂方式,仅用一个多模态的大模型实现输入图片输出可编辑文本的效果。

        ②训练推理成本低(Low training and inference costs):这是相对于LVLMs来说的,因为其只需使用简单的视觉识别功能,因此可以对LVLMs任务模型进行改进优化其参数量。

        ③通用性(Versatility):借助大模型更强的表征能力,训练模型可以识别更通用的人工光学字符,如公式、表格、音符等

        原文中附图展示了OCR2.0可以处理的图片输入。包括画面背景下的文字、文档内的高密度文本、对高兴趣区域的独立文本和更广泛的音符、化学符号、图表的识别。

二、模型架构

        继续是全文最关键的部分(General OCR Theory),这是其项目缩写GOT名称的由来。

        原文中提到整个OCR2.0的框架其实并不复杂,大体分为三个部分——image encoder(视觉文本识别感知模块)、linear layer(线性连接)、output decoder(文本输出模块)

        同时原文还特别指出其团队训练分为三个阶段模式——Pre-training(视觉预训练)、Joint-training(编解码器联合训练)、Post-training(语言模型后训练)。下图给出原文附图解释。

        下面按照其模型结构和训练阶段分别展开。

        1.视觉文本识别编码器Encoder + 线性连接层Linear layer

        下面首先根据原文说法,搭建视觉编码器 encoder 的网络,这个编码器本质上是将图片转化编码成后续语言模型可以读取的标记 image token 信息。

        原文指出视觉模块使用的是“经过微小调整”的基础版 VitDet,约80M个参数。其修改了编码器最后两层(具体修改需要参看源码分析)

        经过修改后,这个Encoder接受 1024x1024x3 的正方形RGB图片输入,输出 256x1024 的图片 image tokens 标记。

        文章还特别指出,其在编码器encoder输出后还添加了一个 1024x768 的线性层,用于连接视觉编码器和文本语言解码器(将输出的 image tokens形状 256x1024 匹配解码端 Qwen 支持的输入形状1024x1024

        2.视觉模块预训练Pre-Train

        整个架构可以分为两个主要的模块,分别是处理图像信息的编码器 Encoder 与处理文本信息的解码器 Decoder,整个训练过程也是围绕两者进行的。

        实际上(仅就个人理解上,正误未知)训练应该分为“四个阶段”,分别是 1)视觉编码器的预训练、2)视觉模型微调、3)语言文本模型的预训练、4)语言文本模型的微调。原文中没有这里第三个阶段是因为团队直接使用了预训练好的 Qwen 语言文本模型参数。

        首先是训练的第一阶段(stage1)——视觉编码器Encoder预训练。

        在GOT视觉预训练阶段,团队使用了5M个图文对,并且为了加速训练,提高训练效率并节省 GPU 资源,在解码器端使用的是一个微型语言模型 OPT-125M(而不是最终架构模型中的Qwen-0.5B),这样做是合理的,因为预训练是专注于提高视觉模型的识别能力。

        下图是个人理解后简略画图,可能不准确,并且不包括原文中对图片数据的预处理操作,仅供参考。

        在原文中有指出在所有的训练阶段都没有去锁定 LLM(Large Language Model)即语言文本模型的参数,在此处阶段指的是小型OPT-125m解码器处的参数。

        还可以看到,按照原文意思,视觉编码器img Encoder的输出特征,仅仅只是经过一个线性层的形状转换就传入了文本解码器模型。按文中说法就是没有做图像到文本的对齐处理学习

        在多模态模型LVLMs中,通常会加入图像和文本特征的对齐步骤,以确保视觉编码器生成的图像特征与语义模型的输入特征在空间上和语义上保持一致

        因为是纯文本识别任务,任务更集中在文本识别,而不是复杂的图像-文本对齐,所以直接从图像到文本的生成路径依然有效。总而言之,OCR2.0的架构比 LVLMs 更简单清晰

        3.文本输出解码器Decoder

         在通过第一阶段训练 Pre-training 得到预训练好的视觉编码器 img Encoder 后,只需在其输出后添加一个更大、功能更强大的预训练的语言文本解码器,就得到了完整版的 GOT-OCR2.0模型框架了。

        原文中使用的是阿里研发的通义千问(Qwen)0.5B(5亿)参数量的语言模型,文中介绍GOT模型架构一共存有580M(5.8亿)参数量,这是对部署友好的,可以在4G内存的消费日常级GPU上实现推理任务

        同时,在语言解码器的输出上,文中指出GOT使用大约8k的上下文长度——意思是可以最多识别一张图片内的八千个光学字符并得到结果。

        下图自画了完整的GOT模型可能的架构模式。

        4.联合训练Joint-Train

        搭建好完整的GOT模型后,进入训练的第二阶段(stage2),虽然原文中并没有提及,但个人感觉,但此处才是真正开始训练一个多模态的OCR模型。

        数据是训练的关键,文章也指出,其最后实验结果的优秀表现得益于此处训练时对数据的渲染、合成合成多样数据集等操作,作者团队仔细探索了几种合成方法和数据引擎。

        下原文附图所示,研究团队使用了至少六种渲染工具来辅助数据引擎,处理得到了如表格、数学分子式、几何形状、乐谱、图表等多样化的数据

        文中没有明确指出具体的训练方法,但在实验部分指出在联合学习阶段,设置最后输出的最大tokens文本数为6000(区别于最终部署模型的8000)。

        因此可以推测此阶段的训练方式和预训练视觉模型没有太大区别,只不过扩展精细化了数据集,并将语言模型转为实际最终的Qwen预训练。不严谨得说,就是视觉预训练就是粗略的训练给GOT模型做热身工作,只有视觉模型“积极参与”;联合训练是正式的训练,视觉语言模型都“严阵以待”。

        并且此处的训练就如标题——Scaling Up the OCR-2.0 Knowledge via Multi-task Joint-training 指出,是扩展GOT的知识面信息,在预训练时让模型获得识别文字,转义文本图片的“能力”;在联合学习阶段,具体扩展相应的OCR具体“实践知识”。

        5.*功能性语言模型后训练Post-Train

        在有了前两个阶段(stage1,2)的准备后,GOT模型已经基本具备图像识别文本的OCR能力,在最后一个阶段(stage3仅微调解码器就可以为GOT定制其不同任务的能力

        最后阶段(stage3),是项目源码允许用户根据自己数据集进行微调训练的部分。这个阶段的训练微调也展示了整个模型架构相比传统OCR巨大的发展潜力和优越性能

        在原文中,作者团队仅通过调整训练最后的语言模型解码器Decoder就实现了三个新功能的增加——细粒度、多页和动态分辨率 OCR,这是传统OCR流程无法实现的。

        具体来说,细粒度OCR——是指对图片目标兴趣区域的文本识别,而排除其他区域干扰,文中指出这项功能对点读笔等应用场景有用。其数据来源是开源的数据库。

        如原文最后附录展示的,只提取出目标红框区域的表格文本内容。

        多页和多分辨率OCR——具体是指对于图片分辨率大于模型输入的尺寸(1024x1024),其使用滑动窗口裁剪识别和最后结果的拼接,也得到很好的OCR结果,还有对于多页的PDF文件,每页文件之间也存在页面顺序,多页OCR训练后也能区分。

        文章中也在实验部分指出,在此阶段——后训练,才将输出的tokens最大长度设置为8192,达到最终模型的最大输出长度数。

三、实验结果

        最后在实验结果结果展示上,作者先解释了其训练的一些细节,如使用 AdamW 优化器和余弦退火调度程序。然后对比了5个不同OCR任务的表现。可以看到其在0.58B的体量上,得到的效果非常好。

        具体来说,通过关注其精度 Precison 和召回率 Recall 可以基本判断优劣,两者都是越高越好。

        首先是文档级的密集文本数据在中文(zh)和英文(en)的性能不同模型比较。

        然后是场景背景的图片数据效果。

        然后作者团队还测试了格式化PDF图像的模型能力,其对比了原始图片输入和经过动态调整分辨率裁剪的输入,发现动态分辨率方案在处理高分辨率图像时是一个不错的选择

        还做了交互式OCR——细粒度OCR测试,和FOX做对比实验,效果也更好。还有更加通用的数据——以数字为中心的图表 OCR性能比较,GOT模型都展示了其优越性能。

四、结语

        至此,关于这篇多模态的OCR架构文章精读暂告一段落,后续将根据其项目源码地址,进行部署和微调模型的测试,并记录在新的博文系列,敬请期待。

        通读多遍全文才窥见部分作者团队思想的精妙绝伦,最后借此机会,对论文的研究团队和其开源代码表示最高的敬意!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Rust 编程语言工具】rustup-init.exe 安装与使用指南

rustup-init.exe 是用于安装和管理 Rust 编程语言工具链的 Windows 可执行文件。Rust 是一种系统级编程语言,旨在提供安全、并发和高性能的功能。rustup-init.exe 是官方提供的安装器,用于将 Rust 安装到 Windows 操作系统中,并配置相关环境。…

【Hutool系列】反射工具-ReflectUtil

前言 反射是 Java 中一种强大的机制,可以在运行时动态地获取类的信息并操作类的属性和方法。在 Java 中,通过反射可以获取和设置类的字段、调用类的方法、创建类的实例等。Java的反射机制,可以让语言变得更加灵活,对对象的操作也更…

Microsoft Fabric - 尝试一下Real time event stream

1. 简单介绍 微软推出的Microsoft Fabric平台已经有一段时间了,这是一个Data engineer, Data Sciencist, Business等多种工作角色的人员可以一起工作的一个大平台。 note, Microsoft Fabric 提出了OneLake, LakeHouse的概念,同时为了防止数据冗余&#…

数字图像处理(c++ opencv):图像复原与重建-常见的滤波方法--自适应滤波器

自适应局部降噪滤波器 自适应局部降噪滤波器(Adaptive, Local Noise Reduction Filter)原理步骤 步骤 (1)计算噪声图像的方差 ; (2)计算滤波器窗口内像素的均值 和方差 ; &…

C++:类和对象(上)

目录 一、类的定义 二、 访问限定符 三、 实例化概念类: 类(Class) 对象(Object) 实例化(Instantiation) 四、 对象大小 五、this 指针的基本概念 this 指针的作用: this 指…

如何在vscode 中打开新文件不覆盖上一个窗口

在 VSCode 中,如果你单击文件时出现了覆盖Tab的情况,这通常是因为VSCode默认开启了预览模式。在预览模式下,单击新文件会覆盖当前预览的文件Tab。为了解决这个问题,你可以按照以下步骤进行操作 1.打开VSCode:启动你的…

Linux篇(权限管理命令)

目录 一、权限概述 1. 什么是权限 2. 为什么要设置权限 3. Linux中的权限类别 4. Linux中文件所有者 4.1. 所有者分类 4.2. 所有者的表示方法 属主权限 属组权限 其他权限 root用户(超级管理员) 二、普通权限管理 1. ls查看文件权限 2. 文件…

冲压车间如何开展六西格玛管理培训

面对日益严苛的客户要求与成本控制挑战,传统的管理模式已难以满足高质量发展的需求。此时,六西格玛管理以其严谨的数据驱动、持续改进的理念,成为众多企业转型升级的有力工具。本文,天行健企业管理咨询公司将深入探讨冲压车间如何…

基于微信小程序的平安驾校预约平台的设计与实现(源码+LW++远程调试+代码讲解等)

摘 要 互联网发展至今,广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力…

插入排序(sort)C++

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 时间限制:C/C/Rust/Pascal 1秒,其他语言2秒 空间限制:C/C/Rust/Pascal 512 M,其他语言1024 M 64bit IO Format: %lld 题目描述 插入排序是一种…

卷积、频域乘积和矩阵向量乘积三种形式之间的等价关系与转换

线性移不变系统 线性移不变系统(Linear Time-Invariant System, LTI系统)同时满足线性和时不变性两个条件。 线性:如果输入信号的加权和通过系统后,输出是这些输入信号单独通过系统后的输出的相同加权和,那么该系统就…

15分钟学 Go 第 53 天 :社区资源与学习材料

第53天:社区资源与学习材料 目标 了解Go语言官方资源掌握社区重要学习平台学会利用开源项目学习构建个人知识体系 一、Go语言官方资源汇总 资源类型网址说明Go官网golang.org官方文档、下载、教程Go Blogblog.golang.org技术博客、最新特性介绍Go Playgroundpla…

「QT」文件类 之 QIODevice 输入输出设备类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

timescale使用例子 - 纽约出租车

一、资料使用 在timescale的官方网站的“教程”菜单中,有几个不同业务场景的例子,其中就有运输行业的例子。我访问中文站点的时候,关于教程的几个步骤内容刷不出来,所以还是建议访问英文站点。 https://docs.timescale.com/tuto…

树(二叉查找树、平衡二叉树、红黑树)

树(二叉树、二叉查找树、平衡二叉树、红黑树) 二叉查找树(二叉排序树、二叉搜索树)添加元素查找元素遍历弊端 平衡二叉树旋转机制:左旋旋转机制:右旋需要旋转的四种情况1. 左左:一次右旋2. 左右…

医疗器械包装运输试验之抗压试验的条件选取及方法和设备的要求

医疗器械包装运输试验之抗压试验的试验目的: 抗压试验通常用来评估产品在承受外界压力时,包装对内装物样品的保护能力。试验通常模拟产品在运输流通过程中可能遇到的压力环境。通过试验,可以验证包装对内装物的保护能力、包装结构的完整性、…

C++内存池实现

1.内存池概念 内存池就和其他的池数据(如线程池)结构类似,由程序维护一个“池”结构来管理程序使用的内存,然后根据需要从内存池中申请使用内存或者向内存池中释放内存,来达到高效管理内存的目的。 在一般的内存管理的…

数据结构-二叉树

一.二叉树的定义 二叉树有左右儿子之分 完美二叉树(满二叉树)除了最下面的没有儿子其他结点都有两个儿子,叶节点比较齐的,完全二叉树不是满二叉数允许缺失最后的结点 满二叉树可以达到2^k-1 边的总数节点数-1 二.二叉树的存储结构…

OKR制定指南

Goal Crafting 目标制定是最基本的领导活动之一。组织绩效和团队成长依赖于精心制定的目标。没有良好的目标制定练习,团队可能只关注眼前的事务,解决看似可以快速解决的问题。良好的目标制定迫使你不忽视或推迟那些需要新思维方式、合作或克服困难的问题…

详细分析Java中FilterChain过滤器的基本知识

目录 前言1. 基本知识2. Demo 前言 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 从实战中学习: 常用在一些重复代…