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

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” ↩︎

相关文章:

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 公司&…...

PyQt(学习笔记)

学习资料来源: PyQt快速入门——b站王铭东老师 PyQt官网的所有模块 C具体实现的官方文档 PyQt(学习笔记) PyCharm环境准备运行第一个程序QPushButtonQLabelQLineEdit调整窗口大小、位置、图标布局信号与槽PyQt引入多线程 PyCharm环境准备 新…...

策略模式应用(内窥镜项目播放不同种类的视频)

新旧代码对比 策略模式 基本概念 策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,并且使它们可以互相替换。策略模式允许客户端选择算法的具体实现,而不必改变客户端的代码。这样,客户端代码就…...

【操作系统】Bochs安装和配置

Bochs是使用C编写的高度可移植开源IA-32(X86)PC模拟器,能在大多数流行的平台上运行。它包括模拟Intel x86 CPU、常见I/O设备和自定义BIOS。Bochs可以被编译以模拟许多不同的x86 CPU,从386早期到最新的x86-64英特尔和AMD处理器甚至…...

【Vue】Node.js的下载安装与配置

目录 一.下载安装 官网: 二.环境变量的配置 三.设置全局路径和缓存路径 四.配置淘宝镜像 五.查看配置 六.使用npm安装cnpm ​ 一.下载安装 官网: https://nodejs.org/en/download 下载完之后,安装的时候一直点next即可&#xff0c…...

C语言从入门到实战——数组和指针的强化练习题

数组和指针的强化练习题 前言1. sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof和strlen的对⽐ 2. 数组和指针笔试题解析2.1 一维数组2.2 字符数组2.3 二维数组 3. 指针运算笔试题解析3.1 题目1:3.2 题目23.3 题目33.4 题目43.5 题目53.6 题目63.7 题目7 前言…...

经典滑动窗口试题(一)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、将x减到0的最小操作数1、题目讲解2、讲解算法原理3、代码实现 二、无重复的最长子串1、题…...

【paddlepaddle】

安装paddlepaddle 报错 ImportError: /home/ubuntu/miniconda3/envs/paddle_gan/bin/../lib/libstdc.so.6: version GLIBCXX_3.4.30 not found (required by /home/ubuntu/miniconda3/envs/paddle_gan/lib/python3.8/site-packages/paddle/fluid/libpaddle.so) 替换 /home/ubu…...

String 、StringBuffer 和 StringBuilder 的区别?

String 使用 String 声明一个字符串的时候,该字符串会存放在堆中的字符串常量池中。因为在java中所有的String 都是以常量表示,且由 final 修饰,因此在线程池中它的线程是安全的 且 不可变的 。每个 String 在被创建后就不再发生任何变化。 …...

【DevOps】Git 图文详解(六):Git 利器 - 分支

Git 利器 - 分支 1.分支 Branch2.分支指令 &#x1f525;3.分支的切换 checkout4.合并 merge & 冲突4.1 &#x1f538; 快速合并&#xff08;Fast forward&#xff09;4.2 &#x1f538; 普通合并4.3 处理冲突 <<<<<<< HEAD 5.变基 rebase 分支是从主…...

万界星空科技QMS质量管理系统介绍

QMS&#xff08;Quality Management System&#xff09;质量管理系统是五大基础系统之一&#xff0c;在工业企业中被广泛的应用&#xff0c;在质量策划、生产过程质量监督、体系审核和文档管理等业务上发挥着不可替代的作用。 一般制造业工厂现状&#xff1a;质量成本高&#x…...

C练习题_14

一、单项选择题&#xff08;本大题共 20小题&#xff0c;每小题 2分&#xff0c;共 40分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;并将所选项前的字母填写在答题纸的相应位置上。) 以下叙述不正确的是&#xff08;&#xff09; A.一个C源程序可…...

解决方案 | 政策与技术加持,法大大电子劳动合同让人事管理更省心

政策加持&#xff0c; 助力劳动合同电子化推广 近年来&#xff0c;国家人社部多次发文&#xff0c;明确电子劳动合同法律效力&#xff0c;鼓励推广电子劳动合同全面应用&#xff0c;积极引导、支持企业和劳动者依法规范订立电子劳动合同&#xff0c;优化人力资源社会保障公共服…...

Linux基础命令5

su——切换用户命令 例如&#xff0c;切换到stu用户底下 而切换到管理员的命令就是下图 切换完的区别就是 stu——root $——# 退出——exit 关机与重启命令 如果在右上角直接点x号&#xff0c;就相当于把电源拔断了&#xff0c;这样做的次数多了&#xff0c;有可能系统就…...

springboot(ssm中医学习服务管理系统 医学生在线学习平台Java(codeLW)

springboot(ssm中医学习服务管理系统 医学生在线学习平台Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或…...

springboot宠物领养系统-计算机毕设 附源码 44261

springboot宠物领养系统 摘 要 网络发布信息有其突出的优点&#xff0c;即信息量大&#xff0c;资源丰富&#xff0c;更新速度快等&#xff0c;很符合人们希望以捷、便利的方式获得最多最有效信息的要求。本系统就是一个网上宠物领养系统&#xff0c;为宠物爱好者提供一个信息…...

性能测试必备知识-使用MySQL存储过程构造大量数据:实例解析

在软件开发过程中&#xff0c;测试是一个不可或缺的环节。通过测试&#xff0c;我们可以发现并修复软件中的各种问题&#xff0c;提高软件的质量和稳定性。然而&#xff0c;手动编写大量的测试用例是一项耗时且容易出错的任务。为了解决这个问题&#xff0c;我们需要学会使用批…...

最新绿豆APP源码苹果CMS影视插件版本/原生JAVA源码+反编译开源+免授权

源码简介&#xff1a; 最新绿豆APP源码苹果CMS影视插件版本&#xff0c;它是原生JAVA源码反编译开源免授权&#xff0c;绿豆影视对接苹果CMS&#xff0c;它可以支持多功能自定义DIY页面布局。 1、新版绿豆视频APP视频6.1插件版反编译指南及教程 2、后端插件开源&#xff0c;可…...

SPSS多元对应分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…...

Rust语言特性探秘:宏的魔力

大家好&#xff01;我是lincyang。 今天我们继续深入探讨Rust语言中的一个有趣而强大的特性——宏&#xff08;Macros&#xff09;。 宏在Rust中扮演着特殊的角色&#xff0c;不仅提高了代码的灵活性&#xff0c;还增强了代码的可重用性。接下来&#xff0c;我们会通过具体的…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...