BLIP-2:冻结现有视觉模型和大语言模型的预训练模型

Li J, Li D, Savarese S, et al. Blip-2: Bootstrapping language-image pre-training with frozen image encoders and large language models[J]. arXiv preprint arXiv:2301.12597, 2023.

BLIP-2,是 BLIP 系列的第二篇,同样出自 Salesforce 公司,2023 年初挂在了 arXiv 上,不到一年时间已经拥有 600+ 引用量,可见其影响力。现在很多多模态大模型都是基于 BLIP-2 进一步拓展的。

与 ALBEF、BLIP 类似,BLIP-2 的目标是训练一个图文多模态预训练模型。不同点是,BLIP-2 是使用现有的单模态编码器,并且分两阶段冻结图像编码器和文本编码器训练出多模态预训练模型。这使得 BLIP-2 能够在降低训练成本的同时提高性能,给其带来了巨大的优势。

在这里插入图片描述

本文不再按照论文解读的方式逐段记录,只专注于介绍 BLIP-2 技术本身。本文参考 多模态学习6—深入理解BLIP-2,更多参考资料如下:

  • 全文翻译:BLIP2:下一代多模态模型的雏形;
  • 文章总结:[BLIP/BLIP2/InstructBLIP] 图文多模态理解与生成、一文读懂BLIP和BLIP-2多模态预训练;
  • 领域现状:多模态大模型 CLIP, BLIP, BLIP2, LLaVA, miniGPT4, InstructBLIP 系列解读;

目录

  • 一. 背景
  • 二. BLIP-2 原理
    • 1. BLIP-2 模型
    • 2. 预训练方法
  • 三. 实验
    • 1. 实验结果
    • 2. 对比实验
  • 四. 总结
  • 五. 复现

一. 背景

现有的视觉语言预训练 (VLP) 方法在训练图文多模态模型时,往往采用端到端的训练模式,主要存在以下两个问题:

  • 训练成本大:多模态模型需要大量数据,并且模型结构复杂,因此训练成本较高;
  • 模型灾难性遗忘:大语言模型在微调时,会产生遗忘现象。因此如果直接将单模态的预训练模型加入到多模态模型中进行联合训练,可能会产生灾难性的遗忘问题;

为此,作者提出了 BLIP-2 模型:

  • 使用现有的预训练过的视觉模型和语言模型(本文使用的是 大语言模型 LLM),避免 从头训练 (train-from-scratch),以减少训练成本;
  • 预训练期间 冻结 (froze) 单模态模型的参数,从而避免模型的灾难性遗忘;
  • 要想使用预训练过的单模态模型,就必须保证跨模态间能够对齐。为了让两个冻结的单模态模型对齐,引入了 Querying Transformer (Q-Former) 模块来对图文进行对齐,从而让图像和文本产生交互;

    LLM 本质上是个语言模型,无法直接接受其他模态的信息,所以需要把各个模态的信息统一到 LLM 能理解的特征空间。为此,作者提出了 Q-Former。为了融合特征,那 Q-Former 采用 transformer 架构最合适不过了。其实这里的 Q-Former 就是在 ALBEF 的基础上改进得到的。
    相较于 ALBEF,Q-Former 最大的不同就是引入了 Queries。这些 Queries 通过 Cross-Attention 与图像的特征交互,通过 Self-Attention 与文本的特征交互。

二. BLIP-2 原理

BLIP-2 全称也是 Bootstrapping Language-Image Pre-training,是一种 冻结现有视觉模型和大语言模型的预训练模型。这里的 Bootstrapping 指的是预训练阶段使用先前的学习结果来改进当前的学习结果:第一阶段的预训练使用冻结的视觉模型来学习图像 - 文本表示,第二阶段的预训练使用冻结的大型语言模型来学习图像 - 文本生成。

1. BLIP-2 模型

