知行编程网知行编程网  2022-08-07 14:00 知行编程网 隐藏边栏 |   抢沙发  23 
文章评分 0 次,平均分 0.0

华南理工和微信AI提出了random query patch detection的预训练任务,对DETR中的transformer进行无监督预训练,从而提高其目标检测的性能。 

UP-DETR: Unsupervised Pre-training for Object Detection with Transformers

CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR:无监督预训练检测器
论文:https://arxiv.org/abs/2011.09094

中cvpr oral啦!代码和预训练模型已经开源:
https://github.com/dddzg/up-detr
相信大家都有目共睹,无监督预训练模型无论是在nlp(BERT,GPT,XLNet)还是在cv(MoCo,SimCLR,BYOL)上都取得了突破性的进展。而对于无监督(自监督)预训练而言,最重要的就是设计一个合理的pretext,典型的像BERT的masked language model,MoCo的instance discrimination。他们都通过一定的方式,从样本中无监督的构造了一个"label",从而对模型进行预训练,提高下游任务的表现。
回到我们的UP-DETR,对于DETR而言,既然CNN可以是无监督预训练的,那么transformer能不能也无监督预训练一下呢。这就是我们的motivation。

当然啦,骚想法可以很丰满,可现实总是很骨感(T.T)。对于现有的pretext任务,似乎都不太适合于DETR里transformer的预训练。比如,你想搞个mask,可cv都是连续像素构成语义,没法像nlp天然有个离散的token的概念,最后还可能训成一个mask检测器(狗头。直接把MoCo那一套搬过也不太可行。我们认为主要的原因是DETR中的transformer主要是用来做空间信息上的定位而MoCo那一套主要是用来提高CNN的instance discrimination。
更重要的是,无监督预训练检测器,这听起来就很违背自觉,因为是不是object某种意义上明明就是人为定义的。所以,我们换了一个思路,提出了一个叫random query patch detection的pretext,具体而言就是从原图中,我们随机的框若干个patch下来,把这些patch输入到decoder,原图输入到encoder,然后整个任务就变成了给定patch找他们在原图中的位置。最后,对于一个无监督训好的DETR,只要输入patch,它天然就能做到如下图的无监督定位patch的功能(不需要额外的nms后处理),当然这个patch还能支持数据增强和尺度变换。从这个预训练任务的角度来说,一个patch是不是object本身没有任何先验。
CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR:无监督预训练检测器
idea其实就这么简单,但具体实现上,我们其实遇到了两个主要的问题,在paper里,我们把它们总结为:multi-task learning和multi-query localization。更多详细的内容大家可以参阅我们的论文,这里我们简单介绍一下:
  • 对于multi-task learning,主要是由于目标检测其实本身就带有定位和分类两个任务,这两个任务对特征其实有着不同的偏好。这其实在之前许许多多工作中都有大佬提到了,因此许多目标检测的工作通常会设计了两条不同的分支(带有额外卷积结构)分别对应于分类和回归。而detr其实完全共享了同一组特征,在实验中,我们发现如果只做patch的定位,不管分类的话,UP-DETR迁移到voc上效果会不好。这意味着定位和分类,特征偏好上确实是有冲突的。所以,为了在预训练中权衡这两个任务的偏好,我们固定了预训练好的CNN权重,新增了一个叫patch feature reconstruction的分支。motivation就是希望经过transformer的特征能保持和经过CNN后的特征一致的分类判别性。
  • 对于multi-query localization,主要是说对于DETR,decoder其实有100个object query,这100个object query其实是100个网络隐式学到的空间位置偏好的embedding。我们实际上是随机搞了M个query patch,因为patch可能会在任意位置,直觉上得一个patch加到多个object query上,所以我们讨论了一下如何在预训练过程中,把这M个query patch分配到100个embedding上去。我们从最简单的single-query开始介绍,把它拓展到了支持multi-query的预训练。对于multi-query,我们认为有两个要满足的条件,第一个是 query之间框的预测是独立的,所以我们提出了一个放在decoder上的attention mask,保证query之间彼此不可见。第二个是100个embedding和M个query patch应当是没有任何位置先验限制的,我们提出了object query shuffle的方法去达到这种随机性。

     

解决了这俩问题,UP-DETR的预训练过程如下图所示,除此之外,下游目标检测的微调是和训DETR一模一样的:
CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR:无监督预训练检测器
在实验中,通过在ImageNet上无监督预训练,UP-DETR在VOC和COCO上都取得了更快的收敛和更高的精度。即便在充足长的训练epoch下,VOC上仍然有3 AP以上的提升,而对于COCO,UP-DETR仍然可以获得0.7 AP的提升(42.8 AP)。要知道的是,对于在充足训练时间下的COCO,预训练CNN对于Faster R-CNN已经不重要了,但是对于DETR而言,预训练CNN和transformer仍然能提升其性能。
CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR:无监督预训练检测器
CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR:无监督预训练检测器

最后的话,怕大家误解,我先提前辩解一下,我们和DETR用的是一模一样的模型结构,都是没有FPN,以ResNet50最后一层作为encoder特征输入(当然,由于attention高昂的复杂度也做不了FPN),这导致了小物体依旧挺拉跨,所以AP的提升比起deformable DETR和sparse R-CNN自然会低一些(噗通)。我觉得吧,站在通用视觉表征的立场上,这锅怎么也得分给ResNet一半吧。希望知乎大佬们轻喷(害怕.jpg)。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享