【大模型系列】统一图文理解与生成(BLIP/BLIPv2/InstructBLIP)

文章目录

  • 1 BLIP(2022, Salesforce Research)
    • 1.1 简介
    • 1.2 数据角度
    • 1.3 模型角度
    • 1.4 BLIP预训练的目标
  • 2 BLIP2(ICML2023, Salesforce)
    • 2.1 简介
    • 2.2 模型架构
    • 2.3 训练细节
  • 3 InstructBLIP(2023, Salesforce)
    • 3.1 指令微调技术(Instruction-tuning)
    • 3.2 数据集准备
    • 3.3 Instruction-aware视觉特征提取框架

1 BLIP(2022, Salesforce Research)

BLIP:统一视觉-语言理解和生成的自举多模态模型,其下游的应用可以为检索任务、描述任务、VQA任务(视觉问答)、NLVR(Natural Language Vision Reasoning)

  • 论文地址:https://arxiv.org/abs/2201.12086/
  • 项目地址:https://github.com/salesforce/BLIP/
  • 官方解读:https://blog.salesforceairesearch.com/blip-bootstrapping-language-image-pretraining/
  • 极市平台解读:https://www.cvmart.net/community/detail/7740/

1.1 简介

BLIP(BLIP: Bootstrapping Language-Image Pretraining for Unified Vision-Language Understanding and Generation)是Salesforce Research在2022年公开的一个统一理解和生成的多模态模型,该方法的Motivaion如下:

  • 问题一:目前VLP(Vision-Language Pre-training)数据大多来自于网络爬取,如CLIP。其中的caption包含很多噪声,不是一个理想的监督来源;
  • 问题二:在以往的VLP框架中,仅在理解任务或者生成任务方面表现出色,很少有可以兼顾的模型。

BLIP针对以上的两个问题,提出了解决方案:

  • 针对问题一:提出一种bootstrapping caption的方案来“提纯”带噪声的网络爬取数据,从而提升多模态模型的能力;
  • 针对问题二:提出一种新的VLP框架BLIP统一视觉语言理解和生成任务,比现有的方法更适应广泛的下游任务;

1.2 数据角度

  • 先用含噪声的数据训练一遍BLIP
  • 再使用BLIP的生成功能Captioner生成一系列的字幕,把生成的字幕通过Filter过滤一遍得到干净的数据
  • 最后使用干净的数据训练一遍BLIP

Step1: 用人工标注的数据集图文对{Ih, Th}对预训练模型Image-ground text encoder和decoder进行微调;

Step2: 遍历web datasets {Iw, Tw}进行以下操作:

  • Step2.1: 通过image-ground text decoder(Captioner)预测Iw的caption Ts,此时图片有2个图文对,一个是网络上爬取的{Iw,Tw},一个是预测的{Iw, Ts};
  • Step2.2: 通过Image-ground text encoder(Filter)来判别{Iw,Tw}、{Iw, Ts}的图文是否matching,过滤不匹配的图文对;

Step3: 汇总所有匹配的图文对D = {{Iw,Tw},{Iw,Ts},{Ih, Th}}
在这里插入图片描述

1.3 模型角度

模型涉及4个结构:

  • Image Encoder (ViT) : 首先进行图像特征的提取,这个前向过程相对较重,就是ViT的架构;
  • Text Encoder (BERT) : 这是一个标准的 BERT,这里用 ITC (Image-Text Contrastive Loss) 目标函数激活 Text Encoder 模块,目标是对齐 Image Encoder Transformer 和 Text Encoder Transformer 的特征空间;其中 [CLS] token 附加到文本输入的开头以总结句子。作用是提取文本特征做对比学习。
  • Image-grounded Text Encoder (变种 BERT,Filter):在标准 BERT 的结构里,于 Bi Self-Att 和 Feed Forward 之间插入 Cross Attention (CA) 模块,以引入视觉特征。这里用 ITM (Image-Text Matching Loss) 目标函数激活,ITM 是一个二分类任务,用来预测 image-text pair 的 正匹配 还是 负匹配,目的是学习 image-text 的多模态表示,调整视觉和语言之间的细粒度对齐;添加一个额外的 [Encode] token,作为图像文本的联合表征。
  • Image-grounded Text Decoder (变种 BERT,Captioner) 将 Image-grounded Text Encoder 结构中的 Bi Self-Att 替换为 Causal Self-Att。这里用 Language Modeling Loss (LM) 目标函数激活,目标是生成给定图像的文本描述。添加一个额外的 [Decode] token 和结束 token,作为生成结果的起点和终点。