BLIP-2 由预训练的视觉模型 Image Encoder、预训练的大语言模型 Large Language Model、可学习的 Q-Former 组成:

  • Image Encoder:从输入图片中提取视觉特征。文中采用了两种不同的网络结构:CLIP 训练过的 ViT-L/14 和 EVA-CLIP 训练过的 ViT-g/14;
  • Large Language Model:大语言模型进行文本生成。文中采用了尝试了两种不同的网络结构:decoder-based LLM 和 encoder-decoder-based LLM;
  • Q-Former:弥补视觉和语言两种模态间的差异,实现跨模态间的对齐。Q-Former 使用了一组可学习的 查询向量 Queries 来从冻结的 Image Encoder 中提取视觉特征,然后传入 LLM 供其生成文本;

在这里插入图片描述

整个模型的流程是:Image Encoder 接收图像作为输入,输出图像的视觉特征;Q-Former 接收文本和 Image Encoder 输出的图像视觉特征,结合查询向量进行融合,学习与文本相近的视觉特征,输出 LLM 能够理解的视觉表示;最后 LLM 模型接收 Q-Former 输出的视觉标识,生成对应文本。

2. 预训练方法

在介绍 Q-Former 的训练方法之前,需要先明确 Q-Former 的结构:Q-Former 由 Image Transformer 和 Text Transformer 两个子模块构成,它们共享相同的自注意力层:

  • Image Transformer:用于与冻结的图像编码器进行交互,从中提取一定数量的输出特征;
  • Text Transformer:既可以作为文本编码器,也可以作为文本解码器。它创建一组可学习的 Queries 作为 Image Transformer 的输入,这些 Queries 在 Image Transformer 中通过自注意力层相互作用,并通过交叉注意力层与冻结的图像特征进行交互。根据预训练任务的不同,可以应用不同的自注意力掩码来控制查询文本交互;

在这里插入图片描述

Q-Former 使用 BERTbase 的预训练权重初始化,而交叉注意力层则是随机初始化。Q-Former 总共包含 188M 的参数。

预训练 Q-Former 时采用两阶段的训练策略:

  • 第一阶段:冻结 Image Encoder 的参数,训练 Queries 和 Q-Former,让 Queries 能够从 Image Encoder 中提取图像特征,转化为和文本特征接近的视觉特征。这一阶段相当于在将图像特征空间拉近到文本特征空间;
    在这里插入图片描述

  • 第二阶段:冻结 LLM 的参数,训练 Queries 和 Q-Former,使得模型能够获取强大的 zero-shot 能力和图像生文本的能力。这一阶段相当于学习如何将视觉信息转换为自然语言文本,以便在后续的任务中生成与图像相关的自然语言描述;
    在这里插入图片描述

两阶段的具体训练方法详见 多模态学习6—深入理解BLIP-2。

从功能上讲,Q-Former 机制本质上是为了对齐图像和文本。如果没有对齐操作,直接进行第二阶段的 LLM 生成任务学习,那么模型最后的结果会比较差,论文中也有实验证明。但对齐操作并不是一定需要 Q-Former 这种形式么,只要能够将 Image encoder 提取的原始图像特征进行某种程度的映射,理论上就可以进行对齐。但采用 Q-Former 确实有一些明显的优势,包括特征数量的固定、参数共享等。

三. 实验

1. 实验结果

下图的 zero-shot image-to-text generation 示例展现了 BLIP-2 模型超强的能力,包括视觉对话、知识推理、信息检索、语言表达、文本生成等:
在这里插入图片描述

2. 对比实验

文中还对比了不同 VLP 模型在 Image Captioning、VQA、Image-Text Retrieval 等任务上的表现:
在这里插入图片描述

四. 总结

BLIP-2 是一个典型的图文多模态模型,使用训练好的单模态模型和 Q-Former 机制,通过两阶段训练对不同模态进行对齐,有效地减少了训练成本并解决了模型的遗忘现象。

