追求极致速度,极简多模态预训练模型ViLT,推理速度比UNITER快60倍!(ICML2021)...

2023-11-03

关注公众号,发现CV技术之美

 写在前面

视觉和语言预训练(VLP)提高了各种联合视觉和语言下游任务的表现。然而,当前的VLP方法严重依赖于图像特征提取的过程,其中大部分涉及区域监督(例如,目标检测)和卷积结构(例如,ResNet)。他们存在以下两方面的问题:

1)效率/速度 ,提取输入特征比多模态交互拥有更多的计算量;

2)表现力 ,视觉embedder的能力和预定义的视觉词汇决定了整个模型性能的上限。

在这篇文章中,作者提出了一个更小的视觉与语言Transformer(ViLT),视觉输入的处理被极大地简化为了无卷积的方式。因此,ViLT可以比以前的VLP模型快几十倍,但依旧可以获得相似甚至更好的性能。

 1. 论文和代码地址

be78bec18f658374f42a529fa9247d76.png

ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision

论文地址:https://arxiv.org/abs/2102.03334

代码地址:https://github.com/dandelin/vilt

 2. Motivation

预训练再微调(pre-train-and-fine-tune) 的方案已经扩展到视觉和语言的联合领域,从而产生了视觉语言预训练(Vision-and-Language Pre-training (VLP)) 模型。这些模型通过图像文本匹配(ITM)掩蔽语言建模(MLM) 目标进行了预训练,然后在下游的视觉语言任务上进行微调,实现更好的性能。

要将图像送入到VLP模型中,首先需要对图像进行embed,形成一个token序列。大多数VLP采用在Visual Genome数据集上预训练的目标检测器来提取视觉特征。Pixel-Bert是这一趋势的一个例外,它使用了在ImageNet分类上进行预训练的ResNet模型,用grid特征来代替region特征。

到目前为止,许多VLP研究都集中在通过增加视觉embedder的能力来提高性能。由于区域特征通常在训练时被提前缓存,从而减轻了特征提取的负担,因此在实验中往往忽略了视觉embedder的缺点。然而,这些限制在实际的应用中仍然是显而易见的,因为所有的图片都必须经历一个缓慢的视觉特征提取过程。

为此,作者将重点转移到构建轻量级和快速的视觉embedder上。ViT等研究表明,使用patch的简单线性投影足以有效地进行视觉信息的表示。

697a94cb5941197c5c111c5626a535c9.png

本文提出了视觉与语言Transformer(ViLT),它以一种统一的方式处理两个模态。它与以前的VLP模型的主要不同之处在于它对像素级输入只进行了浅层的、无卷积的embed,因此处理速度非常快。

去掉用于视觉输入的深度embedder,可显著减少模型大小和运行时间。如上图所示,本文的模型比具有区域特征的VLP模型快几十倍,比具有grid特征的VLP模型快至少四倍,并且在视觉和语言下游任务上表现出类似甚至更好的性能。

视觉和语言模型的分类

作者基于两点提出了视觉和语言模型的分类:

1)两个模态在预处理 参数或计算方面的水平是否相等;

2)两个模态是否在深层网络中交互 作用。

基于这两个点,目前的网络可以分为四类:

ca75020975b4cebf0de589688c45623b.png

如上图所示,视觉语义嵌入(VSE)模型,如VSE++、SCAN,对图像和文本使用单独的嵌入器,但是前者的设计有更多的参数量。然后,它们用简单的点积或比较浅的注意力层来表示两个模态嵌入特征的相似性。

0d14fcfb5025f01d9b8e9c76206a24bd.png

第二类模型,如CLIP,如上图所示,它为每种模态使用分开且复杂的Transformer嵌入器,但是交互的模块非常简单。尽管CLIP在图像-文本检索任务的zero-shot性能非常不错,但在其他视觉和语言下游任务中,并没有这么惊人的表现。

