Paper Download Address

Code Download Address

Introduction

自深度学习和注意力机制之后,对于跨模态视觉和语言研究来说可能最有影响力的就是bottom-up注意力,区别于用top-down文本输入来关注视觉输入的特定部分,bottom-up注意力采用预训练的目标检测器来识别只跟视觉输入本身有关的突出区域,图像被表示为bbox和区域级的特征,bottom-up特征在之后的研究中被广泛采用

然而是什么造就了区域特征的优良表现?人们会自然地认为主要原因是对单个对象更好的定位,另一个可能的原因是采用多个区域可以很容易地同时捕获图像中的粗级信息和细粒度细节,然而这些潜在的优势是否真的证明了区域特征优于网格特征?

作者发现,在VQA中,从预先训练好的检测器的同一层中提取的网格特征可以与基于区域的对应特征相匹敌,此外,通过在训练过程中进行简单的修改,同样的网格特征可以变得更加有效,并且始终能够达到与区域特征相当甚至更好的VQA精度,作者用消融实验证明了,导致bottom-up特征高准确率的原因有(1)在Visual Genome数据集中收集的大规模对象和属性注释用于预训练;(2)用于计算特征的输入图像的高空间分辨率

采用网格特征的好处就是推理速度加快了,因为可以调过所有现有VQA任务中与区域相关的步骤

提取区域特征是非常耗时的,所以现在大多数SOTA模型都是直接采用预训练的视觉特征,这种做法不仅在模型设计上强加了不必要的限制,而且还限制了现有视觉和语言系统的潜在应用

在网格特性的支持下,作者开始训练从像素到答案的端到端的VQA模型,使用区域特征进行端到端的训练是极具挑战性的,因为微调区域位置可能需要额外的GT标注,计算成本昂贵,而且标注很难获得,相比之下网格特征可以很容易地做到为最终目标进行优化,而不需要额外的GT

Visual features for vision and language tasks

特征在视觉和语言任务的推进中发挥了关键作用,当下VQA模型的准确性依赖于所使用的底层视觉特性,近期大多数SOTA模型研究的重心都是基于区域特征的模态融合方法,而作者的工作是重新审视了网格的特征,并表明它们可以同等有效,且可以显著的加速

Pre-training for VQA

大多数VQA方法都是采用了两个预训练模型:在ImageNet和VG上训练过的视觉模型,以及来表示语言特征的词嵌入,由于这些单独训练的特征对联合视觉和语言理解可能不是最佳的,最近的一个热门话题是开发联合预训练的模型,一个常见的方法就是将区域和词看成他们各自领域的token,然后预训练一个类似BERT的模型来预测masked token,作为对这个方向的补充,作则专门研究了视觉标记的格式(visual token),可以和这些方法结合,实现互利

Regions vs. grids

基于R-CNN的检测模型的优势证明了基于区域的细化阶段有利于目标检测,此外,one-stage检测器不需要显式的区域级计算来完成检测任务,说明网格特征在目标检测上也具有竞争力

为了最小化和BUTD paper的差距,作者采用了Faster R-CNN来对特征做预训练,但是去除了区域相关的步骤,而采用网格卷积特征

同时,虽然区域特征在VQA的基准测试中显示有效,但是对于回答视觉问题时诊断模型的推理能力的基准测试,基于网格的简单方法表现出较强的性能

From Regions to Grids

Bottom Up Attention with Regions

bottom-up attention方法采用Faster R-CNN,检测模型在Visual Genome上训练,该训练集上有数千物体类别和数百带有bbox注释的属性

为了获得像VQA任务的bottom-up注意力特征,需要两个区域相关的步骤:

  1. 区域选择,因为Faster R-CNN是一个two-stage的检测器,所以在管道中进行两次区域选择,第一次是通过RPN,其对候选的”锚”做形变和选择作为感兴趣的区域(RoI),另一次选择作为后处理完成,以每个类的方式聚合top N的box,在两个过程中,都采用了非最大值抑制(NMS),保留分类分数最高的区域,并去除局部邻域内的其他重复项

  2. 区域特征计算,给定第一个步骤中的区域(近千),用RoIPool操作来提取初始的区域级特征,然后其它网络层分别计算图片的区域表示,最后,通过两次选择的区域特征被堆叠在一起作为bottom-up的特征来表示图像

由于VG数据集的复杂性(例如数以千计的类)和特定的Faster R-CNN检测器使用,这两个步骤都是计算密集型的。而直接使用网格特性可以跳过或加速这些步骤,显著地加速

Grid Features from the Same Layer

将区域特征转换为网格的最简单的方法是看看是否可以以共享的、完全卷积的方式计算相同网络层的输出,为此,作者仔细研究了原始bottom-up注意力所使用的特定Faster R-CNN框架

Faster R-CNN是C4模型的变体,增加了一个用于属性分类的分支,它将ResNet的权重划分为两个单独的集合:给定输入图像,它首先使用ResNet的较低块(直到C4)计算特征图,特征图在所有区域之间共享,然后,对$14 \times 14$个RoIPool-ed特征分别应用C5块进行逐区特征计算,然后,C5的输出被avgpool转换为每个区域的最终向量,作为bottom-up的特征,由于所有的最终区域特征都来自C5,很容易将检测器转换回并采用相同的C5层作为输出网格的特征

直接使用转换C5的输出效果已经非常好了,这样做的任何性能下降可能是因为Faster R-CNN对基于区域的对象检测进行了高度优化,而对网格可能没有进行太多优化。下文中作者尝试对模型做一些微小的调整来改进网格特征

1x1 RoIPool for Improved Grid Features

文章的想法是采用1x1的RoIPool,用一个简单的向量来表示每个区域,而非三维的张量,乍一看,这似乎与直觉相反,因为这两个额外的空间维度(高度和宽度)有助于在2D中描述对象的不同部分——实际上,作者发现这种修改对VG上的对象检测性能有负面影响,但重要的是,使用1x1 RoIPool区域也意味着网格feature map上的每个向量必须单独覆盖一个空间区域的所有信息,这可能会产生更强的网格特征

然而,在原始模型上直接采用1x1 RoIPool是有问题的,可能因为C5由几个ImageNet预训练卷积层组成,适合于特定空间尺寸的输入,为了解决这个问题,作者采用整个ResNet(到C5)作为共享特征计算的骨干,对于区域级计算,在顶部放置两个1024维全连接(FC)层,默认情况下接受向量作为输入

在使用C5汇聚的特征训练检测器时,为了减少低分辨率的影响,将stride-2层替换为stride-1层,其余的层以2的倍数扩张。对于网格特征提取,移除这个扩张并将其转换回正常的ResNet

图(右)总结了作者对改进的网格所做的更改,与原始模型(左)相比,仅在训练过程中对区域相关组件进行了必要的修改。 由于在特征提取过程中所有此类计算均被删除,因此作者的网格特征提取器在推理过程中保持不变

Experiment

不同数量的特征数的影响

注意力可视化

其它探索实验详见论文

总的来说,与特征的”格式”(区域与网格)相比,特征所代表的语义内容对有效性更为关键,所以bottom-up的本质其实是更好的特征,从区域到网格,最重要的是可以做到端到端的训练,并且速度显著提升(运行速度快48倍)