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

news2024/11/28 19:05:41

一、引言

论文: 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]截止。

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

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

相关文章

【changchain-community安装失败】‘EntryPoints‘ object has no attribute ‘get‘报错解决

在安装changchain-community时报错信息如下: WARNING: Keyring is skipped due to an exception: EntryPoints object has no attribute get ERROR: Could not find a version that satisfies the requirement changchain-community ERROR: No matching distributio…

进程间通信与线程间通信的方法汇总

目录 一、进程间通信机制 管道(pipe): 命名管道(FIFO): 消息队列(MQ): 信号量(semaphore): 共享内存(shared memory): 信号(signal): 内存映射(mapped memory): 内存映射和共享内存的区…

华杉研发九学习日记20 LinkedHashMap TreeMap Arrays 函数式接口 方法引用

华杉研发九学习日记20 一&#xff0c;LinkedHashMap 与HashMap相比&#xff0c;key是有序的 Map<Integer,String> map new LinkedHashMap<Integer,String>(); map.put(1, "one"); map.put(2, "two"); map.put(3, "three"); map.…

GitHub Desktop commit文件到repository

1. Clone a repository到本地 2. 在本地仓库修改/添加需要提交的文件或者文档 3. 添加comments并commit 4. 提交完成&#xff0c;点击Push origin提交代码到Github远程仓库 上传成功后&#xff0c;刷新Github网站页面就会出现上传的项目

鸿蒙应用框架开发【自绘编辑框】 输入法框架

自绘编辑框 介绍 本示例通过输入法框架实现自会编辑框&#xff0c;可以绑定输入法应用&#xff0c;从输入法应用输入内容&#xff0c;显示和隐藏输入法。 效果预览 使用说明 1.点击编辑框可以绑定并拉起输入法&#xff0c;可以从输入法键盘输入内容到编辑框。 2.可以点击a…

SSM老人服务管理系统小程序-计算机毕业设计源码91022

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

跨网段 IP 地址通信故障分析

现如今计算机网络的规模和复杂性不断增加&#xff0c;跨网段通信成为网络运行中的常见需求。但如果设备处于不同网段且路由设置出现偏差时就会导致通信故障&#xff0c;严重影响网络的正常运行和数据传输。 1.跨网段通信的基本原理 跨网段通信依赖于路由器的路由功能。路由器根…

vue3.0 入门基础知识汇总【1】 全面 精简 推荐

这篇博文主要对一些刚入门vue框架的同学&#xff0c;以及对vue基本知识进行巩固的&#xff0c;最后就是精简一下基本知识&#xff0c;以方便自己查看&#xff0c;感谢参考&#xff0c;有问题评论区交流&#xff0c;谢谢。 目录 1.component组件的基本结构和使用 2.method方法…

全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总

全网最适合入门的面向对象编程教程&#xff1a;28 类和对象的 Python 实现-Python 编程原则、哲学和规范大汇总 摘要&#xff1a; 本文主要介绍了在使用 Python 进行面向对象编程时&#xff0c;Python 异常处理的原则-“请求谅解&#xff0c;而非许可”&#xff0c;以及软件设…

什么是安全编程?

安全编程&#xff08;Secure Programming&#xff09;是一种编程方法论&#xff0c;旨在通过编写安全可靠的代码来保护计算机系统和数据的安全性。它涵盖了软件设计、开发、测试和维护的整个生命周期&#xff0c;旨在最大程度地降低软件漏洞和安全缺陷的风险。以下是对安全编程…

【前端 20】Element-UI快速入门

探索Element UI组件库&#xff1a;快速搭建Vue应用的必备工具 在现代Web开发中&#xff0c;Vue.js以其轻量级和灵活性赢得了广泛的关注。而Element UI&#xff0c;作为Vue.js的一个UI组件库&#xff0c;更是为开发者们提供了丰富、易用的前端组件&#xff0c;极大地加速了开发过…

Spring源码(八)--Spring实例化的策略

Spring实例化的策略有几种 &#xff0c;可以看一下 InstantiationStrategy 相关的类。 UML 结构图 InstantiationStrategy的实现类有 SimpleInstantiationStrategy。 CglibSubclassingInstantiationStrategy 又继承了SimpleInstantiationStrategy。 InstantiationStrategy I…

Java----反射

什么是反射&#xff1f; 反射就是允许对成员变量、成员方法和构造方法的信息进行编程访问。换句话来讲&#xff0c;就是通过反射&#xff0c;我们可以在不需要创建其对象的情况下就可以获取其定义的各种属性值以及方法。常见的应用就是IDEA中的提示功能&#xff0c;当我…

摆弄it:越走越深

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

大模型算法面试题(十七)

本系列收纳各种大模型面试题及答案。 1、LoRA权重是否可以合入原模型 LoRA权重可以合入原模型。LoRA&#xff08;Low-Rank Adaptation of Large Language Models&#xff09;是一种用于微调大型语言模型的低秩适应技术。它通过训练低秩矩阵&#xff0c;并将这些参数注入到原始…

onlyoffice用nginx反向代理

我对于onlyoffice的需求就是当个在线编辑器使用。在集成react的时候之前都是写的绝对路径的地址&#xff0c;这样在需要迁移应用的时候就造成了巨大的麻烦&#xff0c;所以我决定用nginx做反向代理&#xff0c;这样我集成的时候就不用每次都修改源码中的地址了。 一开始写的代…

LINUX进程间的通信(IPC)--信号

一、概念 信号通信&#xff0c;其实就是内核向用户空间进程发送信号&#xff0c;只有内核才能发信号&#xff0c;用户空间进程不能发送信号。信号已经是存在内核中的了&#xff0c;不需要用户自己创建。 信号通信的框架 * 信号的发送&#xff08;发送信号进程&#xff09;&am…

阿联酋云手机怎么做TikTok引流?

根据字节跳动广告资源的数据显示&#xff0c;2024年初&#xff0c;TikTok在阿联酋拥有1073万18岁及以上用户&#xff0c;其广告覆盖率达到当地互联网用户群的113%。从2023年初到2024年初&#xff0c;TikTok在阿联酋的潜在广告覆盖率增加了250万&#xff0c;增长率达30.4%。特别…

基于ant-design-vue3多功能操作表格,表头序号为动态添加记录按钮,鼠标在表格记录行,当前行序号显示删除按钮

由于项目需要&#xff0c;并考虑到尽可能让空间利用率高&#xff0c;因此定制开发一个表格组件&#xff0c;组件功能主要是在序号表头位置为添加按钮&#xff0c;点击按钮&#xff0c;新增一行表格数据&#xff1b;表格数据删除不同于以往表格在操作栏定义删除按钮&#xff0c;…

深度学习(概念相关)

深度学习&#xff08;论文相关&#xff09; 深度学习一些概念 通过阅读论文可以理解提取数据特征的重要性 深度学习学习怎么去提取特征 应用领域 深度学习应用&#xff1a; 输入&#xff1a;图像输入或者文字输入 算法&#xff1a;还是基础的模块计算 神经网络中的参数几千…