论文笔记:《Faster R-CNN》

Faster R-CNN

Faster R-CNN检测速度更快(5fps/s),是Fast R-CNN的10倍,R-CNN的250倍,检测精度则稍好于Fast版本。主要贡献就是采用卷积网络提取Region proposal,取代了传统的Selective search算法。

RPN网络概述

Faster R-CNN提出了Region Proposal Network(RPN)思想,它与物体特征提取网络共享较低层卷积信息。具体方法:以feature map上每个特征点为中心,选取其周围$[n,n]$的窗口区域,进行滑动。再根据缩放关系换算到源图,假如某个窗口与ground truth计算的IOU值大于某个阈值,则认为该窗口内存在物体。
 
为了增加多尺度检测能力,每个特征点换算到原图后,会将原图的窗口进行调大或调小操作。论文中作者一共设置了9种(窗口面积为 {128, 256, 512} x 长宽比为 {1:1, 1:2, 2:1})。原图中的窗口为了和feature map窗口进行区分,称为anchor。直观来看,如下图所示:
图片名称

RPN训练阶段
  • 对于[60, 40]大小的一张feature map,那么原图中可能的anchor数目约为$60\ast 40\ast 9 \approx 20000$个
  • 忽略超出边界的anchors剩下6000个
  • 通过anchor与ground truth计算的IOU值,可以进行每个anchor为前景$or$背景的自动标注,即:输入RPN网络的训练样本为box坐标 + box内是否有物体。
  • 同样采用多任务训练,完成前、背景分类及bounding box的粗回归。
RPN测试阶段
  • RPN网络对每幅图的6000个region均映射为一个概率值score和对应的四个坐标值。
  • 然后利用该score对6000个regions进行NMS非极大抑制,筛选到约为2000个anchor。
  • 接着再筛选出Top-N(论文中N=300)个区域用于Fast RCNN detect网络的训练(作者在论文中对2000、300个region proposal进行对比实验,效果差别不大,也进一步说明了RPN提取region的有效性、针对性)
RPN网络结构

作者在论文中给出的一张图有些误导,查阅前辈们写的博客时候才理解RPN网络具体形式。重新绘制网络结构如下:

图片名称

论文中提到的256-d,不是整个feature map生成一个256维的向量,feature map上的每一个“点”都对应一个256维向量。同时该“点”对应了9个anchors,18个cls输出,36个reg输出。
 
小结:RPN的基本思想就是通过对feature map进行窗口滑动,再在该窗口上累加一个小网络,最终训练得到某些可能为前景的regions,以及该regions对应的bouning box。该网络专门判断该区域是否存在物体,而并不检测是哪种特定的物体。

RPN + Fast RCNN

有了RPN后,怎样跟Fast RCNN连接起来呢?作者采用了叫做4-Step Alternating Training的方式:
step 1 :采用预训练的VGG网络,前13层用作特征提取层,后面的网络采用RPN架构,用均值为0的高斯分布随机初始化网络参数
step 2 :同样采用预训练的VGG前13层网络,用step 1中 RPN得到的region proposal,进行Fast RCNN网络的训练。这两步还未实现共享卷积层
step 3 :采用step 2中Fast RCNN的卷积层参数初始化RPN网络,并固定共享层网络参数,仅仅fine tune RPN网络层参数,得到新的region proposal
step 4 :继续固定共享层网络参数,仅仅fine tune Fast RCNN,得到最终的模型。

Fast RCNN 与 Faster RCNN结果对比

图片名称

Faster RCNN网络结构(来源于网络)

图片名称

Ref:

📎: 区域推荐网络RPN
📎:faster-rcnn 之 RPN网络的结构解析