论文阅读-Attention Bottlenecks for Multimodal Fusion(多模态特征融合)

2023-10-30

一、论文信息

论文题目:Attention Bottlenecks for Multimodal Fusion

paperwithcode:https://paperswithcode.com/paper/attention-bottlenecks-for-multimodal-fusion

Github:https://github.com/google-research/scenic/tree/main/scenic/projects/mbt

会议:NIPS2021 

作者团队:

引用:@article{nagrani2021attention, title={Attention bottlenecks for multimodal fusion}, author={Nagrani, Arsha and Yang, Shan and Arnab, Anurag and Jansen, Aren and Schmid, Cordelia and Sun, Chen}, journal={arXiv preprint arXiv:2107.00135}, year={2021} }

二、动机与创新

2.1 动机

  1. 能够同时进行多模态感知是人类学习的关键能力。但对于模态融合的统一模型是具有挑战性的,因为模态之间的学习是动态变化的;某些模态比其他模态包含更多关于任务的信息;不同模态有专门的输入表示 。由于模态输入的差异,多模态融合的主导范式通常通过集成独立的视觉和听觉网络来融合信息,即后期融合(late-fusion,先分别处理单个模态数据之后fusion为多模态结果)。

  2. Transformer已被证明在图像 (ViT ) 和视频分类 (ViViT ) 以及音频分类 (AST) 等领域具有不错的性能,通过将密集的连续信号分成多个patch并将它们转换为一维的序列,由于这些模型能够处理可变长度的序列,因此常规的扩展是不需要改变Transformer的结构,可以直接将多模态patch的序列送到Transformer中。这种“早期融合”模型允许注意力在图像中的不同时空域之间自由建模,以及在音频频谱图中的频率和时间之间自由建模。但作者认为在模型的所有层完全成对的注意是不必要的,因为音频和视觉输入包含密集的、细粒度的信息,其中大部分是多余的。由于注意力机制具有和token序列长度相关的二次复杂度,这种模型也无法很好地扩展到较长的视频。

2.2 创新

  1. 第一种方法是多模态学习中的一种常见方法,即将跨模态流动限制在网络的后一层 ,前面的层采用单模态学习,这种方法被成为“Mid Fusion(中期融合)”,如下图中的Mid Fusion所示。

  2. 第二种方法,也是本文的主要贡献点, 是限制层内token之间的跨模态注意。模型必须在与其他模态共享之前,对每个模态的信息进行整理和“浓缩”。核心思想是引入一小部分 “注意力瓶颈” 的潜在融合单元(如上图中的Bottleneck Fusion),层中的跨模态相互作用必须通过这些单元执行。作者证明了这种 “瓶颈” 结构优于其不受限制的版本,且计算成本较低。在layer内的不同模态的tokens之间做跨模态的attention。单模态内部仍然是原始的self-attention,但是跨模态的fusion使用每个模态的部分tokens信息来做cross-attention。这样就能降低计算量并且处理部分冗余信息 

三、方法

在本文中,作者提出了一个Multimodal Bottleneck Transformer (MBT)结构来融合多模态数据。

3.1 The ViT and AST architectures

ViT和AST采用了Transformer结构,能够处理序列特征。首先从RGB图像 (或音频频谱图) 中提取N个不重叠的patch ,然后将他们转换成一维的token ,如下所示:

这里,E是一个线性投影,将每个token映射到Rd;Zcls是一个特殊的token,作为分类任务的特征;P是可学习的位置嵌入,用于表示输入特征的位置信息。

然后将token通过由L个Transformer层组成的编码器中。每个Transformer层由多头自注意 (MSA),层归一化 (LN) 和多层感知机 (MLP) 组成,表示如下:

其中MSA操作为dot-product attention;queries, keys和values是同一个tensor的线性投影,表示为: 同理,两个跨模态输入attention操作表示为:

3.2 Multimodal Transformer

3.2.1 Fusion via Vanilla Self-Attention

普通的融合模型仅由应用于多模态输入的常规Transformer组成。对于给定长度为t秒的视频clip,首先统一采样个RGB帧,并将音频波形转换为单个谱图。然后用类似ViT中的方法,将帧和谱图转换成token,并将所有的token拼接在一起,成为一个序列。形式上,如果从F个采样帧里面提出了Nv个RGB patch和Na个谱图patch,则输入的token序列可以表示为:

