ViTDet看起来是恺明团队MAE和ViT Mask R-CNN两个工作的延续。MAE提出了ViT的无监督训练方法,而ViT-Mask R-CNN给出了用ViT作为Backbone的Mask R-CNN的训练技巧,并证明了MAE预训练对下游检测任务的重要性。而ViTDet进一步改进了一些设计,证明了ViT作为Backbone的检测模型可以匹敌基于金字塔Backbone(如Swin和MViT)的检测模型。
ViT作为检测模型的Backbone要解决两个问题,ViT-Mask R-CNN给出了初步解决方案,而ViTDet进一步改进了其中的设计:
ViT模型是同质结构,如果采用的patch size是16x16,那么最终就得到一种尺度的特征:1/16特征。但是常用的检测模型往往需要多尺度特征,大多数CNN和金字塔ViT都可以适应这种输出,比如ResNet从不同stage提取1/4,1/8,1/16和1/32特征,并送入FPN进一步融合得到多尺度特征。ViT-Mask R-CNN采用的是XCiT给出的解决方案:将ViT的transformer blocks均分成4个部分,然后从d/4,2d/4,2d/4和d的输出分别提取1/4,1/8,1/16和1/32特征(分别采用2个stride=2的反卷积,一个stride=2的反卷积,identity,stride=2的max pooling),然后送入FPN:
而ViTDet进一步简化了这种策略,直接用最后的1/16特征通过上采样(stride=2的反卷积)或者下采样(stride=2的卷积)得到4个尺度的特征,而且也不再用FPN来进一步融合特征,如下图c所示:
从对比实验来看,这种设计不仅简单,而且效果是最好的:
ViT采用的全局attention和图像输入大小(HW)的平方成正比,对于检测模型,其输入分辨率往往较大,此时用ViT作为Backbone在计算量和内存消耗上都不容小觑,比如输入为1024 × 1024时,采用ViT-B训练Mask R-CNN单batch就需要消耗∼20–30GB显存。为了解决这个问题,ViT-Mask R-CNN采用window attention,然后特征输出的那个位置采用global attention,这样就显著降低了显存消耗和训练时间,而且效果只有微弱下降:
注意这里和Swin不同的是没有采用shifted window,所以各个window之间无信息交互,那么就限制了感受野,而4个global attention起到连接不同window的作用。
ViTDet也采用了window attention,并进一步研究了window信息传递模块,除了采用4个global attention还可以采用4个residual conv blocks,对比如下。从表a可以看出,采用4个conv blocks效果是最好的,比采用复杂的shifted window要好;而表b对比了不同conv block设计,naıve (1个3×3),basic(2个3x3),bottleneck (1×1→3×3→1×1)。
而且采用conv blocks,在显存消耗和推理时间上都要有优势。正如论文所说,虽然conv只是局部操作,只连接两个相邻的windows,但是却足以建立两个windows的所有pixels的联系。另外值得注意的一点是,就算不采用window信息传递模块,模型依然能得到较好的结果:52.9,这大概是因为从单特征生成多尺度以及RPN和RoI heads也能建立windows间的信息传递。
当然,ViTDet也对比了基于MAE预训练和有监督的模型效果,可以看到MAE可以大幅度提升AP,甚至超过IN-21K有监督训练效果:
和金字塔Backbone对比,ViT-Det也相当给力:
但是最后不得不说,虽然ViTDet能得到不错的效果,但是还需要较heavy的训练策略:采用large-scale jittering数据增强,较长的训练epochs(100),采用MAE来无监督预训练。所以论文看起来简单,但是也只有大厂能烧的起实验。
刚看到摘要,一看就不是kaiming的风格,点进去一看,果然不是kaiming的一作。
Kaiming的招牌在于他的一作,包括某些共一的作品,都是非常厉害的大作。
至于的尾作,特别好的文章和一般的文章都有。
Kaiming无疑是一流的学者,但是他现在还没有培养过一流的学生。
当然这也可能是他的个性,做一个安静的研究者。