本文主要是介绍FSAF-Feature Selective Anchor-Free,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Feature Selective Anchor-Free Module for Single-Shot Object Detection》是由Carnegie Mellon大学Chenchen Zhu等提出的自动选择合适的尺度以及无anchor的目标检测方法。实验对比图如下
从上图可以看出,加了FSAF模块的RetinaNet,能把一些长宽比比较悬殊的目标检测出来。为什么加入了FSAF模块可以有这种效果?首先:
1、对比下加入FSAF模块前后的RetinaNet网络的结构:
相对于原始的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=ϵewpl,hel=ϵehpl, 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=ϵiwpl,hil=ϵihpl
文章中的 ϵ 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,jl,dli,jl,dbi,jl,dri,jl],其各分量表示当前点 ( 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。
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∗=arglminLFLI(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的特征选择无anchor模块,应用于多尺度特征输出网络。在训练和推理阶段,同时使用anchor-based和anchor-free两个分支。FSAF模块其实一个卷积层,在训练中,这个模块学会选择合适的尺度,在推理阶段,可自动输出合理的结果。
这篇关于FSAF-Feature Selective Anchor-Free的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!