【论文泛读】 Faster R-CNN:利用RPN实现实时目标检测( 三 )


锚点
是RPN网络中一个较为重要的概念,传统的检测方法中为了能够得到多尺度的检测框,需要通过建立图像金字塔的方式,对图像或者滤波器(滑动窗口)进行多尺度采样 。RPN网络则是使用一个3×3的卷积核,在最后一个特征图(conv5-3)上滑动,将卷积核中心对应位置映射回输入图像,生成3种尺度(scale){ 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 1282,2562,5122?}和3种长宽比( ratio){1:1,1:2,2:1}共9种 。
平移不变性锚点
在我们的目标检测中,我们有一个平移不变性,如果我们用K-means生成800个锚点,是不满足平移不变的,就算是用也不能保证,但是作者的方法用卷积输出层有平移不变性,并且可以降低模型的参数,大约有降低了两个数量级,并且在小数据集中也有更低的过拟合的风险 。
损失函数 Loss
在训练RPN时,我们对每个锚点设置两个标签(物体 or 背景) 。并且我们将锚点设为正样本如果它是两种情况之一 。
通常是用第二个条件来确定正样本,但是还是会用第一个条件,因为在极少数的情况下,第二个条件找不到正样本 。如果一个锚点的IoU比率低于0.3,我们给非正面的锚点分配一个负标签 。既不正面也不负面的锚点不会有助于训练目标函数 。
根据Fast R-CNN中的损失函数,R-CNN的损失函数类似定义为
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ? ) + λ 1 N r e g ∑ i p i ? L r e g ( t i , t i ? ) \begin{} L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right) &=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right) \\+\ & \frac{1}{N_{r e g}} \sum_{i} p_{i}^{*} L_{r e g}\left(t_{i}, t_{i}^{*}\right) \end{} L({pi?},{ti?})+λ?=Ncls?1?i∑?Lcls?(pi?,pi??)Nreg?1?i∑?pi??Lreg?(ti?,ti??)?
上述公式中,i表示 index,pi表示概率,
p i ? p_i? pi???代表对应的GT 概率(即当第i个与GT间IoU>0.7,认为该是, p i ? p_i? pi???=1,反之IOU p i ? p_i? pi????=0);
至于那些0.3小于IOU t代表box, t ? t? t?代表对应的 对应的GT box 。
在损失函数中,回归损失是利用 L1函数
S m o o t h L 1 ( x ) = { 0.5 x 2 , ∣ x ∣ ≤ 1 ∣ x ∣ ? 0.5 , o t h e r w i s e {L1}(x)=\begin{cases} 0.5x^2,|x| \leq 1 \\\ |x|-0.5,\end{cases} ?(x)={0.5x2,∣x∣≤1∣x∣?0.5,?
L r e g = S m o o t h L 1 ( t ? t ? ) L_{reg}={L1}(t-t^{\ast}) Lreg?=?(t?t?)
相比于L2损失函数,L1对离群点或异常值不敏感,可控制梯度的量级使训练更易收敛 。
对于 box ,我们有以下公式
t x = ( x ? x a ) / w a , t y = ( y ? y a ) / h a , t w = log ? ( w / w a ) , t h = log ? ( h / h a ) t x ? = ( ? x a ) / w a , t y ? = ( y ? ? y a ) / h a , t w ? = log ? ( w ? / w a ) , t h ? = log ? ( h ? / h a ) \begin{} t_{\{x}}=\left(x-x_{\{a}}\right) / w_{\{a}}, & t_{\{y}}=\left(y-y_{\{a}}\right) / h_{\{a}}, \quad t_{\{w}}=\log \left(w / w_{\{a}}\right), \quad t_{\{h}}=\log \left(h / h_{\{a}}\right) \\ t_{\{x}}^{*}=\left(-x_{\{a}}\right) / w_{\{a}}, & t_{\{y}}^{*}=\left(y^{*}-y_{\{a}}\right) / h_{\{a}}, \quad t_{\{w}}^{*}=\log \left(w^{*} / w_{\{a}}\right), \quad t_{\{h}}^{*}=\log \left(h^{*} / h_{\{a}}\right) \end{} tx?=(x?xa?)/wa?,tx??=(?xa?)/wa?,?ty?=(y?ya?)/ha?,tw?=log(w/wa?),th?=log(h/ha?)ty??=(y??ya?)/ha?,tw??=log(w?/wa?),th??=log(h?/ha?)?
其中x, y, w, h 对应两组框的中心点的坐标和它的宽和高 。变量x, x a , x ? x_a,x? xa?,x??分别对应 box ,box 和 -truth box的中心点横坐标(同理x,y , w , h)我们可以这么认为 box 就是把 box 拟合到-truth box 。在我们的公式中,用于回归的特征是相同空间大小的在 maps 。
训练RPNs
论文中是利用SGD算法,并且以图片为中心,如果利用所有的锚点去计算损失函数,可能会计算冗余,所以一般来说会随机选择256个锚点,正样本和负样本的比例大约是1:1,也就是各为128个,如果不够,会填补,然后初始化是利用均值为0.01的高斯分布 。