BLIP-2小结

2023-10-07 19:44
文章标签 小结 blip

本文主要是介绍BLIP-2小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

paper:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

引用量:376(截止2023-09)

motivation

BLIPv2主要从模态对齐、高效训练两个方向对图文多模态预训练任务(vision-and-language pre-training VLP)做出优化。在模态对齐上提出了一个轻量架构QFormer(querying transformer)来建立图像-文本的桥梁。在高效多模态训练上,结合QFormer提出一种二阶段预训练范式。在VQAv2任务上,仅用了 1 54 \frac{1}{54} 541倍Flamingo80B的训练数据,却带来8.7%精度提升。

method

模型架构

**BLIP2的核心是引入了QFormer(Querying Transformer)模块来将对齐图片特征与文本特征。**QFormer内部包含两个transformer子模块,其一为image transofmrer,其二是text-transformer。image transformer比text-transformer多了一个cross-attention层,这两个transformer共享Self-Attention参数,如下图所示。
在这里插入图片描述

PS: 作者源码中用一个Bert模型来实现QFormer,通过魔改BertLayer实现通过条件判断来确定走image transformer分支还是text-transformer分支。感兴趣的同学可以深入看一下源码,核心逻辑位于:
lavis/models/blip2_models/Qformer.BertLayer

这里面有一个需要注意的点:作者没有将image encoder得到的image embedding作为image transformer的输入,而是定义了一个可训练的query作为输入。image embedding用作cross attention层的key, value。

这个地方理解可能比较难,尝试直觉的解释一下。NLP任务的transformer会对输入的token新增[CLS]token,通过训练将文本的信息融入到【CLS】token中。在分类、检索等下游任务中将【CLS】token对应位置的输出作为文本的表征。这里放一张图便于理解观察shape变化(忽略了batch size维度)。

在这里插入图片描述

类似的,QFormer定义了learning query通过训练将与文本对齐后的图片的信息融入到learning query中。与NLP不同的是:

  • QFormer的image-transforme没有将图片的embedding作为输入和[CLS]token组合起来送入模型,而是将image embedding作为cross-attention的key,value。
  • QFormer的image-transforme输入的【CLS】 token有多个(姑且这么称呼,论文称为learned queries,其实是一回事),而NLP中只有一个【CLS】token。

PS: 这种做法现在CV里面很常用。如Dalle2中的DiffusionPrior模块,diffusion model中的text inversion技术都用到了类似的思想。

QFormer的整体pipeline如下图所示,为了便于理解同时给出了shape变化(忽略了batch size维度)。image encoder是eva_clip_g

在这里插入图片描述

2.2 多模态预训练任务

BLIP2的预训练任务分为两个阶段。第一个阶段用于对齐多模态表征。主要通过Image-Text Contrastive Loss (ITC)、 Image-text matching (ITM)、Image-grounded Text Generation3个任务的联合训练来实现。第二个阶段用于让LLM理解第一个阶段产生的soft visual prompt的语义,从而借助LLM强大的知识库实现视觉推理等更为复杂的任务,主要通过language modeling(LM)任务的训练来实现。

BLIP2的预训练任务同样用了BLIP提出的boostrapping caption(也称为CapFilt method)技术。

2.2.1 多模态表征对齐预训练

主要通过ITC、ITM, ITG三个预训练任务来对齐QFormer产生的文本表征与图片表征。三个预训练任务联合优化。

Image-Text Contrastive Loss (ITC)

与常规ITC任务不同的是:单个图片BLIP2产生的image embedding有32个(等于learned query的数量),而text embedding只有1个。BLIP2的操作是,同时计算32个image embedding与text embedding的距离,仅取最近的计算loss

下图详细梳理了整体pipeline及对应的shape变化(忽略了batchsize)

在这里插入图片描述

Image-text matching (ITM)

图片匹配的整体架构如下图所示。此时会将query embedding与text embedding拼接起来作为输入,送入到QFormer中的Image Transformer中。最后对Qformer在query embedding位置的输出向量取平均后进行预测。下图中详细展示了整体pipeline与shape变化(包含batch size维度)。

在这里插入图片描述

Image-grounded Text Generation (ITG)

此处直接用QFormer的text transformer做image caption任务。有一个细节值得注意:作者将图片与文本表征的交互放到了self-attention中。下图是摘取的部分self-attention层代码。

在这里插入图片描述

2.2.2 多模态表征理解预训练

