R-CNN目标检测系列 R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN

2022-10-22,,,,

R-CNN目标检测系列

  • R-CNN
    • Selective Search 生成候选区域(proposal)
    • 算法流程
  • SPP-Net
    • 特征映射
    • 金字塔池化层(Spatial Pyramid Pooling)
  • Fast R-CNN
    • RoI Pooling (Region of Interest Pooling)
  • Faster R-CNN
    • Faster-RCNN结构和RPN网络
    • Faster-RCNN代价函数分析
    • Faster-RCNN训练流程

R-CNN

Fast R-CNN

Faster R-CNN

这一些系列的工作都是Ross B. Girshick(RBG)完成的。

R-CNN

R-CNN(Regions with CNN features)是RBG在2014年提出的一种目标检测算法,RCNN是讲CNN方法应用到目标检测问题上的一个里程碑,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测。
前面我们提到的滑动窗口法可以得到目标所在的区域,但是会产生大量的计算。除了滑动窗口法之外还有另外一类基于区域(Region Proposal)的方法,selective search就是其中之一。

Selective Search 生成候选区域(proposal)

Step 1:计算区域集R里每个相邻区域的相似度S={s1, s2, …}
While S != empty set:
Step 2:找出相似度最高的两个区域,将其合并为新集Rt,添加进R
Step 3:从S中移除所有与step2中有关的子集
Step 4:重新计算新集Rt与所有子集的相似度

这里的相似度主要是考虑颜色,纹理,尺寸,交叠四个方面

算法流程

算法流程1
选择一个分类模型(比如ALexNet, VGGNet)

算法流程2

  1. 去掉最后一个全连接层
  2. 将分类数从1000改为(N+1)。对于VOC,N=20;对于ILSVRC2013,N=200.
  3. 对该模型做fine-tuning。(主要目的是优化卷积层和池化层的参数)

算法流程3
论文中用到的网络pool4后面的一层是fc6全连接层。
对每一个候选区域进行特征提取:
Resize区域大小,然后做一次前向运算,将第五个池化层的输出(也就是候选框提取到的特征)保存到硬盘。
算法流程4
训练阶段:
使用pool5输出的图像特征训练SVM分类器(二分类)来判断这个候选框里面的物体类别。
测试阶段:
每个类别对应一个SVM,判断是不是属于这个类别。下图是狗分类的SVM:

算法流程5
使用pool5输出的图像特征训练一个回归器(dx, dy, dw, dh)。
dx代表水平平移,dy代表竖直平移,dw代表宽度缩放,dh代表高度缩放

测试阶段:
使用回归器调整候选框位置。

RCNN-mAP

R-CNN和OverFeat检测系统在ILSVRC2013的200分类监测数据及上对比。R-CNN表现更加卓越,mAP达到31.4%,大大超过了OverFeat的24.3%的表现。

SPP-Net

SPP-Net(Spatial Pyramid Pooling Net)
RCNN的进化中SPP Net的思想对其贡献很大。
SPP-Net的作者是何凯明。R-CNN的最大瓶颈是2k个候选区域都要经过一次CNN,速度非常慢。SPP-Net最大的改进是只需要将原图做一次卷积操作,就可以得到每个候选区域的特征。

特征映射

对卷积层可视化发现:输入图片的某个位置的特征反应在特征图上也是在相同位置。我们将ss算法提供的2000个候选区域的位置记录下来,通过比例映射到conv5输出的feature map上,提取出候选区域的特征图m,然后将m送入到金字塔池化层中进行计算。

金字塔池化层(Spatial Pyramid Pooling)

把不同大小的特征图变为相同大小
SPP-Net的图像检测速度大约比RCNN提升了100倍。

Fast R-CNN

继2014年的RCNN之后,RBG借鉴了SPP-Net的设计思想,在15年推出了Fast RCNN。

RoI Pooling (Region of Interest Pooling)

roi_pooling层其实是SPP-Net中金字塔池化层的一种简单化的形式,roi pooling层只使用一种固定输出代销的max-pooling。
将每个候选区域均匀分成MxN块,对每块进行max-pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。

