【论文笔记】BLIP: Bootstrapping Language-Image Pre-training forUnified Vision-Language Understanding and

2023-11-02

1.背景

1.1 之前存在的两个问题

(1) 模型视角:大多数方法要么采用基于编码器的模型,要么采用编码器-解码器模型。基于编码器的模型不太容易直接转移到文本生成任务(例如,图像字幕),而编码器-解码器模型尚未成功用于图像文本检索任务。

(2)数据集j角度:存在噪声,训练次优

基于编码器的模型:CLIP,缺少decoder对文本生成的能力相对较弱

采用编码器-解码器:SimVLM

1.2 提出的解决办法

(a) 编码器-解码器的多模态混合(MED)

可以用于单一模态,也可以作为基于图像的文本任务的编码器或者是解码器

该模型与三个视觉语言目标联合预训练:图像文本对比学习、图像文本匹配和图像条件语言建模。

(2)字幕和过滤(CapFilt):一种新的数据集增强方法

将预先训练的MED微调为两个模块:一个是生成给定网络图像的合成字幕的字幕器,另一个是从原始网络文本和合成文本中去除噪声字幕的过滤器。

二.方法

1.1 BLIP 模型架构

能看到ALBEF和VLMO的影子。

  • 每个图像-文本对只需要正向通过一次视觉转换器,并且分别三次正向通过文本转换器,并通不同的损失函数来激活 单模态编码器,基于图像的文本编码器,基于图像的文本解码器的功能。
  • 通过在自注意力 (SA) 层和文本编码器的每个变换器块的前馈网络 (FFN) 之间插入一个额外的交叉注意力 (CA) 层来注入视觉信息。

1.2 损失函数

  1. 图像-文本对比度损失(ITC):激活单模态编码器
  2. 图像-文本匹配损失(ITM):激活基于图像的文本编码器 。
    ITM是一种二元分类任务,其中模型使用ITM头(线性层)来预测图像-文本对匹配的还是不匹配的
  3. 语言建模损失(LM):激活基于图像的文本解码器

文本编码器和文本解码器共享除SA(self-attention)层之外的所有参数,只由SA层来捕捉编码和解码任务之间的差异同时也提高了交叉注意力和FFN层的效率。区别于ALBEF,BLIP的计算ITC和计算ITM的SA层共享参数。

编码器采用双向自注意来构建当前输入tokens的表示,而解码器采用因果自注意来预测下一个tokens。

1.3 CapFilt

引入了两个模块:一个用于生成给定网络图像的字幕的字幕器,以及一个用于去除噪声图像-文本对的过滤器。

三.模型实现

【代码】GitHub

 核心问题就是想明白三个损失函数怎么实现,怎么对应(如果你vit和bert已经相对熟悉)

如果你对21年的ALBEF这篇论文和代码有所了解,就会发现其实代码上基本上一脉相承。它同样也是用到了动量蒸馏的技巧和ITC,ITM等训练目标,但是将原先的掩码语言建模(MLM)任务更换成了语言建模(LM)任务

 ALBEF代码不熟悉的可以先看看【读论文看代码】多模态系列-ALBEF

3.1 模型构建

(1)tokenize增加了两个special tokens 和 一个编码器的tokenid

(2)视觉编码器额外提供了16层VIT的选择

(3)文本编码器从 ALBEF 的 BertForMaskedLM  替换成了一个用bert-base-uncased初始化的Bert模型

 BaseModelOutputWithPoolingAndCrossAttentions

(4)多模态解码器(文本解码器)同样也是替换成了bert-base-uncased初始化的Bert模型,

 

 CausalLMOutputWithCrossAttentions

3.2 语言建模(LM)任务

为了文本生成任务,将MLM任务更换成LM


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文笔记】BLIP: Bootstrapping Language-Image Pre-training forUnified Vision-Language Understanding and 的相关文章

