这篇文章做的是视频分类,即通过视频帧的特征和声音特征这两种模态进行多模态融合并分类。
这篇文章的思路非常巧妙,采用了Transformer的结构对多种模态的特征进行了编码,因为Transformer本身就是一个编码器,这篇文章的巧妙之处就在于使用的是一个Transformer对两种模态进行编码。同时,在本文的模型框架中,在早期的时候,在模态内部做self attention;在中后期的时候,在模态之间做attention。而且这是可以动态进行调整的,也就是说可以通过调整参数来控制在一个Transformer的前多少层做模态内的self attention,在一个Transformer的后多少层做模态间的attention。还有一个巧妙之处在于,由于用了一个Transformer编码两种模态的信息,所以在模态之间进行交互和融合的时候,由于每种模态的tokens数量多而使得计算量大,所以这篇文章提出一个bottleneck的架构,将每种模态和bottleneck进行交互融合,从而将模态信息压缩到bottleneck中,既进行了交互,又减少了计算量。当然,这篇文章还有很有亮点的地方,比如采用ViT的架构对将视觉特征转化成Transformer可以编码的形式,采用AST将声音特征转化成Transformer可以编码的形式。总之,这是一片非常巧妙而优雅的论文。
本文引入了一种新颖的基于 Transformer 的架构,该架构使用“fusion bottlenecks”在多层进行模态融合。 与传统的pairwise self-attention相比,我们的模型强制不同模态之间的信息通过少量的bottleneck latents,要求模型在每个模态中整理和浓缩相关信息并共享必要的信息。
具体来说,本文首先使用ViT和AST将视觉信息和声音信息转化成类似于文本“token”的1-D特征向量。一个最简单的思路就是将音频数据和视觉数据先拼接成一个sequence,然后输入进标准的transformer,不需要对transformer结构作大的修改。这样的方式其实就是early-fusion。通过这种方式,transformer里面的attention能够自由、充分地接触和处理来自每个模态的每个维度的信息,但是这种自由是不必要的。因为不同模态间的信息会有冗余,视频的图像帧之间也会有信息冗余。另一方面,这样的attention无法很好进行扩展,对于长时间的视频处理,计算量太大。
针对上述问题,本文设计了两种方式来解决原始transformer中attention的问题。
Vision Transformer (ViT) (以及最近对音频的扩展——Audio Spectrogram Transformer (AST))采用了最初为自然语言处理而设计的 Transformer 架构,以最小的变化处理 2D 输入。 关键的处理是从 RGB 图像(或音频频谱图)中提取 N 个不重叠的patch, x i x_i xi ∈ R h × w R^{h×w} Rh×w,并将它们转换为一系列 1D 的token z i z_i zi ∈ R d R^d Rd,如下所示:
E 是将每个标记映射到 R d R^d Rd 的线性投影矩阵, z c l s z_{cls} zcls 是附加到该序列的特殊标记,因此它在最后一层的表示可以传递给分类任务的分类器,并且 p ∈ R ( N + 1 ) × d R^{(N+ 1)×d} R(N+1)×d 是添加到标记以保留位置信息的学习位置嵌入。
然后就可以跟Transformer一样,进行多头自注意力和前馈MLP,即:
我们进一步定义了两个张量 X 和 Y 之间的多头交叉注意力 (MCA),其中 X 构成查询,Y 构成用于重新加权查询的键和值,即 MCA(X, Y) = Attention( W Q X , W K Y , W V Y ) W^QX, W^K Y,W^VY) WQX,WKY,WVY)。 这将在我们的多模态案例中使用。
分别使用ViT和AST——利用Transformer的结构分别编码视觉模态和声音模态,然后拼接两种模态的token(或hidden state,如果是early fusion,则拼接token;如果是mid fusion,则拼接hidden state。这一点将会在稍后介绍)。
然后,我们的多模式编码器以与上述相同的方式应用一系列变换器层。 注意力可以在网络中自由流动,即每个 RGB 令牌可以关注所有其他 RGB 和频谱图令牌,如下所示:
模型参数为 θ。 这里的 Transformer 是指带有香草自注意力块的标准 Transformer 层。
将3.1的模型改为每种模态各自训练自己的参数(即modality-specific),然后使用cross-attention来做信息交换。因此,作者定义了一个cross-transformer层:
为了改善3.2中pairwise attention的二阶复杂度,我们接下来介绍fusion bottleneck结构:
z f s n = [ z f s n 1 , z f s n 2 , … , z f s n B ] \mathbf{z}_{\mathrm{fsn}}=\left[z_{\mathrm{fsn}}^{1}, z_{\mathrm{fsn}}^{2}, \ldots, z_{\mathrm{fsn}}^{B}\right] zfsn=[zfsn1,zfsn2,…,zfsnB]
B 代表模态的个数,本文中有视频和声音两个模态,所以B=2
然后,z被整理成:
z = [ z r g b ∥ z f s n ∥ z s p e c ] \mathbf{z}=\left[\mathbf{z}_{\mathrm{rgb}}\left\|\mathbf{z}_{\mathrm{fsn}}\right\| \mathbf{z}_{\mathrm{spec}}\right] z=[zrgb∥zfsn∥zspec]
然后,我们将模型中的所有夸模态的注意力stream限制为 :仅通过这些bottleneck token进行流动。对于层layer而言,计算过程变为:
因此,视觉和音频的向量更新只能通过bottleneck tokens来进行,作者通过限制bottleneck tokens的数量远小于原始tokens的数量,来降低计算复杂度。并且通过较少的bottleneck传递跨模态信息时,模型迫使每个模态浓缩自己的信息,且仅传递最重要的信息给另一个模态(避免了模态中冗余信息的传递和计算)。该公式中,bottleneck tokens的向量更新了两次,先用visual信息更新一次(公式8),再用audio信息更新一次(公式9)。(这样的话,模型两个模态的处理过程就成了串行的,先处理visual,再处理audio)后续实验证明,该模型在保持甚至超越其他模型性能的情况下,降低了计算量。
因为所有跨模态的注意力流都必须通过这些单元,这些紧密的“融合”瓶颈迫使模型从每个模态中浓缩信息并共享必要的信息。
多模态学习的一个常见范式是限制网络的早期层专注于单模态处理,并且只在后面的层引入跨模态连接。 如果我们认为较低层参与处理低级特征,这在概念上是直观的,而较高层专注于学习语义概念——图像中的边缘和角落等低级视觉特征可能没有特定的声音特征,因此可能 无法从与音频的早期融合中受益。
在多模态transformer中,一个共识是在前期先让各个模态分别学习自己的特征,后期再进行多模态的融合。因为我们通常认为前面的层用来学low-level的特征,后面的层学习high-level的特征,而low-level的不同模态特征之间可能还没有出现明显的关联关系,所以融合要放在后面层进行。
【论文阅读】Attention Bottlenecks for Multimodal Fusion—多模态融合,音视频分类,注意力机制