【Arxiv2023】Detect Everything with Few Examples
机构:罗格斯大学
本文提出了小样本目标检测领域的SOTA方法DE-ViT,采用元学习训练框架。DE-ViT提出了一种新的区域传递机制用于检测框定位,并且提出了一种空间积分层来讲mask转化为检测框输出。DE-ViT相比之前的方法提升巨大,在COCO数据集上,10-shot提升15AP,30shot提升7.2AP。
文章贡献/创新点
- 提出了一种FSOD的SOTA方法,DE-ViT,不需要微调。
- 提出了一种新的区域传递框架,一个将mask转化为box的空间积分层,和一个新的特征投影层。
- DE-ViT在多个小样本和单样本检测任务上取得了SOTA性能。
虽然本文的性能很高,但本文采用的是DINO预训练的ViT,而不是其他方法采用的ResNet101作为backbone,所以其性能提升也有很大成都是来自于backbone的改进。
小样本目标检测(FSOD)任务定义
FSOD任务有基类 C b a s e C_{base} Cbase和新类 C n o v e l C_{novel} Cnovel两种类别, C = C b a s e ∪ C n o v e l C=C_{base}\cup C_{novel} C=Cbase∪Cnovel并且 C b a s e ∩ C n o v e l = ∅ C_{base}\cap C_{novel}=\emptyset Cbase∩Cnovel=∅,基类有足够多的样本而新类只有少量样本。对于 K K K-shot小样本任务,数据集中的每个新类只有 K K K个检测框标注,通常 K = 1 , 3 , 5 , 10 , 30 K=1,3,5,10,30 K=1,3,5,10,30。
区域传递网络
文章认为,尽管预训练的ViT有很多语义信息,但缺乏用于box回归的坐标信息。通常做法是在基类上微调ViT backbone,但文章发现微调会导致ViT完全过拟合base类别而在新类上性能降低。这一点根据实验结果也可以看出来,如果直接微调的话,基类上 bAP 50 = 48.9 \text{bAP}_{50}=48.9 bAP50=48.9、 bAP 75 = 22.5 \text{bAP}_{75}=22.5 bAP75=22.5,性能很高,而新类上 nAP 50 = 4.5 \text{nAP}_{50}=4.5 nAP50=4.5、 nAP 75 = 2.2 \text{nAP}_{75}=2.2 nAP75=2.2性能很低,说明直接微调会验中过拟合到base类别上,新类根本训不出来。
新类上性能折半的问题在很多方法中都有存在,尤其是基于微调的方法。例如,TFA方法在10-shot的COCO数据集上基类上 bAP = 33.9 \text{bAP}=33.9 bAP=33.9而新类上 nAP = 10 \text{nAP}=10 nAP=10,在30-shot的COCO数据集上基类 bAP = 34.5 \text{bAP}=34.5 bAP=34.5而新类 nAP = 13.5 \text{nAP}=13.5 nAP=13.5。在新类上的性能下降比较严重。
为了解决这个问题,文章先用现成的RPN网络为图片生成候选区,并将候选区扩大一定比例来获取上下文信息。这些初始候选区会输入区域传递网络,经过逐层传播和微调,让其逐步拟合到物体真值检测框。而在微调过程中,作者并没有直接预测bounding box坐标,而是先预测mask输出,然后提出了一种可学习的空间积分层来将mask转化为bounding box输出。整体框架如下图所示:

区域传递层
假设图片经过backbone和RoI后得到了相应的候选区 r r r和相应的候选区特征 h h h。区域传递层会根据之前所有次传播输出的候选区 r 0 : t − 1 ∈ R t × K × K r_{0:t-1}\in\mathbb R^{t\times K\times K} r0:t−1∈Rt×K×K和上一次传播输出的候选区特征 h t − 1 ∈ R S × K × K h_{t-1}\in\mathbb R^{S\times K\times K} ht−1∈RS×K×K来输出更新后的候选区 r t ∈ R 1 × K × K r_t\in\mathbb R^{1\times K\times K} rt∈R1×K×K、特征 h t ∈ R S × K × K h_t\in\mathbb R^{S\times K\times K} ht∈RS×K×K、检测框坐标 b t ∈ R 4 b_t\in\mathbb R^4 bt∈R4和类别分数 c t ∈ R c_t\in\mathbb R ct∈R。除了 b t b_t bt和 c t c_t ct,PL模块的其他输入和输出是相同的,因此可以堆叠提高性能。下面是PL模块的更新准则:
h t = f update , t ( c o n c a t ( r 0 : t − 1 , h t − 1 ) ; θ ) , h t , r e g i o n = f region , t ( h t ; θ ) r t = σ ( h t , r e g i o n ) , b t = f integral , t ( h t , r e g i o n ; θ ) c t = f class , t ( WeightedAvgPool ( h t , r t ) ; θ ) h_t=f_{\text{update},t}(\mathrm{concat}(r_{0:t-1},h_{t-1});\theta), h_{t,region}=f_{\text{region},t}(h_t;\theta)\\ r_t=\sigma(h_t,region), b_t=f_{\text{integral},t}(h_{t,region};\theta)\\ c_t=f_{\text{class},t}(\text{WeightedAvgPool}(h_t,r_t);\theta) ht=fupdate,t(concat(

最低0.47元/天 解锁文章
405

被折叠的 条评论
为什么被折叠?



