Monkey 和 TextMonkey ---- 论文阅读

news2025/1/18 6:49:55

文章目录

  • Monkey
    • 贡献
    • 方法
      • 增强输入分辨率
      • 多级描述生成
      • 多任务训练
    • 实验
    • 局限
    • 结论
  • TextMonkey
    • 贡献
    • 方法
      • 移位窗口注意(Shifted Window Attention)
      • 图像重采样器(Image Resampler)
      • Token Resampler
      • 位置相关任务(Position-Related Task)
      • 损失函数
    • 实验
      • 数据集
      • 比较
      • 可视化
    • 结论

论文:
Monkey:https://arxiv.org/abs/2311.06607
Text-Monkey:https://arxiv.org/abs/2403.04473
代码:
Monkey:https://github.com/Yuliang-Liu/Monkey

Monkey

在这里插入图片描述

贡献

  1. 上下文关联。引入了一种多级描述生成方法,该方法提高了模型掌握多个目标之间关系的能力,并在生成文本描述时更有效地利用公共知识。
  2. 支持分辨率高达1344 x 896。这种分辨率的显著提高超过了LMM通常采用的标准448 x 448分辨率,增强了辨别和理解不明显或密集聚集的对象和密集文本的能力。
  3. 增强了总体性能。在18个不同的数据集上进行了测试,使Monkey模型在图像字幕、通用视觉问答、以场景文本为中心的视觉问答和面向文档的视觉问答等任务中具有非常有竞争力的性能。特别是,在以密集文本问答为中心的定性评估中,与GPT4V相比,Monkey显示出了有希望的结果。

方法

在这里插入图片描述
最初,输入图像被分割成 patch。然后,这些 patch 通过具有不同适配器的共享视觉转换器 (ViT) 进行处理。随后,局部和全局特征以及问题都使用共享重采样器和大型语言模型 (LLM) 进行处理,从而产生所需的答案。

增强输入分辨率

输入分辨率对于准确解释文本和详细的图像特征至关重要。
首先使用滑动窗口把图像分割成小块,在每个共享编码中利用 LoRA 来解决图像不同部分的不同视觉元素。LoRA 的这种集成是为帮助编码器有效地识别和吸收每个图像区域的细节敏感特征,这增强了对空间和时间关系的理解,而不会显著增加参数或计算需求。

为了保留输入图像的整体结构信息,还将原始图像的大小调整为分割后小块的大小,将其作为全局图像,然后每个小块和全局图像通过视觉编码器处理并同时重新采样。重新采样目的是总结视觉信息并在语言特征空间中获得更高的语义视觉表示,它利用交叉注意力机制来实现。该交叉注意力机制使用可训练向量作为 query ,来自视觉编码器的图像特征作为交叉注意力的 key。
这种方法在图像的详细和整体视角之间取得了平衡,从而提高了模型的性能,从而避免了计算需求的大幅增加。

多级描述生成

以前的模型如LLAVA和Qwen-VL使用LAION、COYO和CC3M等大型数据集进行初始训练。然而,这些数据集通常提供过于简单的图像-文本对(例如,描述复杂图像的短句),缺乏详细的图像。因此,即使这些模型是用高分辨率图像训练的,它们也很难准确地将视觉特征与基本标题联系起来。这种限制会影响模型有效地将视觉处理与语言理解相结合。

为了弥合这一差距,本文提出了一种自动生成多级描述的新方法。该技术旨在通过有效地混合各种生成器的输出来创建丰富且高质量的字幕数据。本文利用几个高级系统的组合,每个系统都将其自己的强度带到过程中:BLIP2 ,它提供了对图像和文本之间关系的深刻理解;PPOCR,OCR工具; GRIT,专门针对详细的图像-文本匹配; SAM ,专注于语义对齐;和 ChatGPT,以其在上下文语言生成。

在这里插入图片描述

如上图所示,图像描述过程从 BLIP2 开始,使用 Q-former 创建整体字幕,以与视觉编码器和 LLM 紧密集成,同时保留原始 CC3M 注释以进行上下文。接下来,GRIT 是一个区域到文本模型,生成特定区域、对象及其特征的详细描述。PPOCR从图像中提取文本,SAM片段并识别对象及其部分。然后,这些对象由 BLIP2 单独描述。然而,为了应对这些工具的潜在不准确,尤其是在零样本设置中,我们发现使用 BLIP2 来检查图像区域、对象及其描述之间的一致性至关重要,过滤掉低分匹配。最后,所有数据,包括全局字幕、本地化描述、文本提取和具有空间坐标的对象细节,都被输入 ChatGPT API 进行微调,使 ChatGPT 能够生成准确和上下文丰富的图像描述。

