【多模态】30、Monkey | 支持大尺寸图像输入的多任务多模态大模型

news2024/11/19 5:45:36

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 Enhancing Input Resolution
      • 2.2 Multi-level Description Generation
      • 2.3 Multi-task Training
    • 三、效果
      • 3.1 Image Caption
      • 3.2 General VQA
      • 3.3 Scene Text-centric VQA
      • 3.4 Document-oriented VQA
      • 3.5 消融实验
      • 3.6 可视化

论文:Monkey : Image Resolution and Text Label Are Important Things for Large Multi-modal Models

代码:https://github.com/Yuliang-Liu/Monkey

出处:华中科大

时间:2024.02

贡献:

  • 模型支持大于 1344x896 分辨率的输入,无需预训练。比在大型语言模型(LMMs)中常用的 448x448 分辨率大了很多,能更好的识别和理解小目标或密集目标或密集文本
  • 模型有很好的上下文关联。作者引入了一种多级描述生成的方法,该方法能够提高模型捕捉不同目标之间关系的能力
  • Monkey 模型在多个测评数据集上都有很好的表现。作者在 18 个数据集上进行了测试,Monkey 模型在图像标题生成、常规视觉问题问答、以场景文本为中心的视觉问答、以文档为导向的视觉问答等任务上的表现都很好

在这里插入图片描述

一、背景

LMM 模型能够处理多种不同类型的数据,包括图像、文本、语音等不同模态,对于图像-文本多模态模型,LMM 模型的训练中,图片的分辨率越高,模型能够检测或捕捉到的视觉细节就越丰富,对目标的识别,目标间关系的捕捉,图像中上下文信息的捕捉就更有利,但对于模型来说,很难处理多种不同的分辨率或不同质量的图像,尤其在复杂的场景中更难。

现有的解决方案包括使用具有更大输入分辨率的预训练视觉模块(如LLaVA1.5 [29]),并通过逐渐增加训练过程中的分辨率(如Qwen-VL [3]、PaLI-3 [10]和PaLI-X [9])

但这些方法需要大量的训练资源,并且仍然难以很好的处理更大图像尺寸的图像

为了充分利用大输入分辨率的优势,很重要的一点是图像要有很详细的相关描述,这可以增强模型对图像-文本关系的理解,但是像COYO [6] 和 LAION [45] 通常只有简单的标题,难以满足需求。

Monkey 是什么:一个资源高效的方法,用于提升 LMM 的输入分辨率

  • 一般的方法:直接对 ViT 进行插值来增加输入分辨率,但这样做效率不高
  • Monkey 使用的方法:将大分辨率的输入图片使用滑动窗口切分成小的 patches,每个 patch 独立的输入静态(不训练)的 visual encoder,编码器经过 LoRA(Low-Rank Adaptation)调整,和一个可训练的视觉重采样器增强,增强了其功能。
  • 这种方式利用了现有的大型多模态模型,避免了从头开始进行广泛预训练的需要。通常这些编码器是在较小的分辨率(例如448×448)上训练的,从头开始训练成本很高。通过将每个图像块调整到编码器支持的分辨率,可以维持原有的训练数据分布。
  • 为了更好的利用大分辨率输入,作者还提出了一个自动的多级描述生成的方法,这个方法能够无缝结合多个生成器的简介,来为图片生成高质量、丰富的标题数据,利用的模型如下,作者使用这些模型生成了全面且分层的标题,能够捕捉到广泛的视觉细节:
    • BLIP2:对图像-文本理解很细腻
    • PPOCR:强大的 OCR 识别模型
    • GRIT:擅长粒度化的图像-文本对齐
    • SAM:用于语义对齐的动态模型
    • ChatGPT:有很好的上下文理解和语言生成能力

Vision Transformer (ViT) 使用了 Transformer 架构来处理图像数据。在深度学习中,提升模型处理的图像分辨率通常可以帮助模型捕捉到更细粒度的特征,这在某些任务中可能会提高模型的性能。然而,直接在高分辨率的图像上训练模型会大大增加计算成本和内存需求。

为了解决这个问题,通常会采取以下几种方法之一:

  • 渐进式训练:这种方法首先在低分辨率的图像上训练模型,然后逐步增加图像的分辨率。这样可以在早期阶段以较低的计算成本训练模型,并在模型逐渐适应更高分辨率的图像时增加细节。

  • 插值:在某些情况下,研究人员可能会选择在预训练的模型基础上,对输入图像进行插值以提高其分辨率。这样做的目的是利用模型在低分辨率图像上学到的知识,并通过插值来适应更高分辨率的图像。插值方法可以是最近邻插值、双线性插值、双三次插值等。

  • 多尺度训练:这种方法同时使用不同分辨率的图像来训练模型。模型在从不同分辨率的图像中学习特征时,可以更好地泛化到新的、更高分辨率的图像上。

