多模态中各种Fusion方式汇总

多模态中各种Fusion骚操作

大噶好,我是DASOU;

今天继续写多模态系列文章,对多模态感兴趣的可以看我之前的文章:

其实对于多模态来说,主要可以从三个部分去掌握它:

  1. 如何获取多模态的表示【learning multimodal representations】
  2. 如何做各个模态的融合【fusing multimodal signals at various
    levels】
  3. 多模态的应用【multimodal applications】

今天我主要放在第二个部分,也就是各个模态的Fusion方式汇总;

Fusion做的事情简单来说就是把不同模态的信息整合为一个信息,得到一个特征向量,然后利用这个特征向量再去做下游任务;

所以它的任务就是更深的挖掘不同模态信息同时更好的融合进最终的representation;

我们可以把Fusion分为三种融合方式:

  1. 基于简单操作的融合
  2. Attention-based Fusion
  3. 双线性池化融合

1. 基于简单操作的融合

Simple Operation-based Fusion 就是说来自不同模态的特征向量可以使用很简单的方式进行整合,比如多个模态的特征向量的拼接,加权和;

举个简单的例子,比如我们现在做一个图文双模态的分类任务,我们获取了文本特征向量和图片特征向量,那么我们可以把两个特征向量直接拼接,就当做是融合后的向量了;

如果我认为文本的包含的信息更加的重要,图片包含的信息不是那么重要,我完全可以自定义文本特征向量权重为0.7,图片特征向量权重为0.3,然后两者的向量再concat或者做加权的和;

其实如果我们自己最开始做一个多模态任务,最先想到的方式就应该是这种基于简单操作的方式;

但是这个方式存在一个问题,就是两个模态之后没有做足够的交互,两者之间的联系比较弱一点;

针对这个,我们一般会在得到concat features之后,不会直接去做分类任务,而是再接一个或者几个全连接层,让模型自动的去学习两个模态之间的关系,这样效果会更好;

这里还有一点需要注意的是,对于concat方式,我们最好是确保文本特征向量和图片特征向量维度是固定的,这样后面接全连接层维度不会出错;

但是有些时候我们输入的图片数量不固定,那么图片特征向量维度不一定,这个时候操作比较多,举个简单例子可以先做一个max pooling到固定维度再去和文本拼接;

如果做加权和,我们需要确保文本和图片特征维度是相同的,这个就不多说,很好理解;

以我自己个人经验来说,在图文多模态分类这个,使用concat这种方式,能比单一的使用文本效果提升不到2个点左右,当然case by case;

2. Attention-based Fusion

第一种方式我一般是在任务中作为基线,简单粗暴有提升;之后任务迭代的时候,一般都会往attention上靠一靠;

因为concat虽然后面加上了全连接层学习两者之间关系,但是在两者的交互上来说还是有点弱的;

对于attention的操作可以简单分为:1.Image attention;2. Symmetric attention for images and text;3. Attention in a bimodal transformer; 4. Other attention-like mechanisms;

我详细说一下第三点,就是基于TRM的attention,因为TRM太火了;

基于TRM的attention这块,从两个类别去理解它,一个是基于TRM的多模态预训练模型,一个是基于TRM的微调模型;

基于TRM的多模态预训练模型,就是所借助TRM,输入是图片和文本信息,然后做预训练任务,从大量数据中学习到信息,然后得到多模态预训练模型,然后放入到下游任务中去;

但是这些有个问题,很多人都没有大量的图文平行无监督数据,相反大家一般都有图文平行的标注数据;

所以我们可以直接借助TRM的结构,直接做下游任务的微调就可以,这一块有个论文是facebook的MMBT;

MMMBT其实很简单,直接看这个图:MMBT结构图

就是借助bert做初始化,然后图片从resent得到向量输出,一般是三个,然后拼接文本,输入到bert,直接在下游任务做微调;

在这里我想多说几句,其实还可以直接对文本和图片之间做attention,多头或者单头都可以,其实单头就够了;

在写代码的时候,我在遇到一个问题,就是文本和图片之间attention的矩阵化,我踩了下坑~~~;

3. 基于双线性池化的融合办法

双线性池化也是一个比较受重视的融合方法,不过它的问题就是在于会把n为变成n的平方,复杂度大大提升,后续的改进一般都是在降低复杂度这一块;

双线性池化最初的操作,就是做向量的外积,获得一个矩阵,然后对矩阵做sum池化,得到特征向量,然后再去做分类;

如果是在实际业务,大家还是优先考虑前两种吧,双线性池化这个放后一点;

先写这么多,后续会写一个MMBT论文的解读;

参考论文:Multimodal Intelligence: Representation Learning, Information Fusion, and Applications

https://arxiv.org/pdf/1911.03977.pdf

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

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

相关文章

【ARFoundation学习笔记】ARFoundation基础(下)

写在前面的话 本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。难免出现纰漏,更多详细内容请阅读原文。 文章目录 TrackablesTrackableManager可跟踪对象事件管理可跟踪对象 Session管理 Trackables 在AR Foundation中,平面…

GoLong的学习之路(番外)如何使用依赖注入工具:wire

