Region Proposal by Guided Anchoring

自从anchor方法在目标检测领域出现时,就以其良好的效果被用于各种算法中,如yolo、SSD等等。但是anchor生成是按照预先设置好的规则来生成了,为了保证算法的检测效果,需要生成大量的anchor,其中绝大部分都是没用的anchor,为了提升这部分的效率,并保证效果,Jiaqi Wang等人在"Region Proposal by Guided Anchoring"文章中提出Guided anchor方法。这个方法能生成少量的但是有效的anchor,如下图所示,其效果很明显。
在这里插入图片描述
1、文章思路
目标的位置和输入的图像相关,目标的大小和输入的图像以及位置相关。假设box的参数为 ( x , y , w , h ) (x, y, w, h) (x,y,w,h),其中 ( x , y ) (x, y) (x,y)是box的中心位置, w w w h h h分别是box的宽度和高度,则对于给定的一副图像 I I I,其对应box的概率为:
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)
2、网络架构
首先作者设计了一个anchor生成模块,这个模块包含两个部分:位置预测和大小预测。而不同位置的anchor,其特征范围是不一样的,因此作者设计了一个特征自适应模块(feature adaptation module)。主干网络采用FPN时,其网络结构如下图:
在这里插入图片描述
3、网络详细描述
3.1 anchor位置预测
位置预测输出的是某个位置 ( i , j ) (i, j) (i,j)存在anchor的概率 p ( i , j ∣ F I ) p(i, j | F_I) p(i,jFI)。产生这个概率的是一个 1 × 1 1\times1 1×1的卷积层+sigmoid函数。概率大于预先定义的阈值 ϵ L \epsilon_L ϵL
3.2 anchor大小预测
大小预测分支为每个位置预测最佳的大小 ( w , h ) (w, h) (w,h)。但是直接预测大小会导致精度不高,其原因是目标的大小变化范围比较大。因此采用如下的等式:
w = σ ⋅ s ⋅ e d w , h = σ ⋅ s ⋅ e d h w=\sigma \cdot s \cdot e^{dw}, h=\sigma \cdot s \cdot e^{dh} w=σsedw,h=σsedh
大小预测分支输出 d w , d h dw, dh dw,dh,然后用上式计算出 ( w , h ) (w, h) (w,h) s s s是步长, σ \sigma σ是一个经验值,文章中取值为 σ = 8 \sigma=8 σ=8
大小预测分支的网络构成如下: 1 × 1 1\times1 1×1网络输出两通道的数据,分别表示 d w dw dw d h dh dh,然后计算真是位置的层。
3.3 anchor-Guided特征自适应
为什么需要这个网络结果:在传统的RPN或者单阶段检测器,特征层上每个位置上的anchor具有相同的大小和尺度,因此特征层可以具有一直的表达。但是在Guided anchor模型中,anchor的大小随着位置的变化而变化,因此不能按以前的方式生成特征层。
理论上,大的anchor是在大区域上生成特征,而小的anchor是在小区域上生成特征。按照这个原则来设计anchor-guided特征自适应模块。在每个位置上按照anchor大小来生成特征:
f i l = N T ( f i , w i , h i ) \bold{f}_i^l = N_T(\bold{f}_i, w_i, h_i) fil=NT(fi,wi,hi)
其中 f i \bold{f}_i fi是在第 i i i个位置上的特征, ( w i , h i ) (w_i, h_i) (wi,hi)是其对应的anchor的大小。
其网络结构如下:采用 3 × 3 3\times3 3×3可变形卷积层。首先预测anchor的大小,然后利用可变形卷积层来获取 f I l f_I^l fIl。然后再进行分类以及box的回归。
3.4 训练
1)目标函数
训练的目标函数是由传统的分类回归损失( L c l s L_{cls} Lcls L r e g L_{reg} Lreg)和anchor定位( L l o c L_{loc} Lloc)和大小( L s h a p e L_{shape} Lshape)预测损失组成:
L = λ 1 L l o c + λ 2 L s h a p e + L c l s + L r e g L=\lambda_1L_{loc}+\lambda_2L_{shape}+L_{cls}+L_{reg} L=λ1Lloc+λ2Lshape+Lcls+Lreg
2)anchor定位
定位anchor位置时,希望在ground-truth boxes中心位置的anchor多,远离中心位置的anchor少,并且获取较大的IOU。文章中作者定义了三个区域:
a)中心区域 C R = R ( x g ′ , y g ′ , σ 1 w ′ , σ 1 h ′ ) CR=R(x_g', y_g', \sigma_1w', \sigma_1h') CR=R(xg,yg,σ1w,σ1h),在中心区域的点都是正样本;
b)忽略区域 I R = R ( x g ′ , y g ′ , σ 2 w ′ , σ 2 h ′ ) − C R IR=R(x_g', y_g', \sigma_2w', \sigma_2h')-CR IR=R(xg,yg,σ2w,σ2h)CR,其中 σ 2 > σ 1 \sigma_2>\sigma_1 σ2>σ1。这部分区域在训练时,不向后传递梯度。
c)外围区域 O R OR OR:除去 C R CR CR I R IR IR的区域其他部分。这个部分当作负样本区域。

作者是在FPN上使用这个模块,因此需要考虑相邻特征层之间的影响。每一个特征层应该只对应一个范围内的尺度。只有一个特征层的尺度满足目标映射到该层的尺度时,才将该目标的 C R CR CR区域设置在该层。

loss采用Focal loss
3)anchor大小
确定每个anchor的最佳大小分为两步:首先需要确定和ground-truth box匹配的anchor;其次预测能覆盖box的最好的宽和高。Guided anchor中的宽和高是一个变量,而不是预先定义好的。因此需要采用与之前方法不同的方法。
定义可变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}和ground truth box g t = ( x g , y g , w g , h g ) gt=(x_g, y_g, w_g, h_g) gt=(xg,yg,wg,hg) I O U IOU IOU v I o U vIoU vIoU
v I o U ( a w h , g t ) = m a x w > 0 , h > 0 I o U n o r m a l ( a w h , g t ) vIoU(a_{wh}, gt) = \underset{w>0,h>0}{max}IoU_{normal}(a_{wh}, gt) vIoU(awh,gt)=w>0,h>0maxIoUnormal(awh,gt)
其中 I o U n o r m a l IoU_{normal} IoUnormal I o U IoU IoU的typical定义。
但是计算 v I o U ( a w h , g t ) vIoU(a_{wh}, gt) vIoU(awh,gt)是非常复杂的,很难在端到端的网络上实现。因此对于给定点 ( x 0 , y 0 ) (x_0, y_0) (x0,y0),用若干个常用的 w w w h h h的值来代表所有的值。然后用这些采样的值来计算 v I o U ( a w h , g t ) vIoU(a_{wh}, gt) vIoU(awh,gt)。文章中,在训练阶段,作者用了9对 ( w , h ) (w, h) (w,h)来估算 v I o U vIoU vIoU
大小的损失函数定义如下:
L s h a p e = L 1 s ( 1 − m i n ( w w g , w g w ) ) + L 1 s ( 1 − m i n ( h h g , h g h ) ) L_{shape}=L_1^s(1-min(\frac{w}{w_g}, \frac{w_g}{w})) + L_1^s(1-min(\frac{h}{h_g}, \frac{h_g}{h})) Lshape=L1s(1min(wgw,wwg))+L1s(1min(hgh,hhg))
( w , h ) (w, h) (w,h) ( w g , h g ) (w_g, h_g) (wg,hg)分别表示预测的大小和对应ground-truth box的大小。 L 1 s L_1^s L1s是平滑的 L 1 L_1 L1 loss。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值