【多模态】40、ConvLLaVA | 使用 ConvNeXt 为 LLaVA 实现更高分辨率的输入

在这里插入图片描述

论文:ConvLLaVA: Hierarchical Backbones as Visual Encoder for Large Multimodal Models

代码:https://github.com/alibaba/conv-llava

出处:阿里 | 清华

时间:2024.05

一、背景

LMM 在很多任务上都表现出来很好的效果,而 visual encoder 也是其强大能力的基础,且 ViT 的使用居多,但是 ViT 的计算复杂度很高,限制了其在大分辨率图像任务上的使用,因为分辨率越大则 token 越多,输入 LLM 的 token 越多,造成很大的计算量,且很多 LLM 的输入 token 都是受限的

LLava-next、Monkey、Vary 等方法都致力于解决 ViT 的平方复杂度,但他们都没有注意到根本原因—— visual token 的冗余[5,28]

  • [5] An image is worth 1/2 tokens after layer 2: Plug-and-play inference acceleration for large vision-language models
  • [28] Vila: On pre-training for visual language models

层次化视觉骨干网络(resnet、SENet等),是 ViT(视觉Transformer)的对应方案,能够很好地解决由于过多视觉 token 而带来的问题,因为它们具有固有的信息压缩过程。

在层次化骨干网络中,特征在各个阶段逐步被压缩。与 ViT 仅进行14倍压缩 [12] 相比,它们将视觉特征压缩了32倍 [15, 34]。因此,在相同分辨率下,它们生成的视觉标记数量不到 ViT 的四分之一,大大减轻了LLM(大语言模型)的计算负担。此外,层次化视觉编码器通常设计为线性空间复杂度 [34, 10, 15],有效地解决了过多视觉标记和二次视觉复杂度的问题。

作者选择了 ConvNeXt ,因为这个网络有现成的对比学习预训练好的权重(CLIP)

但如果直接使用 ConvNeXt 来替换 ViT 的话也不太可行,因为 ConvNeXt 是在低分辨率数据上训练的,所以作者在训练模型的过程中会将ConvNeXt 的权重放开参与训练,而且比 ViT 取得了更好的效果。

这个结论也证明即使在将视觉标记压缩到相同数量时,较高分辨率模型的特征仍然包含更多细粒度的信息。但是将分辨率提升到1024以上会导致生成过多的视觉标记。为了解决这个问题,作者为 ConvNeXt 增加一个阶段来进一步压缩视觉信息,以增强分层骨干网络的固有信息压缩能力。视觉输入将被压缩64倍,而不是32倍,以进一步减少冗余。因此,当处理1536分辨率输入时,ConvLLaVA 仅生成 576 个视觉标记,这相当于ViT在处理 336 分辨率输入时生成的视觉标记数量(见第3.3节)。

所以,ConvLLaVA 的视觉编码器是一个五阶段的 ConvNeXt。ConvLLaVA 将高分辨率图像压缩成信息丰富的视觉特征,有效避免了生成过多的视觉标记(见表1;[31, 27, 25, 36])。此外,由于卷积的平移等价性,ConvLLaVA 可以在低分辨率下训练并在高分辨率下评估,还可以处理任意纵横比的图像。大量实验已经证明了方法的有效性。在各种基准测试中,ConvLLaVA 7B优于LLaVA-1.5-13B,包括MME [13]、MMBench [33]、SEEDBench [22]、RealWorldQA [50]、TextVQA [44]、DocVQA [38]、POPE [26]和MMVet [57]。

大规模多模态模型

为了利用大规模语言模型的潜力并结合视觉信息,BLIP系列模型提出了Q-former,它生成视觉标记供LLM解释视觉数据。同时,LLaVA采用单线性层将视觉特征映射到词嵌入空间,使LLM能够感知视觉特征。这些方法使用ViT作为视觉编码器,主要针对低分辨率的视觉数据(例如224或336分辨率)。此外,Qwen-VL 和 mPLUG-owl2 通过更新 ViT 的权重,将 ViT 的分辨率提升到 448。然而,由于 ViT 的二次空间复杂性,这些方法未能进一步扩大分辨率,而 ConvNeXt 可以以线性成本增加来扩大分辨率。Qwen-VL 和 mPLUG-owl2 还探索通过重采样器减少视觉标记。然而,最近的研究表明,卷积或简单连接比重采样器表现更好。

