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

【多模态大模型】 BLIP-2 in ICML 2023

一、引言

论文: BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
作者: Salesforce Research
代码: BLIP-2
特点: 该方法分别使用冻结的图像编码器(ViT-L/14、 ViT-g/14)和大语言模型(OPT、FlanT5)进行图像特征提取和文本特征提取与生成;提出Q-Former连接图像编码器和大语言模型;提出两阶段预训练策略分别提升模型特征学习和视觉到语言的生成学习能力。

⚠️ 在学习该方法前,建议补充ViT、BERT、ALBEF、BLIP的相关知识。

二、详情

BLIP-2的整体结构图如下:

可见,它的图像编码器和大语言模型都是冻结的,作为一种预训练方法Q-Former起着至关重要的作用。左右两边则分别是预训练的两个阶段,第一个阶段致力于提升模型表征学习能力使查询token与文本token能够对齐并提取出与文本最相关的视觉特征,第二个阶段致力于提升模型视觉到语言的生成学习能力,使查询token能够被大语言模型理解。

2.1 Q-Former

Q-Former的整体结构图如下:

可见,它包括两个N层的transformer结构(N=12),分别为图像transformer文本transformer

  • 图像transformer文本transformer的自注意力和FFN都由BERT base _{\textbf{base}} base初始化。
  • 图像transformer文本transformer的自注意力在forward时参数共享。
  • 图像transformer额外增加了被随机初始化的交叉注意力。

图像transformer的输入有两个,分别是查询token和图像编码器输出的图像token。查询token是由nn.Embedding随机初始化的30个长度为768的可学习参数。图像编码器输出的图像token在交叉注意力模块与查询token交互。

文本transformer的输入只有一个,即与图像配对的文本经Tokenizer得到的文本token。

2.2 表征学习阶段

第一阶段表征学习的目的是使Q-Former学习图像token中与文本token最相关的部分,相关内容由查询token表征。

表征学习的示意图如下:

可见,表征学习主要涉及3项损失,包括image-text contrastive learning (ITC)损失、image-text matching (ITM)损失、Language Modeling (LM)损失;此外,Q-Former具有独特的输入形式。

2.2.1 独特的输入

Q-Former具有独特的输入形式,查询token和文本token被拼接到了一起,图像transformer文本transformer使用相同的拼接后的token进行forward,但不同的损失使用不同的mask来阻挡查询token和文本token之间不期望的交互。

为方便理解,我在图中增加了一条红线,表示图像transformer文本transformer中输入自注意力的token是相同的,即查询token和文本token拼接在一起形成的新token。

2.2.2 ITC损失与mask

ITC损失旨在对齐查询token和文本token,即使成对的token更相似,反之更不相似。

ITC损失不允许两个模态token间有任何交互,因此其mask被称为单模态自注意力掩码,如下图:

  • 文本在Tokenizer之前需要在最前面扩充一个[CLS],用来表达对当前文本的总结。例如,原文本是“I am very happy today.”,则新文本应为“[CLS] I am very happy today.”
  • 查询token会在交叉注意力模块与图像编码器输出的图像token交互,可以理解为最后输出的查询token是图像token的加权和,所以对齐查询token和文本token就是对齐图像特征和文本特征。

对于一个图像-文本对,ITC损失使用图像transformer输出的30个查询token和文本transformer输出的1个[CLS]token计算相似度。首先,30个查询token均与该[CLS]token计算相似度;然后,取最高的相似度作为该图像-文本对的相似度。 对于该图片,可以以类似的方法计算其与当前批次下其它文本的相似度,所有相似度形成一个logits,对应的one-hot标签在原图像-文本对的位置上取1,其余取0,即可计算交叉熵损失。同样地,该文本也可以计算其与当前批次下其它图像的相似度形成logits进而计算损失。

由于BLIP-2的图像编码器是始终冻结的,所以BLIP-2有更多的显存来支持更大的batchsize,所以负图像-文本对只需要在当前批次中寻找和计算。然而,ALBEF和BLIP的图像编码器也需要预训练,无法支持大的batchsize,因此只能额外引入动量模型和队列来补充负图像-文本对。

2.2.3 ITM损失与mask

ITM损失旨在更细粒度地使图像和文本特征对齐。它是一个二分类任务,判断当前图像-文本对是否匹配。

ITM损失完全允许两个模态token间的交互,因此其mask被称为双向自注意力掩码,如下图:

由于独特的输入形式、mask、自注意力参数共享,ITM损失下的查询token会在自注意力模块与文本token发生交互并在交叉注意力模块与图像token交互,因此最后输出的查询token虽然仍是图像token的加权和,但其权重是综合了图像和文本信息的,因此能够实现更细粒度的特征对齐。

