【多模态】42、LLaVA-UHD | 支持任意纵横比和大分辨率图像输入的 LLaVA

在这里插入图片描述

论文:LLaVA-UHD: an LMM Perceiving Any Aspect Ratio and High-Resolution Images

代码:https://github.com/thunlp/LLaVA-UHD

出处:清华 | 新加坡国立大学 | 中国科学院大学

一、背景

现有的很多 LMM 都是将图像处理成固定的纵横比(如1:1)和较低的分辨率(如 224x224),这会导致形状变化且会缺失很多信息,也会引起模型的幻觉问题(如定位错误和误判),因为模型很难从一个模糊的低分辨率的图像中提取到精确的信息

为了实现对任意纵横比和大分辨率的支持,主要面临两个困难:

  • 自适应性:因为常用的 visual encoder 都是在固定的分辨率上训练的,难以处理不同的纵横比和不同的分辨率,简单的插值会导致图像和训练图像有较大的不同,影响模型效果
  • 高效性:直接对大分辨率的图像使用 transformer 进行编码的话计算量是图像尺寸的平方,计算量很大,而且大分辨率的图像经过处理就会有更多的 visual tokens(4096 tokens for 896×896 images in ViT-L/14)

GPT-4V 视觉编码的问题:切片重复导致无法很好的计数

不当的视觉编码可能会导致离谱的问题,比如 GPT-4V 就不能很好的识别物体的数量,作者发现这种问题源于其对高分辨率图像的视觉编码策略

作者假设最可能的原因是,当图像分辨率不能被512整除时,GPT-4V的切片之间存在重叠。如图1(e)所示,当两个切片之间存在重叠区域时,该区域内物体数量会加倍,而当四个切片重叠时,该区域内物体数量会四倍化。

在这里插入图片描述

为什么呢:

为了验证上面的假设,作者通过连续改变图像分辨率来探测GPT-4V的行为。将图2(a)中的图像按比例调整为不同的分辨率,并以相同的方式询问物体数量。对于每个分辨率,重复查询30次以提高可靠性。

实验结果:如图2(b),模型响应随着图像分辨率显著变化,表现出明显的阶段变化:

  • 阶段1:由于没有图像切片,大多数答案是正确的。
  • 阶段2:答案12占主导地位,可能是由于每个切片中的不完整圆所致。
  • 阶段3:显示混合答案9、12和16

LLaVA-1.5 视觉编码问题:将不同纵横比的图像填充到正方形

这种编码方法对于非正方形图像来说会造成计算资源的浪费。例如,一个1:4的图像在填充为正方形后只有25%的有效计算。

为了量化这种影响,作者训练了一个未填充版本的LLaVA-1.5,通过使用二维插值将ViT位置嵌入适配到输入图像的纵横比。生成的图像标记数量保持不超过LLaVA-1.5中的576个(见第3.1节)。从表2中的实验结果可以看出,无需填充的自适应纵横比编码提高了LLaVA-1.5的性能。

另一个填充问题是,模型本质上无法知道这些类似填充的像素是来自于图像预处理还是原始输入图像的一部分。为了展示这个问题,作者合成了一系列如图3(右)所示的输入图像,其中各种纵横比的蓝色/绿色/红色矩形被灰色(即LLaVA-1.5填充RGB值的颜色)包围。

在这里插入图片描述

给定输入图像,当提示:“最左/右/上/下区域是什么颜色?”从图3(左)的结果中可以看出,LLaVA-1.5忽略了灰色输入区域(认为它们是填充),并很好的响应中央矩形的颜色。

这些实验结果表明,自适应纵横比编码在无需填充的情况下显著提高了LLaVA-1.5的性能,同时也揭示了填充方法在某些情况下可能导致模型误解输入数据的问题。

为了解决这些挑战,作者提出了LLaVA-UHD,能够高效感知任意纵横比和高分辨率图像的大型多模态模型。

该模型有三个关键组件:

  • (1) LLaVA-UHD 的核心是一种图像模块化策略,它将原始分辨率的图像划分为较小的可变大小的切片,以实现高效且可扩展的编码。

    与最近将图像调整为几个固定纵横比和分辨率的研究[24, 23]相比,LLaVA-UHD中的可变大小切片能够完全适应原始分辨率图像,无需填充或形状扭曲调整。

    这类似于使用水滴而非冰块来填满不同大小的杯子,从而具有更好的适应性。这一策略保证了视觉编码器预训练设置的微小偏离,以最大限度地保留其能力

  • (2) 视觉标记通过压缩层被压缩到适中的长度,大大减少了对大型语言模型(LLM)的计算需求

  • (3) 压缩后的切片标记按照空间模式组织,以告知LLM图像中切片的位置。