通过合并这些系统的独特特征,本文方法实现了分层和全面的字幕创建风格。它捕获了广泛的视觉和文本细微差别,导致字幕不仅详细说明,而且上下文多样化和引人入胜。

多任务训练

本文是要训练一个既具有成本效益又能够理解各种任务的不同类型的图像模型。通过集成各种数据集并为所有任务使用统一的指令,提高了模型的学习能力和训练效率。

本文专注于创建图像标题、响应基于图像的问题和其他需要模型处理文本和图像的活动等任务。对于字幕,我们用“Generate the caption in English:”指示模型用于基本字幕,“Generate the detailed caption in English:”表示更复杂的字幕。在回答有关图像的问题时,使用一个简单的格式:“{question} Answer:{answer}。”

在训练过程中,使用了针对特定任务量身定制的各种公共数据集。对于图像字幕,包括本文的详细字幕和已建立的数据集,如 COCO 字幕 和 TextCaps 。对于一般的视觉问答(VQA),我们利用VQAV2、OKVQA、GQA、ScienceQA和VizWiz等数据集。对于以文本为中心的 VQA 任务,我们选择 TextVQA 、OCRVQA 和 AI2D ;而对于与文档相关的 VQA,我们采用了 DocVQA 、ChartQA 、InfoVQA 、DeepForm、Kleister Charity (KLC) 、WikiTableQuestions (WTQ)、TableFact 和 VisualMRC 等数据集。为了确保平衡训练,控制了每个任务的图像计数如下表。本文数据集(大约有 1.44 亿个示例)旨在有效地训练本文的模型来理解和执行各种指令。
在这里插入图片描述

实验

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

局限

由于语言模型的输入长度有限,本文方法处理输入图像的能力被限制为最多六个 patches (图像大小为 896*1344)。这种限制阻碍了输入分辨率的进一步扩展。

此外,对于多级描述生成方法,它只能描述图像中呈现的场景,其范围受封装在 BLIP2 和原始 CC3M 注释中的世界知识的限制。例如,当提供国家位置的照片时,该方法可以描述场景的视觉方面,但它缺乏识别和指定场景确实在该国家的能力。

结论

本文提出了一种训练高效的方法,在不从一开始就进行预训练的情况下,有效地将输入分辨率容量提高到1344×896像素。为了弥合简单文本标签和高分辨率之间的差距,提出了一种多级描述生成方法,该方法自动提供丰富的信息,可以引导模型学习场景和对象之间的上下文关联。随着这两种设计的协同作用,本文模型在多个基准上都取得了优异的成绩。通过将本文模型与各种 LMM 进行比较,包括 GPT4V,本文模型通过关注文本信息并捕获图像中的精细细节来展示图像字幕的良好性能;它改进的输入分辨率也可以在具有密集文本的文档图像中取得显着的性能

TextMonkey

在这里插入图片描述

贡献

  1. 增强跨窗口关系。采用 Shfited Window Attention 在扩展输入分辨率的同时成功合并跨窗口连接。在移位窗口注意机制中引入了零初始化,使模型能够避免对早期训练进行剧烈修改
  2. token 压缩。因为放大分辨率会导致一些冗余标记。通过使用相似性作为标准,能够找到作为 token resamper 查询的重要 token。这个模块不仅减少了 token 的长度,而且提高了模型的性能。此外,与使用随机查询相比,它显着提高了性能。
  3. 支持文本接地。本文扩展了我们的范围,以包括基于文本的问答之外的任务,包括阅读文本、文本发现和文本接地。此外,将位置信息合并到答案中可以提高模型的可解释性。TextMonkey还可以进行微调,以了解屏幕镜头点击的命令

方法

在这里插入图片描述

