这是Facebook AI Research提出的ViTDet模型,对Vit进行了最小限度的修改以使得它具有多尺度特征图,从而可以用于目标检测,并取得较好的性能。
现有的其它Transformer用于目标检测的模型都致力于利用transformer复现卷积神经网络的结构,从而具有FPN的结构。但本文从另一个方向出发,希望基于ViT进行最少限度的修改,这些修改都是关键修改,从而使得ViT的网络能够进行目标检测任务。并且可以利用ViT的预训练模型,而无需重新进行预训练。
通过实验发现,FPN的结构对于ViT来说并非必要的,只需要从ViT的最后一层特征获取信息即可。文章对ViT的修改主要基于三点,一点是从最后一层取出pyramid的信息送进预测头进行多尺度目标间的预测,一点是利用了non-overlapping的window attention,一点是利用cross-window block来进行全局的attention。
simple feature pyramid
文章尝试了三种方案,实验结果显示最后一种比较有效,前面两种完全没必要:这个对比实验带给我们很多信息, 首先b c 的比较说明了,在同一深度下,从小尺度特征图到大尺度特征图的信息并不能带来多少帮助;其次,a b的比较说明了,对于某个尺度的预测头来说,最后一层特征图的特征图比前面的特征图更有效(这一定程度上挑战了FPN的尺度论,FPN认为大尺度目标需要在浅层特征图的skip connection中获取信息)
backbone adaptation
原来的ViT对全图的token都进行attention在小图上进行图像分类任务,是可以的。一旦到了大图上进行全图的attention,显存消耗会很大,速度也会很慢。为此许多之前的方法提出了各种机制避免全图的attention,从而能够加快速度节省显存,从而可以把transofmer用到大图上。这些方法都修改了网络的结构和机制,因此都需要自行进行预训练。而本文非常简单地,就用non-overlap 的 window attention (即对图片划分window,只在window内的token之间做attention而无需对全图所有的token进行attention)来限制attention的内存消耗和运算量,并且这一修改无需重新进行预训练,原先预训练好的ViT可以直接用,只需要在fine-tuning的时候改成window attention机制就行,是兼容的。为了解决 non-overlap 的 window attention 出现的window之间信息不流通问题,本文使用了cross-window blocks,仅在ViT4个stage(原先也没有stage的说法,其实就是,比如有24个block,那就每个stage分6个block给它,没有什么特殊的block)的最后一个block上进行cross-window 的prppagation。 cross-window attention由可以有两种实现方式 一种是直接简单地把window attention改回成全图的attention。举个例子,在前向传播的24个window attention block里面,把第6、12、18、24个block改成全图的attention。由于只改了4个,所以增加的显存和运算量并不会太严重。另一种方式是,在第6、12、18、24个block后面插入一些残差的卷积块。通过卷积使得相邻的window之间的信息得以相互流通。并且通过残差的结构使得网络可以稳定地从预训练没有这些卷积块的情况下finetune下去。 这两种设计的结果都不错。文章还对比了shift window策略。总的来说看起来第二个方案,也就是卷积的方案更快更好:上面卷积的naive、basic和bottleneck分别表示一层3x3卷积、两层3x3卷积、以及一层1x1+一层3x3+一层1x1的结构。
discussion
目标检测网络由许多组件构成,有些组件是 task agnostic 的,与特定任务无关,如网络的backbone;有些组件是task-specific的,他们针对目标检测这个特定的任务设计,同时具有一些先验的归纳偏置(inductive bias),如ROI heads。task agnostic的组件可以在非目标检测的任务上进行预训练,从而在目标检测数据集图片数量不足的情况下也能具有好的性能。因此,设计一个具有更少归纳偏置的backbone是有必要的,这样的网络可以在大数据集上进行预训练甚至无监督的预训练,从而减少对目标检测数据集的依赖。我认为这一观点建立在这样一个前提下:有一些归纳偏置,仅有利于目标检测任务,对于其它任务是不友好的,包括预训练任务,因此这些归纳偏置会影响预训练的效果,如果能去掉这些归纳偏置,那么网络可以从预训练中获得更多好处。但我认为这样的说法忽视了归纳偏置的好处,有些归纳偏置就是符合实际分布的,是正确的,如果网络具有这样的先验,它就不需要再从数据集中学习这样的知识而网络的task-specific部分,他们无法在其它任务的预训练中优化,取而代之他们从设计的归纳偏置中得到一些好处(只要这些先验是正确的,符合测试集上分布的),而具有一些无需从数据集上学习的知识(如平移不变性等性质)。文章提到了ViT提出来时,重点讨论的Transformer相比卷积所不具有的“平移不变性”这一归纳偏置。ViT的文章认为,相比卷积神经网络,基于transfomer的网络需要大量的数据来预训练,以学习“平移不变性”等视觉任务所固有的这些归纳偏置。文章的看法似乎认为学习得来的比先验的更好,从这一观点出发认为本文的设计去除了原先hierarchical backbone中具有的关于尺度的先验,是更好的。与其它模型的对比
但是,本文与其它模型的实验对比(没有放到这篇blog里面)其实不太公平,本文对ViDet进行了基于MAE的无监督预训练,并把结果与基于有监督预训练的其它方法进行对比,却以“This is largely beyond the scope of this paper, as it involves finding good training recipes for hierarchical backbones with MAE”为理由,没有给出其它方法基于MAE的无监督预训练的结果,只简单给出了MViTv2的MAE结果,说提高了1.3个点,不如ViDet提高了4个点。
虽然确实如果要对每个网络基于MAE进行训练策略的调参太麻烦,那么至少与ViDet的非MAE预训练的结果也进行对比吧,也没有。ViDet的非MAE预训练的结果单独给出来在Table4,ViT-B只有47.8,ViT-L只有50.6,放到Table5中进行公平对比,就是垫底:
那我只能理解为写作技巧,本身结果确实不如其它模型,只能通过这样的技巧,来避免直接对比时效果不如其它模型的尴尬,偷偷藏一手,从而借助MAE来进行不公平的对比。
思考
本文对于非 hierarchical 网络结构的研究结果有利于我们对网络的性质、特征图的尺度性质进行思考。非hierarchical型的backbone取得的好效果挑战了hierarchical型backbone的设计理念,让我们思考了它的必要性和意义。是否有必要从一开始的大尺度特征图慢慢下采样和前向传播直到最后的小尺度特征图(根据任务需求可能还需要慢慢上采样回来)。是否可以采取另一个方案,从一开始的大步长地进行下采样得到小尺度的特征图,然后不变大小地前向传播,最后再根据需求预测结果或上采样后预测结果。之前不这么做,可能是认为在下采样的过程中会出现信息的损失,一下子变换到小尺度特征图损失了大量的空间信息,不利于后续的预测,但本文的实验结果显示,一开始就下采样成小尺度特征图也可以获取很好的效果。正如本文所说:目标检测网络到底是设计为更多归纳偏置好还是更少好呢。我认为有些正确的知识,添加到网络中去作为先验的归纳偏置,比让网络自行去学习更好;但文章的看法恰恰与我相反,文章认为学习来的知识比先验添加的更好,并做出了以下论断:Our study suggests that the topic of “plain vs. hierarchical” backbones is worth exploring and may bring in new insights.
我觉得文章提出了两个很有意思的问题,或者是,研究方向,值得深思和后续的探究。但是这样呈现实验结果的方式实在是有点。。一言难尽。。Exploring even fewer inductive biases in the detection heads is an open and interesting direction for future work. We hope it can benefit from and build on our work here.