1.3.1 注意力机制在图像上的应用
直接将Transformer模型应用于计算机视觉领域的任务有一些困难。Transformer中最主要的操作层就是注意力层,而注意力层需要在输入的一系列元素之间两两计算注意力分数,形成一个注意力矩阵,然后利用这个注意力矩阵对输入元素进行加权平均计算。可以发现,注意力分数计算的复杂度是O(n2)的,这已经是比较复杂的模型了。
在计算机视觉领域中,如果想用Transformer模型,第一个要解决的问题就是如何把一个二维的图像转换成一个一维的序列。最直观的方式就是将图像的每个像素点当成输入序列的元素,然后直接将二维的图像拉直。但是“理想很丰满,现实很骨感”,一般来说,在计算机视觉领域,即使是训练图像分类任务,一张图像的分辨率也是224×224像素的,直接拉直成一维向量的话,序列长度为224×224=50176,这个长度已经远超出目前模型训练时计算机能够处理的长度,注意力矩阵的计算量非常大。并且,在计算机视觉的其他任务中,图像的分辨率更大,例如,在目标检测任务中常用的图像分辨率大小为416×416像素或544×544像素,在视频分类任务中常用的图像分辨率为800×800像素,注意力矩阵的计算量进一步增大。
因此,如何将注意力机制应用于图像计算就是将Transformer应用于计算机视觉领域的重点。最简单的方式就是直接将CNN与自注意力机制结合,先由CNN进行特征提取,得到一组特征图,然后将特征图视为序列,进行自注意力计算。这里的自注意力机制的结构如图1-30所示,保留了原始Transformer中的query、key和value等概念,计算过程包括3个步骤:首先,通过使用点积、拼接、感知机等相似度函数,对query与key进行相似度计算以得到权重;然后,使用softmax函数对这些权重进行标准化,转换为注意力分数;最后,将这些注意力分数与相应的value进行加权求和计算,以得到最终的注意力输出。这种自注意力机制依赖特征图来提取注意力,而卷积的工作方式是通过设定卷积核来限制其感受野大小,因此为了使网络能够关注全局的特征图,通常需要堆叠多层网络。自注意力机制的主要优点在于其具有全局的关注范围,简单地通过查询和赋值操作就能捕获特征图的全局空间信息。这个特性使得自注意力机制在处理复杂的特征图时更具优势。
图1-30 自注意力机制在图像特征图中的应用流程
传统的CNN在处理数据时,只能关注卷积核周围的局部信息,无法有效地融合远处的信息。这会导致模型在处理一些需要全局上下文理解的任务时性能较差。而注意力机制本身就实现了加权融合,既可以融合全局的信息,也可以融合局部的信息,因此能更好地理解全局上下文。具体来说,注意力机制通过计算不同位置之间的注意力权重,将远处的信息加权融合进当前位置的表示。基于这一思想,加州大学的王小龙提出了Non-local Neural Network(非局部神经网络),应用于Kinetics视频分类。如图1-31所示,第一帧中xi位置的球的信息可能和后面几帧中xj位置的人及球的信息有关,有了这两个位置的图像特征,就可以计算得到一个新的特征
其中C(x)为标准化项,而对于函数f和g,可以选择注意力函数。通过这种方式将注意力机制融合到很多卷积神经网络的基线中,在多个数据集上都取得了SOTA效果。
图1-31 非局部神经网络在视频帧间的注意力信息融合示意