多模态论文串讲-学习笔记(上)

入门参考:跟着chatgpt一起学|多模态入门-CSDN博客

学习参考:多模态论文串讲·上【论文精读·46】_哔哩哔哩_bilibili,强烈推荐这个博主啊,感觉比沐神讲的还要清楚,非常喜欢。

本文介绍只使用transformer encoder的方法,下中会介绍使用transformer encoder和decoder的方法。

目录

1.ViLT CLip回顾

(a) VSE

(b) CLIP

(c)ViLBERT/UNITER

(d) ViLT

一个好的模型结构:

2.ALBEF

摘要:

模型结构:

动量蒸馏

消融实验

 

​3.VLMO

摘要:

模型结构

MoME Transformer:

LOSS

分阶段预训练

模型效果


1.ViLT CLip回顾

图片部分对应4种类型的图文多模态模型,蓝色部分是从这个模型中学到的较好的部分,最右边的是融合这些好的部分的模型结构。

(a) VSE

visual embedding(VE)的大小远大于text embedding(TE),两者也都远大于最终的模态交互(MI),其中VE是来源于目标检测(OD)预训练算法中的,MI就是简单的点乘。

(b) CLIP

之前也有讲过:【经典论文】打通文本图像的里程碑--clip_clip论文-CSDN博客

双塔模型,通过对比学习,将已有的图片文本对在空间上拉的更近。

对图文匹配任务而言效果好,且高效。

缺点:在VQA,VR,VE这些任务上性能不够好(模态之间的交互不足)

(c)ViLBERT/UNITER

在VSE的基础上,使用transformer的encoder或者别的更复杂的模型结构来进行模态之间的交互

(d) ViLT

为了将目标检测从视觉端拿掉,有局限性。

使用基于patch的视觉特征来替代使用基于bounding box的视觉特征,visual embedding是基于patch的,所以VE的大小较小,大大降低了复杂度。而相应的MI,类似与上面的C类里的方法,复杂度较高。

缺点:

性能不够高,可能比不过c类中的方法。有可能是数据集的bias,也有可能是视觉部分不够强。(VE是随机初始化的)

推理快,但是训练慢。(4million的数据集,64张32G GPU训练3天)

一个好的模型结构:

ITC:Image Text Contrastive Loss,对比学习的loss

MLM:Mask Language Modeling Loss,bert中的loss,遮住一个词再去预判这个词

ITM:Image Text Matching Loss

更大的视觉特征

2.ALBEF

摘要:

1.ALBEF使用ITC(图像文本对比损失函数),在融合之前,将视觉特征和文本特征进行了对齐。

        之前的工作,使用Transformer来融合视觉特征和文本特征,而这个视觉特征是已经学习好的,后续并没有基于end-end继续学习,所以视觉特征和文本特征是没有对齐的。

2.使用momentum distillation这种自训练的方式去学习,提升模型在noisy数据集上的表现。

        使用momentum model来生成伪标签,再使用momentum distillation来提升表现。

模型结构:

  • 视觉特征:ViT,一个标准的ViT(什么是VIT?-CSDN博客)
    • 预训练参数:Data Efficient Vision Transformer(DEiT)
  • 文本特征:Bert,使用Bert模型进行初始化,但是只用了bert中的6层做文本特征,另外6层做模态之间的交互。
  • Momentum Model:也是一个ViT和Bert,参数是从上述的ViT和Bert通过moving average得到。阈值:0.995,Momentum Model会更稳定,产出更稳定的图像文本特征。(可参考MOCO)
  • ITM:判断VE和TE是否是同一个对。
    • 缺点:太简单了,负样本很容易学出来。
    • hard negative:每个batch内,每个图片基于ITC,找到和当前图片最相似的作为负样本。
  • MLM:类似于bert,也是对文本进行mask,但是会借助图像特征来帮助预测。

ALBEF每次做2次forward,一次使用原始的I和T(ITC,ITM),一次使用原始的I和mask之后的T’(MLM)

动量蒸馏

原因:网上爬下来的数据是noisy data,里面的正样本对中的文本可能和图片没什么关系,而负样本反而能很好地描述这个图像,可能比ground_truth还好。这种one-hot的label对于ITC和MLM而言是不友好的,使得模型学习困难。