对于 Vision Transformer (ViT) 而言,由于其结构是将图像分割成多个小块(patch)然后输入到 Transformer 中,因此提升分辨率时需要考虑如何调整这些小块的大小和数量。通过对 ViT 进行插值,可以在不显著改变模型架构的情况下,适应更高分辨率的图像,这是一种相对简单且有效的方法来提升模型处理高分辨率图像的能力。


二、方法

在这里插入图片描述
Monkey 模型的结构如图 2 所示,输入的图片被分成了 patches,这些 patches 将被输入 ViT,ViT 是共享参数的,经过 ViT 后得到特征,随后,局部和全局特征通过共享重采样器和大型语言模型(Large Language Model,简称LLM)进行处理,从而生成所需的答案。

2.1 Enhancing Input Resolution

  • 首先,输入一个图片,HxWx3
  • 接着,使用滑窗来进行切分(滑窗大小为 KaTeX parse error: Undefined control sequence: \time at position 5: H_v \̲t̲i̲m̲e̲ ̲W_v,滑窗大小的宽高也就是 original LMM 所支持的宽高大小),切分成小的图像块儿
  • 然后,将切分后的图像块儿输入共享参数的 encoder,每个 encoder 的输入都是不同的图像块儿,此外,会给每个 encoder 搭配一个 LoRA 来适应每个 encoder 对不同位置的图像块儿的学习,有助于模型深入理解空间和上下文的关系,且没有多余引入参数。为了保证整个输入图像的结构信息,作者将原图还会 resize 到 KaTeX parse error: Undefined control sequence: \time at position 5: H_v \̲t̲i̲m̲e̲ ̲W_v 的大小,所以,作者会将独立的图像块儿和 resize 后的 global image 都经过 encoder 编码
  • 再后,经过 shared resampler ,这里的 resampler 是源于 Flamingo,主要有两个作用,一个是组合所有的 visual information,另一个是捕捉更高级的语义视觉表达,映射到 language feature space。resampler 是通过 cross-attention module 实现的,其中可训练的 embedding 特征是 query,image features 是 key。
  • 最后,将 shared resampler 的输出和文本问题输入一起输入大语言模型 LLM

2.2 Multi-level Description Generation

之前的方法如 LLaVa、QWen-VL 都是使用 LAION 和 COYO 或 CC3M 来训练,但这些数据的文本标签非常简单,缺失了对图像的细致的描述,所以,尽管使用了高分辨率的训练数据,确没有挖掘出图像的更细致的信息

基于此,本文提出了一种生成多层描述的方法,能够生成丰富且高质量的描述,作者使用了多个模型来实现:

  • BLIP2:能够为 image 和 text 的关系提供一个很深入的理解
  • PPOCR:强大的 OCR 识别模型
  • GRIT:擅长粒度化的图像-文本对齐
  • SAM:用于语义对齐的动态模型
  • ChatGPT:有很好的上下文理解和语言生成能力

在这里插入图片描述

整个流程如图 3 所示:

  • 第一步:使用 BLIP2 的 Q-former 来生成 overall caption,同时保留 CC3M 的注释来提供上下文;使用 GRIT 这个 region-to-text 模型,对特定区域、目标生成详细的描述,GRIT 模型能够检测目标同时生成描述, PPOCR 能够从中提取到文本 text 信息;使用 SAM 进行分割,然后使用 BLIP2 来进行描述。
  • 第二步:使用 BLIP2 对 region caption 和 segmentation caption 的结果进行过滤,剔除掉分数匹配较低的 caption
  • 第三步:将 global captions, localized descriptions, text extracts, object details with spatial coordinates 一起送入 ChatGPT 进行微调,让 ChatGPT 生成准确且上下文丰富的图像描述

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

2.3 Multi-task Training

本文模型支持多种不同的任务:

  • image caption: “Generate the captionin English:” for basic captions, “Generate the detailed caption in English:” for more intricate ones
  • 对 image-based 问题的回答: “{question} Answer: {answer}.”
  • 同时处理 text 和 image

本文使用的数据集:

在这里插入图片描述

三、效果