颜色相同的部分表示参数共享,即视觉-文本编码器和视觉-文本解码器共享除self-attention层之外的所有参数。每个image-text在输入时,Image只需要经过一个ViT模型,text部分需要经过3次BERT模型。

1.4 BLIP预训练的目标

BLIP 在预训练期间联合优化了3个目标,有两个理解任务的目标函数和一个生成任务的目标函数。

对比学习目标函数 (Image-Text Contrastive Loss, ITC)

ITC 作用于1 视觉编码器 和 2 文本编码器,目标是对齐视觉和文本的特征空间。方法是使得正样本图文对的相似性更大,负样本图文对的相似性更低,在 ALBEF 里面也有使用到。作者在这里依然使用了 ALBEF 中的动量编码器,它的目的是产生一些伪标签,辅助模型的训练。

图文匹配目标函数 (Image-Text Matching Loss, ITM)

ITM 作用于1 视觉编码器 和 3 视觉文本编码器,目标是学习图像文本的联合表征,以捕获视觉和语言之间的细粒度对齐。ITM 是一个二分类任务,使用一个分类头来预测图像文本对是正样本还是负样本。作者在这里依然使用了 ALBEF 中的 hard negative mining 技术。

语言模型目标函数 (Language Modeling Loss, LM)

BLIP 包含解码器,用于生成任务。既然有这个任务需求,那就意味着需要一个针对于生成任务的语言模型目标函数。LM 作用于1 视觉编码器 和 4 视觉文本编码器,目标是根据给定的图像以自回归方式来生成关于文本的描述。与 VLP 中广泛使用的 MLM 损失 (完形填空) 相比,LM 使模型能够将视觉信息转换为连贯的字幕。

2 BLIP2(ICML2023, Salesforce)

BLIPv2:节约多模态训练成本,冻结预训练好的视觉语言模型参数

  • 论文地址:https://arxiv.org/pdf/2301.12597.pdf/
  • 代码地址:https://github.com/salesforce/LAVIS/tree/main/projects/blip2/
  • 极市平台解读: https://www.cvmart.net/community/detail/7768/

2.1 简介

BLIP2也是salesforce在2023发表在ICML2023上的方法,这个工作提出了一种借助现成的冻结参数的预训练视觉模型和大型语言模型的,高效的视觉语言预训练方法。但是,简单的冻结预训练好的视觉模型的参数或者语言模型的参数会带来一个问题:就是视觉特征的空间和文本特征的空间,它不容易对齐。那么为了解决这个问题,BLIP-2 提出了一个轻量级的 Querying Transformer,该 Transformer 分两个阶段进行预训练。

  • 第一阶段从冻结的视觉编码器中引导多模态学习,
  • 第二阶段从冻结的文本编码器中引导多模态学习。
    在这里插入图片描述

2.2 模型架构

在这里插入图片描述
在这里插入图片描述

  • QFormer(Querying Transformer): 用来对齐图片和文本特征,它包含图像transformer和文本transformer两个模块,后者少一个cross-attention层,且两个transformer共享self-attention参数;
  • Image Encoder: CLIP训练的Vit-L/14,EVA-CLIP训练的ViT-g/14
  • Text Encoder: OPT,FlanT5

2.3 训练细节

参考资料:https://zhuanlan.zhihu.com/p/664011842

Q-Former训练第一步:联合视觉编码器训练

Q-Former 训练的第一步,作者将 Q-Former 连接到冻结参数的图像编码器,并使用图像-文本对进行预训练,那么这一步的目标是训练好 Q-Former,以便 Queries 可以学习到如何更好地结合文本提取图片信息。

训练的目标函数,作者遵循 BLIP 的做法,联合优化3个具有相同输入格式和模型参数的预训练目标,每个目标函数使用不同的 mask Attention 来控制注意力的交互。

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