构建:在已有的模型之上,使用EMA(exponential moving average),生成伪标签。

LOSS:在已有的基础上,添加基于伪标签的loss,因为伪标签是softmax score,所以使用KL散度来计算loss

ITC loss 公式:

MLM loss公式

伪标签示例,可以看到,伪标签描述的可能比ground_truth结果更好。

消融实验

在4M的数据集上,Momentum Modeling的提升可能比其他几种方式的提升要小一些,但是方向是不错的。在14M的数据集上,可能会更好。

3.VLMO

论文地址:https://arxiv.org/abs/2111.02358v2

摘要:

之前模型的弊端:

        双塔模型,clip和align,速度快,但是在其他下游任务中的表现不好。

       单塔模型:fusion-encoder,效果好,但是下游任务推理速度特别慢。

贡献:

  1. 提出了Mixture-of-Modality-Expert,后续推理时,根据任务的不同,选择不同的Expert网络。
  2. 提出了stage-wise pretraining strategy,利用单模态领域丰富的数据集,分阶段进行训练。

模型结构

MoME Transformer:

在Transformer的结构基础上,针对不同的输入,用3个FFN替代原先的FFN,分别代表了三个专家网络。

self-attention层是完全share weights的。

LOSS

和ALBEF一致

ITC:计算时类似一个clip模型,双塔输入

ITM/MLM:Fusion Encoder,单塔输入,图像和文本一起输入,

64张V100的卡训练2天。

分阶段预训练

  1. 使用图像数据进行预训练,V-FFN和self-attention层都可以进行训练,没有需要冻住的。
  2. 使用文本数据进行预训练,此时V-FFN和self-attention层都被冻住,仅训练L-FFN。
    1. 比较有意思的一点是,仅在图像数据上预训练好的self-attention在文本数据中也工作的很好,也在很多工作上验证过。但是反过来不行,推测可能图像数据蕴含的内容更丰富?
  3. 都可以进行训练

模型效果

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

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

相关文章

【软件工程】系统流程图

一、定义 二、常用符号 例题 选择题

空栈压数 - 华为OD统一考试(E卷)

2024华为OD机试(E卷D卷C卷)最新题库【超值优惠】Java/Python/C合集 题目描述 向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设:栈顶至栈底整数依次编号为 $n_1, n_2, \dots, n_x $,其…

Tile View Kanban Board平铺视图和看板

Goto 数据网格和视图入门 平铺视图(TileView 类)将数据记录显示为平铺。此视图类型可以以任何自定义方式排列多个元素(bound 和 unbound)。用户可以按如下方式编辑瓦片: 使用模态 Edit Form。利用 HTML-CSS 平铺模板…

MySQL(七)——事务

文章目录 事务事务的概念事务的ACID特性事务的语法查看存储引擎查看自动提交参数和设置手动事务操作保存点 隔离级别与并发事务问题隔离级别并发事务问题 事务 事务的概念 事务(Transaction)是数据库管理系统中执行过程中的一个逻辑单位,由…

高效打造知识图谱,使用LlamaIndex Relik实现实体关联和关系抽取

大家好,文本信息转化为知识图谱的技术,自问世以来一直是研究界的宠儿。大型语言模型(LLMs)的兴起让这个领域受到更多关注,但LLMs的成本之高令人却步。然而通过对小型模型微调优化,可以找到一种更经济高效的…

Linux中的环境变量及main函数参数详解

目录 Linux中的环境变量 常见环境变量 PATH : 和环境变量相关的命令 通过系统调用获取或设置环境变量 getenv putenv 新增环境变量 进程切换: main函数参数 命令行参数 Linux中的环境变量 环境变量(environment variables)一般是指在操作系统中用来指定操…

面试速通宝典——1

1. 内存有哪几种类型? ‌‌‌‌  内存分为五个区,堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量&#…

GNU链接器(LD):什么是符号?符号定义及实例解析

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分: (1)编译器 (2)汇编器 (3)链接器 (4)lib库 在GNU工具链中&…

手动实现逻辑回归算法(LogisticRegression)

