【第三十八周】BLIP-2:一种高效的视觉语言预训练框架
BLIP-2
- 摘要
- Abstract
- 文章信息
- 引言
- 方法
- 模型结构
- Stage1:表征学习
- Stage2:生成学习
- 模型预训练
- 实验结果
- 总结
摘要
本篇博客介绍了BLIP-2 ,这是一种面向通用多模态任务的高效视觉语言预训练框架,其核心思想是在冻结大语言模型的前提下,通过引入一个可训练的查询变换器(Q-Former),实现视觉特征与语言输入之间的有效桥接。该方法针对传统多模态模型训练成本高、跨模态对齐难的问题,提出了一个两阶段架构:首先训练一个融合视觉信息的 Q-Former,以少量计算资源学习从图像中提取语言相关的视觉语义;其次将其输出作为提示输入,引导大语言模型完成图文理解、图像问答等下游任务。这种解耦式设计不仅显著降低了训练资源需求,还提升了模型在零样本和指令跟随任务中的表现。实验结果显示,BLIP-2 在多个标准数据集上取得了领先性能,尤其在零样本图文任务中展现出优越的泛化能力。尽管如此,该方法仍存在视觉语言对齐粒度不足、模型推理效率受限等问题。未来可在增强对话式能力、多轮推理以及端到端语义对齐方面进一步优化。
Abstract
This blog introduces BLIP-2, an efficient vision-language pretraining framework designed for general-purpose multimodal tasks. Its core idea is to bridge visual features and language inputs by introducing a trainable Querying Transformer (Q-Former), while keeping a large language model (LLM) frozen. To address the high training cost and difficulty of cross-modal alignment in traditional multimodal models, BLIP-2 adopts a two-stage architecture: first, the Q-Former is trained to extract language-relevant visual semantics from images using minimal computational resources; second, its outputs are used as prompts to guide the frozen LLM in downstream tasks such as image-text understanding and visual question answering. This decoupled design not only reduces training cost significantly but also improves performance in zero-shot and instruction-following tasks. Experimental results demonstrate that BLIP-2 achieves state-of-the-art performance across multiple benchmarks, with strong generalization in zero-shot image-language tasks. Nonetheless, limitations remain in terms of fine-grained visual-language alignment and inference efficiency. Future improvements may focus on enhancing dialog capabilities, multi-step reasoning, and end-to-end semantic alignment.
文章信息
Title:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
Author:Junnan Li, Dongxu Li, Silvio Savarese, Steven Hoi
Source:https://arxiv.org/abs/2301.12597
引言
随着大规模预训练模型在自然语言处理(NLP)和计算机视觉(CV)中的成功,跨模态学习(vision-language learning)逐渐成为人工智能研究的核心方向之一。如何将视觉与语言信息有效融合,是实现智能系统多模态理解能力的关键。
多模态模型最近几年蓬勃发展,但一直无法解决一个痛点:
追求更好的性能,通常意味着需要更大的网络架构(image encoder 和 text encoder/decoder)和数据集,导致更大的训练代价,如何降低模型训练成本,同时具有很好的性能,这是 BLIP-2 的研究动机。
本文介绍的BLIP-2提出的方法基于现有高质量视觉模型及语言大模型进行联合训练,为减少计算量及防止遗忘,作者对预训练模型进行frozen,为了将两任务对齐,作者提出Querying Transformer (Q- Former) 预训练其将有用视觉特征传递至LLM输出目标文本。
方法
BLIP-2 基于 BLIP 架构,利用已有的 ViT 和 LLM (二者冻结)+ 一个轻量的 Q-Former 模块(做模态融合),大幅降低训练成本。
为了对齐视觉特征到LLM文本空间,作者提出Q-Former,进行两阶段预训练:
- 图像编码器frozen进行学习视觉语言表征;
- 使用frozen LLM进行学习视觉到文本生成;
模型结构
如下图所示,Q-Former 包括两个共享 self-attention 层的 transformer子模块:图像transformer(Q-Former左半部分)与frozen image encoder相互作用提取视觉特征;文本transformer(Q-Former右半部分)可作为文本编码器,也可作为文本解码器。
BLIP-2 按照Two-Stage策略预训练轻量级查询 Transformer 以弥合模态差距。
Stage1:表征学习
Q-Former 的输入包含三部分:
- 冻结参数的Image Encoder提取的图像embeddings;
- Learned Queries,Queries是一组可学习的embeddings,是第一个transformer模块的input,可认为是模型参数一部分,推理时,Queries 被用来从 image encode r输出的 embeddings 里提取与 input text 最相关的视觉信息;
- Input Text。
Stage 1 使用 图像-文本对 进行预训练,目标是训练好 Q-Former,以便 Queries 可以学习到如何更好地结合文本提取图片信息。
对于Q-Former,一种比较好理解的方式:把Q-Former类比为一个Self-attention模块:
- Q:learned queries
- K:input text
- V:image embeddings from Image Encoder
query通过学习提升与text相关视觉表征,受BLIP启发,作者通过3个目标函数,共享相同输入格式及模型参数,每个目标函数通过不同attention mask策略控制query与text之间相互影响,目标函数如下:
- Image-Text Contrastive Learning (ITC Loss, CLIP-like)
ITC学习对齐图像表征与文本表征,通过比较成对与非成对的图像-文本相似度实现。
计算过程为:计算image transformer输出query表征Z(与可学习query长度相同)与text transformer输出文本表征 t 中【CLS】token相似性,选取最大值作为图像文本对相似度,为防止信息泄露,作者使用单模态self-attention mask,query与text不能互相可见,防止从文本直接学习。 - Image-Text Matching (ITM Loss,二分类task)
通过学习图像文本对是否匹配,以细粒度对齐 图像和文本表征。
使用bi-dirention self-atttention mask,所有query与text相互可见,因此输出的query embedding Z捕获多模态信息,Z通过二类线性分类器获取logit,logit均值为匹配得分。另外,作者使用《Align before Fuse》中难例负样本挖掘策略创建负样本对。
当负样本的图像文本对有相同的语义但在细粒度细节上不同,那么该样本是难样本。作者通过对比相似度寻找batch内的 hard negatives。对于一个batch中的每一幅图像,作者根据对比相似性分布从相同的batch中抽取一个负文本,其中与图像更相似的文本有更高的可能被采样。同样的,作者还为每个文本采样一个hard negative图像。
- Image-Grounded Text Generation (ITG Loss, GPT-like)
此损失函数的目的是让Q-Former学习“图生文”的能力,即给定Input Image,生成Text。
ITG根据输入图像训练Q-Former生成文本,由于Q-Former不允许image encoder与text token直接交互,文本生成所需信息通过query进行提取,通过self-attention进行传递至text token,因此query需要捕获文本相关所有信息,作者使用多模态因果self-attention mask控制query-text交互,query无法获取text token,当前text token 可获取所有query及其之前text token。作者将【CLS】token替换为【DEC】token 作为解码任务标记。
Stage2:生成学习
Stage 2 是为了把 Q-Former 和冻结参数的 LLM 连接起来,以利用 LLM 的文本生成能力。
- 首先输入图片,直接输入冻结参数的 Image Encoder,得到图像的表征。
- 然后图像的表征和 Queries 一起送入 Q-Former,得到 Queries 的输出 Z Z Z ,使用全连接 (FC) 层将 Z Z Z 线性投影到与 LLM 的 text embedding 相同维度。
- 后将投影后的 Z Z Z 添加到 input text embeddings前面。Queries 的输出蕴含了视觉信息,送入LLM时,充当了soft visual prompts 。
由于 Q-Former 已经过预训练以提取语言信息视觉表示,因此它有效地充当信息瓶颈,将最有用的信息提供给 LLM,同时删除不相关的视觉信息。这减少了LLM学习视觉语言对齐的负担,从而缓解了灾难性的遗忘问题。
作者实验了两种LLM,decoder-based LLM以及encoder-decoder-based LLM。
对于decoder-based LLM,作者使用language modeling loss进行预训练,frozen LLM进行文本生成;
对于encoder-decoder-based LLM,使用prefix language modeling loss预训练,将text分为两部分,text前半部分与视觉表征concat输入LLM编码器,后半部分作为LLM解码器的生成目标。
模型预训练
BLIP-2使用与BLIP相同数据,129M 组图文对 (涵盖很多数据集,包括COCO、Visual Genome、CC3M、CC12M、SBU,其中115M来自 LAION400M)。
另外,使用CapFilt对网图进行生成caption,具体步骤如下:
- 用BILP-L生成10个caption;
- 生成1的0个caption和原始web caption通过CLIP ViT-L/14模型与对应图像进行相似度排序;
- 选取相似度最高的两个 Caption 作为该图的 Caption ,以此作为训练数据。
预训练图像编码器与LLM:
视觉编码器用的是ViT-L/14 from CLIP、ViT-G/14 from EVA-CLIP,且移除ViT最后一层,使用倒数第二层特征。
LLM模型用到的是:无监督训练的OPT作为decoder-based LLM和基于指令训练的FlanT5作为encoder-decoder-based LLM。
实验结果
下表展示BLIP-2在各种零样本视觉语言任务上表现,与之前SOTA方法相比,性能得到改善,而且训练参数大量减少。
BLIP-2 在多个视觉语言任务和评测基准上进行了系统实验,涵盖图像字幕生成(Image Captioning)、图文问答(VQA)、视觉推理(Visual Reasoning)等典型任务。其核心实验结果表明:BLIP-2 在保持训练效率的同时,在多个任务上显著优于先前的方法,并且展现出强大的零样本(zero-shot)泛化能力。
源码:https://github.com/salesforce/LAVIS/tree/main/projects/blip2
关键代码:
Q-Former 是 BLIP-2 中连接视觉编码器与大语言模型(LLM)的关键模块,其设计基于 BERT 架构,并在特定层引入交叉注意力机制以实现多模态对齐。其官方实现的初始化代码如下:
def init_Qformer(cls, num_query_token, vision_width, cross_attention_freq=2):# 加载 BERT 的配置文件encoder_config = BertConfig.from_pretrained("./models/bert-base-uncased")# 设置视觉编码器的输出维度encoder_config.encoder_width = vision_width# 启用交叉注意力机制,并设置其在 Transformer 层中的插入频率encoder_config.add_cross_attention = Trueencoder_config.cross_attention_freq = cross_attention_freq# 定义可学习的查询嵌入数量encoder_config.query_length = num_query_token# 初始化带有语言建模头的 BERT 模型Qformer = BertLMHeadModel(config=encoder_config)# 创建可学习的查询嵌入参数,形状为 (1, 查询数, 隐藏维度)query_tokens = nn.Parameter(torch.zeros(1, num_query_token, encoder_config.hidden_size))# 使用正态分布初始化查询嵌入query_tokens.data.normal_(mean=0.0, std=encoder_config.initializer_range)return Qformer, query_tokens
- num_query_token:定义可学习的查询嵌入数量。
- vision_width:视觉编码器的输出特征维度。
- cross_attention_freq:在 Transformer 层中插入交叉注意力层的频率,默认每两层插入一次。
此函数返回两个对象:Qformer 和 query_tokens。
总结
BLIP-2 作为一种高效的多模态预训练框架,通过引入 Querying Transformer(Q-Former)实现了视觉编码器与大语言模型之间的有效连接,其整体结构采用“图像编码—查询抽取—语言生成”的三阶段工作流程:图像首先通过冻结的视觉编码器提取特征,再由 Q-Former 结合可学习的查询嵌入与视觉特征进行交叉注意力交互,最终将生成的语言化表示输入至冻结的大语言模型完成任务输出。该设计显著降低了训练成本,同时在多个视觉语言任务中展现出优越的零样本与跨任务泛化能力。尽管 BLIP-2 在模块化设计与效率方面取得突破,其性能仍受到视觉语言对齐质量和语言模型输出可控性的限制。未来研究可聚焦于提升跨模态对齐精度、引入更强的语言理解能力,以及在对话、多轮推理等更复杂场景中的扩展应用。