BLIP:统一视觉语言理解与生成的预训练模型

Li J, Li D, Xiong C, et al. Blip: Bootstrapping language-image pre-training for unified vision-language understanding and generation[C]//International Conference on Machine Learning. PMLR, 2022: 12888-12900.

BLIP 是 Salesforce 在 2022 年的工作,文章发表在 ICML-2022。BLIP 统一了视觉语言任务的理解与生成能力,还通过引入 Captioner-Filter 机制减少了监督文本的噪声。BLIP 在多种视觉语言任务上都获得了 SOTA 的结果,具有很强的迁移能力,性能甚至超越了 CLIP。

在这里插入图片描述

本文不再按照论文解读的方式逐段记录,只专注于介绍 BLIP 技术本身。本文参考 《BLIP》-用更干净更多样的数据进行多模态预训练,性能超越CLIP!代码已开源!,更多参考资料如下:

  • 全文翻译:多模态超详细解读 (六):BLIP:统一理解和生成的自举多模态模型;
  • 文章总结:[BLIP/BLIP2/InstructBLIP] 图文多模态理解与生成、一文读懂BLIP和BLIP-2多模态预训练;
  • 视频讲解:CLIP 论文逐段精读【论文精读】;

目录

  • 一. 背景
  • 二. BLIP 原理
    • 1. MED 架构
    • 2. 预训练方法
    • 3. CapFilt 机制
  • 三. 实验
    • 1. 实验结果
    • 2. 对比实验
  • 四. 总结
  • 五. 复现
    • 1. 本地
    • 2. Colab

一. 背景

自从 CLIP 横空出世,各种 视觉语言预训练 (Vision-Language Pre-training, VLP) 模型逐渐涌现,显著提高了各种视觉语言任务的性能。然而,现有的 VLP 方法主要存在以下两个问题:

  • 模型角度:大多数方法都是基于 编码器模型 (encoder-based model)编码器 - 解码器模型 (encoder-decoder models),前者难以完成文本生成任务,后者无法完成图像文本检索任务,这两项任务无法兼顾;
  • 数据角度:以 CLIP 为代表的方法都是从互联网上收集海量图像 - 文本对作为样本进行预训练,这些带噪声的文本作为监督信号显然不是最优解;

为了让 VLP 同时兼具图文多模态的理解和生成能力,即既能够根据图像生成描述,又能够根据图像回答问题。于是,Salesforce 的研究者们提出了 BLIP,通过引入一种全新的多模态混合架构 MED,可以分别作为单模态编码器(包括图像编码器和文本编码器)、图像引导文本编码器和图像引导文本解码器来进行操作,从而完成图文多模态的理解和生成任务。
在这里插入图片描述

为了去除 VLP 文本监督信号的杂音,Salesforce 的研究者们在预训练完成的 MED 基础上引入了 CapFilt,它包括 Captioner 和 Filter 两个模块:Captioner 用于生成文本标注,Filter 用于去除文本噪声。这两个模块都是在预训练的 MED 模型上初始化,然后在 COCO 数据集上进行微调。通过引入 Captioner 和 Filter,提高了数据的质量和数量,从而提高了 BLIP 在视觉语言任务上的性能。
在这里插入图片描述

COCO 数据集:全称 Common Objects in Context,是一个广泛使用的图像理解数据集,包含超过 33 万张带有标注的图像,用于训练和评估视觉语言模型。COCO 数据集的图像涵盖了各种各样的场景和对象,标注包括物体检测、分割和自然语言描述等多种任务,常用于物体检测、实例分割和图像描述等任务。

BLIP 这种全新的 VLP 框架可以灵活地在视觉理解和生成任务上完成迁移,并且通过引入 Captioner-Filter 机制减少了监督文本的噪声。训练完成的 BLIP 模型在图像文本检索、图像字幕、VQA 等视觉语言任务上都获得了 SOTA 的结果,以 zero-shot 方式直接迁移到视频语言任务时也表现出很强的泛化能力,性能超越了 CLIP。