通过2.2.1我们得到一个训练好的QFormer,这个QFormer能够实现将图片转为一个32x768(用32个token来表征图像)。2.2.2的任务是让预训练的LLM模型能够理解上述的图片表征,从而借助LLM强大的知识库来实现问答、推理等任务。也就是说,这一阶段我们需要通过训练来赋予图片token能被LLM理解的语义。

这一步的训练比较简单。固定image encoder与预训练的LLM模型,仅训练QFormer和新增的一个投影层。训练任务为language modeling。最终实现QFormer输出的图片表征(论文称之为soft visual prompt)变成LLM能看懂的样子。

在这里插入图片描述

3 小结

BLIP2通过QFormer模块与二阶段训练的范式,将目前的视觉backbone与LLM模型链接起来。

这篇关于BLIP-2小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160024

相关文章

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Linux环境配置中问题小结

在Linux环境配置中,遇到问题首先猜测: 1、是否是权限问题; 2、软连接是否配置;

long long,_int64使用小结

前言:   在16位环境下,int/unsigned int 占16位,long/unsigned long占32位   在32位环境下,int占32位,unsigned int占16位,long/unsigned long占32位 何时需要使用:   long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),

密码学读书笔记小结

密码学是保证消息的私密性和完整性以及消息认证的基础。加密算法的选择和密钥的管理是安全机制的效率、性能和可用性的关键。 公钥加密算法: 分发密钥比较容易,但是对大数据量的加密性能较差密钥加密算法: 更适合大批的加密任务混合型加密协议: 例如TLS,先用公钥加密建立一个安全通道,然后使用通道交换密钥,并将此密钥用于后续数据交换。 对分布式系统攻击的分类: 窃听: 未经授权获得消息副本伪装: 在未

Android 源码中jni项目 加载so目录小结

Android 源码中jni项目 加载so目录小结 文章目录 Android 源码中jni项目 加载so目录小结一、前言二、so目录验证测试1、jni so文件错误报错(1)报错1 - 未找到so文件:(2)报错2 - so文件中未找到native方法: 2、验证的几种情况(1)apk下面的 lib/arm64/ 放置正确的so文件(2)apk下面的 lib/arm64/ 放置错误的so文

maven打包成可执行的jar,以及读取配置文件问题小结

文章来源 https://blog.csdn.net/chasonsp/article/details/88852353 折腾的几天,使用maven打包后发现了问题,首先是打包的配置文件读取问题,使用getResource().getPah()会发现在访问jar包的文件时,路径里会有感叹号(杠杠滴~~)是这样的 …jar!.. 经过不断的查找资料及反复验证后,终于找到了可行的方法:

【硬刚大数据】Flink在实时在实时计算平台和实时数仓中的企业级应用小结

欢迎关注博客主页:https://blog.csdn.net/u013411339 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 CSDN博客!本文首发CSDN论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的面试部分补充。 大数据领域自 2010 年开始,以 Hadoop、Hive 为代

Kafka常见问题学习路径源码阅读小结 | 写在Kafka3.0发布之际

严格来说,这篇文章也不是今天写的。是之前断断续续写在了几篇文章中。 2021年9月21日,随着Kafka3.0的发布,Kafka在「分布式流处理平台」这个目标上的努力进一步得到加强!Kafka不满足于「消息引擎」的定位,正式基于这样的定位,Kafka 社区于 0.10.0.0 版本正式推出了流处理组件 Kafka Streams,也正是从这个版本开始,Kafka 正式"变身"为分布式的流处理平台

C++中继承及virtual小结

一、继承基础知识 C++中的继承 1.1继承的基本概念 类与类之间的关系 has-A,包含关系,用以描述一个类由多个“部件类”构成,实现has-A关系用类的成员属性表示,即一个类的成员属性是另一个已经定义好的类。 use-A,一个类使用另一个类,通过类之间的成员函数相互联系,定义友元或者通过传递参数的方式来实现。(和组合不同) is-A,即继承关系,关系具有传递性。 继承的特点 子类拥有

VS2013+QT5.5配置小结

对于VS2013在之前安装的教程有过介绍,本文主要介绍如何在VS2013中如何配置Qt5.5.1。      首先在Qt官网中(http://www.qt.io/download-open-source/)下载下面两个软件: 在Windows Host下,下载Qt 5.5.1 for Windows 64-bit (VS 2013, 823 MB) ;