带你一文读懂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再进行训练。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Faster RCNN是一种用于目标检测的深度学习模型,其基本思想是将卷积神经网络(CNN)应用于目标检测任务,并引入了两个关键的概念:Region Proposal Network(RPN)和ROI Pooling。 Faster RCNN的整体流程包含四个主要步骤: 1. 特征提取:首先通过预训练好的CNN网络(如VGGNet或ResNet)将输入图像进行特征提取,得到图像的高层次特征表示。 2. RPN生成候选框:在特征图上通过滑动窗口方式,为每个窗口生成多个候选框,并判断候选框是否包含物体。RPN引入了一个二分类模型和一个边界框回归模型,用于判断候选框是否为目标物体和优化其位置。 3. ROI Pooling:根据RPN生成的候选框,在特征图上对每个候选框进行ROI Pooling操作,将其转化为固定大小的特征图,用于输入全连接层。 4. 目标分类与位置回归:将ROI Pooling得到的特征图输入全连接层,分别进行目标分类和位置回归。分类使用softmax激活函数,回归使用回归器对候选框的位置进行微调。 Faster RCNN通过共享特征提取网络,减少了计算时间,并且加入了RPN网络,消除了传统目标检测方法中的候选框生成步骤,大大提升了检测速度。与之前的RCNN和Fast RCNN相比,Faster RCNN具有更高的检测精度和更快的检测速度。 总结来说,Faster RCNN是一种基于卷积神经网络的目标检测方法,通过引入RPN网络和ROI Pooling操作,实现了高效准确的目标检测。它的核心思想在于通过CNN提取图像特征,通过RPN生成候选框,再通过ROI Pooling和全连接层进行分类和位置回归。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值