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

【多模态大模型】 BLIP in ICML 2022

一、引言

论文: BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
作者: Salesforce Research
代码: BLIP
特点: 该方法分别使用ViT和BERT进行图像和文本特征提取;提出使用image-text contrastive learning (ITC)损失、image-text matching (ITM)损失、Language Modeling (LM)损失进行模型优化;提出Captioning and Filtering (CapFilt)生成并过滤从网络上获取的图像-文本对。

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

二、详情

BLIP的整体结构图如下:

可见,BLIP在结构上主要包括1个图像编码器、1个文本编码器、1个基于图像的文本编码器、1个基于图像的文本解码器;在损失上主要包括image-text contrastive learning (ITC)损失、image-text matching (ITM)损失、Language Modeling (LM)损失;此外,BLIP还提出了CapFilt处理噪声图像-文本对。

⚠️ 为了提升训练效率,减少参数量,BLIP使用了参数共享策略,上图中同颜色的模块使用同一组参数。具体参数关系如下:

  1. 图像编码器中所有参数独立;
  2. 文本编码器、基于图像的文本编码器、基于图像的文本解码器中的FFN使用同一组参数;
  3. 文本编码器和基于图像的文本编码器中的双向自注意力使用同一组参数;
  4. 基于图像的文本编码器和基于图像的文本解码器中的交叉注意力使用同一组参数;
  5. 基于图像的文本解码器中的因果自注意力参数独立。

2.1 模型结构

如上图,BLIP在结构上主要包括1个图像编码器、1个文本编码器、1个基于图像的文本编码器、1个基于图像的文本解码器

2.1.1 图像编码器

BLIP的图像编码器使用ViT-B/16,共12层transformer编码层,由在ImageNet-1k上进行预训练的权重初始化。输入图像转为token后会再扩充一个名为[CLS]的token(初始化全0的可学习参数向量),用来表达图像的全局信息。最后输出的是经过12个transformer模块优化过的输入图像的token和[CLS]的token。

关于ViT的详情,请参考我之前的博客Vision Transformer。

2.1.2 文本编码器

BLIP的文本编码器使用BERT,共12层transformer编码层,由BERT base _{\textbf{base}} base初始化。输入文本会在最前面扩充一个名为[CLS]的token,用来表达文本的全局信息。最后输出经Tokenizer和BERT优化过的输入文本的token和[CLS]的token。

[CLS]直接放在句子最前面,例如原文本是“I am very happy today.”,则新文本应为“[CLS] I am very happy today.”)

2.1.3 基于图像的文本编码器

BLIP的基于图像的文本编码器属于多模态编码器(进行图像和文本的信息交互),使用12层含交叉注意力的transformer编码层(文本编码器无交叉注意力)。图像编码器的输出会作为基于图像的文本编码器中交叉注意力的输入。输入文本会在最前面扩充一个[Encode],作为图像-文本对的多模态特征。最后输出经Tokenizer和12层含交叉注意力的transformer编码层优化过的输入文本的token和[Encode]的token。

BERT中没有交叉注意力,所以基于图像的文本编码器是在文本编码器的自注意力和FFN之间插入了交叉注意力,交叉注意力中的权重被随机初始化。

2.1.4 基于图像的文本解码器

BLIP的基于图像的文本解码器属于多模态解码器(进行图像和文本的信息交互),使用12层含交叉注意力的transformer解码层(文本编码器无交叉注意力)。图像编码器的输出会作为基于图像的文本解码器中交叉注意力的输入。输入文本会在最前面扩充一个[Decode]作为句子的开始;将最后的句号替换为[EOS]作为句子的结束。最后通过自回归的因果注意力预测下一个token。

基于图像的文本编码器基于图像的文本解码器的主要差别在于前者使用双向自注意力,后者使用因果自注意力。
双向自注意力其实就是不做mask的自注意力,因为整个句子的所有token两两都可交互计算注意力相似度所以称之为双向自注意力。
因果自注意力就是带因果mask的自注意力,mask会遮蔽下一个要预测的token及后面的所有token。如下图,当我们已经有"[Decode] I"时,"love China [EOS]"都会被遮蔽,这种无法通过上下文预测下一个token的策略,就是因果自注意力。

2.2 损失函数

如上图,BLIP使用image-text contrastive learning (ITC)损失、image-text matching (ITM)损失、Language Modeling (LM)损失进行预训练。