我为什么要直接写番外呢?其原因很简单。项目中会使用,其实在这里大家就可以写一些项目来了。 依赖注入的工具本质思想其实都大差不差。无非控制反转和依赖注入。 文章目录 控制反转为什么需要依赖注入工具 wire的概念提供者(provider&#x…

【计算机网络笔记】TCP的拥塞控制机制

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Linux文件描述符和打开文件之间的关系

简介 文件描述符和打开的文件之间似乎呈现出一一对应的关系。然而,实际并非如此。多个文件描述符指向同一打开文件,这既有可能,也属必要。这些文件描述符可在相同或不同的进程中打开。 要理解具体情况如何,需要查看由内核维护的…

应用安全四十二:SSO安全

一、什么是SSO SSO是单点登录(Single Sign On)的缩写,是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的企业业务整合的解决方案之一。 身份验证过程依赖于双方之间的信任关…

Spring Boot创建多模块项目

创建一个普通的Spring Boot项目, 然后只留下 pom.xml 剩下的都删掉 删除多余标签 标识当前为父模块 创建子模块 删除子模块中多余标签 声明父模块 在父模块中声明子模块

基于JAVA+SSM的房屋租赁系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着社会的发展和人们…

【C/C++】什么是POD(Plain Old Data)类型

2023年11月6日,周一下午 目录 POD类型的定义标量类型POD类型的特点POD类型的例子整数类型:C 风格的结构体:数组:C 风格的字符串:std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中,并从文…

webgoat-(A1)SQL Injection

SQL Injection (intro) SQL 命令主要分为三类: 数据操作语言 (DML)DML 语句可用于请求记录 (SELECT)、添加记录 (INSERT)、删除记录 (DELETE) 和修改现有记录 &#xff…

【自我提升】项目升级-Beyond Compare效率工具

写在前面:最近接手一个项目,这个项目集成了许多开源项目,其中我需要对其中一个开源项目进行升级操作。在此记录升级过程和心得,希望可以给各位道友提供一种思路,同时也希望道友有更好的办法能分享在评论区。 项目场景 …

RabiitMQ消息队列系统

一、MQ 1、概念: MQ 全称为 Message Queue (消息队列),是一种应用程序对应用程序的通信方法。MQ 允许应用程序将消息写入队列,其他应用程序从队列中读取并处理这些消息,不需要它们之间直接相互联系。消息队列可用于实现异步通信…

idea Error: java: OutOfMemoryError: insufficient memory处理

IDEA设置里,修改heap size更大一点,可以解决问题

apachesolr启动带调试

这里solr.cmd报错,报错原因是java版本问题,后面发现这是因为多个java版本导致读取java_home失败, 那么我们修改solr.cmd中的JAVA_HOME为SOLR_JAVA_HOME IF DEFINED SOLR_JAVA_HOME set "JAVA_HOME%SOLR_JAVA_HOME%"环境变量将SOLR…

【Python基础】史上最全||一篇博客搞懂Python面向对象编程(封装、继承、多态)

Python面向对象编程 1.面向对象概念介绍1) 面相过程 —— 怎么做?2)面向对象 谁来做 2.类和对象2.1类2.2对象2.3类和对象的关系2.4类的设计2.5面向对象设计案例 士兵类设计2.6身份运算符 3.私有属性和私有方法3.1. 应用场景及定义方式 4.继承、多态重写父…

2014年亚太杯APMCM数学建模大赛C题公共基础课教师专业化培养方式研究求解全过程文档及程序

2014年亚太杯APMCM数学建模大赛 C题 公共基础课教师专业化培养方式研究 原题再现 近年来,世界基础工业、信息产业、服务业的跨越式发展引发了大量人才需求,导致了职业教育的飞速发展,除原有专科层次高等职业教育院校外,大量普通…

24PL-18-50-1836、12PN-4.1-50-1836比例电磁铁控制器

12PG-2.2-40-1836、24PG-8.8-40-1836、12PT-40-1836、24PT-40-1836、12PL-2.2-40-1836、24PL-8.8-40-1836、12PN-2.2-40-1836、24PN-8.8-40-1836、12PG-4.1-50-1836、24PG-18-50-1836、12PT-4.1-50-1836、24PT-18-50-1836、12PL-4.1-50-1836、24PL-18-50-1836、12PN-4.1-50-183…

基于8086汽车智能小车控制系统

**单片机设计介绍,基于8086汽车智能小车控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于 8086 的汽车智能小车控制系统是一种将微处理器技术应用于汽车控制的系统。下面是其主要的设计介绍: 硬…

大数据学习之Spark性能优化

文章目录 Spark三种任务提交模式宽依赖和窄依赖StageSpark Job的三种提交模式 Shuffle机制分析未优化的Hash Based Shuffle优化后的Hash Based ShuffleSort-Based Shuffle Spark之checkpointcheckpoint概述checkpoint与持久化的区别checkPoint的使用checkpoint源码分析 Spark程…

Django实战项目-学习任务系统-发送短信通知

接着上期代码内容,继续完善优化系统功能。 本次增加发送短信通知功能,学习任务系统发布的任务,为了更加及时通知到学生用户,再原有发送邮件通知基础上,再加上手机短信通知功能。 第一步:开通短信通知服务…

Docker容器中执行throttle.sh显示权限报错:RTNETLINK answers: Operation not permitted

在模拟通信环境时,我执行了一下命令: bash ./throttle.sh wan但是,出现了权限的报错:RTNETLINK answers: Operation not permitted 解决方案说简单也挺简单,只需要两步完成。但是其实又蛮繁琐,因为需要将…