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

BLIP-2:连接冻结的视觉编码器和冻结的语言模型

论文:BLIP-2:BootstrappingLanguage-ImagePre-training with Frozen Image Encoders and Large Language Models
arXiv: 2301.12597 | Salesforce Research | Junnan Li, Dongxu Li, Silvio Savarese, Steven Hoi | 2023 ICML

写在前面

既然 CLIP 已经能把图像和文字对齐,GPT 系列已经能生成流畅的文本,为什么不直接把两者拼起来?问题的关键不是"拼不拼得起来",而是"拼起来之后 LLM 能不能听懂"。BLIP-2 的整个设计,本质上就是在回答这一个问题:在两个都冻结的大模型之间,怎么架一座合格的桥?


一、问题背景:端到端预训练的代价越来越难以承受

2023 年前后,视觉-语言预训练(Vision-Language Pre-training,VLP)的主流范式是端到端训练:图像编码器和语言模型打包在一起,在海量图文对数据上从头或从预训练权重联合微调。这个路子的问题很实际——随着模型规模增大,训练成本呈指数级上升,且每次想换一个更强的语言模型,整个系统就得重新训练一遍。

另一条路是"冻结"策略:把已经训好的图像编码器和 LLM 都锁住,只训一个中间的适配模块。这条路计算效率高,也能"即插即用"地享受社区最新的基础模型。但问题是:冻结的 LLM 在单模态文本上预训练,它从未见过图像,视觉特征直接塞给它,它根本不懂。

之前的尝试并不令人满意。Frozen(Tsimpoukelli et al., 2021)直接把图像编码器的输出当作软提示(soft prompt)喂给 LLM,效果有限。Flamingo(Alayrac et al., 2022)在 LLM 内部插入新的交叉注意力层来注入视觉特征,效果不错,但需要在数十亿图文对上预训练这些插入层,成本极高。

论文作者对这两种做法的诊断是:单纯依赖语言建模损失(image-to-text generation loss)来驱动视觉-语言对齐是不够的——它没有显式地强迫视觉表示与文本语义对齐,LLM 只能靠自己猜图像的意思。

BLIP-2 的核心贡献,是提出了一个叫Q-Former(Querying Transformer)的轻量模块,用一套两阶段的预训练策略,在不动两侧大模型的前提下,把这件事做好。


二、整体架构:三块拼图,只训中间那块

BLIP-2 的结构非常清晰,由三部分组成:

冻结的图像编码器 → Q-Former(唯一可训练部分)→ 冻结的 LLM

图像编码器的候选是两个视觉 Transformer:CLIP 的 ViT-L/14,以及 EVA-CLIP 的 ViT-g/14。论文有一个值得注意的处理细节:使用倒数第二层(penultimate layer)的输出特征,而非最后一层。作者发现这样做效果稍好,原因可能是最后一层的特征已经过度偏向图像-文本对比任务,丢失了部分通用视觉信息。

LLM 的候选是两类:基于 Decoder 的 OPT 系列(Meta 的无监督预训练语言模型),以及基于 Encoder-Decoder 的 FlanT5 系列(Google 的指令微调语言模型)。两侧都完全冻结,不参与任何梯度更新。

中间的 Q-Former 是整个系统里唯一被训练的模块,参数量 188M。它扮演的角色是信息瓶颈(information bottleneck):从图像编码器里过滤出 LLM 最需要的那部分视觉信息,丢弃与任务无关的内容。

这种"三段式、只训中间"的设计,极大地降低了计算成本。整个训练,第一阶段在 16 张 A100(40G)上不超过 6 天,第二阶段不超过 3 天。


三、Q-Former 的内部结构:两个共享自注意力层的 Transformer

它由两个 Transformer 子模块组成,但这两个子模块共享同一套自注意力层(self-attention layers)

  • 图像 Transformer(Image Transformer):负责从冻结图像编码器中提取视觉特征
  • 文本 Transformer(Text Transformer):既可以作为文本编码器,也可以作为文本解码器使用

Q-Former 的输入端有一组可学习的 query 向量,你可以把query 向量理解成一组可学习的 “问题”。数量固定为 32 个,每个维度 768(与 Q-Former 的隐层维度一致)。这 32 个 query 是模型的参数,随训练更新。

这 32 个 query 与图像特征的交互方式是:通过交叉注意力层(cross-attention layers),每隔一个 Transformer block 插入一次,query 作为 Q,冻结的图像特征作为 K/V。这意味着 query 不能修改图像特征,只能"读取"它。

