Faster R-CNN(~ RPN + Fast R-CNN)

Faster R-CNN是一种端对端的目标检测模型,通过引入区域生成网络(RPN)替代了传统的SelectiveSearch算法,实现了更高效的目标检测。RPN网络在特征图上生成候选区域,与Fast R-CNN共享特征,大幅提升了检测速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Faster R-CNN是一个真正意义上的端对端的目标检测模型,总体实现方式继承自RCNN, Fast RCNN, 而最大的改进是废除了上述两者的Selective Search 算法,同时也是其实现端对端的保证。

论文中说,如果简单地在CNN前面加上一个专门提取proposal的网络显得不够优雅,所以最终把region proposal 提取和 Fast R-CNN部分融合进了一个网络模型,也就是区域生成网络RPN, 某种意义上解决了region proposal大量耗时的问题。

综上所述,Faster R-CNN的核心是用区域生成网络代替了Fast RCNN中的Selective Search方法。

由于之前讲过RCNN系的前几篇论文,因此在此处主要进行区域生成网络的分析。

区域生成网络(RPN)

首先来放一张Faster R-CNN的总体流程图:

Faster R-CNN

接下来注重进行RPN网络的讲解。

如何训练一个网络来代替Selective Search的功能呢?论文借鉴了SPP-Net和ROI的思想,在feature map 中提取proposal。实现的具体方式是首先讲feature map的点参照ROI的思路映射回原图,在每个对应的原图设计不同的固定尺度的窗口(bounding box),根据窗口与ground truth的IOU给出正负标签,让它学习其中是否有object, 这样就训练了一个区域生成网络(RPN)。

由于我们仅仅需要找出大致的地方,因此需要对设置的bounding box。设置的bounding box需要满足如下的三个要求,也就是三个固定:

  1. 固定尺度变化(三种尺度:128*128, 256*256, 512*512);
  2. 固定scale ratio变化(三种ratio: 1:2; 1:1; 2:1)
  3. 固定采样方式(只在feature map每个点在原图中对应的ROI上采样,之后的工作会进行精度调整)

通过上述三种方式,可以明显降低网络的复杂度。

具体流程如下:

  1. 得到最终用来预测的feature map:图片在输入网络后,依次经过一系列conv+relu (套用ImageNet上常见的分类网络即可 本论文实验了5层的ZF,16层的VGG-16)得到的feature map,额外添加一个conv+relu层,输出51*39*256维特征(feature map)。准备后续用来选取proposal,并且此时坐标依然可以映射回原图。
  2. 计算Anchors: 在feature map上的每个特征点预测多个region proposals。具体作法是:把每个特征点映射回原图的感受野的中心点当成一个基准点,然后围绕这个基准点选取k个不同scale、aspect ratio的anchor。论文中3个scale(三种面积{ 128^2, 256^2, 521^2 }),3个aspect ratio( {1:1,1:2,2:1} )
  3. 定义损失函数:对于每个anchor,首先在后面接上一个二分类softmax,有2个score 输出用以表示其是一个物体的概率与不是一个物体的概率 (p_i),然后再接上一个bounding box的regressor 输出代表这个anchor的4个坐标位置(t_i),因此RPN的总体Loss函数可以定义为 :

这里写图片描述

i表示第i个anchor,当anchor是正样本时 p_i^* =1 ,是负样本则=0 。 t_i^* 表示 一个与正样本anchor 相关的ground true box 坐标 (每个正样本anchor 只可能对应一个ground true box: 一个正样本anchor 与某个grand true box对应,那么该anchor与ground true box 的IOU要么是所有anchor中最大,要么大于0.7)

x,y,w,h分别表示box的中心坐标和宽高,x,x_a,x^* 分别表示 predicted box, anchor box, and ground truth box (y,w,h同理)t_i 表示predict box相对于anchor box的偏移,t_i^* 表示ground true box相对于anchor box的偏移,学习目标自然就是让前者接近后者的值。

  1. RPN训练过程:文中提到如果每幅图的所有anchor都去参与优化loss function,那么最终会因为负样本过多导致最终得到的模型对正样本预测准确率很低。因此 在每幅图像中随机采样256个anchors去参与计算一次mini-batch的损失。正负比例1:1(如果正样本少于128则补充采样负样本)

Sharing Features for RPN and Fast R-CNN

我们在之前的几篇文章中已经细致地进行了RPN以及Fast R-CNN网络结构的分析,而我们同时知道,如果是分别训练两种任务的网络模型,即使它们的结构、参数完全一致,但是各自的卷积层内的卷积核也会向不同的方向改变,导致无法共享网络权重,论文作者提出了三种可能的方式:

  1. Alternating Training: 此方法就是一个不断迭代的训练过程,既然分别训练RPN和Fast R-CNN可以让网络朝不同的方向收敛,我们可以先独立训练RPN,然后用RPN的网络权重对Fast R-CNN网路进行初始化,并且用之前RPN输出proposal作为此时Fast R-CNN的输入训练Fast R-CNN; 然后用Fast R-CNN的网络参数去初始化RPN。之后不断迭代上述过程。也就是循环训练RPN, Fast R-CNN。
  2. Approximate Joint Training: 这里不再是串行训练RPN和Fast R-CNN,而是尝试讲将两者融入到一个网络内。采取的如下所示的网络结构, proposals是由中间的RPN层输出的,而不是从网络外部得到。需要注意的一点是,名字中的”approximate”是因为反向传播阶段RPN产生的cls score能够获得梯度用以更新参数,但是proposal的坐标预测则直接把梯度舍弃了,这个设置可以使backward时该网络层能得到一个解析解(closed results),并且相对于Alternating traing减少了25-50%的训练时间。
  3. Non-approximate Joint Training: 上面的Approximate Joint Training把proposal的坐标预测梯度直接舍弃,所以称之为Approximate,那么理论上如果不舍弃是不是能够更好地提升RPN部分网络的性能呢?作者把这种训练方式称之为“Non-Approximate Joint Training”,但是此方法论文中说超出了讨论的范围,因此没有进行讨论。

参考文献
1. Faster R-CNN (https://zhuanlan.zhihu.com/p/24916624

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值