首先使用滑动窗口模块将输入图像划分为不重叠的 patch,每个 patch 的大小为 448x448 像素。这些 patch 进一步细分为 14x14 像素的更小的patch ,每个 patch 都被视为一个 token。利用预训练的 CLIP 模型,然后分别在每个窗口 patch 上处理这些 token。为了建立各个窗口 patch 之间的连接,在 Transformer 块之间以一定间隔集成移位窗口注意力(Shifted Window Attention)。为了生成分层表示,输入图像的大小被调整为 448x448,并输入CLIP提取全局特征。这个全局特征以及来自子图像的特征,然后由共享图像重采样器处理以与语言域对齐。然后,通过压缩标记的长度,使用 Token Resampler 进一步最小化语言空间中的冗余。最终,这些处理后的特征与输入问题相结合,由大型语言模型 (LLM) 分析以产生所需的答案。

移位窗口注意(Shifted Window Attention)

有研究强调了输入分辨率对文档理解重要性。为了提高训练效率,有写方法采用了滑动窗口技术来提高图像分辨率,但这种策略可能会导致文档分析中连接文本的碎片化,从而破坏语义的连续性,
为了缓解上述问题,本文采用了移位窗口注意来增强 CLIP 的视觉处理能力。具体的,本文将图像分割成不重叠的窗口,在每个窗口内分别使用 CLIP,本身该结构不考虑跨窗口的关系。为了合并不同窗口之间的交互并增强图像的上下文理解,所以采用了移位窗口注意力机制。如 Swin Transformer ,滑动窗口向左上角方向循环移动,从而产生新的窗口。通过掩码机制进行自注意力计算,将自注意力计算限制在新的窗口内。
为了实现更平滑的训练初始化,本文通过从零初始化开始学习来对移位窗口注意力进行修改,避免了初始阶段早期特征的过度转换,通过将 MLP 中的常规初始化修改为零初始化,以实现更平滑的训练。根据 LoRA,两个线性层,一个使用随机高斯初始化,另一个使用零初始化。这种方法确保图像编码器的参数在初始阶段保持稳定,便于更平滑的训练。

图像重采样器(Image Resampler)

为了最初减少图像特征的冗余,本文在每个窗口上使用 Qwen-VL 的图像重采样器。该模块使用一组可训练参数作为 query,并且利用来自视觉编码器的图像特征作为交叉注意力的 key 和 value。这个过程有助于将视觉特征序列压缩为 256 的固定长度。此外,为了保持对细粒度图像理解至关重要的位置信息,将二维绝对位置编码集成到交叉注意机制的 query-key 中。

Token Resampler

随着分辨率的增加,使用滑动窗口机制,token 的数量也随着增加。然而,由于某些预研模型的输入长度和训练时间的限制,有必要去减少 token。对于自然语言,重复的语言元素是冗余信息。假设通过扩展图像的分辨率,将存在冗余视觉信息。本文首先计算了图像 token 的相似性:在图像重采样器之后随机选择20个有序特征,并使用余弦相似度得出成对的相似性,可以观察到许多图像 token 表现出多个相似标记,如下图左所示。然后,本文定量比较了不同分辨率的 token 的冗余,如下图右所示。根据经验,选择阈值 0.8 作为相似阈值。在 448、896 和 1334分辨率下,分别观察到 68/256(26.6%)、571/1024(55.8%)和1373/2304(59.5%)的冗余 token。随着分辨率的增加,重复 token 的占比越高。可以观察到,某些 token 是比较独特的,并且缺乏相似的对应 token,例如途中的第五个 token,这表明这个 token 是不同的。假设这些 token 携带关键和独特的信息,利用相似度作为度量来识别显著 token。
在这里插入图片描述
因此,本文提出 token 重采样来压缩冗余 token,如下如所示。本文来利用token 过滤算法来选择最有价值的 token。为了避免直接丢弃其他 token 造成的信息损失,利用重要的 token 作为 query,并使用交叉注意力机制进一步融合所有特征。除此之外,与随机查询相比还显著提升了性能。
在这里插入图片描述

位置相关任务(Position-Related Task)

为了缓解 LLM 的幻觉问题(可能产生与所提供的图像无关的错误相应),本文旨在增强 LLM 在回复的时候可以分析和结合视觉信息的能力。本文对现有的问答数据集进行了修改:将答案的位置信息集成到答案本身中,为了保持直接对话的原始能力,还保留了原始的问答任务。
为了更好地感知文本的空间位置,需要模型具有很强的空间理解。基于此,添加了额外的训练任务来改进模型对文本位置的感知,例如文本定位和阅读文本,比如下表中的任务。为了保证文本和位置数据之间的强联系,我们严格地保持他们地对齐,确保文本信息总是出现在任何相关地位置细节之前。