同时,这 32 个 query 也通过共享的自注意力层与文本 token 交互——但到底允不允许 query 和文本互相"看到对方",取决于当前预训练任务使用的 attention mask 策略,这是第一阶段三个目标的核心差异所在。

Q-Former 的初始化权重来自 BERT-base,交叉注意力层随机初始化。

一个关键的几何视角:图像编码器输出的特征大小是 257×1024(对于 ViT-L/14,257 = 196 个 patch + 1 个 CLS token),而 Q-Former 输出的 Z 大小是 32×768。这个从高维到低维的压缩本身就是一种约束,迫使 32 个 query 必须有所取舍,只保留对文本最有价值的视觉信息。


四、第一阶段:从冻结图像编码器引导视觉-语言表示学习

第一阶段将 Q-Former 接在冻结的图像编码器后面,在 129M 图文对数据上训练。训练数据来自 COCO、Visual Genome、CC3M、CC12M、SBU,以及 LAION400M 中的 1.15 亿张图像。论文还使用了来自 BLIP 的 CapFilt 方法对网络图文对进行质量过滤:用 BLIPlarge 模型为每张图像生成 10 条合成描述,再用 CLIP ViT-L/14 的图文相似度打分排序,保留每张图最高分的两条作为训练文本。

这一阶段同时优化三个目标,三者共享同一套 Q-Former 参数,但使用不同的自注意力 mask 策略:

4.1 图文对比学习(Image-Text Contrastive Learning,ITC)

目标是让图像表示和文本表示的互信息最大化,即正样本对相似度高、负样本对相似度低。

具体操作:文本 Transformer 的 [CLS] token 输出作为文本表示 t;图像 Transformer 的 32 个 query 输出 Z 作为图像表示。由于 Z 是 32 个向量,论文计算每个 query 输出与 t 之间的点积相似度,取最高值作为整体图文相似度。

Attention mask 策略:单模态自注意力 mask(unimodal self-attention mask)——query 只能和 query 互相 attend,文本 token 只能和文本 token 互相 attend,两者完全隔离,不能互相"偷看"。这样才能保证各自的表示是独立学出来的,对比学习才有意义。

由于图像编码器被冻结,每个 GPU 可以放更多样本(不需要为图像编码器存梯度),所以用 in-batch 负样本而非动量队列,训练更稳定高效。

4.2 基于图像的文本生成(Image-grounded Text Generation,ITG)

目标是让 Q-Former 能够基于图像生成对应的文本描述,强迫 query 提取文本生成所需的全部视觉信息。

由于 Q-Former 的设计里,冻结图像编码器和文本 token 之间没有直接交互通道——图像信息必须先被 query 提取,再通过自注意力层传递给文本 token——这个设计本身就逼着 query 去捕获与文本生成相关的一切视觉细节。

Attention mask 策略:多模态因果自注意力 mask(multimodal causal self-attention mask)——query 可以互相 attend(但不能看文本),文本 token 可以 attend 所有 query 以及它前面的所有文本 token(因果语言模型的标准做法)。同时,[CLS] token 被替换为一个新的 [DEC] token,用来标志解码任务的开始。

4.3 图文匹配(Image-Text Matching,ITM)

目标是学习更细粒度的图文对齐,让模型能判断一对图文是否匹配(二分类任务)。

Attention mask 策略:双向自注意力 mask(bi-directional self-attention mask)——所有 query 和所有文本 token 都可以互相 attend,信息充分融合。输出的 32 个 query embedding Z 包含了多模态融合信息,分别过一个二分类线性层,32 个 logit 取平均作为最终的匹配分数。

为了产生更难的负样本(hard negatives),论文采用了与 BLIP 一样的难负例挖掘策略:根据 ITC 计算的相似度,在 batch 内选取相似度高但标签为负的配对作为难负例,迫使 ITM 学到更精细的区分能力。

三个目标的本质区别可以用一句话概括:

  • ITC:query 和 text 完全隔离 → 各自独立表示 → 对比学习
  • ITG:query 能读 image,text 能读 query(单向)→ 用视觉信息生成文本
  • ITM:query 和 text 双向互看 → 深度融合判断匹配

五、第二阶段:从冻结 LLM 引导视觉-语言生成学习