使用 cropping 的高分辨率 LMMs

高分辨率 LMMs 的代表性裁剪方法在 LLaVA-NExT 中被引入,该方法将图像划分为四个部分,每个部分分别由ViT编码,然后连接起来进行LLM处理。一些方法采用裁剪来扩大分辨率。虽然在降低ViT复杂性方面有效,但裁剪会破坏图像的结构完整性,从而可能影响整体性能。此外,由于裁剪引入的大量视觉标记对LLM提出了显著复杂性,并挑战了 LLM 的检索能力。

高分辨率 LMMs 与额外的视觉编码器

为了理解高分辨率图像,引入辅助视觉编码器不会显著增加视觉标记的数量。Vary 和 Deepseek-VL 利用 SAM 作为高分辨率视觉编码器来增强 ViT 的特征。MiniGemini-HD 和 LLaVA-HR 采用 ConvNeXt 处理高分辨率图像,并使用交叉注意力或适配器从高分辨率输入中提取特征。然而,这些方法通过补充视觉编码器和相关超参数引入了额外的复杂性。此外,从低质量表示(例如LAION-CLIP-ConvNeXt)中提取特征可能会损害 LMMs 的性能。

二、方法

在这里插入图片描述

ConvLLaVA 的结构如图 1b:

  • 视觉编码器:g(),5 层的 ConvNeXt ,使用 CLIP-ConvNeXt [34,17]
  • 语言编码器:f(),使用 Vicuna-7B
  • 视觉-语音连接器:h(),两层 MLP
  • 结构:参考典型的 LLaVA [32, 30], Qwen-VL [2], 和 VILA [28].

2.1 ConvNeXt

ConvNeXt 的基本模块包括一个深度卷积和一个前馈网络。深度卷积的核大小为 7×7,计算复杂度为 O ( k 2 C N ) O(k^2CN) O(k2CN),其中 k、C 和 N 分别表示核大小、通道数量和视觉标记数量。

相比之下,ViT中的自注意力复杂度为 O ( 4 C 2 N + 2 C N 2 ) O(4C^2N + 2CN^2) O(4C2N+2CN2)。因此,ConvNeXt 的空间复杂性显著低于 ViT。输入最初由一个 4×4 非重叠卷积下采样层处理。随后,这些特征依次输入到 ConvNeXt 的四个阶段中,每个阶段包含若干个 ConvNeXt 块。在各阶段之间,特征图以 2× 的比例下采样,维度扩展为 2×。ConvNeXt的输出被下采样至 32×,而不是 ViT-L的 14×。因此,与 ViT 相比,ConvNeXt 生成的视觉标记少于四分之一,从而减轻了语言模型的计算负担。得益于线性空间复杂性和更少的视觉标记,从ViT-L(红线)到ConvNeXt(蓝线),LMMs的计算量减少了几乎8倍,如图2所示。

Five-stage ConvNeXt†:

利用 ConvNeXt 作为视觉编码器在编码 768 分辨率图像时非常高效,而将分辨率扩展到高于768会产生过多的视觉标记。之前的研究[31, 25]忽略了压缩视觉标记的探索,但压缩视觉标记是合理的,因为在视觉表示中存在冗余[28, 5]。

这些研究表明,可以使用 ConvNeXt 进一步对视觉特征进行下采样。作者提出通过在原有四阶段模型中加入第五阶段的 ConvNeXt 块来压缩视觉特征。

作者将整体五阶段 ConvNeXt 称为 ConvNeXt†。在 1536 分辨率下,ConvNeXt† 将视觉标记数量减少到 576,相当于 ViT 在 336 分辨率下的数量。这将使总计算量相对于原始 ConvNeXt(蓝线)减少 6 倍至 ConvNeXt†(绿线),如图2所示。

