天天看点

FSAF-Feature Selective Anchor-Free

《Feature Selective Anchor-Free Module for Single-Shot Object Detection》是由Carnegie Mellon大学Chenchen Zhu等提出的自动选择合适的尺度以及无anchor的目标检测方法。实验对比图如下

FSAF-Feature Selective Anchor-Free

从上图可以看出,加了FSAF模块的RetinaNet,能把一些长宽比比较悬殊的目标检测出来。为什么加入了FSAF模块可以有这种效果?首先:

1、对比下加入FSAF模块前后的RetinaNet网络的结构:

FSAF-Feature Selective Anchor-Free
FSAF-Feature Selective Anchor-Free

相对于原始的RetinaNet网络,FSAF模块只是两个卷积层,一个嵌入到分类支路中,另一个嵌入到回归支路中。

为什么在两个支路中分别嵌入一个卷积层就可以实现特征选择,从而达到良好的检测效果?

2、损失函数

作者首先定义了一些变量:

1)标签为 k k k的实例的bounding box为 b = [ x , y , w , h ] b=[x, y, w, h] b=[x,y,w,h]。 ( x , y ) (x, y) (x,y)是矩形的中心, w , h w, h w,h分别是矩形的宽和高。

2)其在 P l P_l Pl​特征层上的box坐标为 b p l = [ x p l , y p l , w p l , h p l ] b_p^l = [x_p^l, y_p^l, w_p^l, h_p^l] bpl​=[xpl​,ypl​,wpl​,hpl​],即其坐标可表示为 b p l = b / 2 l b_p^l = b / 2^l bpl​=b/2l。

3)有效box(effective box): b e l = [ x e l , y e l , w e l , h e l ] b_e^l = [x_e^l, y_e^l, w_e^l, h_e^l] bel​=[xel​,yel​,wel​,hel​];可忽略box(ignoring box): b i l = [ x i l , y i l , w i l , h i l ] b_i^l = [x_i^l, y_i^l, w_i^l, h_i^l] bil​=[xil​,yil​,wil​,hil​]。这两个box大小分别和 b p l b_p^l bpl​成 ϵ e \epsilon_e ϵe​和 ϵ i \epsilon_i ϵi​倍的关系。即 x e l = x p l , y e l = y p l , w e l = ϵ e w p l , h e l = ϵ e h p l x_e^l=x_p^l, y_e^l=y_p^l, w_e^l=\epsilon_ew_p^l, h_e^l=\epsilon_eh_p^l xel​=xpl​,yel​=ypl​,wel​=ϵe​wpl​,hel​=ϵe​hpl​, x i l = x p l , y i l = y p l , w i l = ϵ i w p l , h i l = ϵ i h p l x_i^l=x_p^l, y_i^l=y_p^l, w_i^l=\epsilon_iw_p^l, h_i^l=\epsilon_ih_p^l xil​=xpl​,yil​=ypl​,wil​=ϵi​wpl​,hil​=ϵi​hpl​

文章中的 ϵ e = 0.2 , ϵ i = 0.5 \epsilon_e=0.2, \epsilon_i=0.5 ϵe​=0.2,ϵi​=0.5。

定义完这些参数,就可计算分类和回归的输出:

1)分类输出

分类输出层输出 K K K个maps,每个map对应一个类。一个样本以三种方式影响第 k k k层特征。第一,有效box区域: b e l b_e^l bel​,这是一个正样本区域;第二,除去有效box的可忽略box区域: ( b i l − b e l ) (b_i^l-b_e^l) (bil​−bel​),这部分区域的梯度不传回去;第三,相邻特征层的可忽略boxes ( b i l − 1 , b i l + 1 ) (b_i^{l-1}, b_i^{l+1}) (bil−1​,bil+1​)也是可忽略的。其余的区域都是负样本区域。如果在一个特征层上,有两个相交的有效boxes,则较小的样本有较高的优先级。

loss计算采用 α = 0.25 , γ = 2.0 \alpha=0.25, \gamma=2.0 α=0.25,γ=2.0的Focal loss。

2)回归输出

回归支路只计算有效区域 b e l b_e^l bel​内的点。对于区域内的每个点 ( i , j ) (i, j) (i,j),其对应的projected box是一个四维矢量 d i , j l = [ d t i , j l , d l i , j l , d b i , j l , d r i , j l ] \bold{d}_{i,j}^l=[d_{t_{i,j}}^l,d_{l_{i,j}}^l,d_{b_{i,j}}^l,d_{r_{i,j}}^l] di,jl​=[dti,j​l​,dli,j​l​,dbi,j​l​,dri,j​l​],其各分量表示当前点 ( i , j ) (i, j) (i,j)和 b p l b_p^l bpl​上、左、下、右边界的距离。用 S S S对 d i , j l \bold{d}_{i,j}^l di,jl​进行归一化,即每个点 ( i , j ) (i, j) (i,j)的矢量为 d i , j l / S \bold{d}_{i,j}^l / S di,jl​/S。 S S S取值为4。有效区域之外的区域都忽略。Loss采用IoU loss。