因此,作者认为高性能嵌入器的简单输出融合可能不足以学习复杂的视觉和语言任务,因此交互模块的精心设计是非常重要的。

c9c2276d0fd33f0e14f0f6998ff2ac5d.png

目前的VLP模型大多采用上图中的结构,使用深层Transformer对图像和文本特性的交互进行建模。除了交互模块之外,图像特征的提取和嵌入仍然涉及卷积网络,这是计算量的主要部分。

67d75a58e4fbaa7541d49f0ec3c94132.png

本文提出的ViLT模型如上图所示,视觉和文本的嵌入层都是轻量级,该结构大部分的计算都用在模态交互上面。

 3. 方法

3.1. Model Overview

778c0eef9fa26cd9b53b1615824fb305.png

如上图所示,ViLT具有简洁的结构,最小的视觉嵌入pipeline,并遵循single-stream的方法。作者采用了预训练的ViT参数来对模型进行初始化,这种初始化利用了交互层的能力来处理视觉特征,同时不需要单独的深度视觉嵌入器。

ViT由多头自注意力(MSA)层和MLP层的堆叠块组成。输入文本基于嵌入矩阵和位置嵌入矩阵,得到。输入图像被切片成多个小patch,并将调整为,其中,是patch分辨率,。然后通过线性投影矩阵和位置嵌入矩阵,计算得到

中。

将文本和图像嵌入与其对应的模态类型嵌入向量相加,然后将其concat成组合序列。上下文向量通过D层的Transformer迭代更新,得到最后的上下文序列。是整个多模态输入的集合表示,它是通过线性投影和序列的正切函数来获得的,表示如下:

e2aa713f0becfa09a00c370ed13b103a.png

3.2. Pre-training Objectives

作者用两个常用的目标任务来训练VLP模型:图像文本匹配(ITM)和掩蔽语言建模(MLM)。

Image Text Matching

作者用0.5的概率将不同图像随机替换对齐的图像。一个单线性层的ITM head将汇集的输出特征p投影到二进制类上的logits上,然后计算负对数似然损失作为ITM的损失函数。此外,作者还设计了单词块对齐(WPA),来计算的两个子集之间的对齐分数:(文本子集)和(视觉子集)。

Masked Language Modeling

该任务的目标是根据上下文向量来预测被mask掉的单词,在本文中,作者将mask的概率设为0.15。作者使用一个两层的MLM head,输入并输出mask词汇的logit。然后,将MLM损失设为mask token的负对数似然损失。

3.3. Whole Word Masking

全词掩蔽(Whole Word Masking)是一种mask技术,它mask了组成整个单词的所有连续子字token。该算法应用于原版和中文版的BERT时,对下游任务都是有效的。为了充分利用来自另一种模态的信息,全词掩蔽对视觉语言处理尤为重要。