二. BLIP 原理

BLIP 全称是 Bootstrapping Language-Image Pre-training,是一种 统一视觉语言理解与生成的预训练模型。这里的 Bootstrapping 指的是利用 Captioner-Filter 机制来生成文本标注:Captioner 生成标注,Filter 去除标注中的噪声,从而得到更准确的标注,提高数据的质量和数量。Captioner-Filter 机制可以看作是一种 Bootstrapping 的过程,因为它利用已有数据进行采样以生成更多的数据,并且不断地通过过滤来提高数据的质量。

Bootstrapping:一种统计估计方法,通过对观测数据进行再抽样,进而对总体的分布特性进行统计推断,更好地理解存在于其中的偏差、方差和特征。Bootstrapping 翻译为中文一般称为 “自助法” 或 “自举法”,在数据集较小、难以有效划分训练 / 测试集时很有用,将多次随机抽样作为训练集,将初始数据作为测试集。示例见 【机器学习】Bootstrap详解。
Bootstrapping 在机器学习领域较为常见,被广泛应用于集成学习方法中,如随机森林中的每个决策树都是在一个被 Bootstrapping 抽样得到的训练集上训练的 1。由于是有放回地抽样,同样的样本可能在一个训练集中出现多次,而其他样本可能根本不出现。这种方法有助于引入随机性,增加模型的多样性,从而提高整体模型的泛化能力。
在这里插入图片描述

1. MED 架构

BLIP 采用了基于 编码器 - 解码器的多模态混合结构 (Multimodal mixture of Encoder-Decoder, MED),包括两个单模态编码器、一个以图像为基础的文本编码器和一个以图像为基础的文本解码器:

  • 单模态编码器 lmage Encoder:基于 transformer 的 ViT 的架构,将输入图像分割为多个的 patch 并将它们编码为一系列 Image Embedding,并使用 [CLS] token 来表示全局的图像特征。lmage Encoder 用来提取图像特征做对比学习,相当于 CLIP 中的 Image Encoder;
  • 单模态编码器 Text Encoder:基于 BERT 的架构,将 [CLS] token 加到输入文本的开头以总结句子。Text Encoder 用来提取文本特征做对比学习,相当于 CLIP 中的 Text Encoder;
  • 以图像为基础的编码器 Image-grounded text encoder:在 Text Encoder 的 self-attention 层和前馈网络之间添加一个 交叉注意 (cross-attention, CA) 层用来注入视觉信息,还将 [Encode] token 加到输入文本的开头以标识特定任务。Image-grounded text encoder 用来提取文本特征并将其和图像特征对齐,相当于 CLIP 中更精细化的 Text - Image 对齐;
  • 以图像为基础的解码器 Image-grounded text decoder:将 Image-grounded text encoder 的 self-attention 层换成 causal self-attention 层,还将 [Decode] token 和 [EOS] token 加到输入文本的开头和结尾以标识序列的开始和结束。Image-grounded text decoder 用来生成符合图像和文本特征的文本描述,这是 CLIP 中所没有的;

    注意,Image-grounded text decoder 生成的文本描述不同于输入的图像 - 文本对中的文本,图像 - 文本对中的文本是互联网上找到的图片的上下文,拥有大量的噪音;而 Image-grounded text decoder 生成的文本描述是针对图像特征和文本特征的特定描述,更加精炼。这里其实就已经是 Captioner 的雏形了,下文的 Captioner 也是基于训练完成的 Image-grounded text decoder 再进行的优化和微调。

在这里插入图片描述

通过上文 lmage Encoder、Text Encoder、Image-grounded text encoder、Image-grounded text decoder 的描述不难发现,四个模块之间共用了一些参数,如下图所示,相同颜色表示共用参数:
在这里插入图片描述

2. 预训练方法