第一阶段训练完成后,Q-Former 已经知道如何从图像中提取与语言相关的视觉表示。第二阶段的任务是让这 32 个 query 的输出能被 LLM 理解,实现真正的视觉-语言生成。

做法极其简洁:在 Q-Former 的 32 个输出 embedding Z 后面,接一个全连接层(FC layer),将 Z 从 768 维线性投影到 LLM 的输入 embedding 维度。投影后的 32 个向量直接拼接(prepend)在文本 embedding 的前面,作为"软视觉提示(soft visual prompts)"输入 LLM。

LLM 看到的输入序列结构是:[视觉 prompt × 32] + [文本 tokens]

LLM 完全冻结,只有 FC 层的参数在这一阶段参与训练,但 Q-Former 同样继续更新(因为它需要学会生成 LLM 能理解的输出)。

根据 LLM 的类型,训练目标有所不同:

Decoder-based LLM(如 OPT):采用标准语言建模损失,LLM 的任务是根据视觉 prompt 生成完整的文本描述。

Encoder-Decoder-based LLM(如 FlanT5):采用前缀语言建模损失(prefix language modeling loss)。具体是把文本分成两部分,前半段(prefix)和视觉表示一起输入 Encoder,后半段(suffix)作为 Decoder 的生成目标。这种设计让 Encoder 同时处理视觉和部分文本上下文,Decoder 完成续写,更适合 FlanT5 这类 seq2seq 结构。

论文认为,这一阶段之所以奏效,很大程度上是因为第一阶段已经完成了大部分"对齐"工作——Q-Former 输出的 Z 已经是"语言友好的视觉表示",LLM 无需再费力猜测图像内容,只需专注于语言生成本身,从而大大缓解了灾难性遗忘(catastrophic forgetting)的风险。


六、实验结果:用 188M 可训练参数打败参数量 54 倍的 Flamingo

论文在零样本 VQAv2 上的对比最能说明问题:

模型可训练参数零样本 VQAv2
Flamingo 80B10.2B56.3
BLIP-2 (ViT-g + FlanT5-XXL)188M65.0

54 倍的参数差距,8.7 个百分点的精度优势。

在图像描述(NoCaps)任务上,BLIP-2 在 CIDEr 指标达到 121.6,而 BLIP 是 113.2,BLIP-2 在可训练参数远少于 BLIP 的情况下反超。

在图文检索(Flickr30K)上,TR@1 达到 97.6,IR@1 达到 89.7,同样超越了 BLIP 和 BEIT-3。

除了标准 benchmark,论文还展示了 BLIP-2 在零样本指令跟随上的涌现能力(emergent capabilities):给定图像和自然语言指令,模型能完成视觉对话、视觉常识推理、讲故事、个性化图文生成等任务。这一切能力都来自于 LLM 本身,BLIP-2 所做的只是给它接上了"眼睛"。


七、局限性

论文的 Limitation 部分写得很诚实,有几点值得专门提出来。

视觉定位能力弱。Q-Former 输出的是 32 个聚合的视觉 token,丢失了大量空间细节。这导致 BLIP-2 在需要精确空间理解的任务上(比如"图中左上角的物体是什么")表现较差,在 Referring Expression Comprehension 等定位任务上也有明显差距。

复杂推理的失败模式难以预测。由于 LLM 完全冻结,BLIP-2 的视觉推理能力受制于语言模型本身的推理路径。当视觉信息和语言模型的先验知识冲突时,模型倾向于"听语言模型的",导致幻觉(hallucination)。

LLM 的偏见被完整继承。OPT 和 FlanT5 各自带有训练数据里的社会偏见,BLIP-2 完整继承了这些问题,并且因为引入了视觉模态而可能产生新的偏见组合。

对话历史的利用有限。第一版 BLIP-2 没有针对多轮对话设计,在视觉对话场景下性能有限(这一问题后来被 InstructBLIP 等工作跟进解决)。


论文链接:https://arxiv.org/abs/2301.12597
代码:https://github.com/salesforce/LAVIS/tree/main/projects/blip2


附:几个设计选择

1. 为什么 32 个 query 就够了?

32×768 的输出维度是一个工程上的权衡,而不是理论上的最优解。论文没有做详细的 query 数量消融,但有一个直觉:query 越多,压缩程度越低,传给 LLM 的信息越多,但 LLM 需要处理的 soft prompt 也越长;query 太少,则会丢失重要的视觉细节。32 这个数字在实验中效果不错,并且与 BERT-base 的 32 token 输出对齐,从初始化的角度也合理。

