多模态VQA模型-Img2LLM模型

当前VQA模型在零样本情况下表现不佳的原因在于两点:第一是模态断层,图像和文本之间的联合不紧密,存在断层;第二是任务断层,训练文本模型和训练图像模型的要求不同,通常情况下文本模型需要更多的文本数据才能训练到位,两种模型在结构上也有差异(Transformer和CNN)。Img2LLM模型是一个即插即用的模型,不用绑定,可以大大解决训练成本。Img2LLM的主要功能是提供提示信息,使得大语言模型可以无需端到端训练就可以做到零样本学习。Img2LLM算法使用了一种可以根据图像生成问答对的LLM未知模型,这种问答对是有效的LLM提示,该算法已经被LAVIS [1]框架收录。下面详细介绍一下该模型,论文来自CVPR2023:https://arxiv.org/pdf/2212.10846.pdf

方法背景

VQA任务并不好做,最主要的原因在于训练数据是有限的,模型训练需要大量的训练数据,但是训练数据又需要人类标注,人类标注代价任务复杂,工作量大,最主要的是人类的标注是有限的。既然标注是有限的,那就别标了。因此零样本VQA任务逐渐兴起,最好的方式就是依赖多模态技术。不过多模态技术存在着模态断层(modality disconnect)和任务断层(task disconnect)。当前处理这种问题的方法是通过不断的训练模型,尤其是视觉模型的编码器,将视觉特征和文本特征对齐。问题在于,这种方式耗费巨大,而且自从GPT广泛应用以来,LLM模型不断更新换代,通过不断训练模型对其两种特征无暇顾及。

If we need to upgrade the LLM as new versions emerge, the entire model needs to undergo expensive re-training.

Img2LLM是一个即插即用的模块,仅基于问题的当前图像将图像转换为合成问答对。弥合了语言和视觉之间的模态断层,以及语言建模和视觉问答之间的任务断层。该模型可以搭配一些现成的LLM模型实现零样本VQA的需要,最重要的是,插到哪个LLM都可以,不用微调!

问题定义

给定一个问题Q和一个图像,模型根据图像回答问题。Img2LLM的核心在于可以根据当前图像生成合成问答对,就像上下文示例一样。示例不仅演示了QA任务,还将图像的内容传达给LLM以回答问题Q,从而一举两得。Img2LLM是不可知的LLM模型,它释放了离线LLM的知识和推理能力。

Given a question Q and an image, our key insight is that we can generate synthetic question-answer pairs as incontext exemplars from the current image. The exemplars not only demonstrate the QA task but also communicate the content of the image to the LLM for answering the question Q, thereby hitting two birds with one stone. Img2LLM is LLM-agnostic; it unlocks the knowledge and the reasoning capacity of off-the-shelf LLMs, offering a powerful yet flexible solution for zero-shot VQA.

QA对的生成

VQA对的生成经过两步:第一步是生成caption prompt,第二步根据 caption prompt生成QA对。

Caption Prompt

在这里插入图片描述Caption Prompt的生成依赖输入的问题,将图像特征分块(这种方式类似VIT),将问题特征向量和图像特征中的每一块计算cross-attention,采样attention后的计算结果,最后将注意力计算值高的patch拿出来做caption的生成。
交叉注意力的计算,像极了Transformer的多头注意力机制。

For cross-attention head in i-th layer, the cross-attention scores Wi between each image patch and each token in question can be calculated directly as
在这里插入图片描述

为什么要用输入的问题辅助cation的生成?论文中提到,目前的模型单单依赖图像难以生成正确的描述,比如上图中示意的图像如果作为Caption生成模型的输入,可能生成描述和船有关,这与问题毫不搭边,毕竟船在图像中所占比例最大。

InFigure 2, the question “What items are spinning in the background which can be used to control electricity?” is relevant only to the wind turbines. However, captions generated from the whole image are likely to focus on the salient orange boat, leaving LLM with no information to answer the question.

这种由图像转换成caption的方式就是论文的解决的问题之一:实现了模态间的转变,解决了模态断层的问题。