如上图所示,预训练 MED 过程中联合优化了 3 个目标,包括 2 个理解任务的目标函数和 1 个生成任务的目标函数:

  • 图文对比损失 (Image-Text Contrastive Loss, ITC):ITC 用于训练 lmage Encoder 和 Text Encoder,通过对比学习对齐图像和文本的特征空间。具体方法是最大化正样本图像 - 文本对的相似度且最小化负样本图像 - 文本对的相似度,从映射的角度讲就是将语义相关的图像 - 文本对映射到空间中的相邻点且语义不相关的图像 - 文本对映射到不相邻的点。这里还使用了 ALBEF 中的动量编码器,目的是产生一些伪标签以辅助模型的训练;

  • 图文匹配损失 (Image-Text Matching Loss, ITM):ITM 用于训练 Image-grounded text encoder,通过学习图像 - 文本对的联合表征实现视觉和语言之间的细粒度对齐。具体方法是通过一个二分类任务,预测图像文本对是正样本还是负样本。这里还使用了 ALBEF 中的 hard negative mining 技术以更好地捕捉负样本信息;

    ITM 与 ITC 并不一样,ITC 虽然也对齐了图像和文本的特征空间,但并没有显式地区分正负样本,主要是用于评价图像和文本的匹配情况,给出任意输入图像 - 文本对的相似度。而 ITM 则是通过计算样本的损失达到区分正负样本的目的,激励正样本的图像和文本使其更加匹配。

  • 语言建模损失 (Language Modeling Loss, LM):LM 用于训练 Image-grounded text decoder,实现生成图像的文本描述任务。具体方法是通过优化交叉熵损失函数,训练模型以自回归的方式最大化文本的概率。这里还使用了 0.1 的标签平滑计算损失;

3. CapFilt 机制

COCO 数据集的高质量人工注释图像 - 文本对 { ( I h , T h ) } \{(I_h, T_h)\} {(Ih,Th)} 数量有限,因此 CLIP、BLIP 等 VLP 都是从网络中收集大量图像 - 文本对 { ( I w , T w ) } \{(I_w, T_w)\} {(Iw,Tw)} 作为训练集。但这些网络图像 - 文本对的文本来自图像上下文,难以精准地描述图像内容,存在大量噪声。

于是,文中提出了 字幕和过滤 (Captioning and Filtering, CapFilt) 机制:
在这里插入图片描述

上图给出了 CapFilt 的图示,包含字幕器和过滤器两个模块:

  • 字幕器 Captioner:一个视觉文本解码器,基于Image-grounded text decoder,用于生成给定图像的字幕,使用 LM 损失函数在 COCO 数据集上进行微调。给定网络图片 I w I_w Iw,Captioner 生成字幕 T w T_w Tw
  • 过滤器 Filter:一个视觉文本编码器,基于 Image-grounded text encoder,用于去除文本噪声,使用 ITC 和 ITM 损失函数在 COCO 数据集上进行微调。Filter 通过比对文本和图像的匹配情况,删除原始 Web 文本 T w T_w Tw 和合成文本 T s T_s Ts 中的噪声;
    在这里插入图片描述

Captioner 和 Filter 都是在预训练完成后的 MED 模型上初始化的,并各自在人工注释的图像 - 文本对数据集 COCO 上进行微调。最后,将过滤后的图像 - 文本对与人工注释对相结合,形成一个新的数据集(这也是 Bootstrapping 的由来),最后再用它来训练一遍模型。

介绍到这里可以大致捋一下 BLIP 的训练思路:先使用含有噪声的网络数据训练一遍 BLIP,再在 COCO 数据集上进行微调以训练 Captioner 和 Filter,然后使用 Filter 从原始网络文本和合成文本中删除嘈杂的字幕,得到干净的数据。最后再使用干净的数据训练一遍得到高性能的 BLIP。

三. 实验

1. 实验结果

2. 对比实验

四. 总结

BLIP 是一个全新的 VLP 框架,统一了视觉语言任务的理解与生成功能,并且通过嵌入 Captioner 和 Filter 去除网络资源中的文本噪声,提高了模型在下游视觉语言任务上的性能。