||表示拼接操作,对于RGB patch和谱图patch,作者采用了不同的投影函数。此外,还为每个模态分配了一个分类token,类别标签Zcls-rgb也是每个模态特有的。然后在这些多模态token上采用原始的Transformer层,以获取跨模态的融合信息,transformer中的self-attention模块能够自由地提取和处理来自不同模态的所有信息(视觉patches和音频patches)。

3.2.2 Fusion with Modality-specific Parameters

此外,还可以将上面的模型推广到每个模态拥有各自独立的参数,并利用注意力机制交互不同模态的信息,即将模型改为每种模态各自训练自己的参数(即modality-specific),然后使用cross-attention来做信息交换。因此,作者定义了一个cross-transformer层:

其中Zl是的拼接(论文中没提,但应该是拼接的结果), corss-transformer的输入是不完全一样的两个输入(不同于原始transformer),它的过程与原始transformer的差距在于公式变为下面的公式,用cross-attention替换了原始attention。当参数一样时,本节的方法和3.1节就是一样的,其中交叉Transformer采用交叉注意操作。这层的操作也可以表示为:

注意,交叉Transformer层的参数 ,对于每个模态都是不同的。

3.2.3 Fusion via Attention Bottlenecks

为了降低原始attention的计算复杂性,作者在transformer的输入sequence中引入了B个fusion bottleneck tokens, 输入序列如下所示:

然后,用这些瓶颈token来限制模型中的所有跨模态注意力。对于层layer而言,token计算如下:

视觉和音频的向量(Zrgb和Zspec)更新只能通过bottleneck tokens来进行,作者通过限制bottleneck tokens的数量远小于原始tokens的数量,来降低计算复杂度。并且通过较少的bottleneck传递跨模态信息时,模型迫使每个模态浓缩自己的信息,且仅传递最重要的信息给另一个模态(避免了模态中冗余信息的传递和计算)。该公式中,bottleneck tokens的向量更新了两次,先用visual信息更新一次,再用audio信息更新一次。

3.3 Where to Fuse: Early, Mid and Late

在大多数Transformer(如ViT)中,每一层都由相同的操作组成的。然而,多模态学习中的一个常见范式是让网络的浅层进行模态内进行的增强,网络的深层进行多模态信息的交互。

基于这样的思想,作者首先用个标准的Self-Attention层来对模态内的token信息进行建模,然后再将所有的token进行拼接得到,用剩下的层进行跨模态token信息的融合。

如果,那么就对应“早期融合”;如果,那么就对应“晚期融合”;如果,那么就对应“中期融合”。表示为:

其中,代表上一节中提到的三种融合策略。

3.4 Classification

对于上述的所有模型,为了能够执行分类任务,需要将最后一层的CLS token和输入到线性层,然后将Softmax之后的结果进行平均得到分类结果。

四、实验

  • 实验任务:视频分类;

  • 数据集:AudioSet, Epic-Kitchens-100 and VGGSound(附录中还有数据集Moments in

Time and Kinetics上的结果);

  • 本文使用ViT-Base作为backbone,bottleneck tokens的数目设置为B=4。

4.1 Fusion实验

本文对三种fusion方式分别进行了实验:

(1)最直接的self-attention:层内的attention可以不受限制地访问所有隐式单元(也就是视觉和音频的单模态表示拼接之后直接输入后面原始的transformer层做fusion);

(2)使用不同参数的简单cross-attention:不同模态的transformer层参数不同,每种模态的表示的更新都会访问到所有模态的信息,也就是attention依然是面向所有模态信息的;

(3)bottleneck fusion:此方式下的每种模态的表示的更新只能通过访问bottleneck tokens进行,也就是attention只在单模态信息和bottleneck tokens之间进行。

上面的(2)(3)的fusion方式只是单layer内的,为了测试early,mid,late fusion方式对模型的影响,本文还对Lf的值进行实验。

不同模态share weights:

本文还对不同模态(策略(1)和(2)中)之间是否share weights的影响进行了实验。结果在附录的图7中,如下图所示。当fusion的层数较早时,使用separate的参数效果更好。当late fusion时,是否share weights差距不大。(这是否说明模型的前面层所捕获的信息更modal-specfic,后面的更multimodal了)

融合层Lf的选择:

本文对(2)(3)和两种fusion方法做了不同融合层选择的实验,

从下图左可以看出,mid fusion比early fusion(Lf=0)和late fusion(Lf=12)这意味着将融合层放在later的位置,前面的层用来提取模态各自的特征,是有效果的。

attention bottlenecks:

