当前位置: 首页 > news >正文

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

其主要的组成部分包括:

  1. Embedding 层
  2. Transformer Encoder
  3. MLP Head

其主要的步骤为:

  1. 将一张图片分成多个patches

    将输入为[H,W,C]的图像数据,通过一个Embedding层进行变换。首先将一张图片按给定大小进行划分,代码上直接一个卷积层,可以把图片分为多个块。

  2. 将这些Patches进行铺平

    将Patches摆成类似文本一样的序列结构。

  3. 线性映射到低维空间
  4. 添加embedding编码信息
  5. 将图像序列送入标准的Transformer encoder中去
  6. 预训练
  7. 下游任务数据集微调

QA-ViT

image
在视觉编码器(ViT)加入了Question Fusing模块,同时将FVQF_{VQ}FVQQQQ都传入LLM中,进而完成VQA任务。

论文在Abstract部分是这么写的:
视觉大模型往往由下面几个部分组成:

  1. Vision encoder:视觉编码器
  2. LLM:大语言模型,用于VQA,Captioning等任务
  3. Projection model:视觉特征转换到文本特征空间,用于特征融合。
    论文抓住的疼点在于:视觉编码过程仍然与用户查询无关,通常以与图像相关的问题的形式出现。因此,生成的视觉特征可能无法与图像的特定于查询的元素进行最佳调整。

所以QA-ViT的提出,将问题感知直接嵌入到视觉编码器中。这种集成会产生动态视觉特征,专注于与所提出问题相关的图像方面。QA-ViT 与模型无关,可以有效地集成到任何 VL 架构中。广泛的实验证明了将我们的方法应用于各种多模态架构的有效性,从而在不同任务中实现持续改进,并展示了其在增强视觉和场景文本理解方面的潜力。

整体架构的关键就是中间的橙色部分:
image

首先原本的结构中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

image

  1. 将经过投影的问题特征 FQ∈RK×CF_Q \in \mathbb{R}^{K \times C}FQRK×C 与视觉特征 FV∈RM×CF_V \in \mathbb{R}^{M \times C}FVRM×C 在序列维度上拼接;
  2. 利用 ViT 中已有的自注意力机制(self-attention)进行跨模态交互;
  3. 提取仅对应视觉部分的注意力输出,作为融合后的问题感知视觉特征 FVQ′F'_{VQ}FVQ
  4. 使用一个可学习的门控机制(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),随着训练逐渐开启新路径,提升稳定性。
http://www.lryc.cn/news/587323.html

相关文章:

  • Action-Agnostic Point-Level Supervision for Temporal Action Detection
  • 【读书笔记】《Effective Modern C++》第4章 Smart Pointers
  • 从零开始学习深度学习—水果分类之PyQt5App
  • gcc 源码阅读--C语言预处理
  • 深度学习16(对抗生成网络:GAN+自动编码器)
  • 深入理解 Java JVM
  • Java: OracleHelper
  • MYSQL笔记2
  • 线性基学习笔记
  • 查看Linux服务器显卡使用情况的详细教程
  • 【UE教程/进阶】使用Slate
  • 【unitrix】 5.0 第二套类型级二进制数基本结构体(types2.rs)
  • SQL预编译:安全高效数据库操作的关键
  • 苍穹外卖Day3
  • markdown-it-mathjax3-pro —— 新一代 Markdown 数学公式渲染插件
  • vue的优缺点
  • 框架和库的区别
  • day16~17-系统负载高故障与磁盘管理
  • muduo概述
  • 电商系统未来三年趋势:体验升级、技术赋能与模式重构
  • ASP.NET Core 中的延迟注入:原理与实践
  • 【UE教程/进阶】UE中的指针与引用
  • 应用层协议和JSON的使用
  • gcc 源码阅读---程序入口
  • 面试150 从前序与中序遍历构造二叉树
  • python赤道上空的大气环流剖面图(纬向-高度剖面)
  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 【elementUI踩坑记录】解决 el-table 固定列 el-table__fixed 导致部分滚动条无法拖动的问题
  • QT控件命名简写
  • Burp suite的下载安装基础用法(密码喷洒,密码爆破)