2. 为什么只用倒数第二层的 ViT 特征?

这是一个常见的工程 trick,在 CLIP、DINO 系列的工作中也有类似观察。ViT 的最后一层特征被强烈地拉向对比学习目标,丢失了部分空间和语义多样性。倒数第二层保留了更丰富的中间层表示,对下游任务更友好。

3. Q-Former 为什么初始化自 BERT-base 而非随机?

BERT-base 已经在大规模语言数据上预训练,其 self-attention 层对文本的语义理解有基本能力。Q-Former 的文本 Transformer 部分直接继承这些能力,可以让第一阶段的文本相关目标(ITC、ITG、ITM)更快收敛,也避免了从随机初始化训练带来的不稳定性。

4. 两阶段设计的本质是什么?

第一阶段解决的是"视觉和语言在 embedding 空间里能不能对上";第二阶段解决的是"对上之后 LLM 能不能用"。这两个问题其实是不同层面的:前者是表示对齐(representation alignment),后者是生成对齐(generation alignment)。把它们分开训练,每个阶段都有清晰的优化目标,比一个阶段硬撑两件事要稳定得多。

http://www.jsqmd.com/news/579664/

相关文章:

  • 1.15GB!Bonsai-8B实现14倍压缩的终极1-bit大模型
  • 从新手小白到资深开发者:GISBox与QGIS如何适配你的成长路径?
  • Pixel Couplet Gen步骤详解:从输入愿望到生成可分享像素春联的完整链路
  • 北京亦庄综保区首批加工、研发产业空间项目通过竣工验收
  • 【开源实战】WallNest:Python 爬虫 + FastAPI + Vue3 壁纸采集与展示小全栈
  • Phi-4-mini-reasoning镜像免配置:预置Prometheus监控指标暴露配置
  • 从8.2%到40%:MOF-on-MOF如何“解锁”能量转移,大幅提升发光效率?
  • GHelper完整指南:为华硕笔记本卸载臃肿控制软件的最佳替代方案
  • 2026年比较好的玉米种子/耐旱玉米种子/抗病玉米种子/抗青枯玉米种子公司选择指南 - 品牌宣传支持者
  • Yi-Coder-1.5B与Vue.js前端开发集成方案
  • OpenClaw跨平台同步:Qwen3.5-9B维护多设备代码仓库
  • Llama-3.2V-11B-cot惊艳效果展示:高精度图像理解+可解释性推理链生成
  • 智能家居中枢:OpenClaw+Kimi-VL-A3B-Thinking解析监控画面触发自动化流程
  • 数字人形象哪里找?lite-avatar形象库150+角色免费使用体验
  • 2026年知名的景区饭店/平遥特色饭店/饭店人气排行榜 - 品牌宣传支持者
  • 2026年口碑好的河南高产玉米种子/河南玉米种子长期合作厂家推荐 - 品牌宣传支持者
  • 长春市场较好的洗浴设计企业推荐榜单
  • MySQL 故障排查与生产环境优化笔记
  • Z-Image-Turbo LoRA WebUI教程:分辨率1024x1024与768x768显存占用对比
  • 2026年比较好的圆头华司钻尾丝/复合垫钻尾丝/高强钻尾丝/六角头钻尾丝厂家精选合集 - 品牌宣传支持者
  • 持续集成整合:OpenClaw+Qwen3-14B自动化代码审查流水线
  • PyTorch 2.8镜像真实效果:RTX 4090D上Wan2.2-T2V视频生成质量对比评测
  • 告别云端依赖!DeepSeek-R1-Distill-Qwen-1.5B离线运行全攻略
  • 使用IDE(如IntelliJ IDEA)调试StructBERT模型服务端代码
  • 突破语言壁垒:PotPlayer字幕实时翻译插件让跨语言视频观看效率提升300%
  • AI万能分类器效果展示:电商评论情感分类真实案例分享
  • 雯雯的后宫-造相Z-Image-瑜伽女孩惊艳效果展示:新月式体式+柔光原木场景生成实录
  • 忍者像素绘卷微信小程序合规指南:生成内容审核接口对接方案
  • 大学生论文降重技巧:用AI辅助,重复率轻松降到10%以下
  • nli-distilroberta-base惊艳呈现:可视化交互界面实时演示Entailment推理过程