作者在文末表明,BLIP-2 也存在一些局限性:

  • 上下文学习能力的缺失:由于预训练数据集中的每个数据只包含一个图像 - 文本对,因此 LLM 无法学习到一个序列中多个图像 - 文本对的相关性;
  • LLM 知识库的不准确性:由于语言任务完全依赖 LLM,因此 LLM 知识库的不准确性和滞后性都会对语言任务的结果带来影响。并且冻结 LLM 参数还会带来一定的风险,包括 LLM 中的攻击性语言、社会偏见等。一种解决办法是进行微调,或者对有害数据集进行过滤;

五. 复现

Salesforce 没有开源预训练的代码,只开源了 训练好的模型 和 API,通过导入 lavis.models 包进行调用,可以直接拿来做下游任务。网页版的 Demo 也可以在线完成 Image Captioning、VQA 等任务(已停用)。

以 blip2_instructed_generation.ipynb 为例,调用 BLIP-2 提供的 API 处理下游任务。一开始使用的是 Google Colab,但加载模型时内存超限;后来换成 AutoDL,但 demo 文件调用封装的 lavis.models 需要从 https://huggingface.co/models 加载,遇到 OSError: Can't load tokenizer for 'bert-base-uncased'. 问题,查阅 huggingface 的讨论区发现是网络问题 1,AutoDL不能访问。下面只展示 demo 里自带的实验结果。

实验结果

在这里插入图片描述

在这里插入图片描述


  1. What to do when HuggingFace throws “Can’t load tokenizer” ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/169889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣贪心——跳跃游戏I和II