2.2.1 ITC损失

ITC损失旨在更好地学习两个单模态的特征表达,使两个模态的特征能够对齐,即图像特征与对应文本描述的特征更相似,反之更不相似。

BLIP借用了MoCo的思想额外保存一个通过指数移动平均更新的动量模型来生成负样本和软伪标签,从而确定正负图像-文本对以及动量蒸馏损失。

BLIP沿用了ALBEF中的ITC损失,详情请参考我之前博客ALBEF in NeurIPS 2021的2.2.1节。

2.2.2 ITM损失

ITM损失旨在学习图像-文本多模态特征,以表达图像和文本之间的对齐情况。这是一个二分类损失,在[Encode]对应的token后加一个全连接和softmax即可预测输入的图像-文本对是否匹配,匹配为1,不匹配为0。

BLIP通过计算ITC损失时得到的当前批次图像-文本两两之间的相似度来选取hard的负图像-文本对,连同原配的正图像-文本对进行二分类训练。

BLIP沿用了ALBEF中的ITM损失,详情请参考我之前的博客ALBEF in NeurIPS 2021的2.2.3节。

2.2.3 LM损失

LM损失旨在使模型具备生成图像文本描述的能力。前两个损失都在编码器上,只能完成理解型任务,例如图像-文本检索;该损失在解码器上,能够完成生成型任务,例如视觉问答。

LM损失依赖于因果mask,就是将一句话复制多份,然后进行倒三角式的mask,使模型每次都只能根据当前的内容预测下一个token。预测时需要在对应token后跟一个全连接和softmax才能判断token所对应单词是否正确。

2.3 生成过滤

从网络爬虫下来的图像-文本对富含噪声,BLIP提出CapFilt生成更合适的图像描述(Captioning)然后过滤不合适的图像-文本对(Filtering)。

下图是CapFilt对一个噪声的图像-文本对的处理过程:

由于通常我们看到一个蛋糕图片后希望获取的是它的店铺位置从而去购买,所以我们从网上下载的数据很可能是一个蛋糕图片和一个对商铺的描述;但实际我们希望得到的是针对图片中内容的描述,例如这个蛋糕的外观。可见,Captioner能够生成更合适的图像描述,Filter能够过滤不合适的图像-文本对并保留合适的图像-文本对。

CapFilt的流程图如下:

可见,其详细步骤是:

  1. 使用从网络上下载的带噪声的图像-文本对和不含噪声的开源数据集中人工标注的图像-文本对训练一个模型。
  2. 使用在不含噪声的开源数据集中人工标注的图像-文本对分别微调FilterCaptionerFilter仅使用ITC损失和ITM损失进行微调,Captioner仅使用LM损失进行微调。
  3. 将从网络上下载的图像送入Captioner生成对该图像的文本描述,形成人造图像-文本对。
  4. 将从网络上下载的图像-文本对连同Captioner生成的人造图像-文本对一起送入Filter过滤其中文本描述不合适的图像-文本对。
  5. 使用过滤后得到的更高质量的图像-文本对连同不含噪声的开源数据集中人工标注的图像-文本对进行模型的重新训练。

Filter通过计算ITM损失时使用的二分类头进行过滤,匹配的保留,不匹配的被滤除。
Captioner通过基于图像的文本解码器进行生成,输入图像和[Decode]进行下一token的预测,然后[Decode]连同预测一起送入基于图像的文本解码器进行再下一token的预测,如此循环,直至预测出[EOS]截止。

相关文章:

【多模态大模型】 BLIP in ICML 2022

一、引言 论文: BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 作者: Salesforce Research 代码: BLIP 特点: 该方法分别使用ViT和BERT进行图像和文本特征提取&am…...

Flutter开发Dart 中的 mixin、extends 和 implements

目录 ​​​​​​​前言 1.extends 2.implements 3.mixin 前言 在 Dart 中,mixin、extends 和 implements 是面向对象编程中常用的关键字,它们分别用于不同的继承和实现方式。理解它们的用法和区别对于编写高质量、可维护的 Dart 代码至关重要。本文…...

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中,Fragments 是一种轻量级的 UI 组件,类似于视图(Views),但它们没有自己的控制器(Controller)。Fragments 通常用于定义可以在多个视图中重用的 UI 片段,从而提…...

express连接mysql