Fast-RCNN把bbox regression放进了神经网络内部,与region分类合并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。这个结构的优化极大提升了模型的训练和预测速度,也为后来的Faster-RCNN做下了铺垫。

Fast-RCNN结果分析

Faster R-CNN

Faster-RCNN是RBG团队在2015年的又一力作。简单网络目标检测速度达到17fps,复杂网络达到5fps。
Fast-RCNN已经很优秀了,但是还存在一个比较大的问题,就是selective search。
Faster-RCNN加入了一个专门生成候选区域的神经网络,也就是说找到候选框的工作也就交给了神经网络来做了。做这个任务的网络叫做Region Proposal Network(RPN)
Faster-RCNN可以简单地看做“区域生成网络+fast-RCNN”的系统,用区域生成网络代替fast-RCNN中的selective search方法。

Faster-RCNN结构和RPN网络

Region Proposal Network (RPN)
anchor

RPN计算流程

  1. 最后一个卷积层输出的特征图再进行一次卷积操作得到新的特征图。
  2. 新的特征图的平面上有40x60共2400个点,每个点都可以对应到原始图片上,得到9个anchor,所以一共可以得到40x60x9大约20000个候选区域。
  3. 计算所有候选区域的scores。
  4. 把所有超出图片的候选区域都限制在图片区域内,选scores最大的前12000个候选区域。
  5. 剩余的区域中有些候选区域跟其他候选区域有大量重叠,我们可以基于第4步计算的scores,采用非极大值抑制(NMS)。我们固定NMS的IoU阈值为0.7。然后再选出scores最大的前2000个候选区域。这2000个候选区域如果与某个标定区域重叠比例大于0.7,记为正样本,如果与任意一个标定区域重叠比例都小于0.3,记为负样本。其余区域不作为样本。
  6. 在训练RPN层分类回归任务时,我们会随机地抽取256个区域来训练,正负候选区域比例为1:1,如果正样本数小于128,用负样本填充。
  7. 训练最后输出的分类回归任务时,我们随机抽取64个与真实标注框IoU>=0.5的区域作为前景,256-64个IoU<0.5且>=0.1的区域作为背景来训练。

Faster-RCNN代价函数分析

RPN loss定义
函数由两部分组成,一部分是目标预测的loss,一部分是回归预测的loss。

考虑分类的loss:
p_i为anchor预测为目标的概率。
GT标签:p_i* = {0 negative label, 1 positive label}

L_cls(pi, pi*) = -log[p_ip_i+(1-p_i)(1-p_i)]
当p_i为0时,L_cls(p_i, p_i) = -log(1-p_i)
当p_i为1时,L_cls(p_i, p_i) = -logp_i
N_cls为mini-batch大小,为256

考虑回归的loss:
t_i = {t_x, t_y, t_w, t_h},表示bounding box4个坐标参数
t_i是与positive anchor对应的ground truth的4个坐标参数
当pi
为0时,回归的loss为0
当pi为1时,才需要考虑回归loss
L_reg(t_i, t_i
) = R(t_i - t_i*)
R为:smoothL1(x) = {0.5x^2 if |x| < 1, |x| - 0.5 otherwise}
lambda是回归权重,论文中设置为10
N_reg为anchor位置的数量,约等于40*60=2400

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* - x_a) / wa, t_y* = (y* - y_a) / h_a,
t_w* = log(w* / w_a), t_h* = log(h* / h_a),
x, y, w, h是预测框重心的(x, y)坐标,宽,高
X_a, y_a, w_a, h_a是anchor box重心的(x, y)坐标,宽,高
x*, y*, w*, h*是真实标注框中心的(x, y)坐标,宽,高

Faster-RCNN训练流程

第一步:用ImageNet模型初始化,独立训练一个RPN网络;
第二步:仍然用ImageNet模型初始化,但是使用上一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络。
第三部:使用第二步的Fast-RCNN网络参数初始化一个新的RPN2网络,但是把RPN2、Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN2特有的那些网络层,重新训练。
第四步:仍然固定RPN2、Fast-RCNN共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,形成一个统一的网络,继续训练,fine-tune Fast-RCNN特有的网络层。
Faster-RCNN结果

《R-CNN目标检测系列 R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN.doc》

下载本文的Word格式文档,以方便收藏与打印。