GA

it2026-04-03  9

目录

1. Motivation2. Guided Anchoring2.1 overview2.2 anchor的2个设计准则2.3 中心点预测分支2.4 形状预测分支2.5 Feature Adaption2.6 The Use of High-quality Proposals

论文:Region Proposal by Guided Anchoring 来源:CVPR 2019

1. Motivation

Anchor是物体检测中的一个重要概念,通常是人为设计的一组框,作为分类和边界框回归的基准框。无论是单阶段检测器还是两阶段检测器,都广泛地使用了anchor。例如,两阶段检测器的第一阶段通常采用RPN生成proposal,是对anchor进行分类和回归的过程,即anchor -> proposal -> detection bbox;大部分单阶段检测器是直接对 anchor 进行分类和回归,即anchor -> detection bbox。

常见的生成anchor的方式是滑窗(sliding window),也就是首先定义 k k k个特定尺度(scale)和宽高比(aspect ratio)的anchor,然后在全图上以一定的步长滑动。这种方式在Faster R-CNN,SSD,RetinaNet等经典检测方法中被广泛使用。

通过sliding window生成anchor的办法简单可行,但也不是完美的。 (1)anchor的尺度和宽高比需要预先定义,这是一个对性能影响比较大的超参,而且对于不同数据集和方法需要单独调整; (2)如果尺度和长宽比设置不合适,可能会导致recall不够高,或者anchor过多影响分类性能和速度。一方面,大部分的anchor都分布在背景区域,对proposal或者检测不会有任何正面作用; (3)预先定义好的anchor形状不一定能满足极端大小或者长宽比悬殊的物体。

预先定义的均匀密集且形状固定的anchor存在多个不足之处,我们期待的是稀疏且形状根据位置可变的anchor。

本文提出了一种新的anchor生成方法 —— Guided Anchoring,即通过图像特征来指导anchor的生成。通过预测anchor的位置和形状,来生成稀疏而且形状任意的anchor,并且设计了Feature Adaption模块来修正特征图使之与anchor形状更加匹配。

在使用ResNet-50-FPN作为backbone的情况下,Guided Anchoring将RPN的召回率( A R 1000 AR_{1000} AR1000)提高了 9.1%,将其用于不同的物体检测器上, A P AP AP也均有所提高。

2. Guided Anchoring

2.1 overview

网络以FPN为backbone,在原始RPN的特征图基础上,采用两个分支分别预测anchor位置和形状,然后结合在一起得到anchor。之后采用一个Feature Adaption模块进行anchor特征的调整,得到新的特征图供之后的预测(anchor 的分类和回归)使用。整个方法可以进行端到端的训练,而且相比之前只是增加了 3 个 1 × 1 1\times1 1×1 conv 和一个 3 × 3 3\times3 3×3 deformable conv,带来的模型参数量的变化很小。

Anchor generation模块的设计思想来源于公式 p ( x , y , w , h ∣ I ) = p ( x , y ∣ I ) p ( w , h ∣ x , y , I ) p(x,y,w,h|I)=p(x,y|I)p(w,h|x,y,I) p(x,y,w,hI)=p(x,yI)p(w,hx,y,I)即,给定输入图像 I I I(或图像的CNN特征图 F F F),其存在某个anchor的概率 p ( x , y , w , h ∣ I ) p(x,y,w,h|I) p(x,y,w,hI)等于上述两个条件概率的乘积。 p ( x , y ∣ I ) p(x,y|I) p(x,yI)表示给定输入图像 I I I,某个位置为该anchor中心的概率, p ( w , h ∣ x , y , I ) p(w,h|x,y,I) p(w,hx,y,I)表示给定输入图像 I I I和anchor中心点 ( x , y ) (x,y) (x,y),其宽高为 ( w , h ) (w,h) (w,h)的概率。在传统anchor-based方法(sliding window)中, p ( x , y ∣ I ) p(x,y|I) p(x,yI)可以看成是均匀分布,而 p ( w , h ∣ x , y , I ) p(w,h|x,y,I) p(w,hx,y,I)可以看成是冲激函数。