与常规ITC任务不同的是:单个图片BLIP2产生的image embedding有32个(等于learned query的数量),而text embedding只有1个。BLIP2的操作是,同时计算32个image embedding与text embedding的距离,仅取最近的计算loss。下图详细梳理了整体pipeline及对应的shape变化(忽略了batchsize)

2. 图文匹配任务(Image-Text Matching,ITM)

这是多模态预训练中的经典目标函数,旨在更加细粒度地对齐图像和文本的表征,使其互信息最大化

此时会将query embedding与text embedding拼接起来作为输入,送入到QFormer中的Image Transformer中,通过一个二分类线性分类器,最后对Qformer在query embedding位置的输出向量取平均后进行预测。下图中详细展示了整体pipeline与shape变化(包含batch size维度)。

3. 基于图像的文本生成(Image-Grounded Text Generation,ITG)

ITG 给定一张输入图片,旨在训练 Q-Former 生成对应的文本描述。此处直接用QFormer的text transformer做image caption任务。有一个细节值得注意:作者将图片与文本表征的交互放到了self-attention中。

Q-Former训练第二步:联合视觉编码器和大型语言模型训练 在生成预训练的阶段,作者把 Q-Former 和冻结参数的 LLM 连接起来,以利用 LLM 的文本生成能力。 其过程如下:

  • 输入图片到Image Encoder后得到图像的表征;
  • 图像表征与Queries一起送入到Q-Former中得到Queries的输出;
  • 再经过全连接层与Text tokens的维度对齐之后,输入给LLM Decoder中进行解码预测

在这里插入图片描述

作者尝试了2种大语言模型,分别时基于Decoder-only和介于Encoder-Decoder架构

  • Decoder-Only架构:使用语言建模目标函数进行训练,冻结参数的LLM任务时根据Q-Former提供的视觉表征俩生成预测文本;
  • Encoder-Decoder架构:把LLM分成两段,前缀模板随着Queries的输出喂给LLM的Encoder,希望Decoder输出后缀预测;

3 InstructBLIP(2023, Salesforce)

主要工作:基于BLIPv2,将指令微调的范式引入到视觉语言模型上。

  • Paper:https://arxiv.org/pdf/2305.06500.pdf
  • Github:https://github.com/salesforce/LAVIS/tree/main/projects/instructblip

文章的主要贡献:

  • 将26个数据集转化成instruction tuning的格式,全面系统地研究了指令微调技术在视觉-语言模型上使用;
  • 提出了一个基于指令(instruct-aware)的视觉特征提取框架;

3.1 指令微调技术(Instruction-tuning)

参考资料:https://www.datalearner.com/blog/1051681306547159

指令微调技术的主要思想就是在输入阶段对指令做调整,使其得到更好的结果输出。如对于问题任务,Instruction可以提供具体的指令,例如:“请回答下列问题:谁是美国的第一位总统?”。以InstructGPT为例,其基本流程如下:

  • 准备自然语言指令集: 针对特定任务,准备一组自然语言指令,描述任务类型和任务目标,例如情感分类任务的指令可以是“该文本的情感是正面的还是负面的?”。
  • 准备训练数据集: 针对特定任务,准备一个标记化的数据集,其中每个数据样本都包含输入文本和标签,例如情感分类任务的标签可以是“正面”或“负面”。
  • 将自然语言指令和数据集转换为模型输入: 将自然语言指令和数据集转换为模型输入,例如对于情感分类任务,将自然语言指令和文本拼接作为输入,例如:“该文本的情感是正面的还是负面的?这家餐厅的食物很好吃。”
  • 在指令上进行微调: 在指令上进行微调,以适应特定任务的需求,提高模型在任务上的性能。

这样的方式训练了出来的模型可以让模型更好地识别输入的意图,同时也在zero-shot中表现更好!InstructBLIP的自然语言指令集模板如下:

在这里插入图片描述

3.2 数据集准备

在这里插入图片描述

基于上一节的自然语言指令集模板,将26个数据集转化成Instruction tuning的形式。 其中13个用于训练(held-in),剩余13个用于验证和测试(held-out)。

在训练期间,把所有训练集held-in的数据混合后,在不同任务中均匀采样instruction templates,语言建模损失函数训练:给定输入图片和Instruction templates,希望它输出回答。