一、 安装express npm install express --save二、express配置 //引入 const express require("express"); //创建实例 const app express(); //启动服务 app.listen(8081, () > {console.log("http://localhost:8081"); });三、安装mysql npm i m…...

24暑假算法刷题 | Day24 | LeetCode 93. 复原 IP 地址,78. 子集,90. 子集 II

目录 93. 复原 IP 地址题目描述题解 78. 子集题目描述题解 90. 子集 II题目描述题解 93. 复原 IP 地址 点此跳转题目链接 题目描述 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用…...

Postman本地化测试全攻略:打造多语言API的秘诀

Postman本地化测试全攻略:打造多语言API的秘诀 在全球化的今天,许多应用程序都需要支持多语言环境,以满足不同地区用户的需求。API的本地化测试是确保应用程序能够在不同语言和区域设置下正确运行的关键环节。Postman作为一个强大的API开发和…...

摆弄it:越走越深

在英语中,it是一个单词,就是“它”,这是众所周知的事情。今天,我们就来摆弄一下it,摆弄一下“它”,看看能摆弄出什么名堂来。 一、它是它自己 it 大家都知道,同样,itself&#xff0…...

网页上空格

  no-break space(普通的英文半角空格但不换行) 中文全角空格 (一个中文宽度)   en空格(半个中文宽度)   em空格 (一个中文宽度) 四分之一em空格 (四分之一中文宽度) 相比平时的空格(),&nbsp拥有不间断(non-breaking)特性。即连续…...

Linux服务管理(四)Apache服务

Apache服务 1、基于IP的虚拟主机2、基于IP端口的虚拟主机3、基于域名的虚拟主机4、prefork模式5、worker模式6、event模式7、细说驱动工作模式和MPM(多处理模块)工作模式 新旧域名都保留,因为旧域名已有一定的知名度和流量,直接下…...

Qt基础 | TCP通信 | TCP服务端与客户端程序设计 | QTcpServer | QTcpSocket

文章目录 一、TCP 通信1.TCP 通信概述2.TCP 服务器端程序设计2.1 主窗口定义与构造函数2.2 网络监听与 socket 连接的建立2.3 与 TCP 客户端进行数据通信 3.TCP 客户端程序设计3.1 主窗口定义与构造函数3.2 与服务器端建立 socket 连接3.3 与 TCPServer 的数据收发 4.小结 Qt 网…...

设计模式实战:订单处理系统的设计与实现