在这里插入图片描述
为了标准化不同比率地图像,使用 (0,1000) 的尺度来表示位置信息。因此在分辨率为 HxW 的图像中,文本坐标 (x, y) 将归一化为 [x/H*1000] , y 也一样。

损失函数

由于 TextMonkey 被训练来预测其他 LLM 等下一个标记,它只需要在训练时最大化损失的可能性。

L = max ⁡ ∑ i = 1 L log ⁡ P ( s i ~ ∣ I , Q , s 1 : i ) L = \max \sum_{i=1} ^ L \log P(\tilde{s_i}| I, Q,s_{1:i}) L=maxi=1LlogP(si~I,Q,s1:i)

实验

数据集

在这里插入图片描述

为了进一步增强模型处理结构化文本的能力,本文使用结构化数据在 TextMonkey 上微调一个 epoch 以增强其结构化能力,从而产生 TextMonkey†。微调数据主要由前一阶段的 5% 数据以及部分结构化数据组成,包括文档、表格和图表。结构化数据图像还来自公开可用的数据集,并使用它们的结构信息生成。因此,在结构化数据中总共有 55.7k 的数据。

比较

在这里插入图片描述

在这里插入图片描述

可视化

在这里插入图片描述
图表结构化

在这里插入图片描述
APP Agent 使用 Text-Monkey 单击和滑动图形用户界面
在这里插入图片描述

结论

本文为了解决大模型对于文档图像的分辨率问题,使用了滑动窗口并且采用了零初始化的移位窗口注意力来对多窗口建立关系。为了解决视觉 token 的冗余,提出使用 token 重采样来有效减少 token 的数量。同时针对大模型容易出现的幻觉问题,加入了面向文本的任务,增强模型对空间关系的感知和理解。

局限性:由于公共数据集大部分是英文的,针对中文的处理能力稍弱。而且对于分辨率大的图像,与现有的OCR相比,识别效果仍然不好,会出现重复、漏识别等问题。

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

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

相关文章

云计算探索-如何在服务器上配置RAID(附模拟器)

一,引言 RAID(Redundant Array of Independent Disks)是一种将多个物理硬盘组合成一个逻辑单元的技术,旨在提升数据存取速度、增大存储容量以及提高数据可靠性。在服务器环境中配置RAID尤其重要,它不仅能够应对高并发访…

实景三维技术:开启自然资源管理的新篇章

随着科技的不断进步,实景三维技术已经在多个领域得到了广泛的应用。而在自然资源管理领域,实景三维技术更是发挥着越来越重要的作用。本文将介绍实景三维在自然资源管理领域的应用,探讨其带来的优势和变革。一、什么是实景三维技术&#xff1…

MHA高可用-解决MySQL主从复制的单点问题

目录 一、MHA的介绍 1.什么是 MHA 2.MHA 的组成 2.1 MHA Node(数据节点) 2.2 MHA Manager(管理节点) 3.MHA 的特点 4. MHA工作原理总结如下: 二、搭建 MySQL MHA 实验环境 …

文献阅读:使用 CellChat 推理和分析细胞-细胞通信

文献介绍 「文献题目」 Inference and analysis of cell-cell communication using CellChat 「研究团队」 聂青(加利福尼亚大学欧文分校) 「发表时间」 2021-02-17 「发表期刊」 Nature Communications 「影响因子」 16.6 「DOI」 10.1038/s41467-0…

DevSecOps安全工具链介绍

目录 一、概述 二、安全工具链在平台中的定位 2.1 概述 2.2 分层定位 2.2.1 不同阶段的安全工具 2.2.2 安全工具金字塔 2.3 安全流水线集成概览 2.3.1 概述 2.3.2 标准流水线集成安全工具链概览图 三、安全工具链分类 3.1 概述 3.2 威胁建模类 3.2.1 威胁建模的概念…

47 vue 常见的几种模型视图不同步的问题

前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …

53 v-bind 和 v-model 的实现和区别

前言 这个主要的来源是 偶尔的情况下 出现的问题 就比如是 el-select 中选择组件之后, 视图不回显, 然后 model 不更新等等 这个 其实就是 vue 中 视图 -> 模型 的数据同步, 我们通常意义上的处理一般是通过 模型 -> 数据 的数据同步, 比如 我们代码里面更新了 model.…

