VILT算法解读

news2025/1/12 23:34:26

VILT是一种典型的单塔结构,不同于双塔结构由两个独立的Image Encoder以及Text Encoder组成(比如clip),单塔结构的模型一般只有一个共用的编码器,称为Multi-Modal Encoder。 

1、VILT算法原理
    VILT被认为是最简单的单塔结构,它用统一的方式处理视觉和文本两种模态的输入,利用Transformer结构来作为共用的编码器学习模态间的信息交互(多模态融合)。其具体结构如下所示:


(1)数据输入处理

    既然是图文多模态,输入数据必然包含成对的图像和文本(图文pair)。

首先是文本输入,原始的文本输入可以看成是一个单词序列(比如图中的a,stone,statue等等),然后通过Word Embedding算法处理为词嵌入向量,所谓词嵌入向量就是一个高维的向量表征,同一个单词具有相同的嵌入表征,同时同义词的表征距离越近(具体词嵌入的过程可以参考NLP的一些资料,简单来说就是需要一个词汇表(vocabulary dict),然后将单词分词后转化为词汇表中的索引,再将数字索引变为高维向量)。注意到除了词嵌入向量外,每个单词最后的嵌入向量还添加了位置嵌入向量和模态类别嵌入向量(三种向量进行concat)。

然后是图像输入,与文本不同,原始的图像需要分块处理,变成一个图像块的序列,然后每个图像块会通过一个Linear Projection层投影成一个高维视觉特征图,然后将二维特征图展开变成一位特征向量,这样每个图像块就都变成了一个视觉特征向量,同时特征维度和词嵌入向量的特征维度一致。同时每个图像块除了视觉特征向量外,也会添加位置嵌入向量和模态类别嵌入向量(三种向量进行concat)。

    此外,两种模态分别都嵌入了一个额外的可学习[class] embedding,方便和下游任务对接。通过对两种输入的处理,最后不管是文本单词,还是图像块,都被embedding为了同样维度的token特征。

(2)模型结构

    由于视觉和文本输入被转化为了相同的token特征,所以后续的处理方式就可以统一了。因此VILT仅通过一个Transformer的结构就可以进行建模,它使用了一个预训练的ViT来初始化这个Transformer。

(3)预训练任务(损失函数)

    VILT在预训练阶段主要使用了两种较典型的优化目标,分别为Image Text Matching(ITM)和Masked Language Modeling(MLM)。

Image Text Matching(ITM)

    图像-文本匹配(ITM)可以预测一对图像和文本是正例(匹配)还是负例(不匹配)。使用多模态编码器输出嵌入的[CLS] token作为图像-文本对的联合表示,并附加一个全连接(FC)层,最后使用Softmax来预测一个二分类概率


    其中,y是一个表示ground truth标签的二维one-hot向量。

    ITM在使用时候的关键在于如何构造正负例样本,ITM 本质上是二分类,正样本就是匹配的图文对,负样本需要在训练的过程中进行采样,对每个图像一般在数据集中随机采样一个不匹配的文本作为负样本;对每个文本在数据集中随机采样1个不匹配的图像作为负样本。

Masked Language Modeling(MLM)

    MLM是训练NLP中Bert模型所使用的预训练任务,通常屏蔽(或随机替换)给定句子中特定百分比(15%)的单词,模型期望基于该句子中的其他单词预测这些被屏蔽的单词。这样的训练方案使这个模型在本质上是双向的,因为掩蔽词的表示是根据出现的词来学习的,不管是左还是右。你也可以把它想象成一个填空式的问题陈述。


    在单塔多模态中的MLM与Bert中的稍有不同,主要区别还是在输入信息,VILT中的MLM在预测被MASK的单词时,除了依赖上下文还可以依赖视觉模态的信息。

    另外,VILT在使用MLM时还结合了whole word masking技巧。所谓whole word masking是将连续的子词tokens进行mask的技巧,因为大部分的分词算法可能会将一个单词分为多个文本token,因此普通的MLM不能做到基于单词粒度的MASK,只能基于文本token这个粒度进行MASK。