问题描述 设计一个订单处理系统,支持订单的创建、处理、取消和通知功能。系统需要确保订单处理流程的灵活性和可扩展性。 设计分析 命令模式 命令模式用于将请求封装成对象,从而使我们可以用不同的请求、队列或日志来参数化其他对象。订单处理系统中的每个操作(创建订单…...

[论文笔记]思维链提示的升级版——回退提示

引言 今天又带来一篇提示策略的论文笔记:TAKE A STEP BACK: EVOKING REASONING VIA ABSTRACTION IN LARGE LANGUAGE MODELS。 作者提出了回退提示(STEP-BACK PROMPTING)技术,使大模型能够进行抽象,从包含具体细节的实例中推导出高层次的概念…...

【Redis进阶】主从复制

1. 主从结构引入 在分布式系统中,涉及到一个严重问题:单点问题 即如果某个服务器程序只有一个节点(单台机器提供服务),就会出现以下两个问题: 可用性问题,如果这台机器挂了,意味着…...

编程类精品GPTs

文章目录 编程类精品GPTs前言种类ChatGPT - GrimoireProfessional-coder-auto-programming 总结 编程类精品GPTs 前言 代码类的AI, 主要看以下要点: 面对含糊不清的需求是否能引导出完整的需求面对完整的需求是否能分步编写代码完成需求编写的代码是否具有可读性和可扩展性 …...

ubuntu在命令行输出里查找内容,dmesg

直接执行查看日志指令会出来很多页。dmesg为开机日志信息。记录了开机时硬件的过程 sudo dmesg 执行结果: 可以用竖号“|”,在前一条命令返回的内容进行查找。下图为查找bluetooth sudo dmesg |grep -i bluetooth...

图片url处理(带http和不带http)方法

后端返回的接口数据,图片路径,有的是相对路径,有的是带http的路径 得处理一下,如果是相对路径就拼上服务器的地址(xxx),如果是带http的路径就正常显示 方法: imageUrl(url){let str RegExp(http);let ne…...

Git(分布式版本控制系统)、Gitlab、分支、分支冲突

目录 1.Git概述 2.Git的功能特性 3.Github社区和Gitlab 1.Github社区 2.Gitlab 4.Git的安装及配置 1.Git安装 2.配置Git环境 3.常用指令 4. 建立git仓库 1.创建一个目录 2.初始化当前目录仓库 3.查看隐藏文件 4.新建文件并添加到缓存 5.提交文件到仓库 6.查看历…...

dockerfile部署镜像 ->push仓库 ->虚拟机安装建木 ->自动部署化 (详细步骤)

目录 创建私服仓库 vi /etc/docker/daemon.json vim deploy.sh判断脚本内容 创建 建木 后端部署 命名空间 设置密码用户名 创建git仓库 gitignore文件内容 图形项目操作 git maven docker镜像 点击流程日志 vim /etc/docker/daemon.json 执行部署脚本 ip 开发…...

Android串口开发及读取完整数据的解决方法

串口发送实质就是向串口设备写入、读取字节流,和文件的操作很相似,安卓官方已经提供了android-serialport-api,在开源社区上也有很多衍生项目可以借鉴,本文介绍其中一种用法。 添加依赖 在Module下的 build.gradle 中添加: implementation com.aill:A…...

java之对象向下转型

java中,向下转型是为了重新获得因为向上转型而丢失的子类特性。在先下转型前,必须先进行向上转型。 语法格式如下 父类类型 父类对象子类实例 子类类型 子类对象(子类)父类对象 示例代码如下 class Animal01 {public void sh…...

ElasticSearch核心之DSL查询语句实战

什么是DSL? Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的,所以你必…...

Axure中继器:数据动态展示的强大工具

在Axure RP这一强大的原型设计工具中,中继器(Repeater)无疑是一颗璀璨的明珠。它以其独特的功能和广泛的应用场景,成为设计师在创建数据密集型原型时的首选。本文将深入探讨Axure中继器的特点、使用方式及其在数据动态展示中的重要…...

QT--聊天室

一、设计要求 用QT做一个聊天室, 制作一个服务器和客户端。可以进行注册、登录, 登陆成功后可以使用昵称进行发送、接收消息。 能根据昵称、聊天内容查询历史记录,也可以查询全部聊天记录。 。 二、客户端三级ui界面 三、项目代码 //在…...

Javascript前端面试基础4【每日学习并更新10】

同步和异步的区别 同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等…...

社区团购系统搭建开发,前端uniapp。社区团购搭建开发定制

目录 前言: 一、社区团购系统有哪些功能? 二、社区团购管理端 三、社区团购的基本流程如下: 总结 : 前言: 社区团购是一种以社区为单位进行的集体购物模式。这种模式利用了互联网平台来组织同一社区内的居民一起购…...

node+mysql+layui+ejs实现左侧导航栏菜单动态显示

nodemysqllayuiejs实现左侧导航菜单动态显示 实现思路效果图数据库技术栈代码实现main.html(前端首页页面)查询资源菜单方法 jsapp.js配置ejs模板 node入门到入土项目实战开始,前端篇项目适合node小白入门,因为我也是小白来学习no…...

FRP配置内网穿透52版本以上适用

简述 适用frp配置内网穿透来说我们需要进行简单的区分,具有公网IP的服务器我们简称为服务端,内网的服务器我们可以简称为客户端,frp需要针对不同的服务器配置不同的文件 下载安装包 Linux下载地址 https://github.com/fatedier/frp/relea…...

IFM易福门LR3000LR3300液位传感器操作说明

IFM易福门LR3000LR3300液位传感器操作说明...

【Python大语言模型系列】基于阿里云人工智能平台采用P-Tuning v2微调ChatGLM2-6B大模型(完整教程)

这是我的第331篇原创文章。 一、引言 P-Tuning 是一种对预训练语言模型进行少量参数微调的技术。所谓预训练语言模型,就是指在大规模的语言数据集上训练好的、能够理解自然语言表达并从中学习语言知识的模型。P-Tuning 所做的就是根据具体的任务,对预训练…...

基于Spring boot + Vue的加油站系统

项目名称:加油站系统 作者的B站地址:程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址:程序员云翼-CSDN博客 1.项目技术栈: 前后端分离的项目 后端:Springboot MybatisPlus 前端:Vue…...