根据上面的公式,anchor的生成过程可以分解为两个步骤,anchor 位置预测和形状预测。将 Anchor generation模块分为2个分支, N L N_L NL分支对特征图 F I F_I FI使用一个 1 × 1 1\times1 1×1卷积+sigmoid函数,输出每个位置是否为物体中心的概率; N S N_S NS分支对特征图使用一个 1 × 1 1\times1 1×1卷积,输出每个位置的宽高偏移量。最后根据中心点概率值大小选出概率大于某阈值的中心点,与相应的宽高组成anchor。

为什么要先预测中心点概率,再预测宽和高,而不是直接输出4维变量,分别表示anchor的中心点坐标、宽和高?而且后续为什么需要做feature adaption?(2.2节将给出解释)

2.2 anchor的2个设计准则

作者认为,anchor的设计必须满足2个准则:alignment(中心对齐) 和 consistency(特征一致)。 alignment是指anchor的中心点要和feature的位置对齐,

alignment是指anchor的中心必须与特征图的每个位置对齐。这保证了anchor box的中心与特征图元素的感受野中心与anchor box对齐,如果不对齐,那么后续使用单点特征来对anchor进行分类回归就会出现问题。传统的方法就是在特征图的每个位置 F I ( i , j ) F_I(i,j) FI(i,j)设置anchor,并将 F I ( i , j ) F_I(i,j) FI(i,j)设置为anchor的中心,自然地满足了alignment准则。如果直接由回归方法得到anchor的中心,则不满足alignment准则。而且为了设置稀疏的anchor,还需要增加一个表示该位置是否存在物体的概率图,这样实际上相当于没有anchor的RPN,这时如何设置训练标签就成了非常棘手的问题。而直接在每个位置先输出是否存在物体的概率值,并直接以此位置作为anchor的中心,一来满足alignment准则,二来该方法简单方便,训练标签的获取也比较方面。Guided Anchoring生成anchor时相当于使用anchor-free的方法进行了一次粗略的检测,消除了大量的negative anchors,生成了许多质量较高的positive anchors,后续再进行anchor的分类和回归,就相当于时多分类和精修边界框了。consistency是指anchor的特征(感受野)要和形状匹配。传统的方法在特征图的所有位置均设置了宽高比相同的anchor(尽管同一个位置设置了多个宽高比不同的anchor),当使用同一个卷积核进行预测时,所有位置的特征点所对应的感受野与各自anchor的关系都是相同的,这时,anchor的特征和形状是相匹配的。但是现在每个anchor都有自己独特的形状大小,和特征就不是特别好地匹配。另一方面,对原本的特征图来说,它并不知道形状预测分支预测的anchor形状,但是接下来的分类和回归却是基于预测出的anchor来做的,可能会比较懵。由于每个位置anchor形状不同而破坏了特征的一致性,所以需要通过feature adaption来进行修正。

2.3 中心点预测分支

对大小为 W × H × C W\times H\times C W×H×C的特征图 F I F_I FI使用一个 1 × 1 1\times1 1×1卷积+sigmoid函数,输出一个大小为 W × H × 1 W\times H\times1 W×H×1的概率图 P I P_I PI,概率图 P I P_I PI的某个位置 ( i , j ) (i,j) (i,j)的值 p ( i , j ∣ F I ) p(i,j|F_I) p(i,jFI)表示原图上坐标为 ( ( i + 0.5 ) s , ( j + 0.5 ) s ) ((i+0.5)s,(j+0.5)s) ((i+0.5)s,(j+0.5)s)的点为物体中心的概率。设定某个阈值 θ L \theta_L θL,选择概率大于 θ L \theta_L θL的点为anchor中心点。下图b表示概率图 P I P_I PI,显然大部分高置信的anchor中心都集中在物体上,设置阈值可以过滤大部分的背景类。 在训练中心点预测分支时,其训练标签构造与FCOS类似,如下图所示,对于某一特征层,落入任何一个GT框中心区域内的center为正样本,不落入任何GT框中的center为负样本,其余center为忽略样本。当考虑多个特征层时,特定大小的GT框只assign给特定特征层(下图实线框),但GT框会影响相邻特征层(下图虚线框),当出现重叠GT框时,存在优先级:CR>IR>OR。由于positive样本较少,negative样本很多,所以采用focal loss构造分类损失。

2.4 形状预测分支