模型实现细节:

  • 作者使用 Vit-BigG [21] 和 LLM from QwenVL [3] 分别作为预训练好的多模态模型来使用
  • 由于 vision encoder 已经训练的很好了,所以作者只做了 instruction-tuning。在 instruction-tuning 时,滑窗的宽高都使用的 448x448 来匹配 Qwen-VL 的 encoder 尺寸
  • 对于所有图像块儿,作者使用的是 resampler 是一样的。可学习的查询 query 与图像的局部特征(patches)进行交互,用于提取重要信息。对于每个 patch,都使用相同的 256 维可学习 query。这些 query 是模型中的参数,可以通过训练来优化。
  • 由于训练时间有限,主要实验使用的是896×896像素大小的图像
  • 对于 LoRA:LoRA 是模型的一部分,用于调整模型的注意力机制和多层感知机(MLP)。在这里,注意力模块的秩设置为16,编码器中MLP的秩设置为32。秩在这里指的是LoRA中用于调整权重的参数数量,它影响模型的复杂度和能力。
  • 模型参数:Monkey 总参数量 9.8B(98亿)
    • 大型语言模型:包含 7.7B(Billion)参数。
    • 重采样模块:包含 0.09B(Million)参数。
    • 编码器:包含 1.9B(Billion)参数。
    • LoRA:包含 0.117B(Billion)参数。

训练细节:

  • 数据:使用 CC3M 数据集中的数据,使用本文方法生成了描述,共 427k image-text pairs
  • 优化器:AdamW
  • 学习率:1e-5,cosine 学习率下降模式
  • batch size:1024
  • 训练时长:40 A800 天 / epoch

3.1 Image Caption

作者使用 Flickr30K 和 TextCaps 作者 benchmark 来测试这个任务

在这里插入图片描述

3.2 General VQA

General visual question answering (VQA)

在这里插入图片描述

3.3 Scene Text-centric VQA

在这里插入图片描述

3.4 Document-oriented VQA

在这里插入图片描述

3.5 消融实验

在这里插入图片描述

在这里插入图片描述

3.6 可视化

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

和其他模型的对比:

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

不同分辨率下识别的效果对比:分辨率越小,错误越多

在这里插入图片描述

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

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

相关文章

【核弹】我的第一款IDEA插件

SuperHotSwap 插件名称叫做:SuperHotSwap(超级热更新) 开发初心:旨在做出一款最便捷的IDEA热更新插件,减少用户操作步骤,提供零配置的可视化操作更新。 为什么要写这个插件: 每次改一下Mappe…

android自定义view仿微信联系人列表

说明:最近碰到一个需求,弄一个类似国家或省份列表,样式参照微信联系人 文件列表: step1:主界面 加载列表数据~\app\src\main\java\com\example\iosdialogdemo\MainActivity.java step2:右侧列表数据排序~\app\src\com\example\io…

物联网应用开发--STM32与新大陆云平台通信(云平台控制开发板上蜂鸣器、LED)

实现目标 1、掌握云平台执行器的创建 2、熟悉STM32 与ESP8266模块之间的通信 3、具体实现目标:(1)创建5个执行器:蜂鸣器,LED1,LED2,ED3,LED4;(2)执行器能对…

VLAN 综合实验

一、实验拓扑 二、实验需求 1.PC1和PC3所在接口为access,属于vlan2; PC2/4/5/6处于同一网段,其中PC2可以访问PC4/5/6; 2.PC5不能访问PC6; 3.PC1/3与PC2/4/5/6不在同一网段; 4.所有PC通过DHCP获取IP地址,且PC1/3可以…

《Python编程从入门到实践》day28

# 昨日知识点回顾 安装Matplotlib 绘制简单的折线图 # 今日知识点学习 15.2.1 修改标签文字和线条粗细 # module backend_interagg has no attribute FigureCanvas. Did you mean: FigureCanvasAgg? # 解决办法:matplotlib切换图形界面显示终端TkAgg。 #…

SpringBoot自动装配(二)

近日,余溺于先贤古哲之文无法自拔。虽未明其中真意,但总觉有理。遂抄录一篇以供诸君品鉴——公孙鞅曰:“臣闻之:‘疑行无名,疑事无功。’君亟定变法之虑,殆无顾天下之议之也。且夫有高人之行者,…

游戏数值策划关卡策划文案策划系统策划及游戏运营干货

1.《游戏新手村》免费电子书 我2007年开始做网络游戏,后面又做过网页游戏和手机游戏。当时市面上关于游戏策划和运营的书籍屈指可数,于是我就想着要不我写一本吧,然后2014年10月开始撰写。关于本书的更多信息可查看这篇文章>> 游戏新手…

