论文: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ˉ=CN−1∪CN∪CN+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小时。