作者基于 LLaVA-1.5 336×336 构建的模型支持 672×1088 分辨率图像,只需要 LLaVA-1.5 的 94%的推理计算,并在TextVQA上提升了6.4的准确率,在POPE上提升了3.2的准确率。这一优势在更极端的纵横比下更加明显。

二、方法

在这里插入图片描述

LLaVA-UHD,能够高效感知任意纵横比和高分辨率图像的大型多模态模型。如图4所示,该模型包括三个关键组件:

  • (1) 一种图像模块化策略,将原始分辨率的图像划分为较小的可变大小切片,以实现高效且可扩展的编码
  • (2) 一个压缩模块,进一步压缩来自视觉编码器的图像标记
  • (3) 一个空间组合方案,用于组织切片标记以供大型语言模型(LLM)使用。

2.1 模块化视觉编码

为了处理具有不同纵横比的高分辨率图像,一个简单的方法是将ViT的位置嵌入插值到目标形状,以整体直接编码。然而,由于二次计算成本和来自分布外问题的性能下降,这种方法是次优的。

本文提出了一种模块化视觉编码策略。基本思想是将原始分辨率的图像划分为较小的可变大小切片,每个切片的形状不会偏离ViT标准预训练设置太远。通过可变大小切片,LLaVA-UHD可以在不填充或形状扭曲调整的情况下,实现对原始分辨率图像的完全适应。

1、高分辨率图像切分规则

确定图像的切分规则能够对高分辨率图像进行更合理的切分,给定一个图像分辨率为 ( W I , H I ) (W_I, H_I) (WI,HI),ViT 预训练使用的分辨率为 ( W v , H v ) (W_v, H_v) (Wv,Hv)

  • 首先:确定理想的切片数量 N, N = ⌈ W I × H I W v × H v ⌉ N = \left\lceil \frac{W_I \times H_I}{W_v \times H_v} \right\rceil N=Wv×HvWI×HI

  • 然后,将 N 因式分解成 m 列和 n 行

    在这里插入图片描述

  • 为了选择最合适的切分行列,作者定义了一个 score function 来衡量其和标准 ViT 的偏差,得分 S 越高说明偏离越小,更好,所以最优的 m 和 n 如下:

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

但在实际操作中,特别是对于质数,可能只有少数几种因式分解方案可供选择,这会导致图像的极端划分。例如,当 ( N = 7 ) 时,仅有两种极端划分选择:1:7 和 7:1。为了解决这个问题,除了理想的切片数量 ( N ) 之外,还允许对切片数量进行适度调整,即 ( N - 1 )、( N + 1 ),以便包含更多合理的划分选择。因此,最终的划分由方程2给出,其中 C ˉ = C N − 1 ∪ C N ∪ C N + 1 \bar{C} = C_{N-1} \cup C_N \cup C_{N+1} Cˉ=CN1CNCN+1

2、对任意纵横比切片进行编码

很多 LMM 都使用的固定的分辨率来对切片图像编码,固定分辨率无法完全适应图像的原生分辨率,只能使用几种预定义的固定形状切片。
静态切片分辨率会导致填充(padding)或形状变形的调整,这会影响性能、效率,甚至正确性

所以本文提出使用任意纵横比切片编码:

  • 按照划分策略给出的纵横比对图像切片进行编码,而不是使用固定分辨率。
  • 按比例调整原始图像大小,使其符合划分策略的纵横比,目标是让 resize 后的图像 patch number 和 vit 训练的时候一样。然后,作者将预训练的 1D position embedding sequence reshape 到 2D 形式,如果预训练预算 budget ( M ) 是 ( q × q q \times q q×q ),那么位置嵌入 ( P ) 的维度就是 ( q × q × l q \times q \times l q×q×l ),其中 ( l l l ) 是位置嵌入的维度。
  • 二维插值:对重塑后的二维位置嵌入进行插值,以适应划分策略给定的切片分辨率,用于视觉编码。

2.2 压缩层

