faster-rcnn论文笔记

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks论文笔记

- R-CNN,Fast-RCNN,Faster-RCNN的区别

- 三种结构的区别

首先RCNN的提出是为了分类,提取特征框用的是SS方法,其主要的特点就是在整张图上去提取特征框,而它的时间的消耗也就不用说了,并且之后提取出的特征用的是低级分类器SVM,分类和regression的回归是分开做的,那这样做训练步骤繁琐(微调网络+训练SVM+训练bbox),针对其中的问题,fast-rcnn提出将分类和回归一起做,提出了ROI Pooling,SPP-Net的SPP是pooling成多个固定尺度,而RoI只pooling到一个固定的尺度,那么后面就可以直接接两个并列的全连接层,同时进行分类和回归,而今天要讲的Faster-rcnn考虑到为什么提取特征框非要用ss方法呢,为什么不在一个网络中去得要特征图,以前得到特征图的时间都是不计的,所以其实实时性不好,针对这个问题,,提出了Region Proposal Networks(RPN)网络来生产特征框,大大提高了速度,解决了最先进的检测系统中的计算瓶颈。

- Faster-RCNN

原文结构图
由论文中原图可以看出,其结构就是在提取的特征图后接了一层RPN网络用于提取特征框,而一部分特征图和提取出来的特征框一起送入Roi pooling层,去得到分类和概率。下面给一个详细的结构图
详细Faster-Rcnn结构
(1)对任意大小的图片输入,放缩到固定大小M*N
(2)Conv层:
从图中可以看到,VGG16的结构就是13个卷接层,13个relu层(因为relu可以防止最后的反向传播让其倒数为 0),4个pooling层。
所有的conv层都是:kernel_size=3,pad=1
所有的pooling层都是:kernel_size=2,stride=2
这样做的好处是什么,卷积的时候我们不改变其大小(还是M*N),而池化我们将其降为一半,那么经过4个pooling层,我们得到的特征图大小为(M/2^4*N/2^4*256),因为我们这里是用的是ZF网络,如果是VGG16,那么通道数为512。
3*3卷积的好处
(3)Region Proposal Network。
下面我们来看看具体RPN是如何做的:
RPN结构
如图1所示,我们将特征图在一个3*3的滑动窗口上滑动,滑动完成会得到256张特征图(对应ZF网络),而每张特征图上的每一个点就是我们所说的anchor(锚点),而图中的256-d是一个映射的低维特征向量,那这个锚点的作用是什么?以前的SS方法是在整张图上提取特征框,而我们这里则是在特征图上去滑窗,得到锚点,那么这个锚点其实就是用的spp-net的原理(spp-net是把不同尺寸映射回固定大小),那我们就通过锚点映射回原图(M*N),那么提取的特征框不就正好相当于在原图上去提取特征框了嘛!既然提到anchors,下面我们来具体说一下,anchors是用来做什么的。
图1图2图3
如图1我们可以看到,每一个滑窗中心的点都对应k个anchor boxes,这就是大小比例都不一样的候选框,框的当然就是原图的目标,这个k我们让它为9,为什么?这是因为,如图2,我们得到的anchor就是一个矩阵,矩阵的每一个数,都是对应成比例的,我们通过实验,发现这三种大小(128*128,256*256,512*512)对应这三种比例(1:1,1:2,2:1)效果是最好的,那么按这样的要求,我们便得到了9种大小规模的anchor boxes,如图3,我们能清楚的看到特征图中心的锚点,对应的框是什么样的,而其他位置的框,就是按照一定的平移去得到的。再回到图1,我们看到从256-d分成了两流,分别是cls layer和reg layer,这个2k其实就是我这个cls layer做的就是判断是foreground还是background(即有没有目标),总共有k个anchors,那么就是2k了,那么reg layer做的是什么呢?我们要知道我们得到foreground的anchor boxes并不是很准确,用下图的例子来说
这里写图片描述
如图所示,红框的特征框就算分类器能识别它是个飞机,但是我们设了一个阈值,而Region Proposal和Ground Truth的IOU的值小于我们的阈值我们直接就不要这个特征框了(顺便提一下,IOU就是特征框与GT的交集除以并集的商),这里我们用了NMS(非极大抑制去筛选),那么既然这个框不太准,我们要做的就是修正它,让它尽可能去贴近GT,那么得到特征框也会越贴近标记框,所以reg layer做的就是这工作,不断的去修正region proposal的大小。
接着再具体说一下每一部分都做的什么:
cls layer
这一部分做的就是判断是否有目标,1*1的卷积的作用是什么?首先我们得知道,如果是单通道,1*1的卷积就相当于按比例缩放,也就是给输入数据乘以一个系数;如果是多通道的,1*1的卷积会让通道数改变,比如我输入是M*N*6,我用1*1的卷积核做卷积,要得到M*N*5的尺寸,我们要做的就是拿五个这样1*1的做卷积,再之后进行融合,变成M*N*5,也就改变了通道数,而我们这里要得到18个通道,是为了和之前的9个anchor boxes相对应,2个可能性(是或者不是),也就是18的由来了,第一个reshape是为了得到sorfmax能直接使用的维度,之后我们得再变回M*N尺寸,为了送入Pooling层。
这里写图片描述
这是下一部分,它所做的就是修正位置啦,36=4*9,这里相当于feature maps每个点都有9个anchors,每个anchors又都有4个用于回归的[dx(A),dy(A),dw(A),dh(A)]变换量,也就好理解了吧。
(4)Proposal Layer层到底做了什么?
Proposal Layer层负责综合所有[dx(A),dy(A),dw(A),dh(A)]变换量和foreground anchors,计算出精准的proposal,送入后续RoI Pooling Layer:
1.我们生成anchors,利用[dx(A),dy(A),dw(A),dh(A)]对所有的anchors做boding box regression做回归
2.按照输入的foreground softmax scores由大到小排序anchors,提取前6000(原文是这么取的)个anchors,即提取修正位置后的foreground anchors。
3.利用im_info将fg anchors从MxN尺度映射回PxQ原图,判断fg anchors是否大范围超过边界,剔除严重超出边界fg anchors。
4.进行NMS(nonmaximum suppression,非极大值抑制,再次按照nms后的foreground softmax scores由大到小排序fg anchors,提取前300个结果作为proposal输出。
按照如上的步骤,我们的计算量已经变得相当小了。
(5)RoI pooling层
回顾之前所说的,有两部分流入pooling层,那为什么需要这个pooling层呢?
我们得到的proposal不是固定大小的,所以我们需要输入这个层中得到固定大小尺寸的输出,具体怎么做的看下图
Roi Pooling
通过这个图,我们可以看到,我们能把它变成7*7固定大小的矩阵。
(6)Classification
Classification

- 结果如何

  • 这里写图片描述
    论文中做了6组实验,通过这些实验证明:有共享参数的,用了NMS的,有cls和有reg的效果都很好,速度和准确率都有提高,同时不同的网络结构,效果也是不一样的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值