【第三十八周】BLIP-2:一种高效的视觉语言预训练框架

article/2025/6/22 10:14:49

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,进行两阶段预训练:

  1. 图像编码器frozen进行学习视觉语言表征;
  2. 使用frozen LLM进行学习视觉到文本生成;

模型结构

如下图所示,Q-Former 包括两个共享 self-attention 层的 transformer子模块:图像transformer(Q-Former左半部分)与frozen image encoder相互作用提取视觉特征;文本transformer(Q-Former右半部分)可作为文本编码器,也可作为文本解码器。
在这里插入图片描述
BLIP-2 按照Two-Stage策略预训练轻量级查询 Transformer 以弥合模态差距。

Stage1:表征学习

Q-Former 的输入包含三部分:

  1. 冻结参数的Image Encoder提取的图像embeddings;
  2. Learned Queries,Queries是一组可学习的embeddings,是第一个transformer模块的input,可认为是模型参数一部分,推理时,Queries 被用来从 image encode r输出的 embeddings 里提取与 input text 最相关的视觉信息;
  3. 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之间相互影响,目标函数如下:

  1. Image-Text Contrastive Learning (ITC Loss, CLIP-like)
    ITC学习对齐图像表征与文本表征,通过比较成对与非成对的图像-文本相似度实现。
    计算过程为:计算image transformer输出query表征Z(与可学习query长度相同)与text transformer输出文本表征 t 中【CLS】token相似性,选取最大值作为图像文本对相似度,为防止信息泄露,作者使用单模态self-attention mask,query与text不能互相可见,防止从文本直接学习。
  2. 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图像。

  1. 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 在模块化设计与效率方面取得突破,其性能仍受到视觉语言对齐质量和语言模型输出可控性的限制。未来研究可聚焦于提升跨模态对齐精度、引入更强的语言理解能力,以及在对话、多轮推理等更复杂场景中的扩展应用。


http://www.hkcw.cn/article/VSuhJkujpf.shtml

相关文章

算法打卡12天

19.链表相交 (力扣面试题 02.07. 链表相交) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交**:** 题目数据…

Redis最佳实践——安全与稳定性保障之连接池管理详解

Redis 在电商应用的连接池管理全面详解 一、连接池核心原理与架构 1. 连接池工作模型 #mermaid-svg-G7I3ukCljlJZAXaA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-G7I3ukCljlJZAXaA .error-icon{fill:#552222;}…

无人机+AI视频联网:精准狙击,让‘罪恶之花’无处藏身

引言:禁毒攻坚战,科技是关键 今天是2025年5,正值罂粟等毒株生长关键期。传统人工巡查耗时长、盲区多,而无人机巡检视频AI分析的智慧禁毒方案,正以“高空鹰眼地面AI”的立体化监控网络,实现毒株种植的早发现…

以太网原理与开发802.3

W5500以太网搭建 官方移植库W5500 下载地址:GitCode - 全球开发者的开源社区,开源代码托管平台目录结构Ethernet以太网移植文件文件wizchip_conf 配置 芯片型号 工作模式 wizchip_conf.c配置 临界区片选SPI收发字节配置 自定义注册SPI // 自定义注册SPI相关回调函数 void use…

day5 cpp:,对象的组织(const对象),

1.对象的组织(类比内置类型) const对象 const对象只能调用const成员函数和数据成员,除了四大金刚 若成员函数没有加const(void print() const{}),即便里面没有_ix100修改值,也不能pt2.print()访问,因为是const Point pt2(3,5)--->对象不…

C语言进阶--动态内存管理

学习数据结构重要的三个部分:指针、结构体、动态内存管理(malloc、calloc、realloc、free)。 1.为什么存在动态内存分配? 1.空间开辟大小是固定的; 2.数组在声明时,必须指定数组的长度,它所需…

Excel如何去除公式保留数值

我们有时候使用Excel在修改一部分数值的时候会导致和该数值相关的通过公式进行计算的数值发生变化,但有时我们不想改变这些数值,同样的有时我们在移动一些数值的时候会导致通过这些数值计算的数值变为#!VALUE,这是我们不想发生的,…

C++学习-入门到精通【11】输入/输出流的深入剖析