作者在文末表明,BLIP 存在一些潜在的优化方向可以进一步提高性能:

  • 多轮数据集的 Bootstrapping;
  • 为每幅图像生成多个合成字幕,进一步扩大预训练语料库;
  • 训练多个不同的 Captioner 和 Filter 进行集成;

五. 复现

Salesforce 开源了预训练的代码和 训练好的模型,可以直接使用 demo.ipynb 做下游任务。

1. 本地

  • 平台:本地
  • 显卡:No needed
  • 镜像:PyTorch 1.10.1、Python 3.8(ubuntu20.04)、Cuda 11.3
  • 源码:https://github.com/salesforce/BLIP

实验记录

  1. 一开始选错了 python 内核,导致无法加载安装在默认环境的包;
  2. 在安装 pytorch 时,注意不能直接 pip install pytorch,因为这是默认 CPU 版本的 pytorch。安装 GPU 版本的方法是 pip install torch==XX +cuXX,这里需要注意 项目要求的版本和本地 CUDA 的兼容性。例如 BLIP 要求的 pytorch 版本是 1.10,去 Pytorch 官网 查找满足要求的 Windows 版本;我本地的 CUDA 是 11.7 的,选择不高于 11.7 的即可。torchvision 和 torchaudio 同理。因为我使用的 交大的源,所以还需要比对源上是否有对应版本,否则找不到对应的版本。最终找到符合要求的版本是:pip install torch==1.10.1+cu102 torchvision==0.11.2+cu102 torchaudio==0.10.1 -f https://mirror.sjtu.edu.cn/pytorch-wheels/torch_stable.html

2. Colab


  1. Bootstrapping算法(附python代码) ↩︎

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

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

相关文章

分布式锁~

