【论文精读】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

        原文翻译地址:https://blog.csdn.net/qq_58718853/article/details/143835962

638f809ada8f4b83b474d23ba77afef3.png

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

一、动机

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

        1.传统OCR弊

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

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

a02119f58029402ea415cc0334d36fc8.png

        (问题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可以处理的图片输入。包括画面背景下的文字、文档内的高密度文本、对高兴趣区域的独立文本和更广泛的音符、化学符号、图表的识别。

8b44f521cdea461e8c479526fb89bf1c.png

50acd8add43c43dbb91df3a7f039a836.png

二、模型架构

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

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

cab7add55fb345ac9f3886af17184b07.png

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

b6e3f607637e493584bd9d26a82acf4d.png

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

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

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

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

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

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

c7329f729a0443459c2ab9430a5f4d8e.png

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

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

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

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

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

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

5e3bd81d0faf4d6a8649b351367597e7.png

        在原文中有指出在所有的训练阶段都没有去锁定 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模型可能的架构模式。

519ba3269aea44c995e758a4d598b0bd.png

        4.联合训练Joint-Train

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

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

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

e3fd24fa7fcc42ac82ba928595e0306f.png

        文中没有明确指出具体的训练方法,但在实验部分指出在联合学习阶段,设置最后输出的最大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——是指对图片目标兴趣区域的文本识别,而排除其他区域干扰,文中指出这项功能对点读笔等应用场景有用。其数据来源是开源的数据库。

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

310fc627f2ca44a4a8b0941a4a546c5a.png

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

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

三、实验结果

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

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

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

b817d8ae82414225a96bb6e052182492.png

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

fc0a4cf2544b48ad9f4dcfdf2b1367dc.png

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

0cd740523cc04822b21b688cf217cdb4.png

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

5041263a8a304273afe9e3de94c5f929.png

四、结语

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

        论文项目环境安装与测试博文地址:

从零开始使用GOT-OCR2.0——多模态通用型OCR(非常具有潜力的开源OCR项目):项目环境安装配置 + 测试使用-CSDN博客

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

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

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

相关文章

使用 Qt 实现基于海康相机的图像采集和显示系统(不使用外部视觉库,如Halcon\OpenCv)[工程源码联系博主索要]

本文将梳理一个不借助外部视觉库(如 OpenCV/Halcon)的海康相机图像采集和显示 Demo。该程序直接使用 Qt GUI 来显示图像。通过海康 MVS SDK 实现相机的连接、参数设置、图像采集和异常处理等功能,并通过 Qt 界面展示操作结果。 1. 功能概述 …

在Ubuntu22.04上源码构建ROS noetic环境

Ubuntu22.04上源码构建ROS noetic 起因准备环境创建工作目录并下载源码安装编译依赖包安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本编译安装ROS noetic和ros_test验证 起因 最近在研究VINS-Mono从ROS移植到ROS2,发现在编写feat…

C++——类和对象(part2)

前言 本篇博客继续为大家介绍类与对象的知识,承接part1的内容,本篇内容是类与对象的核心内容,稍微有些复杂,如果你对其感兴趣,请继续阅读,下面进入正文部分。 1. 类的默认成员函数 默认成员函数就是用户…

matlab实现主成分分析方法图像压缩和传输重建

原创 风一样的航哥 航哥小站 2024年11月12日 15:23 江苏 为了研究图像的渐进式传输技术,前文提到过小波变换,但是发现小波变换非常适合传输缩略图,实现渐进式传输每次传输的数据量不一样,这是因为每次变换之后低频成分大约是上一…

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(二)

从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…

Scala-字符串(拼接、printf格式化输出等)-用法详解

Scala 一、 使用 号连接字符串 在 Scala 中, 运算符实际上会调用 String 类的 concat 方法或者使用字符串的加法操作,生成一个新的字符串。 字符串是不可变的,每次拼接都会创建一个新的字符串。 Mr. yuTips: 性能相对较差&…

ISCTF2024

ezlogin 源码审计 先审源码,纯js题 const express require(express); const app express(); const bodyParser require(body-parser); var cookieParser require(cookie-parser); var serialize require(node-serialize); app.use(bodyParser.urlencoded({ e…

使用真实 Elasticsearch 进行更快的集成测试

作者:来自 Elastic Piotr Przybyl 了解如何使用各种数据初始化和性能改进技术加快 Elasticsearch 的自动化集成测试速度。 在本系列的第 1 部分中,我们探讨了如何编写集成测试,让我们能够在真实的 Elasticsearch 环境中测试软件,并…

MySQL:联合查询(2)

首先写一个三个表的联合查询 查询所有同学的每门课成绩,及同学的个人信息 1.我们首先要确定使用哪些表 学生表,课程表,成绩表 2.取笛卡尔积 select * from score,student,course; 3. 确定表与表之间的联合条件 select * from score,stud…

Vue3学习笔记(下)

文章目录 Vue3学习笔记(下)组合式API下的父子通信父传子子传父 模板引用defineExpose()provide和injectvue3新特性 - defineOptionsvue3新特性 - defineModelPiniaPinia异步写法 Vue3学习笔记(下) 组合式API下的父子通信 父传子…

CNN神经网络

CNN 一 基本概述二 基础知识三 经典案例 今天和大家聊聊人工智能中的神经网络模型相关内容。神经网络内容庞大,篇幅有限本文主要讲述其中的CNN神经网络模型和一些基本的神经网络概念。 一 基本概述 深度学习(Deep Learning)特指基于深层神经网络模型和方法的机器学习。它是在…

MySQL —— MySQL基础概念与常用功能介绍

文章目录 基本概念数据类型数据类型分类 约束主键约束(PRIMARY KEY)外键约束(FOREIGN KEY)使用非空约束(not null)使用唯一性约束(UNIQUE)使用默认约束(DEFAULT&#xff…

如何在react中使用react-monaco-editor渲染出一个编辑器

一、效果展示 二、基于vite配置 1.首先安装react-monaco-editor和monaco-editor包 npm add react-monaco-editor npm i monaco-editor 2.其次创建一个单独的文件(此处是tsx、直接用app或者jsx也行) import { useState, useEffect } from react impo…

MySQL面试之底层架构与库表设计

华子目录 mysql的底层架构客户端连接服务端连接的本质,连接用完会立马丢弃吗解析器和优化器的作用sql执行前会发生什么客户端的连接池和服务端的连接池数据库的三范式 mysql的底层架构 客户端连接服务端 连接的本质,连接用完会立马丢弃吗 解析器和优化器…

【开源免费】基于Vue和SpringBoot的私人健身与教练预约管理系统(附论文)

本文项目编号 T 618 ,文末自助获取源码 \color{red}{T618,文末自助获取源码} T618,文末自助获取源码 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息…

JVM--内存结构

目录 1. PC Register(程序计数器) 1.1 定义 1.2 工作原理 1.3 特点 1.4 应用 2.虚拟机栈 2.1定义与特性 2.2内存模型 2.3工作原理 2.4异常处理 2.5应用场景 2.6 Slot 复用 2.7 动态链接详解 1. 栈帧与动态链接 动态链接的作用&#xff1a…

手机直连卫星NTN通信初步研究

目录 1、手机直连卫星之序幕 2、卫星NTN及其网络架构 2.1 NTN 2.2 NTN网络架构 3、NTN的3GPP标准化进程 3.1 NTN需要适应的特性 3.2 NTN频段 3.3 NTN的3GPP标准化进程概况 3.4 NTN的3GPP标准化进程的详情 3.4.1 NR-NTN 3.4.1.1 NTN 的无线相关 SI/WI 3.4.1.2…

【SpringBoot】什么是Maven,以及如何配置国内源实现自动获取jar包

前言 🌟🌟本期讲解关于Maven的了解和如何进行国内源的配置~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 &#x1f3…

阿里斑马智行 2025届秋招 NLP算法工程师

文章目录 个人情况一面/技术面 1h二面/技术面 1h三面/HR面 20min 个人情况 先说一下个人情况: 学校情况:211本中9硕,本硕学校都一般,本硕都是计算机科班,但研究方向并不是NLP,而是图表示学习论文情况&…

富士施乐DocuContre S2520报打开盖子A,取出纸张。代码077-900故障检修

故障描述: 一台富士施乐DocuContre S2520复印机开机报错:打开盖子A,取出纸张。代码077-900故障,用户之前经常卡纸,卡着、卡着就一直提示打开盖子A,取出纸张了;复印机屏幕提示如下图: 故障检修: 富士施乐DocuContre S2520复印机报打开盖子A,取出纸张。077-900的错误代…