2024CVPR:Question Aware Vision Transformer for Multimodal Reasoning介绍
在视觉与语言多模态任务中,如视觉问答(VQA)、图像描述生成等,模型需要同时理解图像内容和用户提出的问题,并进行推理和回答。传统的视觉-语言模型通常采用“两阶段”结构:先通过视觉编码器提取图像特征,再结合问题文本,由大语言模型(LLM)完成最终的回答生成。然而,这种设计存在一个关键问题——视觉编码过程是独立于用户提问内容的 ,也就是说,无论问题是关于图像中的什么内容,视觉编码器都会以相同的方式提取图像特征,导致视觉特征可能无法聚焦于问题所关注的关键区域。
为了解决这一问题,2024年CVPR发表的一篇论文《Question Aware Vision Transformer for Multimodal Reasoning 》提出了 QA-ViT(Question-Aware Vision Transformer) ,一种全新的视觉编码方法。该方法将“问题感知”机制直接嵌入到视觉编码器(ViT)中,使得视觉特征能够根据当前问题动态调整,专注于图像中最相关的部分,从而显著提升多模态推理的效果。
QA-ViT 的核心思想在于:在不修改原有视觉编码器参数的前提下,将问题信息引入 ViT 的注意力机制中,实现跨模态融合 。其创新点包括两个主要模块:Question Encoding(问题编码) 和 Question Fusing(问题融合) ,分别负责将问题文本编码为可融合表示,并通过冻结的自注意力机制将其注入视觉编码过程。最终输出的视觉特征具有“问题意识”,能更好地服务于下游的多模态任务。
接下来,我们将深入解析 QA-ViT 的架构设计、核心模块及其工作原理,帮助你全面理解这项多模态建模的新进展。
QA-ViT:使视觉编码器对用户查询(如图片相关问题)敏感的方法,通过结合问题意识到视觉编码器中以提升多模态推理的性能
ViT:Visual Transformer
其主要的组成部分包括:
- Embedding 层
- Transformer Encoder
- MLP Head
其主要的步骤为:
- 将一张图片分成多个patches
将输入为[H,W,C]的图像数据,通过一个Embedding层进行变换。首先将一张图片按给定大小进行划分,代码上直接一个卷积层,可以把图片分为多个块。
- 将这些Patches进行铺平
将Patches摆成类似文本一样的序列结构。
- 线性映射到低维空间
- 添加embedding编码信息
- 将图像序列送入标准的Transformer encoder中去
- 预训练
- 下游任务数据集微调
QA-ViT
在视觉编码器(ViT)加入了Question Fusing模块,同时将FVQF_{VQ}FVQ和QQQ都传入LLM中,进而完成VQA任务。
论文在Abstract部分是这么写的:
视觉大模型往往由下面几个部分组成:
- Vision encoder:视觉编码器
- LLM:大语言模型,用于VQA,Captioning等任务
- Projection model:视觉特征转换到文本特征空间,用于特征融合。
论文抓住的疼点在于:视觉编码过程仍然与用户查询无关,通常以与图像相关的问题的形式出现。因此,生成的视觉特征可能无法与图像的特定于查询的元素进行最佳调整。
所以QA-ViT的提出,将问题感知直接嵌入到视觉编码器中。这种集成会产生动态视觉特征,专注于与所提出问题相关的图像方面。QA-ViT 与模型无关,可以有效地集成到任何 VL 架构中。广泛的实验证明了将我们的方法应用于各种多模态架构的有效性,从而在不同任务中实现持续改进,并展示了其在增强视觉和场景文本理解方面的潜力。
整体架构的关键就是中间的橙色部分:
首先原本的结构中QQQ只用于输入LLM,LLM根据视觉模块的内容进行回复。
Question Encoding
在QA-ViT的结构中,QQQ首先编码为FQF_QFQ,然后通过Fusing模块与视觉融合成FVQF_{VQ}FVQ,然后输出到LLM中。
作者的Question Encodeing模块使用了LLM的Encoder模块进行编码,更好的融合,得到向量FQ′F'_QFQ′,然后将FQ′F'_QFQ′通过一个投影模块投影到视觉模型的视觉空间中,便于在视觉Transformer中融合问题信息(这里是一个逐层MLP)
Question Fusing
- 将经过投影的问题特征 FQ∈RK×CF_Q \in \mathbb{R}^{K \times C}FQ∈RK×C 与视觉特征 FV∈RM×CF_V \in \mathbb{R}^{M \times C}FV∈RM×C 在序列维度上拼接;
- 利用 ViT 中已有的自注意力机制(self-attention)进行跨模态交互;
- 提取仅对应视觉部分的注意力输出,作为融合后的问题感知视觉特征 FVQ′F'_{VQ}FVQ′;
- 使用一个可学习的门控机制(gated projection)进一步微调融合后的特征,得到最终的 FVQF_{VQ}FVQ。
具体步骤如下:
- 输入:
- 视觉特征 FVF_VFV:来自 ViT 某一层的输出,大小为 M×CM \times CM×C,其中 MMM 是 patch 数量,CCC 是通道数;
- 文本特征 FQF_QFQ:来自 Question Encoding 阶段的输出,大小为 K×CK \times CK×C。
- 操作:将两者拼接成一个新的输入序列:
concat(FV,FQ)∈R(M+K)×C \text{concat}(F_V, F_Q) \in \mathbb{R}^{(M+K) \times C} concat(FV,FQ)∈R(M+K)×C - 接下来,使用 ViT 原生的 冻结的自注意力层(frozen self-attention layer) 来处理这个拼接后的序列。
- 注意力机制会计算所有 token(包括图像 patch 和问题 token)之间的相关性,从而实现跨模态注意力(cross-modal attention)。
- 输出结果仍然是一个长度为 M+KM + KM+K 的序列。
📌 因为 ViT 是冻结的,所以这里只利用其注意力机制,并不更新它的参数。
- 从注意力输出中,只保留前 MMM 个 token,也就是与视觉特征对应的输出,记作:
FVQ′=Attention(concat(FV,FQ))[0:M] F'_{VQ} = \text{Attention}(\text{concat}(F_V, F_Q))[0:M] FVQ′=Attention(concat(FV,FQ))[0:M]
📌 这一步的关键在于:虽然问题 token 被用于注意力计算,但最终只保留了图像 token 的输出,这些输出已经“看到了”问题内容,因此具备了问题感知能力。
为了更稳定地融合信息并避免破坏原有视觉结构,作者设计了一个并行的可学习门控模块:
FVQ=P(FVQ′)+Pg(FVQ′)⋅tanh(β) F_{VQ} = P(F'_{VQ}) + P_g(F'_{VQ}) \cdot \tanh(\beta) FVQ=P(FVQ′)+Pg(FVQ′)⋅tanh(β)
其中:
- PPP 是 ViT 原来的投影头(projection head);
- PgP_gPg 是新增的一个小的可训练投影层;
- β\betaβ 是一个可学习的标量参数,初始化为 0,控制新信息的注入强度;
- 使用 tanh(β)\tanh(\beta)tanh(β) 可以让初始阶段几乎不改变原有输出(因为 tanh(0)=0),随着训练逐渐开启新路径,提升稳定性。