例如,单词“giraffe”使用预训练的tokenizer被tokenize成三个token [“gi”,“##raf”,“##fe”]。如果不是所有的token都被mask,即[“gi”,“[ask]”,“##fe”],则该模型可以仅依靠附近的两个语言token [“gi”,“##fe”],来预测被屏蔽的“##raf”,而不使用来自图像的信息。在预训练期间,作者用0.15的概率mask整个单词。

3.4. Image Augmentation

图像增强提高了视觉模型的泛化能力。建立在VIT基础上的DeIT试验了各种增强技术,并发现它们对VIT训练是有益的。然而,在VLP模型中,图像增强的效果还没有被探索过。

因此,基于区域特征的VLP模型很难使用通用的图像增强方法。此外,Pixel-Bert虽然可以进行数据增强,但也没有研究它的影响。因此,在本文中,作者还研究了微调过程中使用数据增强对结果的影响。

 4.实验

4.1. Overview

162c3e44991b898184c3f2589da9d0ba.png

在预训练过程中,作者采用了四个数据集,数据集统计如上表所示。

4.2. Classification Tasks

Visual Question Answering

342c3eeaacc0e287496840b7db5871fe.png

上表展示了ViLT在VQA任务上的结果,可以看出相比于其他方法,ViLT在VQA任务上的性能比较一般。

Natural Language for Visual Reasoning

7d6e00f8054f50e4f1cc376927d7d84f.png

从上表可以看出在NLVR2任务上,ViLT取得了和很多预训练模型相似的性能,但是速度快了很多。

4.3. Retrieval Tasks

241287f960804c6959e43790157351fc.png

291bdc9c4be2a0353b6958348010d40a.png

上表展示了检索任务上的性能,ViLT也可以达到比较不错的性能。

4.4. Ablation Study

bf690b5e485f2f9aabd27e5ecb820447.png

上表展示了不同模块的消融实验结果,可以看出Whole Word Masking和数据增强的有效性。

4.5. Complexity Analysis of VLP Models

cd4962a78c92f8cb9a6e1505fbb1cf7b.png

上表展示了不同模型参数量、计算量和推理时间的统计。可以看出,本文的方法具有绝对的优势。

4.6. Visualization

b859368fb70ba3d7807da0147125ca4a.png

上图展示了ViLT跨模态对齐的可视化结果。

 5. 总结

在本文中,作者提出了一种简单的VLP结构——视觉和语言Transformer(ViLT)。ViLT可以与大量配备卷积视觉嵌入网络(例如,Faster R-CNN和ResNet)的模型达到相似的性能。在本文中,作者验证了交互模块的重要性,也希望将来的工作能够基于交互模块进行进一步发展,而不是找到一个更好的特征提取器。

本文的工作可以说是极大的降低了多模态预训练模型的复杂度,在embed的时候采用了最简单的结构,并且也达到了不错的性能,最重要的是能够让模型的速度大幅度提升。不过,作者在进行参数初始化的时候还是用到了ViT的预训练参数,这也导致了对于模型结构修改的空间就比较小。因为如果模型改变太大,就不能用预训练好的参数初始化,从而性能也会降低。

▊ 作者简介

研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。

知乎/公众号:FightingCV

49664d4dcefd60ce1e7153db13fc4954.png

END

欢迎加入「Transformer交流群

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

追求极致速度,极简多模态预训练模型ViLT,推理速度比UNITER快60倍!(ICML2021)... 的相关文章

  • Mac OS 上的诗歌安装失败,显示“should_use_symlinks”

    我正在尝试使用以下命令安装诗歌 curl sSL https install python poetry org python3 但它失败了 但有以下例外 例外 此版本的 python 无法在不使用符号链接的情况下创建 venvs 下面是详
  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • opencv水印周围的轮廓

    我想在图像中的水印周围画一个框 我已经提取了水印并找到了轮廓 但是 不会在水印周围绘制轮廓 轮廓是在我的整个图像上绘制的 请帮我提供正确的代码 轮廓坐标的输出为 array 0 0 0 634 450 634 450 0 dtype int
  • 使用 python 中的公式函数使从 Excel 中提取的值的百分比相等

    import xlrd numpy excel Users Bob Desktop wb1 xlrd open workbook excel assignment3 xlsx sh1 wb1 sheet by index 0 colA co
  • 用缺失的日期填充其他列 Nan Pandas DataFrame

    我实际上是从几个 Excel 文件中提取数据来监控我的每日卡路里摄入量 我设法使用列表理解来生成日期 我尝试使用合并或连接 但它不起作用 ValueError 您正在尝试合并对象和 float64 列 date list 2021 05 2
  • 删除 Django 1.7 中的应用程序(和关联的数据库表)

    是否可以使用 Django 1 7 迁移来完全删除 卸载应用程序及其所有跟踪 主要是其所有数据库表 如果没有 在 Django 1 7 中执行此操作的适当方法是什么 python manage py migrate
  • 如何在Python中同时运行两只乌龟?

    我试图让两只乌龟一起移动 而不是一只接着另一只移动 例如 a turtle Turtle b turtle Turtle a forward 100 b forward 100 但这只能让他们一前一后地移动 有没有办法让它们同时移动 有没有
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • 如果未引发异常,则通过 Python 单元测试

    在Python中unittest框架 是否有一种方法可以在未引发异常的情况下通过单元测试 否则会因 AssertRaise 而失败 如果我正确理解你的问题 你could做这样的事情 def test does not raise on va
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • .pyx 文件出现未知文件类型错误

    我正在尝试构建一个包含 pyx 文件的 Python 包 pyregion 但在构建过程中出现错误 检查以下输出 python setup py build running build running build py creating b
  • 使用 Pandas 计算 delta 列

    我有一个数据框 如下所示 Name Variable Field A 2 3 412 A 2 9 861 A 3 5 1703 B 3 5 1731 A 4 0 2609 B 4 0 2539 A 4 6 2821 B 4 6 2779 A
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • 返回表示每组内最大值的索引的一系列数字位置

    考虑一下这个系列 np random seed 3 1415 s pd Series np random rand 100 pd MultiIndex from product list ABDCE list abcde One Two T
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • TKinter 中的禁用/启用按钮

    我正在尝试制作一个像开关一样的按钮 所以如果我单击禁用按钮 它将禁用 按钮 有效 如果我再次按下它 它将再次启用它 我尝试了 if else 之类的东西 但没有成功 这是一个例子 from tkinter import fenster Tk
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练

随机推荐

  • 启明智显推荐:低成本86盒方案:基于ESP32-S3及4寸全面屏,支持WIFI蓝牙,485、Zigbee、LORA等串口通信

    提示 启明智显专为智能产品提供一站式彩屏显示 连接 云端服务 APP软件开发 维护等解决方案 帮厂商快速实现硬件的智能化 作为启明云端旗下方案公司 我们用心整理了开发小伙伴在开发过程中可能会遇到的问题以及快速上手的简明教程 同时也用心整理了
  • 阳光点歌系统服务器说明书,天行阳光机顶盒点歌系统安装及配置说明-20210409030429.doc-原创力文档...

    目录 TOC o 1 5 h z o Current Document h 天行阳光机顶盒点歌系统服务端软件安装2 o Current Document h 二 加密狗安装3 o Current Document h 三 曲库管理3 四 软
  • sql字符型注入

    今天给大家讲解一下sql字符型注入 首先来个小测试 输入kobe 出现一个结果 下面我们看看他有没有漏洞 BP 抓包 转入Reapter 将name kobe 改为 name kobe or 1 1 注 注释掉后面隐藏的
  • 看这里!2021年Java开发突破20k有哪些有效的路径?绝对干货

    前言 微服务是近年来备受关注的话题 相比于传统的SOA而言 更容易理解 也更容易实践 它将 面向服务 的思想做得更加彻底 有人说它非常好 但就是 玩不起 why 微服务是一种分布式系统架构 它建议我们将业务切分为更加细粒度的服务 并使每个服
  • 流水线设计

    1 global stall 用全局使能信号控制整条pipeline 一般会使用clock enable CE 这样在综合后会自动插入ICG 从而降低动态功耗 always posedge clk begin if ce out data
  • JavaWeb之监听器简要知识

    监听器的任务 监听变化域的变化 request HttpServletRequest session HttpSession application ServletContext 监听器可以做的应用 统计在线人数 web启动时做初始化工作
  • 解决 Unknown compute capability.Specify the target compute capabilities in the TCNN_CUDA_ARCHITECTURES

    问题描述 安装torch cuda nn时出现的问题 pip install git https github com NVlabs tiny cuda nn subdirectory bindings torch python setup
  • 激光雷达,揭开面具下隐藏的“丑陋”

    没有在激光雷达身上 吃过亏 的自动驾驶公司 就像笔者年代没有痴迷过 龟仙人 的小朋友 童年是遗憾的 纸面上的200m测距能力 在视场角边缘为何只有100m 在烈日当头和夕阳西下时 激光雷达点云的噪点水平怎么和化妆和未化妆的姑娘相差这么大 遇
  • Spark在windows环境里跑时报错找不到org.apache.hadoop.fs.FSDataInputStream

    由于最开始图省事 也是为了学习Spark的用法 所以搭了一个本地的测试Spark环境 hadoop也是本地单机版 测试没有问题 在idea中写了一个基础的求和的spark程序 跑起来后报找不到FSDataInputStrea 上网搜了好久
  • mysql复合索引、普通索引总结

    对于复合索引 Mysql从左到右的使用索引中的字段 一个查询可以只使用索引中的一部份 但只能是最左侧部分 例如索引是key index a b c 可以支持a a b a b c 3种组合进行查找 但不支持 b c进行查找 当最左侧字段是常
  • 蓝图使用接口通信

    实际上 类似于是c 中的实现接口 为了简便 两种物体 方块和灯 击中后 打印出击中的名字 首先 创建一个接口 打开该蓝图接口 写纯虚函数 将函数改名为printHitName 暂时不加入输入输出参数 创建灯的蓝图 在灯光蓝图类里 点击类设置
  • BUAA-2023软件工程团队项目——选题和需求分析

    BUAA MapForum 项目 这个作业属于哪个课程 2023北航敏捷软件工程 这个作业的要求在哪里 团队项目 选题和需求分析 我在这个课程的目标是 学习并实践软件工程开发的方法论 在把握整体流程和内容要素的基础上实践细节 培养开发技术
  • HBase表设计案例(陌陌案例)

    1 HBase的名称空间 1 1介绍 1 HBase中的名称空间类似于mysql中不同的数据库 HBase中有两个已经存在的名称空间 default hbase 2 hbase用于存放系统表 3 用户创建表时 如果不指定名称空间 默认放到d
  • Python框架之Django Web框架的使用(一)--快速入门

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • linux查看rsync的命令,Linux rsync 命令学习

    Rsync命令和cp命令很像 但是功能似乎更加复杂点 主要用来备份数据 看了网上一堆介绍的文章 感觉不是很通俗易懂 下面按照我的理解 做一些笔记 同步方式 之前接触过一些同步软件 例如坚果云 百度云盘等等 他们对于同步方式都是有一些选择项的
  • 选址问题

    选址问题 设施选址问题 Facility Location Problem 自20世纪60年代初期以来 在运筹学中一直占据着中心位置 它来自于工厂 仓库 超市 学校 医院 图书馆 火车站 代理服务器 传感器等位置的确定问题 设施选址问题是N
  • 计算机添加usb网络打印机,方便实用!教您如何简单地将USB打印机更改为无线打印机!...

    将USB打印机更改为无线打印机 只需完成三个主要步骤即可 首先 硬件准备 首先 您需要拥有一个带有USB端口和openwrt的路由器 编辑器使用RG100A 作为打印服务器 性能要求不高 只需将最初插入计算机USB的打印电缆插入路由器的US
  • 使用EasyPoi轻松导入导出Excel文档

    提到Excel的导入导出 大家肯定都知道alibaba开源的EasyExcel 该项目的github地址为 https github com alibaba easyexcel 这个项目非常活跃 项目诞生的目的就是为了简化开发 降低内存消耗
  • SCJP认证试题(十一)

    author yaoyuan 10 package com sun scjp 11 public class Geodetics 12 public static final double DIAMETER 12756 32 kilomet
  • 追求极致速度,极简多模态预训练模型ViLT,推理速度比UNITER快60倍!(ICML2021)...

    关注公众号 发现CV技术之美 写在前面 视觉和语言预训练 VLP 提高了各种联合视觉和语言下游任务的表现 然而 当前的VLP方法严重依赖于图像特征提取的过程 其中大部分涉及区域监督 例如 目标检测 和卷积结构 例如 ResNet 他们存在以
Powered by Hwhale