【多模态大模型】 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使用了参数共享策略,上图中同颜色的模块使用同一组参数。具体参数关系如下:
- 图像编码器中所有参数独立;
- 文本编码器、基于图像的文本编码器、基于图像的文本解码器中的FFN使用同一组参数;
- 文本编码器和基于图像的文本编码器中的双向自注意力使用同一组参数;
- 基于图像的文本编码器和基于图像的文本解码器中的交叉注意力使用同一组参数;
- 基于图像的文本解码器中的因果自注意力参数独立。
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的流程图如下:
可见,其详细步骤是:
- 使用从网络上下载的带噪声的图像-文本对和不含噪声的开源数据集中人工标注的图像-文本对训练一个模型。
- 使用在不含噪声的开源数据集中人工标注的图像-文本对分别微调
Filter和Captioner,Filter仅使用ITC损失和ITM损失进行微调,Captioner仅使用LM损失进行微调。 - 将从网络上下载的图像送入
Captioner生成对该图像的文本描述,形成人造图像-文本对。 - 将从网络上下载的图像-文本对连同
Captioner生成的人造图像-文本对一起送入Filter过滤其中文本描述不合适的图像-文本对。 - 使用过滤后得到的更高质量的图像-文本对连同不含噪声的开源数据集中人工标注的图像-文本对进行模型的重新训练。
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࿰…...
网页上空格
  no-break space(普通的英文半角空格但不换行) 中文全角空格 (一个中文宽度)   en空格(半个中文宽度)   em空格 (一个中文宽度) 四分之一em空格 (四分之一中文宽度) 相比平时的空格(), 拥有不间断(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…...
学网安压根不卡学历,在校生自学这样走少绕好几年弯路
学网安压根不卡学历,在校生自学这样走少绕好几年弯路 前言 “网络安全只有计算机高材生才能学?” “没有名校背景,根本进不了这个行业?” “普通专科生、本科生、非科班出身想要自学网络安全,难度太大了吧…...
Jenga框架双引擎设计:视频生成效率优化解析
1. Jenga框架核心设计解析Jenga视频生成框架的核心创新在于其双引擎设计:渐进式分辨率(ProRes)和动态块稀疏注意力(AttenCarve)。这两种技术协同工作,解决了Transformer架构在视频生成中的计算效率瓶颈。1.1 渐进式分辨率技术(ProRes)ProRes采用分阶段生…...
ncmdumpGUI完全手册:解锁网易云音乐NCM格式的终极Windows解决方案
ncmdumpGUI完全手册:解锁网易云音乐NCM格式的终极Windows解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾为网易云音乐下载的NCM格…...
海思Hi3516CV608×PSRAM|AI全彩IPC黄金硬件方案
一、海思Hi3516CV608核心应用特性(AI全彩IPC主力主控)芯片原生内置512Mbit DDR2,满足系统运行、视频编码、基础ISP图像处理,硬件资源稳定可靠。集成硬件NPU(0.2TOPS),原生支持人形检测、越界侦测…...
告别Keil4编译报错!手把手教你为STC89C52RC单片机配置头文件路径(保姆级教程)
从零解决Keil4头文件报错:STC89C52RC开发环境配置全指南 当你第一次打开Keil4准备为STC89C52RC单片机编写程序时,满心期待地点下编译按钮,却看到屏幕上跳出"Cannot open source file REG52.H"的红色错误提示——这种挫败感我太熟悉…...
告别UI适配烦恼:在UE5中创建自适应安全区,让你的游戏核心画面永不“跑偏”
告别UI适配烦恼:在UE5中构建动态安全区系统 当玩家沉浸在游戏世界时,突然发现血条遮挡了关键道具,或是虚拟摇杆挤占了战斗视野——这种糟糕的体验往往源于安全区设计的疏忽。随着移动设备异形屏和主机电视overscan区域的多样化,传…...
STM32F4实战:用CubeMX和HAL库搞定MT6825磁编码器的SPI读取(附完整代码)
STM32F4实战:用CubeMX和HAL库搞定MT6825磁编码器的SPI读取(附完整代码) 在工业自动化、机器人控制和精密测量领域,高精度角度传感器是不可或缺的核心部件。MT6825作为一款14位绝对式磁旋转编码器芯片,以其SPI接口、0.3…...
Vue3拖拽缩放组件:如何用5分钟为你的应用添加专业级交互体验
Vue3拖拽缩放组件:如何用5分钟为你的应用添加专业级交互体验 【免费下载链接】vue3-draggable-resizable [Vue3 组件] 用于拖拽调整位置和大小的的组件,同时支持元素吸附对齐,实时参考线。 项目地址: https://gitcode.com/gh_mirrors/vu/vu…...
如何构建活跃的AI技能社区:Awesome Agent Skills线上线下活动完整指南
如何构建活跃的AI技能社区:Awesome Agent Skills线上线下活动完整指南 【免费下载链接】awesome-agent-skills A curated collection of 1000 agent skills from official dev teams and the community, compatible with Claude Code, Codex, Gemini CLI, Cursor, a…...
终极网页资源下载神器:ResourcesSaverExt完整操作指南
终极网页资源下载神器:ResourcesSaverExt完整操作指南 【免费下载链接】ResourcesSaverExt Chrome Extension for one click downloading all resources files and keeping folder structures. 项目地址: https://gitcode.com/gh_mirrors/re/ResourcesSaverExt …...