对于一个图像-文本对,ITM损失仅使用图像transformer输出的30个查询token进行二分类预测。首先,将所有的查询token送入一个全连接+softmax的二分类线性分类器获取logits,然后,对30个logits求平均作为最终的预测。 对于该图像,在计算ITC损失时已经计算了它与同批次内其它文本的相似度,因此可以选取其中相似度最高的作为hard的负文本,与图像形成负图像-文本对。原配图像-文本对应预测为匹配。负图像-文本对应预测为不匹配。对于该文本,也可以找到对应的hard的负图像,形成另一个负图像-文本对进而计算损失。

  • ITM损失引入了额外的负图像-文本对,并且要使用查询token进行二分类预测,因此一个图像-文本对会对应3次forward,分别是1次原图像-文本对、2次负图像-文本对(分别以图像和文本为基准找到的hard负例)。
  • ITM损失直接通过查询token进行二分类预测,因此不需要[CLS]token。然而,ALBEF和BLIP是根据[CLS]token和[Encode]token进行二分类预测,所以计算ITM损失时需要在文本前扩充对应的token。

2.2.4 LM损失与mask

LM损失旨在进一步建立图像token和文本token之间的联系,使输出的查询token能够提取出图像token中与文本token相关的部分并表达出来。

LM损失不允许查询获取文本信息,但允许文本获取查询信息(因为要在图像的指导下生成文本,如果提前获取文本信息预测会变得异常简单),因其是一个文本生成任务,所以文本token只能与自身之前的文本token交互(即因果mask),如下图:

  • 关于LM损失的计算和因果mask的详情,请参考我之前的博客BLIP in ICML 2022的2.2.3节。
  • LM损失需要一个token作为文本开始的标志,这里使用[DEC],即将ITC损失引入的[CLS]替换为了[DEC]

2.3 生成学习阶段

第二阶段生成学习的目的是使Q-Former输出的查询token能够被大语言模型所理解。

生成学习的示意图如下:

可见,连接Q-Former和大语言模型的是1层全连接,它将Q-Former的token维度转至与大语言模型输入维度一致;BLIP-2提供了两个版本的大语言模型,仅包含Decoder的和同时包含Encoder和Decoder的。

对于仅包含Decoder的大语言模型,Q-Former输出的查询token会直接作为输入,也被称为soft visual prompts。然后使用LM损失进行生成预测预训练。

对于同时包含Encoder和Decoder的大语言模型,还允许增加一个前缀提示,Tokenizer之后会拼接在Q-Former输出的查询token后面输入Encoder。然后使用LM损失进行生成后缀的预训练。

在第二阶段的预训练过程中,输入图像输入Q-Former图像transformer输出查询token(不再与文本token拼接),经全连接后送入大语言模型并进行预测,因此生成学习图像transformer也会得到更新,Q-Former文本transformer的FFN是唯一得不到更新的。

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
BLIP2-图像文本预训练论文解读

相关文章:

【多模态大模型】 BLIP-2 in ICML 2023