C学习-入门到精通【11】输入/输出流的深入剖析 目录 C学习-入门到精通【11】输入/输出流的深入剖析一、流1.传统流和标准流2.iostream库的头文件3.输入/输出流的类的对象 二、输出流1.char* 变量的输出2.使用成员函数put进行字符输出 三、输入流1.get和getline成员函数2.istrea…

一周学会Pandas2之Python数据处理与分析-数据重塑与透视-melt() - 融化 / 逆透视 (宽 -> 长)

锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili melt() 是 pandas 中用于数据重塑的核心方法之一,它可以将 宽格式数据 转换为 长格式数据,特…

设计模式——工厂方法模式(创建型)

摘要 工厂方法模式是一种创建型设计模式,通过定义创建对象的接口,让子类决定实例化哪个类。它包含抽象产品、具体产品、抽象工厂和具体工厂等角色。该模式使类的实例化延迟到子类,具有良好的扩展性和灵活性,适用于多种场景&#…

软件性能之CPU

性能是个宏大而驳杂话题,从代码,到网络,到实施,方方面面都会涉及到性能问题,网上对性能讲解的文章多如牛毛,从原理到方法再到工具都有详细的介绍,本文虽不能免俗,但期望能从另外一个…

腾讯云推出云开发AI Toolkit,国内首个面向智能编程的后端服务

5月28日,腾讯云开发 CloudBase 宣布推出 AI Toolkit(CloudBase AI Toolkit),这是国内首个面向智能编程的后端服务,适配 Cursor 等主流 AI 编程工具。 云开发 AI Toolkit旨在解决 AI 辅助编程的“最后一公里”问题&…

当前用户的Git本地配置情况:git config --local --list

通过config命令可以查询当前用户的本地配置情况。这些配置项定义了 Git 在当前仓库中的行为,包括文件权限处理、符号链接处理以及大小写敏感性等。 git config --local --list core.repositoryformatversion0 指定 Git 仓库的格式版本。版本 0 是最初的格式。 cor…

修改 vscode 左侧导航栏的文字大小 (更新版)

1. 起因, 目的: 问题: vscode 左侧的文字太小了!!!我最火的一篇文章,写的就是这个问题。 看来这个问题,是很广泛的一个痛点。我最近更新了 vscode, 这个问题又出现了。再来搞一下。…

Python训练第四十天

DAY 40 训练和测试的规范写法 知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 昨天我们介绍…

Fine Pruned Tiled Light Lists(精细删减的分块光照列表)

概括 在这篇文章, 我将介绍一种Tiled Light 变体,主要针对AMD Graphics Core Next(GCN)架构进行优化,我们的方法应用于游戏 古墓丽影:崛起 中,特别是我们在通过光列表生成和阴影贴图渲染之间交错进行异步计…

《信号与系统》第 5 章 离散时间傅里叶变换

5.0 引言 第4章研究了连续时间傅里叶变换,并研究了这种变换的许多特性,这些特性使傅里叶分析方法在分析和理解连续时间信号与系统的性质时具有很大的价值。这一章将介绍并研究离散时间傅里叶变换,这样就完整地建立了傅里叶分析方法。 在第3…

5.2 初识Spark Streaming

在本节实战中,我们初步探索了Spark Streaming,它是Spark的流式数据处理子框架,具备高吞吐量、可伸缩性和强容错能力。我们了解了Spark Streaming的基本概念和运行原理,并通过两个案例演示了如何利用Spark Streaming实现词频统计。…

Kafka消息中间件

window中的安装 ①、下载并解压kafka压缩包,进入config目录下修改zookeeper.properties配置文件 因为kafka内置了zookeeper,所以不需安装zookeeper。设置zookeeper数据存储位置,如果该路径不存在,则自动创建 dataDir E:/kafka…

4.2.4 Spark SQL 数据写入模式

在本节实战中,我们详细探讨了Spark SQL中数据写入的四种模式:ErrorIfExists、Append、Overwrite和Ignore。通过具体案例,我们演示了如何使用mode()方法结合SaveMode枚举类来控制数据写入行为。我们首先读取了一个JSON文件生成DataFrame&#…