在上图左中可以看出,使用attention bottleneck的模型在所有fusion层数选择下结果都比简单的cross-attention模型好。本文还对模型的计算量进行了实验,使用GFLOPs指标,如上图右。从中可以看出只用很少的bottleneck tokens数目(B=4),本文的模型计算量(红色线条)就比cross-attention(蓝色线条)低很多,且不随着Lf的变化而变化。本文还对B=4,36,64,256,1024进行了实验。发现实验结果差距不大(少于0.5mPA),所以本文后续实验均设置B=4。只用4个bottleneck tokens就可以实现多模态融合的性能提升,以及大大降低模型计算量。

4.2 输入采样和数据集大小

本节探讨了不同模态上采样策略的影响,同时和单模态模型baselines--仅作用于RGB图像上的纯视觉的transformer和仅作用于音频上的纯音频的transformer进行了对比。

采样窗口大小t:本文transformer模型的一个优势就是可以处理变长的输入长度(没太懂。。transformer的输入tokens数目是固定的吧,不足长的补全)。本文对视频的不同采样窗口t值2,4,6,8进行了实验,结果如下图左所示。在推理时,作者统一采样多个窗口以便能覆盖整个视频。当音频的频谱图 patches数目随着t变化时,作者保持RGB patches的数目不变而改变采样帧的步长(避免内存溢出)。从下图左中可以看出,随着输入的增多,audio-only和audio-visual的模型性能跟着增加,但是纯视觉的模型visual-only性能却在降低(作者猜测,可能是增大的步长导致采样出的帧数目减少,训练数据少了)。后文实验中设置t=8s。

同步与异步采样:因为视频中音频和视频(图像)并不一定是完全对齐的,这里实验了不同模态中异步采样带来的影响。结果与分析详见附录。作者发现采样方式对结果影响不大,所以最终选择了同步采样。

模态混合:在将 Mixup rerularization 应用于训练时,有两种不同的方法可以将其应用于多模态输入——标准方法是使用概率参数 α 对一组混合权重进行采样,并使用它来生成所有虚拟模态 -标签对。 此外,本文还探索了一个称之为模态混合的修改版本,它为每个模态采样一个独立的权重。 模态混合比标准混合施加更强的增强,带来 AudioSet 上的性能略有提高。

数据集规模的影响:上图右中体现了训练样本规模不同的差距。

4.3 性能提升

与单模态和sota对比:

attention maps的可视化:

五、总结

本文任务是视频分类,方法是多模态视觉(图像)和音频融合。

