Faster R-CNN笔记

在这里插入图片描述
Faster RCNN可以分为如下四个主要内容

  1. Conv Layers:作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
  2. Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于foreground或者background,再利用bounding box regression修正anchors获得精确的proposals。
  3. Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
  4. Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。
    图2

Conv Layers卷积层

Conv Layers包含了conv pooling relu三种层。

  1. 所有的conv层filter_size(f=3),padding(p=1),stride(s=1),根据卷积计算公式(n+2p-f)/s+1得到图像大小为(n+2-3)/1+1=n。这样设置参数的目的是使得卷积之后的图像不变。
    在这里插入图片描述
  2. 而所有的pooling层的filter_size(f=2),padding(p=0),stride(s=2),就使得每一次输入为M X N的图像变为原来的1/2,即输出尺寸为M/2 X N/2。VGG16中使用了4个pooling层因此宽和高都缩小了2的4次方为16。输出的feature map的尺寸为M/16 X N/16
  3. relu层就是一个激活层。relu激活函数如下:
    在这里插入图片描述

RPN(Region Proposal Networks)

在这里插入图片描述
RPN输入带有anchors的feature map,经过RPN网络之后输出bbox回归之后的精确的proposal
#可以看到RPN网络有两条线。上面一条线是对anchors进行分类。可以看到上面一条线里面接了一个softmax来将anchors分类成foreground anchors(fg anchors)和background anchors(bg anchors);
#下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合foreground anchors和bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

anchors reg cls

什么是anchors? 什么是reg? 什么是cls?
所谓anchors,实际上就是一组由rpn/generate_anchors.py生成的矩形。

[[ -84.  -40.   99.   55.]
 [-176.  -88.  191.  103.]
 [-360. -184.  375.  199.]
 [ -56.  -56.   71.   71.]
 [-120. -120.  135.  135.]
 [-248. -248.  263.  263.]
 [ -36.  -80.   51.   95.]
 [ -80. -168.   95.  183.]
 [-168. -344.  183.  359.]]

其中每行的4个值(x1, y1, x2, y2) 表矩形左上和右下角点坐标。9个矩形共有3种形状,长宽比为大约为with:height∈{1:1, 1:2, 2:1}三种,如图6。实际上通过anchors就引入了检测中常用到的多尺度方法。
在这里插入图片描述
注:关于上面的anchors size,其实是根据检测图像设置的。在python demo中,会把任意大小的输入图像reshape成800x600(即图2中的M=800,N=600)。再回头来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。
那么这9个anchors是做什么的呢?借用Faster RCNN论文中的原图,如图7,遍历Conv layers计算获得的feature maps,为每一个点都配备这9种anchors作为初始的检测框。这样做获得检测框很不准确,不用担心,后面还有2次bounding box regression可以修正检测框位置。
在这里插入图片描述
解释一下上面这张图的数字。

  1. 在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions
  2. 在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息(猜测这样做也许更鲁棒?反正我没测试),同时256-d不变
  3. 假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates
  4. 补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。
    分类分支cls:2k个256-d卷积的卷积核卷积之后,最后输出2k个数。由于cls是分类分支,由此2对应的是分为两类:该区域到底有没有物体:(object, non-object),也就是分类fg anchors和bg anchors
    边框回归分支reg:4k个256-d卷积核卷积,最后输出4k个数。这里的4是每一个边框的4个偏移量,用于bbox regression。后面会提到。在这里插入图片描述
    那么Anchor一共有多少个?原图800x600,VGG下采样16倍,feature map每个点设置9个Anchor,所以:

ceil(800/16) X ceil(600/16) X 9=50 X 38 X 9=17100

其中ceil()表示向上取整,是因为VGG输出的feature map size= 50*38

softmax 判定fg anchors和bg anchors

一副MxN大小的矩阵送入Faster RCNN网络后,到RPN网络变为(M/16)x(N/16),不妨设 W=M/16,H=N/16。在进入reshape与softmax之前,先做了1x1卷积
在这里插入图片描述
首先接一个1 X 1 X 18的卷积层,输出为W X H X 18。这里的18是因为anchors的类别为9,每一个anchor可能为fg或者是bg,因此对应了18-d
那么为何要在softmax前后都接一个reshape layer?其实只是为了便于softmax分类