由于anchor的宽高变化范围非常大,直接预测宽高是不合理的,甚至可能导致网络无法收敛,于是,预测量是宽高的偏移量 d w dw dw d h dh dh: 其中, σ \sigma σ是超参数,论文中令 σ = 8 \sigma=8 σ=8 s s s是下采样率。此时,范围为 [ 0 , 1000 ] [0,1000] [0,1000]的宽高将被归一化至 [ − 1 , 1 ] [-1,1] [1,1]。对大小为 W × H × C W\times H\times C W×H×C的特征图 F I F_I FI使用一个 1 × 1 1\times1 1×1卷积,输出一个大小为 W × H × 2 W\times H\times2 W×H×2的宽高预测图,其每个位置表示宽高的偏移量 d w dw dw d h dh dh。既然中心点预测分支已经定义好正负样本了,为什么不直接以正样本对应的GT框作为该位置回归的真实宽高呢?原因是,center正样本与GT框中心不是对齐的,就算能无差地预测宽高(指预测值与GT框的宽高一样),那么最终的anchor与GT框的IoU不一定是最高的,所以不能以GT框的宽高作为形状预测分支的标签。对此,可以直接使用IoU loss作为回归损失。但是作者也不是采用这种做法。假设某一GT框为 g t = ( x g , y g , w g , h g ) gt=(x_g,y_g,w_g,h_g) gt=(xg,yg,wg,hg),在特征图的某一位置 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)预定义一些可变anchor,为 a w h = { ( x 0 , y 0 , w , h ) ∣ w > 0 , h > 0 } a_{wh}=\{(x_0,y_0,w,h)|w>0,h>0\} awh={(x0,y0,w,h)w>0,h>0},接着定义vIoU v I o U ( a w h , g t ) = max ⁡ w > 0 , h > 0 I o U n o r m a l ( a w h , g t ) vIoU(a_{wh},gt)=\max_{w>0,h>0}IoU_{normal}(a_{wh},gt) vIoU(awh,gt)=w>0,h>0maxIoUnormal(awh,gt)由于不可能搜索所以可能的anchor的宽高,所以还是预先设置了最常用的9个不同宽高对(与RetinaNet的anchor相同),理论上sample得越多,近似效果越好,但出于效率的考虑,只sample了常见的9组w和h。通过实验发现,最终结果对sample的组数这个超参并不敏感,也就是说不管sample多少组,近似效果已经足够。最后使用 bounded IoU loss计算损失 其中 L 1 L_1 L1表示Smooth L1 loss。作者的这种做法,还是使用了预先定义的anchor,并对这些anchor进行回归,最后使用中心预测分支进行筛选。直接使用定义好的中心点正样本,并用IoU损失来训练也是可以的吧。

2.5 Feature Adaption

增加了一个Feature Adaption模块来解决特征不一致问题。思路很简单,就是把anchor的形状信息直接融入到特征图中,这样新得到的特征图就可以去适应每个位置anchor的形状。我们利用一个 3x3 的deformable convolution来修正原始的特征图,而deformable convolution 的offset 是通过anchor的w和h经过一个1x1conv得到的。(如果是像正常的 deformable convolution 一样,用特征图来预测offset,则提升有限,因为没有起到根据anchor形状来adapt的效果)

通过这样的操作,达到了让feature的有效范围和anchor形状更加接近的目的,同一个conv的不同位置也可以代表不同形状大小的anchor 了。从表格可以看到,Feature Adaption带来了接近 5 个点的提升。

2.6 The Use of High-quality Proposals

2.1~2.5节已经介绍完GA的原理,理论上高质量的proposals(如下图所示)会使 A P AP AP提高很多,但是作者经过实验发现,在不同的检测模型上,使用Guided Anchoring只提升 1 个点左右。 经过一番探究,发现了以下两点:1. 减少proposal数量,2. 增大训练时正样本的IoU阈值(这个更重要)。既然在top300里面已经有了很多高 oU的proposal,那么何必用1000个框来训练和测试,既然 proposal们都这么优秀,那么让 IoU 标准严格一些也未尝不可。这一发现是通过调参得来的,通过这两个改进,在 Faster R-CNN 上的涨点瞬间提升到了 2.7 个点(没有加任何 trick),其他方法上也有大幅提升。
最新回复(0)