为了避免过拟合较小的数据集,欠拟合较大的数据集,作者修改了采样概率,数据集越大的,采样概率越高,越小的,采样概率越低:p = sqrt(S) / Σ(sqrt(Si)),其中S是每个数据集的大小。

3.3 Instruction-aware视觉特征提取框架

在这里插入图片描述

结构上:Image encoder(ViT-g/14)、LLM(FlanT5-XL-3B,FlanT5-XXL-11B,Vicuna-13B)都冻结,只微调Q-Former 。其中可学习的Queries通过Self-attention层与Instructions进行交互,可学习的Queries通过Cross-attention再与Image embeddings进行交互,这样就可以鼓励网络提取与任务相关的图像特征,整个过程非常直观和符合直觉。

推理阶段:

  • 针对大部分描述性任务,如 image captioning,open-ended VQA 等,InstructBLIP 可以直接使用 LLM 生成的文本作为输出;
  • 针对选择性任务,如 classification 和 multi-choice VQA ,将LLM生成的内容词汇限制为候选列表进行排序,计算每个候选的对数似然,选择最高值的一个作为最终预测。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker入门(二)—— docker三大概念(镜像、容器、仓库)

docker 的三大必要概念 docker 的三大必要概念——镜像、容器、仓库 docker 架构图 镜像(image):模版。(web项目:1、环境 2、配置变量 3、上线项目 4、配置项目需要的静态文件)打包成镜像 docker 镜像&a…

代码随想录阅读笔记-哈希表【两个数组的交集】

题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 说明&#xff1a; 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 提示&#xff1a; 1 < nums1.length, nums2.length < 10000 < nums1[i], nums2[i] < 1000 思路 交集&…

【源码阅读】EVMⅢ