45.WEB渗透测试-信息收集-域名、指纹收集(7)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:计算机王-CSDN博客 WEB指纹:Web指纹也叫web应用指纹。由于所使用的工具、技术…

蓝鹏测控:扩大出口,勇拓海外市场

蓝鹏测控自2012年成立以来,始终专注于工业测量仪器的研发、生产与销售。公司坚持经验与创新并存,长期与华北电力大学、河北大学等多所知名院校深度合作,拥有一支技术力量雄厚的研发团队。经过多年的努力,蓝鹏测控已研发出多款具有…

MYSQL中的DQL

语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段 limit 分页参数 条件查询 语法: 查询多个字段:select 字段1,字段2 from表名 查询所有字段&#xff1a…

【计算机毕业设计】基于SSM+Vue的线上旅行信息管理系统【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 设计原则 1.3 论文组织结构 2 系统关键技术 2.1JSP技术 2.2 JAVA技术 2.3 B/S结构 2.4 MYSQL数据库 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3 经济可行性 3.1.4 法律可行性 3.2系统功能分析 3.2.1管理员功能分析 3.2.…

PCie协议之-TLP Header详解(一)

✨前言: 在PCIe通信过程中,事务层数据包(Transaction Layer Packets,简称TLP)扮演着非常重要的角色。TLP用于在设备之间传递数据和控制信息,它们是PCIe的基本信息传输单元。 TLP可分为几个部分&#xff0c…

【平衡二叉树】AVL树(双旋)

🎉博主首页: 有趣的中国人 🎉专栏首页: C进阶 🎉其它专栏: C初阶 | Linux | 初阶数据结构 小伙伴们大家好,本片文章将会讲解AVL树的左双选和右双旋的相关内容。 如果看到最后您觉得这篇文章写…

Qt学习笔记1.3.3QtCore-隐式共享

文章目录 概述隐式共享细节类列表 Qt中的许多c类使用隐式数据共享来最大化资源使用并最小化复制。隐式共享类作为参数传递时既安全又高效,因为只传递指向数据的指针,并且只有当函数写入数据时才会复制数据,即写时复制(copy-on-write)。 概述 …

keepalived双机热备超详细入门介绍

keepalived 一、keepalived入门介绍 1.keepalived简介 2.keepalived服务的三个重要功能 2.1.管理LVS负载均衡软件 2.2.实现对LVS集群节点健康检查功能 2.3.作为系统网络服务的高可用功能 3.keepalived高可用故障切换转移原理 4.keepalived安装及主配置文件介绍 …

[BJDCTF 2020]easy_md5、[HNCTF 2022 Week1]Interesting_include、[GDOUCTF 2023]泄露的伪装

目录 [BJDCTF 2020]easy_md5 ffifdyop [SWPUCTF 2021 新生赛]crypto8 [HNCTF 2022 Week1]Interesting_include php://filter协议 [GDOUCTF 2023]泄露的伪装 [BJDCTF 2020]easy_md5 尝试输入一个1,发现输入的内容会通过get传递但是没有其他回显 观察一下响应…

【经验总结】超算互联网服务器 transformers 加载本地模型

1. 背景 使用 超算互联网 的云服务,不能连接外网,只能把模型下载到本地,再上传上去到云服务。 2. 模型下载 在 模型中 https://huggingface.co/models 找到所需的模型后 点击下载 config.json pytorch_model.bin vocab.txt 3. 上传模型文…

【数据可视化01】matplotlib实例3之数据统计

目录 一、引言二、实例介绍1.百分位数为横条形图2.箱线图定制化3.带有自定义填充颜色的箱线图4.箱线图5.箱线图和小提琴图6.二维数据集的置信椭圆 一、引言 matplotlib库 可以用来创建各种静态、动态、交互式的图形,并广泛应用于数据分析和数据可视化领域。 二、实…

C#中json数据序列化和反序列化的最简单方法(C#对象和字符串的相互转换)

文章目录 将C#对象转换为json字符串Newtonsoft模块的安装用Newtonsoft将对象转换为json字符串 将json字符串转换为C#对象 将C#对象转换为json字符串 本介绍将基于C#中的第三方库Newtonsoft进行,因此将分为Newtonsoft模块的安装和使用两部分。该模块的优势在于只需要…

STL----push,insert,empalce

push_back和emplace_back的区别 #include <iostream> #include <vector>using namespace std; class testDemo { public:testDemo(int n) :num(n) {cout << "构造函数" << endl;}testDemo(const testDemo& other) :num(other.num) {cou…