一、引言 论文: BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 作者: Salesforce Research 代码: BLIP-2 特点: 该方法分别使用冻结的图像编码器(ViT-L/…...

HPC高性能计算平台

随着技术的发展和数据量的爆炸性增长,企业面临的挑战日益复杂,对计算能力的需求也在不断增加。这些问题的解决超出了传统计算方法的能力范围,高性能计算(HPC)正是为解决这类问题而生。 高性能计算(HPC&…...

前端常用的几个工具网站

觉得不错的前端工具类网站 1、Grid布局生成 https://cssgrid-generator.netlify.app 2、拟物按钮样式生成 https://neumorphism.io 3、玻璃形态效果 在线制作CSS玻璃形态 4、一些Button、checkBox、switch、card的css样式 零代码 - 精美CSS样式库 5、CSS阴影生成 在线创建…...

支付功能之代收代付

有很多老板问小编:“这个分账功能好是好,也能搞定项目中的二清问题和税务纠纷,但还是太复杂了,每次要添加被分账对象都需要提交材料进行审核,太繁琐了,有没有更方便快捷的支付产品来解决资金问题&#xff1…...

QPixmap

pixel[ˈpɪksl]像素 QPixmap 是 Qt 框架中用于处理图像的一个类。它主要用于在屏幕上显示和处理图像,提供了许多实用的功能,如加载、保存、缩放、旋转、合并等。 绘制 从文件加载:从指定文件加载图像。 QPixmap pixmap(":/images/exam…...

Laravel门面之下:构建自定义门面应用的艺术

Laravel门面之下:构建自定义门面应用的艺术 在Laravel框架中,门面(Facade)提供了一种将类静态调用与面向对象代码解耦的优雅方式。门面是一个全局可访问的类,它为底层复杂的服务提供了一个简单的接口。然而&#xff0…...

智启万象 | 2024 Google 开发者大会直播攻略

8 月 7 日上午 9:30 2024 Google 开发者大会 主旨演讲直播将准时开启 想要在线上探索大会精彩内容? 快查收这份观看指南! 8 月 7 日上午 9:30 2024 Google 开发者大会开幕 锁定大会官网观看主旨演讲现场直播! 本次大会内容将同步于多个…...

技巧:print打印内容到控制台时信息显示不全

# 请求一个接口,res是响应内容,使用res.text打印的信息不全 #使用流式处理响应 #如果你需要流式处理大的响应,确保你在处理响应内容的同时不会提前结束流。resself.request_base(select_api,change_datachange_data)print("")# pri…...

3.表的操作

目录 创建表 创建表案例: 查看表结构 修改表 1.增加新列 2.修改列的属性 3.删除列 4.修改表名 5.修改列 删除表 创建表 语法: CREATE TABLE [IF NOT EXISTS] table_name(field1 datatype1 [COMMENT 注释信息],field2 datatype2 [COMMENT 注释…...

AI回答:C#项目编译后生成部分文件的主要职责

【引入】以ConsoleApp1为例,请问C#编译之后以下文件有啥用 1.bin\runtimes 文件夹存放什么,有什么用? bin\runtimes 文件夹存放了项目的运行时相关文件,这些文件包括了各种目标平台的运行时库。 2.bin\生成的exe文件可以在别的电脑…...

RPC通信的简单流程

远程调用者假设需要调用Login方法,将调用的信息通过muduo库,同时进行了序列化和反序列化,发送到Rpcprovider上,RpcProvider通过对象和方法表来确定需要调用哪个服务对象的哪个方法。 UserRpcServiceRpc和UseRpcServiceRpcStub是继…...

前端发版(发包)缓存,需要强制刷新问题处理

问题原因: 浏览器问题 一、创建初始版本文件(public/version.json) { "version": "1722240835844" }二、设置版本判断(version.js) import axios from "axios";const isNewVersion () > {let baseUrl …...

洛谷练习(8.4/8.5)

题目 P2036 PERKET题目描述思路代码 P3799 小 Y 拼木棒题目描述思路代码 P1010 幂次方题目描述思路代码 P1498 南蛮图腾题目描述思路代码 P1928 外星密码题目描述思路代码 P2036 PERKET 题目描述 比较苦度和酸度的最小差值 思路 搜索最小差值 代码 void dfs(int sd,int k…...

DLMS/COSEM中的信息安全:加密算法(下)1

4.公钥算法 4.1概述 一般来说,公钥密码系统使用难以解决的问题作为算法的基础。RSA算法基于非常大的整数的素因子分解。椭圆曲线密码学(ECC)是基于求解椭圆曲线离散对数问题(ECDLP)的难度。与RSA相比,ECC提供了相似的安全级别,但密钥大小明显减少。ECC特别适用于嵌入式…...

ES6中的Promise、async、await,超详细讲解!

Promise是es6引入的异步编程新解决方案,Promise实例和原型上有reject、resolve、all、then、catch、finally等多个方法,语法上promise就是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果,本篇文章主要介绍了ES6中的P…...

Modbus poll和Modbus Mbslave的使用

读取Modbus Mbslave中的数据 首先创建COM1和COM2端口 然后 using System.IO.Ports; ​ namespace 通信 {internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");SerialPort serialPort new SerialPort("COM1",960…...

树莓集团的全球化征程:数字媒体产业的本土与国际布局

在全球数字化转型的浪潮中,树莓集团正稳步推进数字媒体产业从本土到国际的全球化布局。在数字媒体产业这一新兴且充满活力的领域中,树莓集团不仅在国内市场树立了标杆,更以其独特的全球化战略布局,引领着行业的未来趋势。 本土深耕…...

LeetCode面试150——274H指数

题目难度:中等 默认优化目标:最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 排序 3.2 排序时间优化(计数排序) 3.3 二分查找 参考文献 1 题目描述 给你一个整数数组 citations &#xf…...

【Linux】Linux重定向指南:探索输出重定向与追加重定向的奥秘!

欢迎来到 CILMY23 的博客 🏆本篇主题为:Linux重定向指南:探索输出重定向与追加重定向的奥秘! 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪…...

Spring AI -快速开发ChatGPT应用

Spring AI介绍 Spring AI是AI工程师的一个应用框架,它提供了一个友好的API和开发AI应用的抽象,旨在简化AI应用的开发工序,例如开发一款基于ChatGPT的对话、图片、音频等应用程序。 Spring AI已经集成了OpenAI的API,因此我们不需…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...