本文方法比裁剪方法更具计算效率,因为裁剪方法通常会产生过多的视觉标记[39, 31, 27]。此外,通过消除裁剪和合并的需求,ConvLLaVA 避免了全局视图,从而进一步减少了视觉标记数量。

在这里插入图片描述

2.2 更新 ConvNeXt 的参数非常必要

主流的方法一般都会冻结 vision encoder,但本文作者经过实验发现,更新 ConvNeXt 的参数能获得更好的效果

在这里插入图片描述

如何更新参数呢:

  • 第一步:使用 LLaVA-1.5 的 558k caption 数据来优化 projector
  • 第二步:使用 ShareGPT4V-PT 来训练 visual encoder(ShareGPT4v 训练 ViT 的最后 12 层,ConvNeXt-L 训练最后 18 层)
  • 第三步:使用 LLaVA-1.5 的 665K IT 数据来训练指令跟随能力

2.3 训练 5 层 ConvNeXt,将分辨率提升到 1536

将分辨率从 768 提升到更大的话,就会引入更多的 token,很大程度增大了 LLM 的计算量,所以作者引入了 5 层 ConvNeXt 来压缩视觉信息

训练方式:

  • 第一阶段:使用 ShareGPT4V-PT 数据来训练 ConvNeXt 的第五层 + projector
  • 第二阶段:使用 ShareGPT4V-PT 数据训练全部的模型参数
  • 第三阶段:使用 665K LLava IT 数据来训练 LLM 和 projector

训练 5 层 ConvNeXt 的结果分析(ConvNeXt†):

  • 表 4 中展示了在 ConvNeXt 中添加第5阶段的结果。
  • 提高分辨率在 SEEDBench、TextVQA 和 DocVQA 上的表现一致提升,这些基准测试需要细粒度理解,并从更高的分辨率中受益。这些结果突显了我们训练第 5 阶段方法的有效性。
  • 然而,在 MMBench 上,当分辨率从 1024 提高到 1536 时,ConvNeXt†的性能略有下降。1536 的分辨率大约是预训练分辨率(256)的六倍。要使预训练的视觉编码器适应从如此显著增加的分辨率中有效提取全局信息,需要大量的训练数据。在第4节中,作者通过在第二个训练阶段为视觉编码器提供足够的数据来验证这一假设

提高分辨率的效果对比:

提高分辨率,视觉标记(visual tokens)的数量也会增加。这两个因素是相互关联的,作者比较了在相同 token 数量下,作为视觉编码器的 ConvNeXt 和 ConvNeXt† 的结果。这两系列模型都预训练于 ShareGPT4V-PT,并使用 665k LLaVA 指令数据进行微调。ConvNeXt† 有一个额外的阶段,将视觉标记数量压缩到 1/4。因此,这两系列模型之间的差异已大大减少。我对照实验揭示了新的发现:

  • 当 visual token 数量相同时,具有更高分辨率的模型在 SEEDBench 和 DocVQA 上的表现更好。

    在图3中,绿色线条始终优于蓝色线条。这是因为高分辨率模型即使输出相同数量的视觉标记,也能提供更细致和更高质量的视觉特征。之前的研究 [31, 27, 11] 通过将图像分割成小块来提高分辨率,这会生成过多的视觉标记。这种裁剪方法显著降低了效率,并挑战了LLM的检索能力。
    所以,本文中将高分辨率图像压缩成信息丰富的视觉标记比裁剪方法更有效。训练一个阶段进一步压缩视觉特征提供了一种增加分辨率并保持适度计算成本的方法。

  • 在等效分辨率下,视觉标记数量的重要性在不同基准测试中有所不同。

    对于像 SEEDBench 这样的通用基准测试,压缩 768 分辨率模型的视觉标记带来的性能下降是微小的(SEEDBench上下降0.9)。然而,对于像DocVQA这样的OCR基准测试,具有较少视觉标记的模型性能下降是显著的(DocVQA上下降9.1)。总体而言,在通用基准测试上压缩视觉标记只会导致轻微的信息损失,但在细粒度OCR基准测试上则会导致显著的信息损失。

在这里插入图片描述

三、效果

