带你一文读懂Faster RCNN论文

Faster RCNN论文解读

 最近看了Faster RCNN的论文, 又参考了一篇写很好的中文博客, 现在将Faster RCNN的总体思路和实现细节记录在这篇博客, 方便以后复习。
 Faster RCNN在RCNN和Fast RCNN的基础之上, 统一了特征抽取、候选区域提取、边界回归、分类, 让这个模型成为了一个端到端的模型, 并且在速度上得到了极大的提升, 让RCNN家族真正实现了Real-Time Detection。

参考文章: 一文读懂Faster RCNN

0. Faster RCNN概览

在这里插入图片描述
 从论文的这个图上可以看出来, Faster RCNN主要分为了四个部分:

  1. Conv layers: Faster RCNN先是使用了一个基础的backbone实现特征提取, 得到feature maps。该feature maps将会被共享用于后续RPN网络和全连接层。
  2. Region Proposal Network: RPN这个网络主要用来生成region proposals, 取代了以前selective search这种生成方式。并且这个层通过softmax来判断anchors属于positive还是negative, 再利用bounding box regression修整anchors获得精确的proposals。
  3. Roi Pooling: 这个层在Fast RCNN中被提出, 主要用于收集输入的feature maps和proposals将候选区域对应的feature变换到固定尺度, 送入后续的全连接层判定目标类别。
  4. Classification: 利用proposal feature maps计算proposals的类别, 同时再次进行bounding box regression。

 下面我将详细介绍这四个部分的实现细节。

1. Conv layers

 一般Conv layers包括了conv、pooling、relu三种层。在论文中提到的两种Conv layers的网络分别是VGG16和ZF model。
 这个部分有个细节需要特别注意, 两个Conv layers的模型在conv的时候都采用了same padding, 而relu也不会改变feature maps的大小。这就意味着只有pooling层才会改变feature maps的大小。例如:输入一个 M × N M \times N M×N大小的图像, 经过了Conv layers的四层 2 × 2 2 \times 2 2×2的pooling之后, 得到了一个固定为 M 16 × N 16 \frac{M}{16} \times \frac{N}{16} 16M×16N大小的feature maps, 由于只是放缩变换, 所以feature maps中的点是很容易对应到原图的点的。这一点对后续根据feature maps中的点计算其原图位置十分重要

2. Region Proposal Networks

RPN1

RPN2
 上图1是论文中的原图。上图2是我在参考文章中截的, 感觉把RPN画的很清楚, 就拿过来了。从上图2可以看出来, 再经过Conv layers提取特征之后,feature maps将会被送入RPN网络。这个网络分为两条线, 上面那条线通过一个 1 × 1 1 \times 1 1×1的卷积将feature maps的channel转换到一个固定尺度(即2k, k就是anchors数目, 论文中用的是9),然后通过softmax等操作判断anchors的positive和negative(一个anchor同时输出positive和negative的概率, 所以这里是2k);下面那条线则是用来预测bounding box regression中anchors的偏移量, 同样是利用了 1 × 1 1 \times 1 1×1的卷积生成了4k固定channel的feature maps, 代表了anchor在x、y、w、h这四个部分的偏移量。

3. RoI pooling

 RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从图2中可以看到RoI pooling层有两个输入:

  • 原始的featurue maps
  • RPN输出的region proposals(大小不同

 下面说一下RoI Pooling layer forward的过程:

  1. 由于proposals对应的是 M × N M \times N M×N尺度的,所以首先需要把它映射到 M 16 × N 16 \frac{M}{16} \times \frac{N}{16} 16M×16N这个feature maps的尺度。
  2. 再将每一个proposal划分为 p o o l e d _ w × p o o l e d _ h pooled\_w \times pooled\_h pooled_w×pooled_h的网格。
  3. 对每一个网格都进行max pooling操作。

 这样处理之后, 大小不同的region proposals在feature maps的尺度之下, 都被统一到了 p o o l e d _ w × p o o l e d _ h pooled\_w \times pooled\_h pooled_w×pooled_h大小。

4. Classification

 Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别,输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。

5. Faster RCNN训练

 Faster RCNN的训练步骤主要分为4个步骤:

  1. 利用pre-trained model,训练RPN网络
  2. 把pre-trained model和RPN结合起来成为Faster RCNN网络,再进行训练。
  3. 第二次训练RPN网络。
  4. 把第二次训练的RPN网络和2中再训练的pre-trained model合成Faster RCNN再进行训练。
posted @ 2020-10-11 10:15  JHadoop  阅读(247)  评论(0编辑  收藏  举报