目录 1. 前言 2. 示例 3. 原理介绍 4. 实验代码 1. 前言 逻辑回归是一种解决分类问题的算法 值得注意的是,在机器学习中,回归指的是连续型数据的预测问题。而这里的逻辑回归特指分类任务,比如判断一个人是否患病、是否健康等等 逻辑回归…

nodejs基于vue+express度假村旅游管理系统设计与实现7t82p

目录 功能介绍数据库设计具体实现截图技术栈技术论证解决的思路论文目录核心代码风格详细视频演示源码获取 功能介绍 实现了一个完整的农家乐系统,其中主要有用户表模块、关于我们模块、收藏表模块、公告信息模块、酒店预订模块、酒店信息模块、景区信息模块、景区…

ARM(Day 2)

一、作业 (1)汇编代码 .text.globl _start_start:mov r0, #0x5mov r1, #0x10比较r0,r1 是否相等 相等执行stop 不相等执行下一步比较( r0 > r1 ?)cmp r0, r1 比较实际在做减法 (YES NO )subhi r0, r0, r1 r0 > r1 …

VLDB 2024 圆桌会议回顾:展望物联网与 AI 时代的时序数据库

回顾我们在 VLDB 2024 8 月 26 日至 8 月 30 日,数据库领域的顶级国际会议 VLDB 2024 在广州举行。IoTDB 最新研发成果的三篇论文被本次大会录用(详见:IoTDB 在顶级会议 VLDB 2024:四篇最新论文入选,特邀做 TPC 报告与…

MySQL篇(存储过程 触发器 存储函数)(持续更新迭代)

目录 一、存储过程 1. 简介 2. 特点 3. 语法 3.1. 创建 3.2. 调用 3.3. 查看 3.4. 删除 4. 示例 二、变量 1. 简介 2. 系统变量 2.1. 查看系统变量 2.2. 设置系统变量 2.3. 演示示例 3. 用户定义变量 3.1. 赋值 方式一 方式二 3.2. 使用 3.3. 演示示例 4.…

计算机组成原理——存储系统

计算机组成原理——存储系统 存储器层次结构 存储器层次结构如下: 寄存器(CPU)Cache(高速缓冲存储器)主存磁盘磁带、光盘等 按照上述层次结构,自下而上速度依次增快、容量相对依次渐小、造价越来越高昂…

vitis2022.2生成动态设备树

打开vitis 点击xilinx 点击generate Device Tree 导入硬件描述文件,以及指定输出目录 再点击Modify Device Tree Settings 修改device_tree下的dt_overlay 修改后点击ok 最后点击generate即可

每日学习一个数据结构-Trie树(字典树)

文章目录 定义节点结构根节点插入操作查找操作删除操作特点应用示例 “Trie”树,又称为前缀树或字典树,是一种专门用于存储字符串的数据结构。它在许多应用程序中都非常有用,特别是在那些需要高效查找、插入和删除字符串的应用场景中。下面是…

网络通信——路由器、交换机、集线器(HUB)

注意:传输层,应用层没有网路设备 一.路由器(网络层设备) 1.分割广播域 2.一个接口就是一个广播域 3.一般接口位4,8,12。 4.数据转发 (由路由表转发数据) 5.根据路由表来进行路径选…

MySQL连接查询解析与性能优化成本

文章目录 一、连接查询1.连接查询基础1. INNER JOIN内连接2. LEFT JOIN (或 LEFT OUTER JOIN)左外连接3. RIGHT JOIN (或 RIGHT OUTER JOIN)右外连接4. FULL OUTER JOIN 2.连接查询的两种过滤条件3.连接的原理 二、性能优化成本1.基于成本的优化2.调节成本常数(1)mysql.server_…

【最基础最直观的排序 —— 冒泡排序算法】

最基础最直观的排序 —— 冒泡排序算法 冒泡排序(Bubble Sort)是一种计算机科学领域的较简单的排序算法,属于交换排序。其基本思想是在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数&am…

【C++】继承(上)

个人主页~ 继承 一、继承的概念以及定义1、继承的概念2、继承的定义(1)定义格式(2)继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域 一、继承的概念以及定义 1、继承的概念 继承机制是面向对象程序…