参考[link](https://blog.csdn.net/weixin_43563956/article/details/127725385 大致流程如下&#xff1a; 编写合约 > 生成abi > 解析abi得出指令集 > 指令通过opcode来映射成操作码集 > 生成一个operation 以太坊虚拟机的工作流程&#xff1a; 由solidity语言编…

鸿蒙实战开发:【FaultLoggerd组件】讲解

简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件&#xff0c;Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志&#xff0c;定位相关问题。 架构 Native InnerKits 接口 Si…

Linux操作系统——多线程

1.线程特性 1.1线程优点 创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比&#xff0c;线程之间的切换需要操作系统做的工作要少很多线程占用的资源要比进程少很多能充分利用多处理器的可并行数量在等待慢速I/O操作结束的同时&#xff0c;程序可执行其他的计…

《1w实盘and大盘基金预测 day7》

昨日预测有点差劲&#xff0c;最低点也相差五个点。 打分C 公众号&#xff1a;JavaHelmet 昨天预测&#xff1a; 3052-3062-3076-3115 3067是趋势线&#xff0c;有回踩需求 5-30-60分钟级别顶钝 大盘冲到标红的点位3115或者3100就需注意。不要随意追高&#xff08;最高309…

备战蓝桥杯---牛客寒假训练营2VP

题挺好的&#xff0c;收获了许多 1.暴力枚举&#xff08;许多巧妙地处理细节方法&#xff09; n是1--9,于是我们可以直接暴力&#xff0c;对于1注意特判开头0但N&#xff01;1&#xff0c;对于情报4&#xff0c;我们可以把a,b,c,d的所有取值枚举一遍&#xff0c;那么如何判断有…

ModbusTCP转Profinet网关高低字节交换切换

背景&#xff1a;在现场设备与设备通迅之间通常涉及到从一种字节序&#xff08;大端或小端&#xff09;转换到另一种字节序。大端字节序是指高位字节存储在高地址处&#xff0c;而小端字节序是指低位字节存储在低地址处。在不动原有程序而又不想或不能添加程序下可选用ModbusTC…

OCP NVME SSD规范解读-13.Self-test自检要求

4.10节Device Self-test Requirements详细描述了数据中心NVMe SSD自检的要求&#xff0c;这一部分规范了设备自身进行各种健康检查和故障检测的过程。自检对于确保SSD的正常运行和提前预防潜在故障至关重要。 在进行设备自检时&#xff0c;设备应当确保不对用户数据造成破坏&am…

【人工智能】Gitee AI 天数智芯有奖体验开源AI模型,一定能有所收货,快来体验吧

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章。 这是《人工智能》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 目录 前言两大赛道天数智芯1.模型地址2.天数智芯专区3.选择模型4.模型详情页5.部署模型6.成功部署7.执行例子8.移除模型 千模盲…

03python注释与输入函数

Python 注释的作用: 注释可用于解释 Python 代码。 注释可用于提高代码的可读性。 在测试代码时,可以使用注释来阻止执行。 注释可以放在一行的末尾,Python 将忽略该行的其余部分: 实例1 print("Hello, World!") #打印输出Hello,World print(9-3) #输出9…

【mybatis】objectwrapper解读

简介 在 MyBatis 中&#xff0c;ObjectWrapper 是一个关键的接口&#xff0c;用于详细封装了对象的属性信息。ObjectWrapper 主要用于内部操作&#xff0c;它抽象了对象的属性操作&#xff0c;使得 MyBatis 能够统一处理原生类型、Bean 对象以及 Map 集合等。 类图展示 主要功…

Vue组件封装方案对比——v-if方式与内置component方式

近期在准备搭建一个通用组件库&#xff0c;而公司现有的各个系统也已有自己的组件库只是没抽离出来&#xff0c;但是目前有两套不同的组件封装方案&#xff0c;所以对于方案的选择比较困惑&#xff0c;于是对两种方式进行了对比&#xff0c;结合网上找到的一些开源组件库进行分…

抖音店铺规划运营管理计划数据分析工作表

【干货资料持续更新&#xff0c;以防走丢】 抖音店铺规划运营管理计划数据分析表 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音小店运营规划工作表格&#xff08;完整资料包含以下内容&#xff09; 目录 1. 抖店运营管理决策表&#xff1a;该表格用于记…

三维指静脉生物识别成像设备设计和多视图验证研究

文章目录 三维指静脉生物识别成像设备设计和多视图验证研究总结摘要介绍多视角指静脉识别模型结构内容特征编码Transformer(CFET)主导特征选择模块(DFSM) 实验和结果数据集实施细节视角研究池化层的作用消融实验和SOTA方法比较 论文: Study of 3D Finger Vein Biometrics on I…

Linux——进程通信(三)命名管道

前言 我们在之前学习了匿名管道与匿名管道的应用——进程池&#xff0c;但是匿名管道的通信&#xff0c;需要有血缘关系的进程&#xff08;通过fork创建的进程们&#xff09;&#xff0c;如果我想让两个毫不相干的进程进行通信&#xff0c;可以采样命名管道的方式&#xff08;…

Go语言中的锁与管道的运用

目录 1.前言 2.锁解决方案 3.管道解决方案 4.总结 1.前言 在写H5小游戏的时候&#xff0c;由于需要对多个WebSocket连接进行增、删、查的管理和对已经建立连接的WebSocket通过服务端进行游戏数据交换的需求。于是定义了一个全局的map集合进行连接的管理&#xff0c;让所有…

80后深圳设计师原创设计 妙解中小学生午休难题

3月17日至21日&#xff0c;深圳国际智能家居博览会在宝安国际会展中心举办。智慧校园展区成为焦点&#xff0c;吸引了众多目光。智荟康科技展出的午休课桌椅产品&#xff0c;为解决中小学生“趴睡”问题而研发&#xff0c;创新实用&#xff0c;在智慧校园展区中备受好评。 &…

Leetcode 79. 单词搜索

心路历程&#xff1a; 做完这道题才发现是回溯&#xff0c;一开始想的是递归&#xff0c;判断完第i个字符后&#xff0c;只需要挨个判断第i1个字符在不在第i个字符的邻域。后来发现由于不能重复使用元素&#xff0c;所以需要维护一个visited列表&#xff0c;并且在遍历所有可能…

蓝桥杯---代分数

import java.util.Scanner;public class top4 {//全排列分数的那个题目//首先进行n个数的全排列//然后将这n个数字拆分为3个数字&#xff0c;即插入两个板子//然后判断等式是否成立&#xff08;判断条件就是在if里面去进行相关的判断是吗&#xff1f;&#xff1f;&#xff09;s…