bounding box regression原理

如图所示绿色框为飞机的Ground Truth(GT,标注的正确值),红色为提取的foreground anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得foreground anchors和GT更加接近。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对proposals进行bbox regression

在这里插入图片描述
图中为什么是36的原因是,因为有9个anchors,每一个anchors有四个回归量,因此是输出图像为W X H X 36

Proposal Layer

Proposal Layer负责综合所有回归量和foreground anchors,计算出精准的proposal,送入后续RoI Pooling Layer。
Proposal Layer forward(caffe layer的前传函数)按照以下顺序依次处理:

  1. 生成anchors,利用[d_{x}(A),d_{y}(A),d_{w}(A),d_{h}(A)]对所有的anchors做bbox regression回归(这里的anchors生成和训练时完全一致)
  2. 按照输入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的foreground anchors。
  3. 限定超出图像边界的foreground anchors为图像边界(防止后续roi pooling时proposal超出图像边界)
  4. 剔除非常小(width<threshold or height<threshold)的foreground anchors
  5. 进行nonmaximum suppression
  6. 再次按照nms后的foreground softmax scores由大到小排序fg anchors,提取前post_nms_topN(e.g. 300)结果作为proposal输出。
    RPN网络总结起来就是:
    生成anchors -> softmax分类器提取fg anchors -> bbox reg回归fg anchors -> Proposal Layer生成proposals
    接下来介绍学习ROI Pooling

ROI Pooling

先来看一个问题:对于传统的CNN(如AlexNet,VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。有2种解决办法:

-从图像中crop一部分传入网络
-将图像warp成需要的大小后传入网络
在这里插入图片描述
ROI Pooling过程:
proposal是对应MxN尺度的,所以首先使用spatial_scale参数将其映射回(M/16)x(N/16)大小的feature maps尺度;之后将每个proposal水平和竖直分为pooled_w和pooled_h份,对每一份都进行max pooling处理。这样处理后,即使大小不同的proposal,输出结果都是 大小,实现了fixed-length output(固定长度输出)。
在这里插入图片描述


Classification

Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。Classification部分网络结构如图
在这里插入图片描述
从PoI Pooling获取到7x7=49大小的proposal feature maps后,送入后续网络,可以看到做了如下2件事:

-通过全连接和softmax对proposals进行分类,这实际上已经是识别的范畴了
-再次对proposals进行bounding box regression,获取更高精度的rect box
转载自:https://zhuanlan.zhihu.com/p/31426458

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R-CNN、Fast R-CNNFaster R-CNN是目标检测领域的三个重要算法,用于在图像中检测和定位物体。 1. R-CNN(Region-based Convolutional Neural Networks)是一种基于区域的卷积神经网络方法。它首先在输入图像中生成候选区域,然后对每个候选区域进行卷积特征提取,并使用支持向量机(SVM)进行分类。最后,使用回归器对候选区域进行边界框的微调。R-CNN的主要缺点是速度较慢,因为每个候选区域都需要独立地进行卷积特征提取和分类。 2. Fast R-CNN是对R-CNN的改进。它引入了RoI池化层(Region of Interest pooling),可以在整个图像上共享卷积特征提取,从而大大提高了速度。Fast R-CNN首先对整个图像进行卷积特征提取,然后根据候选区域的位置信息,在卷积特征图上进行RoI池化,将每个候选区域映射为固定大小的特征向量。最后,通过全连接层进行分类和边界框回归。 3. Faster R-CNN是对Fast R-CNN的进一步改进,主要改进了候选区域的生成过程。Faster R-CNN引入了一个称为Region Proposal Network(RPN)的网络,用于生成候选区域。RPN通过在卷积特征图上滑动一个小窗口,预测窗口内是否包含物体以及物体的边界框。然后,这些候选区域被输入到Fast R-CNN中进行分类和边界框回归。Faster R-CNN通过共享卷积特征提取和引入RPN网络,进一步提高了检测速度和准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值