主要思路是:原始transformer里面的attention层能够自由地接触和处理每个token之间的关系,这样模态内的冗余信息会造成计算量浪费。所以本文将原始transformer中attention层修改为模态内attention(保持self-attention结构不变)+ 模态间attention(设计cross-attention只在每个模态的部分token之间做attention,避免过度计算冗余信息,降低计算量。并且选择了mid fusion,探讨了fusion层在模型early,mid,late部分的影响。

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

论文阅读-Attention Bottlenecks for Multimodal Fusion(多模态特征融合) 的相关文章

随机推荐

  • 机器学习笔记(1)—监督学习和无监督学习

    Day1 写在前面 此系列博客是看的是2022年的吴恩达的机器学习 以下是相关的笔记 如有不对的地方 请大家指出 监督学习 回归算法 分类算法 无监督学习 聚类算法 课后问题 总结 写在前面 始于2022年11月4日 本人双非硕士研一在读
  • 用Ehcache查询性能提升了100倍

    文章来源 石杉的架构笔记原创文章 目录 业务场景 如何通过缓存优化查询接口 基于大数据离线平台进行缓存预热 本地缓存框架 Ehcache 今天给大家来分享一个知识 那就是平时我们开发系统的时候 如何运用 Ehcache 这款本地缓存框架 把
  • matlab 点云精配准(2)——point to plane ICP(点到面的ICP)

    目录 一 算法原理 1 原理概述 2 参考文献 二 代码实现 三 结果展示 1 初始位置 2 配准结果 四 参考链接 五 测试数据 本文由CSDN点云侠原创 matlab 点云精配准 2 point to plane ICP 点到面的ICP
  • openwrt笔记3_自启动+golang

    Openwrt设置开机启动 设置开机启动原理 etc init d目录下面就是系统加载的开机配置 每个配置可以设置START优先级 数字越大启动越靠后 如果有很多需要依赖网络或者USB之类的启动程序最好设置靠后一些 等其他程序启动了再启动
  • 5G/NR PDCCH总结

    1 CCE PDCCH主要用于传输下行控制信息和UL Grant 以便UE正确接收PDSCH及为PUSCH分配上行资源 其分配单位为CCE 1 CCE 6 REG 72 RE 1 REG 1 OFDM symbol 12 subcarrie
  • 开发文档怎么写

    项目开发过程中为了增加程序的可读性和程序的健壮性 方便后期程序的调试和维护 所以需要在开发过程中统一技术规范 一般会在项目初期确定好相关文档作为这一统一的规范 不同公司会对文档做不同要求 划不同的分类 但一般来说 或者拿自己的经验说 大致可
  • -128----127缓存,在栈中获取

    span style font size 13px package test span br style font size 13px br style font size 13px br style font size 13px span
  • nginx负载均衡的5种策略

    nginx负载均衡的5种策略 要理解负载均衡 必须先搞清楚正向代理和反向代理 负载均衡的几种常用方式 1 轮询 默认 每个请求按时间顺序逐一分配到不同的后端服务器 如果后端服务器down掉 能自动剔除 upstream backserver
  • 如何根据excel文档中的内容同步更新数据库中的数据

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 根据excel中的内容同步更新数据库中的数据 需求概述 一 解决思路 二 具体解决方案 1 使用navicat将excel导入到mysql数据库中 2 写SQL语句做更新操作
  • python中rfind函数作用_python中的rfind函数如何使用

    python中rfind函数的用法 rfind 函数用于返回字符串最后一次出现的位置 从右向左查询 如果没有匹配项则返回 1 具体使用方法如 print str rfind substr 0 10 函数描述 推荐教程 Python入门教程
  • Ubuntu系统无法联网问题

    在网上看到许多解决方案是修改网络配置文件 但是ubuntu系统的目录结构中甚至都没有对应文件 因此找到以下解决方案 能够顺利联网并进行sudo install 亲测有效解决方案 1 在虚拟机设置中将网络适配器修改为NAT模式 2 找到net
  • please check whether the configs are released in Apollo!

    项目启动一直报错 其他同事 其他模块都没有这个错误 关键信息如下 Cause status code 404 Could not find config for namespace appId m ln contractmanage clu
  • Java程序员必须要了解的七个开源协议介绍

    1 Mozilla Public License MPL License 允许免费重发布 免费修改 但要求修改后的代码版权归软件的发起者 这种授权维护了商业软件的利益 它要求基于这种软件得修改无偿贡献版权给该软件 这样 围绕该软件得所有代码
  • 【C++】模板定义位置引发未定义标识符 “E“

    代码如下 include
  • 为什么怕写代码(自己的亲身经历)

    下班了 坐在工位不知不觉就又想起了刚开始接触java编程的日子 其实我觉得这个毛病也不在少数人 因为在我上学的时候班里面分组做项目 基本都是什么情况呢 一人做好 全部就可以交任务了 最后导致了如果代码某个地方出错了 全班90 的都出错了 归
  • pytorch下载与安装(离线包版本)

    笔者因为实验需要 不同的模型需要不同版本版本的pytorch 于是安装pytorch就总是出现一个问题 那就是断 比如需要安装torch1 4版本 使用Anaconda Prompt尝试了几次 pip install torch 1 4 0
  • python中eoferror是啥错误,python怎么看错误类型是什么

    以下是python的错误类型的总结 希望能帮助到有需要的小伙伴 Python全部的错误类型 错误类型 说明 ZeroDivisionError 除 或取模 零 所有数据类型 ValueError 传入无效的参数 AssertionError
  • 【精华】详解Qt中的内存管理机制

    前言 内存管理 是对软件中内存资源的分配与释放进行有效管理的方法和理论 众所周知 内存管理是软件开发的一个重要的内容 软件规模越大 内存管理可能出现的问题越多 如果像C语言一样手动地管理内存 一会给开发人员带来巨大的负担 二是手动管理内存的
  • 人生百味-7:一个人干活,一群人催进度,谁之过?

    如果你曾经是程序员 我相信你会深有体会 如果你曾经是项目管理 我相信你会有感受 旁观的说 那是专业活 只有他能做得来 干活的说 对不起大家 还还需要一段时间查
  • 论文阅读-Attention Bottlenecks for Multimodal Fusion(多模态特征融合)

    一 论文信息 论文题目 Attention Bottlenecks for Multimodal Fusion paperwithcode https paperswithcode com paper attention bottlenec