分布式锁 分布式锁是在分布式系统中用于协调多个节点之间对共享资源的访问的一种机制。个人认为实现分布式锁,需要一个中间件例如数据库,redis等等这样的存储锁即可实现分布式锁。 分布式锁实现方案 基于数据库(唯一索引) 基于内存(redis,…

CMIP6数据处理及在气候变化、水文、生态等领域中的实践技术应用

查看原文>>>最新CMIP6数据处理及在气候变化、水文、生态等领域中的实践技术应用 气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响,是当前全球关注的核心议题之一。IPCC(Intergovernmental Panel on Climate Change&#…

太激动了!摄像头终于有画面了!

有了放弃的想法 摄像头APP在我这里好好的,到了老外那里就不能 用。反复试了几套源码,都没有画面。后来干脆把老外说通用的APK反编译后,新做了个APP,结果还是没画面。到了这个时候,我是真的有点沮丧,准备放弃…

七、Nacos和Eureka的区别

一、nacos注册中心 二、临时实例与非临时实例 三、区别 Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式临时实例心跳不正常会被剔除,非临时实例则不会被剔除Nacos支持服务列表变更的消息推送模式,服务…

软件外包开发文档需要注意的问题

编写软件开发文档时需要注意以下一些关键问题,以确保文档的质量、有效性和可维护性,通过关注这些问题,您可以确保软件开发文档更容易被理解、使用和维护,从而提高项目的成功几率。北京木奇移动技术有限公司,专业的软件…

3.5-构建自己的Docker镜像

首先介绍两个命令: 1.docker container commit,可以简写为:docker commit。这个命令是把一个修改后的container重新变成一个image。 2.docker image build,可以简写为:docker build 首先,演示一下docker c…

接口中的大事务,该如何进行优化?

作为后端开发的程序员,我们常常会的一些相对比较复杂的逻辑,比如我们需要给前端写一个调用的接口,这个接口需要进行相对比较复杂的业务逻辑操作,比如会进行,查询、远程接口或本地接口调用、更新、插入、计算等一些逻辑…

论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection

发表时间:2023年3月5日 论文地址:https://arxiv.org/abs/2208.09686 项目地址:https://github.com/YuHengsss/YOLOV 视频物体检测(VID)具有挑战性,因为物体外观的高度变化以及一些帧的不同恶化。有利的信息…

CSS---关于font文本属性设置样式总结

目录 1、color属性 2、font-size属性 3、font-weight属性 4、font-family属性 5、text-align属性 6、line-height属性 7、text-indent属性 8、letter-spacing属性 9、word-spacing属性 10、word-break属性 11、white-space属性 12、text-transform 12、writing-mo…

Git常用操作-MD

文章目录 1. 本地创建分支,编写代码,提交本地分支到远程仓库2. 提交本地代码到本地仓库3. 提交本地代码到本地dev分支4. 提交本地dev分支到远程仓库5. 本地dev分支拉取远程master分支,并将master分支内容合并到本地dev6. 同义命令7. 撤销上次…

No matching version found for zr-map-ol@1.1.19.

问题描述: 通常情况下直接安装可能还会报错,因为有的依赖包是在私库里的 解决方法: 1.查看模块的注册信息 2. 安装 如果上面这种方式安装之后npm i还是报错,试试下面这种方式(我没有试下面的方式 上面的已经解决掉了) 具体可以参…

人工智能基础_机器学习038_中国人寿保费预测(EDA数据探索)_导包_数据探索_---人工智能工作笔记0078

注意 EDA是Exploratory Data Analysis(探索性数据分析)的缩写,它是一种统计分析方法,旨在了解数据的基本特征,并发现数据中的规律和模式。EDA通常是数据分析流程的开始阶段,主要使用可视化工具和统计指标来描述数据的基本特征,如数据的分布、中位数、均值、方差等。通过…

【前沿学习】美国零信任架构发展现状与趋势研究

转自:美国零信任架构发展现状与趋势研究 摘要 为了应对日趋严峻的网络安全威胁,美国不断加大对零信任架构的研究和应用。自 2022 年以来,美国发布了多个零信任战略和体系架构文件,开展了多项零信任应用项目。在介绍美国零信任战略…

C++初阶(十一)STL简介及string类初讲

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、什么是STL二、STL的版本三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷七…

802.11ax-2021协议学习__$27-HE-PHY__$27.5-Parameters-for-HE-MCSs

802.11ax-2021协议学习__$27-HE-PHY__$27.5-Parameters-for-HE-MCSs 27.3.7 Modulation and coding scheme (HE-MCSs)27.3.8 HE-SIG-B modulation and coding schemes (HE-SIG-B-MCSs)27.5 Parameters for HE-MCSs27.5.1 General27.5.2 HE-MCSs for 26-tone RU27.5.3 HE-MCSs f…

Git-团队协作工作流

前言 一、工作流概述二、Git flow1.主要流程2.优缺点3.适用场景 三、Github flow1.主要流程2.优缺点3.适用场景 四、Gitlab flow1.主要流程2.优缺点3.适用场景 总结参考 一、工作流概述 开发人员通过Git可以记录和追踪代码的变化,包括添加、删除和修改文件。如果是…

【自动化测试】Appium环境搭建与配置-详细步骤,一篇带你打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Node.js环境搭…

【Python大数据笔记_day09_hive函数和调优】

hive函数 函数分类标准[重点] 原生分类标准: 内置函数 和 用户定义函数(UDF,UDAF,UDTF) ​ 分类标准扩大化: 本来,UDF 、UDAF、UDTF这3个标准是针对用户自定义函数分类的; 但是,现在可以将这个分类标准扩大到hive中所有的函数,…

MyBatis CURD操作深度解析

文章目录 简单查询操作插入、更新和删除操作selectKey元素的作用结语 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:MyBatis ✨文章内容: CURD操作 &#x1f9…

Alibaba微服务组件Nacos注册中心

1. 什么是 Nacos 官方:一个更易于构建云原生应用的动态 服务发现( Nacos Discovery ) 、 服务配置( Nacos Config ) 和服务管理平台。 集 注册中心配置中心服务管理 平台 Nacos 的关键特性包括: 服务发现和服务健康监测 动态配置服务 动态 DNS 服务 服务及其…