1 跳跃游戏 利用边界进行判断,核心就是判定边界,边界内所有步数一定是最小的,然后在这个边界里找能到达的最远地方。 1.1 跳跃游戏I class Solution {public boolean canJump(int[] nums) {int len nums.length;int maxDistance 0;int te…

C/C++多级指针与多维数组

使用指针访问数组 指针类型的加减运算可以使指针内保存的首地址移动。 指针类型加n后。首地址向后移动 n * 步长 字节。 指针类型减n后。首地址向前移动 n * 步长 字节。 步长为指针所指向的类型所占空间大小。 例如: int *p (int *)100;p 1,结果为首…

[机缘参悟-119] :反者道之动与阴阳太极

目录 一、阴阳对立、二元对立的规律 1.1 二元对立 1.2 矛盾的对立与统一 二、阴阳互转、阴阳变化、变化无常 》无序变化和有序趋势的规律 三、阴阳合一、佛魔一体、善恶同源 四、看到积极的一面 五、反者道之动 5.1 概述 5.2 "否极泰来" 5.3 “乐极生悲”…

科大讯飞 vue.js 语音听写流式实现 全网首发

组件下载 还是最近的需求,页面表单输入元素过多,需要实现语音识别来由用户通过朗读的方式向表单中填写数据,尽量快的、高效的完成表单数据采集及输入。 国内科大讯飞在语音识别方面的建树还是有目共睹,于是还是选择了科大讯飞的平…

让别人访问电脑本地

查看本地IP地址: 使用ipconfig(Windows)或ifconfig(Linux/macOS)命令来查看你的计算机本地网络的IP地址。确保*****是你的本地IP地址。 防火墙设置: 确保你的防火墙允许从外部访问*****。你可能需要在防火…

leetcode:504. 七进制数

一、题目: 链接: 504. 七进制数 - 力扣(LeetCode) 函数原型: char* convertToBase7(int num) 二、思路 本题要将十进制数转换为二进制数,只要将十进制num数模7再除7,直到num等于0 每次将模7的结…

React整理总结(五、Redux)

1.Redux核心概念 纯函数 确定的输入,一定会产生确定的输出;函数在执行过程中,不能产生副作用 store 存储数据 action 更改数据 reducer 连接store和action的纯函数 将传入的state和action结合,生成一个新的state dispatc…

【算法】二分查找-20231121

这里写目录标题 一、344. 反转字符串二、392. 判断子序列三、581. 最短无序连续子数组四、680. 验证回文串 II 一、344. 反转字符串 提示 简单 865 相关企业 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组…

数据结构--串的基本概念

目录 串的基本概念 串的定义 串与线性表对比 ​串的基本操作​ 串的比较 字符集编码 乱码问题​编辑 总结 ​串的存储结构 ​串的顺序存储​编辑 串的链式存储 串的基本操作 1、求字串 2、比较 3、定位操作 总结 串的基本概念 串的定义 串与线性表对比 串的…

飞翔的小鸟

运行游戏如下: 碰到柱子就结束游戏 App GameApp类 package App;import main.GameFrame;public class GameApp {public static void main(String[] args) {//游戏的入口new GameFrame();} } main Barrier 类 package main;import util.Constant; import util.Ga…

C/C++最大质因子 2021年12月电子学会中小学生软件编程(C/C++)等级考试一级真题答案解析

目录 C/C最大质因子 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C最大质因子 一、题目要求 1、编程实现 质因子是指能整除给定正整数的质数。而最大质因子是指一个整数的所有质因子中最大的那个。…

〖大前端 - 基础入门三大核心之JS篇㊴〗- DOM节点的关系

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

电子学会C/C++编程等级考试2022年06月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:倒序输出 依次输入4个整数a、b、c、d,将他们倒序输出,即依次输出d、c、b、a这4个数。 时间限制:1000 内存限制:65536输入 一行4个整数a、b、c、d,以空格分隔。 0 < a,b,c,d < 108输出 一行4个整数d、c、b、a,整数之…

机器学习-笔记

绪论 参考期刊 ICCV 偏向视觉CVPR 偏向MLIAAA AI原理ICML 参考链接 CSDN 机器学习知识点全面总结 课堂内容学习-0912-N1 对于特征提取&#xff0c;简而言之就是同类聚得紧&#xff0c;异类分得开&#xff1b;   detection研究的是样本二分类问题&#xff0c;即分为正样本…

C语言之sizeof 和 strlen 详细介绍

C语言之sizeof 和 strlen 文章目录 C语言之sizeof 和 strlen1. sizeof 和 strlen 的比较1.1 sizeof1.2 strlen1.3 sizeof 和 strlen 的对比 2. 练习2.1.1 一维数组2.1.2 字符数组 1. sizeof 和 strlen 的比较 1.1 sizeof sizeof是C语言中的一个关键字&#xff0c;计算的是变量…

数字化文化的守护之星:十八数藏的非遗创新之道

在数字时代的浪潮中&#xff0c;十八数藏犹如一颗璀璨的守护之星&#xff0c;为传统文化注入了新的生命力。这个非遗创新项目以数字化为工具&#xff0c;以守护为使命&#xff0c;开辟了文化传承的新航道。 十八数藏是文化数字守护的引领者&#xff0c;通过数字技术&#xff0…

下厨房网站月度最佳栏目菜谱数据获取及分析PLus

目录 概要 源数据获取 写Python代码爬取数据 Scala介绍与数据处理 1.Sacla介绍 2.Scala数据处理流程 数据可视化 最终大屏效果 小结 概要 本文的主题是获取下厨房网站月度最佳栏目近十年数据&#xff0c;最终进行数据清洗、处理后生成所需的数据库表&#xff0c;最终进…

小黑子的SSM整合

SSM整合 一、基于restful页面数据交互1.1 后台接口开发1.2 页面访问处理 二、ssm整合2.1 流程分析2.2 整合配置2.3 功能模块开发2.4 接口测试2.5 表现层与前端数据传输协议定义2.5.1 协议实现 2.6 异常处理器2.6.1 RestControllerAdvice2.6.2 ExceptionHandler2.6.3 项目异常处…

[github配置] 远程访问仓库以及问题解决

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于新西兰奥克兰大学攻读IT硕士学位。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。跨领域…

外观模式 rust和java的实现

外观模式 外观模式&#xff08;Facade Pattern&#xff09;隐藏系统的复杂性&#xff0c;并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口&#xff0c;来隐藏系统的复杂性。 举个例子 &#xff1a;就像电脑的usb接口&#xff0c;自己内部实现了复杂…