3.1 完整的训练数据

完整的训练还是分为三个阶段:

  • 阶段一:projector initialization:训练 ConvNeXt 的第五个 stage 和 projector,使用的数据共约 2M,包括ShareGPT4V-PT [6], ShareGPT4V [6], 和 ALLaVA captions [4]
  • 阶段二:Vision-Language pretraining:训练模型所有参数,使用的数据约 2.9M,包括 ShareGPT4V-PT [6], ShareGPT4V [6], ALLaVA [4], 和 190k open-sourced subset of VFLAN [52]
  • 阶段三:Visual Instruct Tuning:作者使用 LLaVA 的 665k 数据来微调
  • 每个阶段的训练都训练 1 epoch

3.2 效果

在这里插入图片描述

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

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

相关文章

ROS编译错误: fatal error: test_pkg/test_pkg.h: 没有那个文件

在ROS安装完毕后编译ros工作空间,出现了以下错误: 解决方法: 删除工作空间,重建再重新编译

04获取头像接口的实现

场景:当用户输入完用户名时,在页面上显示当前用户头像 1、实现思路 router.get(/getAvatar, async (req, res) > {const { username } req.queryconst data await userModel.findOne({ username })res.json({ code: 0, data: { avatarUrl: data ?…

vue3+ el-tree 展开和折叠,默认展开第一项

默认第一项展开: 展开所有项&#xff1a; 折叠所有项&#xff1a; <template><el-treestyle"max-width: 600px":data"treeData"node-key"id":default-expanded-keys"defaultExpandedKey":props"defaultProps"…

超好用的傲软录屏下载和解锁版安装教程 (专业好用的桌面录屏软件)

录屏系列软件安装目录 一、ZD屏幕录像机解锁版下载及安装教程 (一款小巧的轻量级屏幕录像工具) 二、班迪录屏Bandicam v7解锁版安装教程&#xff08;高清录屏软件&#xff09; 三、Mirillis Action v4 解锁版安装教程(专业高清屏幕录像软件) 四、Aiseesoft Screen Recorder…

支持图片识别语音输入的LobeChat保姆级本地部署流程

文章目录 前言1. LobeChat对我们有哪些帮助?2. 本地安装LobeChat3. 如何使用LobeChat工具4. 安装Cpolar内网穿透5. 实现公网访问LobeChat6. 固定LobeChat公网地址 前言 本文主要介绍如何在Windows系统电脑本地部署LobeChat&#xff0c;一款高颜值的开源AI大模型智能应用&…

qt upp 只创建客户端链接

在Qt中&#xff0c;创建一个UDP客户端链接主要涉及到使用QUdpSocket类来发送数据报到指定的服务器地址和端口。以下是一个简单的UDP客户端示例&#xff0c;它展示了如何创建一个UDP套接字并发送数据报。 cpp复制代码 #include <QUdpSocket> #include <QCoreApplic…

qt udu 需要添加的模块

在Qt中&#xff0c;如果你需要实现UDP通信&#xff0c;你主要会涉及到Qt Network模块。Qt Network模块提供了网络编程的功能&#xff0c;包括TCP/IP和UDP协议的支持&#xff0c;使得开发者能够在Qt应用程序中实现网络通信。 具体来说&#xff0c;对于UDP通信&#xff0c;你需要…

python爬虫入门(二)之Requests库

一、储备篇 1、requests库让我们可以通过python代码去构建和发送HTTP请求 2、第三方库&#xff0c;要先安装 python终端&#xff0c;输入pip install requests successfully installed&#xff1a;安装成功 requirement already satisfied: 说明已经安装过&#xff0c;无需…

Java学习十四—Java8特性之Lambda表达式

一、简介 Java 8 引入了 Lambda 表达式&#xff0c;它是一种更简洁、更便于使用的函数式编程特性。Lambda 表达式允许将函数作为方法的参数&#xff08;函数式接口的实例&#xff09;传递给某个方法&#xff0c;或者将代码像数据一样进行传递。 ‍ lambda是一个匿名函数&#…

Ubuntu 修改 shell 命令行提示为只显示当前工作目录的基本名称而非完整路径

在 Ubuntu 上遇到一个比较烦人的点&#xff0c;它会默认在命令行提示符显示当前工作目录的绝对路径&#xff0c;当目录比较深的时候就显得命令行提示符字符串很长&#xff0c;在需要分屏多终端同时使用的场景下就显得很恶心&#xff0c;下面是个人找到的将 shell 命令行提示为只…

LLM之RAG实战(四十一)| 使用LLamaIndex和Gemini构建高级搜索引擎

Retriever 是 RAG&#xff08;Retrieval Augmented Generation&#xff09;管道中最重要的部分。在本文中&#xff0c;我们将使用 LlamaIndex 实现一个结合关键字和向量搜索检索器的自定义检索器&#xff0c;并且使用 Gemini大模型来进行多个文档聊天。 通过本文&#xff0c;我…

IPython交互式数据分析:释放Python数据科学的无限潜能

IPython交互式数据分析&#xff1a;释放Python数据科学的无限潜能 IPython&#xff0c;现在通常指的是其Jupyter Notebook环境&#xff0c;已成为数据科学家和分析师进行数据分析和探索的强大工具。IPython的交互式数据分析工具提供了丰富的功能&#xff0c;包括交互式计算、可…

系统性能监控和调优

系统性能监控和调优 系统性能监控是对计算机系统的运行状态、资源利用率以及潜在瓶颈进行持续观察的过程&#xff0c;目的是保证系统的稳定性和高效性。它涉及CPU、内存、磁盘I/O、网络流量等关键指标的实时跟踪和分析&#xff0c;以及定期进行性能基准测试。调优则是在发现问…

明确产业定位,用科学规划铸就高品质文化产业园

科学规划是构建高品质文化产业园区的重要保障。通过明确产业定位与发展目标、科学规划空间布局、完善基础设施与配套设施、注重生态环境保护、加强人才引进与培养以及推动产业协同发展等措施的实施&#xff0c;可以推动文化产业园区向高品质、高效益、可持续的方向发展。 一、明…

【TB作品】51单片机 Proteus仿真 超声波读取+LCD1602显示仿真12MHZ

实验报告&#xff1a;51单片机 Proteus仿真 超声波读取LCD1602显示仿真 一、实验背景 本实验旨在使用51单片机&#xff08;AT89C51&#xff09;结合超声波传感器HC-SR04和LCD1602液晶显示屏&#xff0c;通过Proteus仿真平台实现超声波测距功能&#xff0c;并将测得的距离显示…

leetcode hot100

哈希 49.字母异位词分组 HashMap的含义比较晕&#xff0c;可以重做 双指针 11.盛最多水的容器 双指针的起始位置和移动条件没转过来&#xff0c;可以重做 15.三数之和 不太熟练&#xff0c;可以再做一遍 42.接雨水 还可以用dp和单调栈做 双指针法&#xff1a; 首先需要注意…

【DFS(深度优先搜索)详解】看这一篇就够啦

【DFS详解】看这一篇就够啦 &#x1f343;1. 算法思想&#x1f343;2. 三种枚举方式&#x1f343;2.1 指数型枚举&#x1f343;2.2 排列型枚举&#x1f343;2.3 组合型枚举 &#x1f343;3. 剪枝优化&#x1f343;4. 图的搜索&#x1f343;5. 来几道题试试手&#x1f343;5.1 选…

MySQL参数lower_case_table_name

系统参数lower_case_table_name是 MySQL 中的一个系统变量&#xff0c;它控制着 MySQL 服务器如何存储和比较表名的大小写。这个参数对于在不同操作系统上运行的 MySQL 实例来说非常重要&#xff0c;因为不同操作系统对文件名的大小写敏感性不同。 lower_case_table_names 可以…

助力开发者,而非取代

AI&#xff1a;助力开发者&#xff0c;而非取代 在软件开发的广阔天地中&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正以其独特的方式重塑着行业的面貌。AI工具如GitHub Copilot、TabNine等&#xff0c;以其强大的能力成为开发者的得力助手。但随着AI的不断进步&…