Faster R-CNN 论文总结

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

核心是region proposal network(RPN)。本质上是把fast r-cnn当中region proposal的方法从selective search算法替换成RPN。论文提到的训练方法现在已经不用了,pytorch的官方实现当中直接进行了联合训练。

摘要

当前(faster r-cnn提出前)SOTA的目标检测网络需要region proposal算法假设目标位置。如SPPnet和Fast R-CNN都尝试减少这些检测网络的运行时间,这就暴露了region proposal的计算是目标检测的一个瓶颈。作者引入一个region proposal network(RPN),与检测网络一起共享全图的卷积特征,因此几乎可以做到无代价的region proposal。RPN网络是一个全卷积网络,可以同时预测目标在每个位置的边界以及得分。RPN可以被端到端地训练来生成高质量的region proposal,然后通过fast r-cnn进行检测。

介绍

proposal是当前SOTA检测算法的计算瓶颈。
通过深度网络来计算proposal既优雅又高效,作者引入RPN并与SOTA目标检测网络共享卷积层。计算proposal的代价很小(10ms/张)。
用faster r-cnn的提取卷积特征图同样可以用于生成region proposal。在这些卷积特征的基础上添加两层额外的卷积层:一层用于将卷积特征图编码至一个256d的特征向量,另一层在256d特征向量(原文说是在每个conv map position,但是看结构图是256d特征向量)上生成k个region proposal的目标得分以及边界回归。
RPN也是一种全卷积网络。同样可以进行端到端的训练。

RPN

在这里插入图片描述

图左是RPN,图右是使用RPN得到建议框的一些例子。
RPN以任意尺寸图像作为输入,输出一组建议框和对应的目标分数。这是通过一个全卷积网络实现的。
为了生成region proposal,我们在共享的最后一层卷积层(一般是某个模型的最后一个卷积层,比如ZF、VGG16)使用一个小网络(3x3的滑动窗,看视频解释是说是用的3x3卷积)进行滑动。该网络和输入的卷积特征图进行全连接。每个滑动窗口都映射到成低维向量(ZF为256d,VGG为512d)。这个向量被输入至两个同级全连接层,即一个是边界回归层(reg),另外一个是分类层(cls)。

anchors

在每个滑动窗口位置(也就是中心点,RPN里面3x3窗口内蓝色的小点),同时预测k个region proposal(可以理解成anchor,后面都当作是anchor),因此reg层编码k个anchor会得到4k个输出(也就是边界框回归输出的4个参数,x和y的偏移量,w和h的缩放因子)。cls层得到2k个输出来估计前景/背景的概率。
三种尺度(面积) { 12 8 2 , 25 6 2 , 51 2 2 } \{128^2,256^2,512^2\} {1282,2562,5122},(视频里面说是由经验所得,论文好像也没提到?)
三种比例 { 1 : 1 , 1 : 2 , 2 : 1 } \{ 1:1, 1:2, 2:1 \} {1:1,1:2,2:1}
每个位置在原图上都对应有 3 × 3 = 9 3\times3=9 3×3=9个anchor
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。

region proposal的损失函数

为了训练RPN,为每个anchor分配一个二进制类别的标签(即是否为目标,也就是上面提到的前景/背景)。定义两种情况为正标签:

  1. 和ground truth box有着最大IOU的anchor
  2. 和任何ground truth box的IOU大于0.7的anchor

需要注意的是一个ground truth box可能会对应多个anchor。而负标签定义为:对于所有ground truth box,IOU小于0.3的anchor。
不满足正负标签条件的anchor均被舍弃,不参与训练。
RPN的损失函数:
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 ∗ ) L(\{p_i\},\{t_i\})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+\lambda\frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*) L({pi},{ti})=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)
p i p_i pi表示第i个anchor预测为真实标签的概率
p i ∗ p_i^* pi当为正样本时为1,当为负样本时为0
t i t_i ti表示第i个anchor的边界框回归参数
t i ∗ t_i^* ti表示第i个anchor对应的ground truth bbox的边界框回归参数
N c l s N_{cls} Ncls表示一个mini-batch中所有样本数量,论文为256
N r e g N_{reg} Nreg表示中心点的个数,约2400
λ \lambda λ为超参数,论文为10
t x = ( x − x a ) / w a , t y = ( y − y a ) / h a , t w = log ⁡ ( w / w a ) , t h = l o g ( h / h a ) 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) tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha)
t x ∗ = ( x ∗ − x a ) / w a , t y ∗ = ( y ∗ − y a ) / h a , t w ∗ = log ⁡ ( w ∗ / w a ) , t h ∗ = l o g ( h ∗ / h a ) 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) tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha)
x,y,w,h表示box中心(不是左上角)的坐标、宽度和高度。x表示预测box, x a x_a xa表示anchor box, x ∗ x^* x表示ground truth box。可以认为是anchor box回归到附近的ground truth box。个人理解相当于通过输入 x a x_a xa输出x,然后得到误差 x − x a x-x_a xxa,根据 x ∗ − x a x_*-x_a xxa不断修正x。


参考:
Faster RCNN理论合集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值