正多边形拓扑与泛函

(原创:Daode3056) 也许,关于“拓扑”,“泛函”几本书上的内容与实例都是大同小异,总是那么点内容,数学要开拓一些新领域与新内容才能满足不断发展的社会与工业各种需要。本文就以人工智能生成对…

鸿蒙OS开发实例:【ArkTS 实现MQTT协议】

介绍 MQTT是物联网中的一种协议,在HarmonyOS API9平台,解决方案以C库移植为实现方案。 遥遥领先的平台,使用MQTT怎能不遥遥领先呢! 新年快乐,本篇将带领你手把手实现HarmonyOS ArkTS语言的MQTT协议。 准备 阅读…

阿里云通用算力型u1云服务器配置性能评测及价格参考

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

如何使用极狐GitLab 自定义 Pages 根域名

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了极狐GitLab Pages …

JS实现正则匹配文本中的URL地址

如何利用JS正则表达式,提取文本中的URL地址呢? 目录 一、程序代码 二、运行结果 一、程序代码 function extractUrls(text) {var urlRegex /(https?:\/\/[^\s])/g;return text.match(urlRegex); }var text "3.02 复制打开抖音,看…

YOLOV8逐步分解(3)_trainer训练之模型加载

yolov8逐步分解(1)--默认参数&超参配置文件加载 yolov8逐步分解(2)_DetectionTrainer类初始化过程 接上2篇文章,继续讲解yolov8训练过程中的模型加载过程。 使用默认参数完成训练器trainer的初始化后,执行训练函数train()开始YOLOV8的训练。 1. t…

SaaS 电商设计 (十) 记一次 5000kw 商品数据ES迁移 (详细的集群搭建以及线上灰度过程设计)

目录 一.背景二.技术目标三.技术方案3.1 整体流程3.2 ES 切换前:完成整体新集群的搭建.i:拓扑结构设计ii: 如何选择整体的 **ES** 集群配置. 3.3 **ES** 版本切换中3.3.1 多client版本兼容3.3.2 Router的设计 3.4 ES 切换后3.5 开箱即用 四.总结 专栏系列 -SaaS 电商设计 (一) …

每日面经分享(pytest装饰器)

pytest装饰器 a. pytest.mark.parametrize:这个装饰器用于标记测试函数,并为其提供多组参数进行参数化测试。可以使用元组、列表、字典等形式来指定参数组合。 import pytestpytest.mark.parametrize("num1, num2, expected", [(2, 2, 4), (5…

2024 3.23~3.29周报

上周工作 SVInvNet论文研读 本周计划 加入DenseNet,修改网络架构,跑代码 总结 DenseNet 密集块:DenseNet将网络分成多个密集块(Dense Block)。在每个密集块内,每一层都连接到前面所有的层。这种跳跃连接有助于解…

【Laravel】07 快速套用一个网站模板

【Laravel】07 快速套用一个网站模板 1. 新增post表2.补充 :生成Model、Controller、迁移文件3. 使用php artisan tinker4. 网站模板下载 课程地址 1. 新增post表 在Model中创建Post (base) ➜ example-app php artisan make:model Post Model created successfu…

手机有线投屏到直播姬pc端教程

1 打开哔哩哔哩直播姬客户端并登录(按下图进行操作) 2 手机用usb数据线连接电脑(若跳出安装驱动的弹窗点击确定或允许),usb的连接方式为仅充电(手机差异要求为仅充电),不同品牌手机要求可能不一样,根据实际的来 3 在投屏过程中不要更改usb的连接方式(不然电脑会死机需要重启) …

verilog中的testbench语句——display,fopen,fread,fwrite——更新中

一、fopen bmp_file_read $fopen("../pic/picture.bmp","rb"); 要注意这类操作文件的函数,在vivado2018自带的仿真软件里,不综合直接仿真,它的当前文件夹如图所示。 一、fwrite $fwrite(bmp_file_write,"%c"…

LeetCode - 岛屿数量

200. 岛屿数量 第一种写法&#xff1a;遍历岛屿&#xff0c;当遇到岛屿的时候&#xff0c;就开始进行深搜&#xff0c;遇到岛屿就将岛屿从1变为0。 class Solution { public:int dx[4] {0,0,1,-1};int dy[4] {1,-1,0,0};void dfs(int i, int j, vector<vector<char>…