FSAF-Feature Selective Anchor-Free

3)前向输出

对于点 ( i , j ) (i, j) (i,j),其前向网络输出为 [ o ^ t i , j , o ^ l i , j , o ^ b i , j , o ^ r i , j ] [\widehat{o}_{t_{i,j}}, \widehat{o}_{l_{i,j}}, \widehat{o}_{b_{i,j}}, \widehat{o}_{r_{i,j}}] [o

ti,j​​,o

li,j​​,o

bi,j​​,o

ri,j​​],则预测的距各边的距离为 [ S o ^ t i , j , S o ^ l i , j , S o ^ b i , j , S o ^ r i , j ] [S\widehat{o}_{t_{i,j}}, S\widehat{o}_{l_{i,j}}, S\widehat{o}_{b_{i,j}}, S\widehat{o}_{r_{i,j}}] [So

ti,j​​,So

li,j​​,So

bi,j​​,So

ri,j​​]。则输出的左上角和右下角分别为 ( i − S o ^ t i , j , j − S o ^ l i , j ) (i-S\widehat{o}_{t_{i,j}}, j-S\widehat{o}_{l_{i,j}}) (i−So

ti,j​​,j−So

li,j​​)、 ( i + S o ^ b i , j , j + S o ^ r i , j ) (i+S\widehat{o}_{b_{i,j}}, j+S\widehat{o}_{r_{i,j}}) (i+So

bi,j​​,j+So

ri,j​​)。将得到的点放大 2 l 2^l 2l倍就可以得到输出box在原图像上的位置。

输出box的置信度和类别由最大score以及对应的类别决定。

那如何选择合适的输出层得到结果呢?

3、在线特征选择

自动选择合适的特征层得到结果。

在训练阶段:设有一个样本 I I I,其在 P l P_l Pl​层的分类损失和box回归损失分别为 L F L I ( l ) L_{FL}^I(l) LFLI​(l)和 L I o U I ( l ) L_{IoU}^I(l) LIoUI​(l)。选择最小损失的层为最优的层:

l ∗ = a r g m i n l L F L I ( l ) + L I o U I ( l ) l^* = arg \underset{l}{min} L_{FL}^I(l) + L_{IoU}^I(l) l∗=arglmin​LFLI​(l)+LIoUI​(l)

在训练时,将 l ∗ l^* l∗层的损失传递回去,进行学习。

在推理时,无需选择哪个层,只需要将置信度最高的层的预测结果输出即可。

4、结合使用去推理和训练

在使用中,anchor-based和FSAF模块时同时使用的

推理阶段

在FSAF模块中,每一层选取置信度最高的1k个输出,得到输出,与anchor-based模块的输出合并,然后采用NMS得到最终的输出结果

训练优化

整个网络的损失是FSAF和anchor-based的加权和。设anchor-based的损失为 L a b L^{ab} Lab,anchor-free模块的分类和回归损失分别为 L c l s a f L_{cls}^{af} Lclsaf​、 L r e g a f L_{reg}^{af} Lregaf​,则网络的总损失为 L = L a b + λ ( L c l s a f + L r e g a f ) L = L^{ab} + \lambda(L_{cls}^{af} + L_{reg}^{af}) L=Lab+λ(Lclsaf​+Lregaf​),其中 λ \lambda λ是anchor-based分支的权重,本章中的设置为 λ = 0.5 \lambda=0.5 λ=0.5。

初始化

具体参照论文

从上面对FSAF模块分析可知,FSAF模块在目标检测时,没有像anchor-based方法那样对box长宽比有限制,从理论上看,任何长宽比都可以检测到,因此在第一张图上,加了FSAF模块的RetinaNet网络可以检测到细长的目标,并且FSAF能提升检测效果,单独的FSAF检测对比如下表

FSAF-Feature Selective Anchor-Free

总结

这篇文章提出了FSAF的特征选择无anchor模块,应用于多尺度特征输出网络。在训练和推理阶段,同时使用anchor-based和anchor-free两个分支。FSAF模块其实一个卷积层,在训练中,这个模块学会选择合适的尺度,在推理阶段,可自动输出合理的结果。

继续阅读