高分辨率图像需要大模型处理显著更多的视觉标记,这占据了计算的主要部分。例如,一张分辨率为672 × 1008的图像将为LLaVA-1.5 [27]生成3,456个视觉标记。为了解决这个问题,作者使用共享的感知器重采样层[3]对每个图像切片的视觉标记进行压缩。

视觉编码器输出的图像标记通过跨注意力机制使用一组查询向量被重采样到更少的数量(在我们的实验中从576减少到64)

与基于MLP的视觉投影方法[27, 26, 39]相比,感知器重采样器无论图像分辨率如何,都能保持固定且可承受数量的视觉标记,因此更适合高分辨率图像理解。

LLaVA-UHD能够以比LLaVA-1.5编码336 × 336分辨率图像更低的计算成本来编码672 × 1008分辨率图像。

2.3 空间组合不同的图像切片

由于图像分区在不同图像之间是动态变化的,因此有必要让大模型(LLM)了解图像切片的空间组织。受[6]的启发,作者设计了一种空间模式,通过两个特殊标记来传达图像切片的相对位置。

作者使用 “,” 来分隔一行中的切片表示,并使用 “\n” 来分隔不同的行。这种简单的模式可以有效地传达动态分区,从而产生良好的性能。

三、效果

3.1 模型框架

作者参考的是是 LLaVA-v1.5 的框架,使用 CLIP-ViT-L/14 作为 visual encoder(336x336),使用 Vicuna-13B 作为 LLM,使用 shared visual resampler [5] 作为映射器

在编码图像切片的过程中,可以在半个patch内进行小幅度的重塑(最多7-8个像素),以便将切片适应到patch中。重采样器中可学习的查询数量设置为64。对于被分割为N个子patch的图像,输入到LLM中的视觉标记数量为64 × (N + 1),其中包含低分辨率概览图像的标记。在实验中,将最大N设置为6,这支持最高分辨率为672 × 1008的图像。按照LLaVA-1.5的方法,进行以下两阶段训练。

  • 阶段1:预训练细节。在这个阶段,仅调整感知器重采样器,使用CC-595K数据集[28]进行1个epoch的训练,使用AdamW优化器,学习率为1e-3,并采用余弦学习率调度策略。全局批量大小设置为256。该阶段的训练成本约为使用8×A100 GPU进行5小时。

  • 阶段2:指令微调细节。在这个阶段,视觉编码器被冻结,微调视觉重采样器和LLM,使用包含LLaVA-Instruct [28]、TextVQA [36]、GQA [18]、OCR-VQA [32]和Visual Genome [19]在内的656K混合数据集[27]。学习率为2e-5,批量大小为128。其他设置与阶段1相同。该阶段的训练约为使用8×A100 GPU进行18小时。

3.2 测评效果

在这里插入图片描述

3.3 消融实验

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Ubuntu编译ffmpeg并添加cmake工程

文章目录 前言前提须知为什么要自己编译 FFmpeg前提软件包与工具的安装编译ffmpeg写CMakeList.txt包含ffmpeg到我们项目中 总结 前言 FFmpeg 是一个领先的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创造的内容。FFmpeg 包…

设计模式11-原型模式

设计模式11-原型模式 写在前面对象创建模式典型模式原型模式动机结构代码推导应用特点要点总结 原型模式与工厂方法模式对比工厂方法模式原型模式什么时候用什么模式 写在前面 对象创建模式 通过对象创建模式绕开动态内存分配来避免创建过程中所导致的耦合过紧的问题。从而支…

数学建模--国赛备赛---TOPSIS算法

目录 1.准备部分 1.1提交材料 1.2MD5码相关要求 2.TOPSIS算法 2.1算法概述 2.2基本概念 2.3算法核心思想 2.4拓展思考 3.适用赛题 3.1适用赛题说明 3.2适用赛题举例 4.赛题分析 4.1指标的分类 4.2数据预处理 4.2.1区间型属性的变换 4.2.2向量规范化 4.3数据加…

基于 Three.js 的 3D 模型加载优化

作者:来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目,从用户打开页面到最终模型的渲染需要经过多个流程,加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失。为了提升首屏加载的转化率,需要尽可能…

IDEA的断点调试(Debug)

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …

【内网安全】横向移动-Kerberos-SPN-WinRM-RDP

目录 环境介绍与横向移动前置域横向移动-WinRM-WinRS移动条件: 步骤0、攻击机开启winrm服务:1.CS探针5985端口:2.连接目标主机并执行命令:3.上线CS&MSF:4.CS内置横向移动-winrm 域横向移动-RDP简介与条件RDP横向移动连接的三种…