根据 caption prompt生成QA对

在这里插入图片描述
第一步,提取单词。首先寻找可以作为合成问题答案的单词。本文从上一步中的caption里面提取名词短语(包括命名实体)、动词短语、形容词短语、数字和布尔型词。
第二步,利用单词生成问题,这些问题的答案是上一步提取的单词。论文中使用了两种方式生成问题:
固定模板,对于不同词性的单词,准备了一些问题模板,形式如下:
在这里插入图片描述
神经网络生成:这个耗费巨大,微调一个已经预训练好的大模型,模型的输入包含提示“Answer:[Answer].Context:[Context]”,其中[Answer]表示答案文本,[Context]表示来自文本QA数据集的上下文文本,将[Answer]替换为提取的候选答案,将[Context]替换为从中提取答案的生成标题。论文在5种VQA数据集上面做了微调。
从表4中可以看出,使用神经网络的生成方式更好一点。不可知论(从其他图像中随机抽取问题)的效果更差一些。

在这里插入图片描述
从表1中可以看出,加入QA对可以有效提高模型的表现效果。
在这里插入图片描述
QA对制作完成后就输入到现成的LLM中做训练了。LLM模型的输入有三个部分:caption、QA对、问题,这就是模型的整体结构:
在这里插入图片描述

效果展示

论文在附录中展示了一下问题、图像、QA对以及回答结果:
在这里插入图片描述
在这里插入图片描述

可以看到,在caption的生成步骤中,总共生成了3条caption(可能生成了更多的caption,只是没展示),绿色的表示预测结果符合要求,是正确的,红色的预测结果是错误的。

[1] Dongxu Li, Junnan Li, Hung Le, Guangsen Wang, Silvio Savarese, and Steven CH Hoi. Lavis: A library for language vision intelligence. arXiv preprint arXiv:2209.09019, 20.

### 关于多模态模型在图像理解方面的技术原理 多模态模型通过处理来自不同源的数据来增强其性能,在图像理解领域尤其如此。这类模型能够接收并解析多种类型的输入,比如视觉信息(即图片)、文本描述以及其他形式的信息。 #### 数据预处理阶段 当涉及到图像时,首先会有一个专门设计用于提取特征的过程。这通常涉及卷积神经网络(CNN),它可以从原始像素值中学习到高层次的抽象表示[^1]。这些特征向量随后被传递给后续模块做进一步分析。 #### 模态融合机制 对于图像理解任务而言,除了单纯的视觉信号外,还可能引入其他辅助性的线索作为补充——例如关联的文字解释或上下文环境等。为了有效地结合这些不同的感知维度,采用了先进的模态融合策略。这一过程旨在找到一种方法使得各单独模态间可以相互协作而不是彼此干扰,从而获得更全面的理解视角。 #### 任务特定头部结构 经过上述两步之后得到的结果会被送入针对具体应用场景定制化的组件内完成最终决策制定工作。在这个环节里,“任务特定头部”负责依据之前所获取的知识做出最合适的响应动作;如果是分类问题,则给出类别标签;若是检测场景下则定位目标位置等等。 ```python import torch.nn as nn class MultiModalModel(nn.Module): def __init__(self, image_encoder, text_encoder, fusion_layer, task_head): super(MultiModalModel, self).__init__() self.image_encoder = image_encoder self.text_encoder = text_encoder self.fusion_layer = fusion_layer self.task_head = task_head def forward(self, images, texts): img_features = self.image_encoder(images) txt_features = self.text_encoder(texts) combined_features = self.fusion_layer(img_features, txt_features) output = self.task_head(combined_features) return output ``` ### 应用案例展示 - **视觉问答(VQA)**:这是指利用计算机视觉技术和自然语言处理相结合的方式解答有关照片内容的问题。借助多模态模型的强大能力,即使面对较为复杂的查询也能够准确作答[^2]。 - **医学影像诊断支持**:通过对X光片、CT扫描结果以及病历记录的同时解读,帮助医生更快捷地发现潜在疾病迹象,提高诊疗效率与准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值