2、VILT适合的下游任务
    VILT这种单塔的多模态结构由于在预训练的时候进行了充分的模态交互(模态融合),因此适合下游诸如VQA(视觉问答),NLVR(自然语言视觉推理 )等等。

(1)VILT进行VQA

    VQA任务就是根据一张图片来提问,希望模型能正确回答对应的问题。比如下面有一张图片,图片里有两只猫,问题Question是“How many cats are there?”,希望模型给出的答案Answer是“2”


(2)VILT进行NLVR

    VILT还可以用来进行NLVR任务,NLVR判断两张图片和一条文本的语义是否匹配,比如准备两张图片,对应的文本内容是text,如果图片和文本内容匹配则模型输出True,否则输出False。


3、小结
     VILT作为多模态单塔(单流)结构中的代表工作,虽然其在检索上的效率偏低,但是其在下游许多需要强交互的多模态理解任务上表现出了比双塔结构更强劲的性能!

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

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

相关文章

SpringBoot中使用PageHelper插件实现Mybatis分页

场景 SpringBoot中整合Mybatis时一般添加的依赖为 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.1</version></dependency> 如果要实现分页查…

PostgreSQL按日期列创建分区表

在PostgreSQL中&#xff0c;实现自动创建分区表主要依赖于表的分区功能&#xff0c;这一功能从PostgreSQL 10开始引入。分区表可以帮助管理大量数据&#xff0c;通过分布数据到不同的分区来提高查询效率和数据维护的便捷性。以下是在PostgreSQL中自动创建分区表的一般步骤&…

docker之安装mongo创建运行环境

目录 一、docker pull 最新资源 二、启动mongo镜像 启动命令查看日志拉取低版本镜像成功启动 三、进入mongo容器 进入容器进入mongo环境查询当前所在库切换库至admin随意切换库 并 创建用户登录用户新增文档数据等 五、总结 版本兼容可备份操作 一、docker pull 最新资源…

java面试集合篇

上面是java中集合的整体框架图。 集合使用的数据结构 算法复杂度分析 时间复杂度分析 时间复杂度分析&#xff1a;来评估代码的执行耗时的 /*** 求1~n的累加和* param n* return*/ public int sum(int n) {int sum 0;for ( int i 1; i < n; i) {sum sum i;}return …

【常识】大数据设计基础知识

底层存储&#xff1a;hadoop&#xff08;hdfsmapreduce&#xff09; Hadoop已经有十几年的历史&#xff0c;它是大数据领域的存储基石&#xff0c;HDFS目前仍然没有成熟替代品;MapR 文件系统在业内已经具有一定知名度了&#xff0c;不仅 MapR 宣布它自己的文件系统比 HDFS 快2-…

模板(函数模板)---C++

模板目录 模板1.模板概念&#xff12;.泛型编程 1.函数模板1.1 函数模板语法1.2 函数模板注意事项1.3 普通函数与函数模板的区别1.4 普通函数与函数模板的调用规则1.5 模板的局限性1.6 函数模板案例 模板 1.模板概念 模板就是建立通用的模具&#xff0c;大大提高复用性。 模板…

如何在本地服务器部署TeslaMate并远程查看特斯拉汽车数据无需公网ip

文章目录 1. Docker部署TeslaMate2. 本地访问TeslaMate3. Linux安装Cpolar4. 配置TeslaMate公网地址5. 远程访问TeslaMate6. 固定TeslaMate公网地址7. 固定地址访问TeslaMate TeslaMate是一个开源软件&#xff0c;可以通过连接特斯拉账号&#xff0c;记录行驶历史&#xff0c;统…

解决Edge浏览器,微博无法查看大图(Edge Image Viewer)

使用Edge浏览器浏览微博或其它带校验的图片时&#xff0c;会导致无法查看。 主要原因为Edge自带了一个Edge Image Viewer, 但是该图片查看器无法查看带校验数据的图片&#xff0c;所以导致查看时一片空白。 解决方法 地址栏输入 edge://flags/搜索 Edge Image Viewer选择 Disa…

