RCNN、Fast RCNN、Faster RCNN详解参考以下文章:

RCNN:

Fast RCNN:

Faster RCNN:

 

一、RCNN

1、RCNN分为三部分:

  • 提取候选框(selective search)2k个,输入固定大小227*227图像
  • 对每个候选区域用CNN提取特征(AlexNet,ImageNet预训练)
  • 对候选框进行分类(SVM)、回归(NMS)

2、RCNN流程:

fastrcnn和yolo差别 fast rcnn和rcnn_fast rcnn

 

3、网络结构(AlexNet fine-tune):

selective search 提取候选框之后,喂入CNN进行特征提取

fastrcnn和yolo差别 fast rcnn和rcnn_卷积_02

4、瓶颈:对每个region proposals 都做一次CNN计算,计算量太大。

5、损失函数:分类用交叉熵损失函数、回归用均方差损失函数

 

二、Fast RCNN

1、解决RCNN重复卷积问题

先对整个input图像做卷积,得到feature map,同时,用selective search将候选框选择出来,将候选区域在feature map上选出来,这样避免了对每个候选区域重复计算的问题,大大提高了计算速度。

2、SPP Net(因为ROI pooling借鉴了SPP Net,所以整理一下)

它的原理是,黑色图片代表卷积之后的特征图,接着我们以不同大小的块来提取特征,分别是4*4,2*2,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块,从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。SPP Net网络如下:

fastrcnn和yolo差别 fast rcnn和rcnn_fast rcnn_03

缺点:2次浮点数取整,对回归结果有影响。

3、ROI Pooling

借鉴了SPP Net,分成n块,得到n种特征。可以得到固定大小的输出,不需要像RCNN一样,直接resize。

RPI pooling 过程如下图:

fastrcnn和yolo差别 fast rcnn和rcnn_fast rcnn_04

详细过程见文章:

4、Fast RCNN 流程:框回归的是anchor框和预测值之间的差值

fastrcnn和yolo差别 fast rcnn和rcnn_rcnn_05

5、Fast RCNN分为4部分:

  • Alexnet的前5个卷积层(FCN)提取公共特征,得到feature map
  • 与RCNN一样,用selective search提取候选框,得到region proposals
  • 最后一个Alexnet的最大池化层,用ROI pooling 代替,将feature map和region proposals分别pooling
  • 最后一个Alexnet的全连接层,用两个全连接层代替

fastrcnn和yolo差别 fast rcnn和rcnn_fast rcnn_06

6、Fast RCNN用同一个网络,同时进行分类和回归任务

7、损失函数:分类损失用交叉熵损失、回归损失用Smooth L1 loss

8、向后传播:在每个像素点上,有叠加候选区域,则梯度也叠加

9、多尺度训练:输入不同size的数据,相当于做数据增强

10、何恺明经典论文总结:(resnet、faster rcnn、mask rcnn)

 

三、Faster RCNN

1、解决Fast RCNN用第三方工具selective search提取region proposals的问题,用RPN代替它。

2、RPN结构

  • 头部:生成anchor

fastrcnn和yolo差别 fast rcnn和rcnn_fastrcnn和yolo差别_07

  • 中部:预测分类和框位置
  • 尾部:将预测结果,通过(剔除越界anchor、NMS、框回归偏移),得到真正的proposals,作为Fast rcnn的输入

3、Faster RCNN检测流程:

fastrcnn和yolo差别 fast rcnn和rcnn_卷积_08

fastrcnn和yolo差别 fast rcnn和rcnn_rcnn_09

4、接下来分块描述Faster RCNN:

(1)特征提取网络结构(Vgg 16去掉最后一个最大池化层)

fastrcnn和yolo差别 fast rcnn和rcnn_fastrcnn和yolo差别_10

(2)RPN网络结构

  • 先生成9种不同比例的anchor
  • 预测anchor分类和框回归位置

fastrcnn和yolo差别 fast rcnn和rcnn_fastrcnn和yolo差别_11

  • 初步筛选预测结果(剔除越界anchor、NMS、框回归偏移),生成Fast RCNN需要的proposals

(3)ROI pooling结构(池化过程见上文)

(4)Fast RCNN结构

fastrcnn和yolo差别 fast rcnn和rcnn_rcnn_12

5、损失函数(RPN和Fast RCNN 损失的区别、以及标签区别,有点小疑惑~)

损失函数分为四部分(RPN 分类loss、RPN 框回归loss、Fast RCNN 分类loss、Fast RCNN框回归loss):

(1)RPN的分类分支,预测候选框是前景类or背景类;

分类真值由以下方法确定:

fastrcnn和yolo差别 fast rcnn和rcnn_fastrcnn和yolo差别_13

(2)RPN框回归是为Fast RCNN生成推荐区域proposals;

回归真值:构造候选框预测值与真值的位置差异,用于构造框回归损失

(3)Fast RCNN分类分支,直接分类到具体的标签;

(4)Fast RCNN框回归也是直接回归具体类别的回归系数;

初步将labels定义为每个预测窗口对应IOU最大的真值窗口的标签;进一步筛选,根据前景阈值,背景阈值将所有预测窗口分为前景窗口,背景窗口以及无效窗口;进一步,抛弃无效窗口,只保存有效窗口的roi,labels,roi_scores,其中labels设置为前景为样本真值标签,背景为0, 这也符合原论文中,将背景单作为一类用于分类的想法。

fastrcnn和yolo差别 fast rcnn和rcnn_fastrcnn和yolo差别_14

6、4-step training

(1)公共特征提取网络被ImageNet-pre-trained Model vgg16初始化,并对region proposal 任务进行fine-tuning。

(2)使用step1产生的RPN proposals训练一个单独的Fast-RCNN目标检测网络,该网络也由ImageNet-pre-trained Model初始化,这两个网络不共享卷积层。

(3)用这个目标检测网络去初始化RPN训练,固定共享的卷积层参数,只微调RPN独自的层。

(4)保持RPN的卷积层参数不变,只微调单独的Fast RCNN层。

就这样,2个网络共享卷积层,而且形成了一个统一的网络,接下来只要run更多的迭代次数。

7、RPN attention机制:RPN为Fast RCNN提供物体可能所在的区域

 

盗图地址:

fastrcnn和yolo差别 fast rcnn和rcnn_rcnn_15

 

problem:

faster rcnn中的rpn和fast rcnn的分类loss和框回归loss的区别是什么?他们对应的真值又是什么?