论文: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