爬虫学习笔记-scrapy爬取电影天堂(双层网址嵌套)

1.终端运行scrapy startproject movie,创建项目 2.接口查找 3.终端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,运行 scrapy genspider mv https://dy2018.com/ 4.打开mv,编写代码,爬取电影名和网址 5.用爬取的网址请求,使用meta属性传递name ,callback调用自定义的…

JVM原理学习

一.栈上的数据存储P95 二.堆上的数据存储 标记字段 指针压缩(节省空间 内存对齐(提高CPU缓存行效率 字段重排列方便内存对齐 类排在基本类型之后 三.JIT实时编译 优化手段 C2编译器&#xff0c;直接将循环相加求和优化为乘法。 方法内联 逃逸分析 四.G1垃圾回收器原理 年轻代…

Vue | (三)使用Vue脚手架(中)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;Todo-list 案例&#x1f407;组件化编码流程&#xff08;通用&#xff09;&#x1f407;实现静态组件&#x1f407;展示动态数据&#x1f407;交互⭐️添加一个todo⭐️todo勾选实现⭐️删除功能实现⭐️底部统计功能实现⭐️底部全选功能实现⭐️底部一…

Vue报错,xxx is defined #变量未定义

vue.js:5129 [Vue warn]: Error in v-on handler: "ReferenceError: count is not defined" 浏览器将这个变量 当做全局变量了&#xff0c;事实上它只是实例中的变量 加上this指定&#xff0c;是vue实例中的变量

Android之Android.bp文件格式语法(一百八十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

代码随想录算法训练营day20

题目&#xff1a;530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先 参考链接&#xff1a;代码随想录 530.二叉搜索树的最小绝对差 思路&#xff1a;我一开始想到的方法是先生成中序序列&#xff0c;然后对相邻两项的差进行计算&#xff0c;取…

代码随想录刷题笔记-Day21

1. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。…

聊聊 Git SubModule(子模块)

比如在公司不同开发团队中&#xff0c;有一个基础共享库&#xff0c;同时被多个项目调用。若要保证基础共享库的动态更新&#xff0c;那么就需要把共享库独立为一个代码库&#xff0c;但是分别把共享库中的文件拷贝到各自的项目中会造成冗余&#xff0c;而且再次更新共享库就会…

提升认知水平和防止偏见浅谈

提升认知水平和防止偏见浅谈 《庄子外物》&#xff1a;井蛙不可语海&#xff0c;夏虫不可语冰。 不要跟井底的青蛙谈论大海&#xff0c;因为它的认知只有井底那么大&#xff0c;大海对于它来说是认知盲区&#xff1b;不要与夏虫去谈论冰雪&#xff0c;因为夏虫一生很短没有经历…

香港优才计划认可大学名单有哪些?武大/西安交大/哈工大/中南大学毕业生,能加名校30分吗?

关注香港优才的朋友应该知道&#xff0c;优才计划采用计分制&#xff0c;综合计分制下&#xff0c;有一个“名校”加分项&#xff0c;如果毕业院校在世界百强大学名单内&#xff0c;可以多加30分&#xff01; 但这个世界百强大学名单&#xff0c;可能有很多人不是很清楚&#x…

用冒泡排序实现快速排序(qsort函数),指针进阶实例

目录 1、qsort函数是什么 2、冒泡排序实现指针进阶 2.1 主函数 2.2 功能函数声明​编辑 2.3 my_qsort函数介绍 2.4 Swap函数 总结 1、qsort函数是什么 qsort函数是c语言自带的函数&#xff0c;其功能是实现快速排序。我们来看一下他的参数和返回值&#xff1a; 以上就是q…

代码随想录算法训练营DAY21 | 二叉树 (9)

一、LeetCode 669 修建二叉搜索树 题目链接&#xff1a;669.修建二叉搜索树https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 思路&#xff1a;递归三部曲-定参数、返回值-定终止条件-定单层递归逻辑 class Solution {public TreeNode trimBST(TreeNode …