TCP状态转换详解

1.什么是TCP的状态转换 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。在 TCP 连接的生命周期中,连接的状态会随着不同阶段的通信而发生变化,这些变化被称为状…

嵌入式Linux入门知识点汇总-启动过程、设备树、设备框架、锁

目录 1.BootLoader启动过程? 引导加载程序(Bootloader) 补充u-boot的理解 通用的bootloader 2.系统调用过程? 3.设备驱动模型的三个重要成员? 4.驱动和设备注册是否存在先后顺序? 5.framebuffer机制? 6.字符设备和块设备的区别并分别举例? 1.字符设备 2.块设备…

SVN 服务 安装部署 Docker(compose) 方式

通过 dockerhub 或者 命令行运行 : docker search svn 查看 svn 的镜像 如命令行: [rootSGP ~]# docker search svn NAME DESCRIPTION STARS OFFICIAL AUTOMATED garethflower…

景联文科技构建高质量心理学系知识图谱,助力大模型成为心理学科专家

心理大模型正处于快速发展阶段,在临床应用、教育、研究等多个领域展现出巨大潜力。 心理学系知识图谱能够丰富心理大模型的认知能力,使其在处理心理学相关问题时更加精确、可靠和有洞察力。这对于提高心理健康服务的质量和效率、促进科学研究以及优化教育…

【Django】网上蛋糕商城后台-订单管理

概念 前面通过多篇文章以完全实现了用户在网上蛋糕商城平台上的所有功能和操作,从本文开始,实现网站的后台管理功能的介绍和操作。 导入静态资源 在static文件夹下,创建admin文件夹,在该文件夹下导入静态资源 在templates文件夹…

cs224w笔记(p5)

链接预测任务的两种类型:随机缺失边;随时间演化边。 第一种假设可以以蛋白质之间的交互作用举例,缺失的是研究者还没有发现的交互作用。 第二种假设可以以社交网络举例,随着时间流转,人们认识更多朋友。 基于相似性进…

zookeeper+kafka消息队列集群部署

一.消息队列 1、什么是消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(MessageQueue)是一种在软件系统中用…

1、springboot3 vue3开发平台-后端-项目构建

文章目录 1. 创建项目1.1 前置环境条件1.2 项目创建 2. 模块配置2.1 父工程配置概述2.2 配置启动模块2.3 父工程相关依赖管理 1. 创建项目 1.1 前置环境条件 idea2023, jdk17 1.2 项目创建 创建父工程并删除不需要的文件目录: 右键父工程依次创建其他模块 最…

Windows 、Linux、MacOS 进程管理机制

本心、输入输出、结果 文章目录 Windows 、Linux、MacOS 进程管理机制前言Windows 进程管理机制Linux 进程管理macOS 进程管理内存不够了,几个操作系统如何处理Windows 、Linux、MacOS 进程管理机制 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 …

【Qt】窗口

文章目录 QMainWindow菜单栏工具栏状态栏浮动窗口对话框自定义对话框Qt内置对话框QMessageBox QMainWindow Qt中的主窗口以QMainWindow表示,其总体结构如下: 菜单栏 菜单栏MenuBar,可包含多个菜单Menu,每个菜单也可以包含多个菜…

03 Git的基本使用

第3章:Git的基本使用 一、创建版本仓库 一)TortoiseGit ​ 选择项目地址,右键,创建版本库 ​ 初始化git init版本库 ​ 查看是否生成.git文件(隐藏文件) 二)Git ​ 选择项目地址&#xff0c…

【LeetCode】相同的树

目录 一、题目二、解法完整代码 一、题目 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3],…

FastGPT 知识库搜索测试功能解析

目录 一、代码解析 1.1 searchTest.ts 1.2 controller.ts 本文接上一篇文章FastGPT 知识库搜索测试功能解析 对具体代码进行解析。 一、代码解析 FastGPT 知识库的搜索测试功能主要涉及两个文件,分别是 searchTest.ts 和 controller.ts 文件,下面分…

运行springboot项目报错:java: java.lang.NoSuchFieldError: members_field

项目场景: 在idea中运行从git上拉取的基于springboot框架的项目运行报错 问题描述 运行spingboot项目报错 java: java.lang.NoSuchFieldError: members_field原因分析: 检查你所使用的java版本(我这里是在idea上运行的,可以很直…