随机推荐

  • Spring包结构以及各个包之间引用关系说明

    Spring 包结构说明 spring jar 包含有完整发布的单个jar包 他包含有除spring mock jar之外的所有jar 原因是 spring mock jar只有在开发环境中才会用到 而且仅仅是作为一个辅助测试类存在 除了s
  • 解析#pragma指令

    在所有的预处理指令中 Pragma 指令可能是最复杂的了 它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作 pragma指令对每个编译器给出了一个方法 在保持与C和C 语言完全兼容的情况下 给出主机或操作系统专有的特征 依据定义
  • Eclipse安装STS(Spring Tool Suite (STS) for Eclipse)插件

    由于最近在学习SpringBooot 用Eclipse创建SpringBoot项目比较不爽 听说STS插件能直接创建SpringBoot项目 就动手安装一下 希望能对像我一样的小白有所帮助 STS 官网 https spring io to
  • 【毕业设计】基于stm32的便携式U盘设计与实现 - stm32制作U盘

    文章目录 0 前言 1 简介 2 主要器件 3 实现过程 4 部分核心代码 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项
  • 如何解决网站被黑客攻击-深夜一次网站被攻击瘫痪

    情况 客户网站深夜被黑客攻击 服务器对外发出大量攻击行为流量 运维人员已经不可登录服务器进行安全操作 1首先看能不能后台登录经网站管理界面 如果可以的话那就去查看相关日志 确定黑客攻击的范围 一定要尽可能的得到所有的日志 数据库的 Web服
  • (AJAX/JSON)技术实现校验用户名是否存在

    案例 校验用户名是否存在 1 服务器响应的数据 在客户端使用时 要想当做json数据格式使用 有两种解决方案 1 get type 将最后一个参数type指定为 json 2 在服务器端设置MIME类型 response setConten
  • tensorflow教程_TensorFlow教程

    tensorflow教程 TensorFlow教程 TensorFlow Tutorial PDF Version Quick Guide Resources Job Search Discussion PDF版本 快速指南 资源资源 求职
  • nginx配置中root和alias的区别

    例 访问http 127 0 0 1 download 这个目录时候让他去 opt app code这个目录找 方法一 使用root关键字 location root usr share nginx location download gz
  • 水平集分割

    基于距离正则的水平集分割MATLAB代码 无需初始化 This Matlab code demonstrates an edge based active contour model as an application of the Dis
  • 深入理解Objective-C的Block

    最近时间少 也变得懒了 好久没在这里写文章了 眼看就到8月末了 还是整理一篇酝酿已久的吧 之前的文章中整理过用ObjectiveC开发中常用到的Block代码块 其中也提到了一个和block使用不当的crash例子 接着这个问题 本篇文章将
  • Ubuntu 11.10编译Android 4.0.1源码错误

    Android 4 0 1下载到自己的Ubuntu 11 10 64位 系统里 把整个编译环境都配置好了 参考 http www linuxidc net thread 2736 1 1 html 编译时还是出现了如下的错误提示
  • HTML5 页面布局【结合案例】

    新布局的意义 语义化 HTML5 可以让很多更语义化的结构化代码标签代替大量无意义的 div 标签 1 这种语义化的特性提升了网页的质量和语义 2 减少了以前用于CSS 调用的class 和 id 属性 对搜索引擎的友好 新的结构标签带来的
  • su root 与 su - root的区别

    su root 与 su root的区别 su 默认切到 root su 与su 的区别 su 是不改变当前变量 su 是切换到用户的变量 su只能获得root的执行权限 不能获得环境变量 而su 是切换到root并获得root的环境变量及
  • (Java课设)学生成绩管理系统(IDEA+SSM+Layuimini)

    一 系统介绍 1 开发环境 2 技术概要 3 设计概要 4 功能模块设计 二 系统展示 三 部分代码 Student java studentDao接口文件 StudentService java StudentController jav
  • 如何使用VisualVM进行性能分析本地java项目和远程java项目

    这里是weihubeats 觉得文章不错可以关注公众号小奏技术 文章首发 拒绝营销号 拒绝标题党 背景 在有时候我们需要分析java应用的一些内存 gc等情况进行性能分析 我们往往需要一些性能分析利器 而VisualVM算是其中一个 今天我
  • RTL8189ES/ETV/FTV系列模块定频软件操作手册

    使用说明 1 安装串口驱动 SecureCRT串口工具 2 右键打开我的电脑 选择属性 打开设备管理器 如下图示找到COM口 3 打开串口工具 按下图设置 4 打开机器电源 串口工具中会出现字符运行 停止后按ENTER出现下图 5 输入 号
  • Docker Compose的介绍及安装

    一 compose介绍 Compose是一个用来定义和运行复杂应用的Docker工具 一个使用Docker容器的应用 通常由多个容器组成 使用Docker Compose不再需要使用shell脚本来启动容器 Compose 通过一个配置文件
  • DIY简单的RTOS(二)任务切换

    从系统的角度看 任务是竞争系统资源的最小运行单元 任务可以使用或等待CPU 使用内存空间等系统资源 并独立于其它任务运行 项目地址 任务控制块 在其他RTOS中 任务一般是由 任务堆栈 任务控制块和任务函数三部分组成 任务堆栈 上下文切换的
  • 计算机技术为我们带来的影响,计算机技术对社会发展的影响探析

    摘 要 随着社会科学技术和经济的迅速发展 计算机技术也越来越完善 对人类生活的影响也越来越显著 计算机的应用领域很大 几乎可以被用在人们生活的方方面面 无论是学习 工作 还是生活 娱乐 都能看到计算机技术为我们提供的方便之处 正是因为计算机
  • 【论文笔记】BLIP: Bootstrapping Language-Image Pre-training forUnified Vision-Language Understanding and

    1 背景 1 1 之前存在的两个问题 1 模型视角 大多数方法要么采用基于编码器的模型 要么采用编码器 解码器模型 基于编码器的模型不太容易直接转移到文本生成任务 例如 图像字幕 而编码器 解码器模型尚未成功用于图像文本检索任务 2 数据集