从R-CNN到Faster R-CNN

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从R-CNN到Faster R-CNN相关的知识,希望对你有一定的参考价值。

参考技术A 论文: 《Rich feature hierarchies for accurate object detection and semantic segmentation》

发表年份:2013

RCNN(Regions with CNN features)是将CNN用到目标检测的一个里程碑,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。

Region proposal是一类传统的候选区域生成方法,论文使用 selective search  生成大约2k个候选区域(先用分割手段将图片完全分割成小图,再通过一些合并规则,将小图均匀的合并,经过若干次合并,直到合并成整张原图),然后将proposal的图片进行归一化(大小为217*217)用于CNN的输入。

对每个Region proposal使用CNN提取出一个4096维的特征向量

3.1 CNN提取的特征输入到SVM分类器中,对region proposal进行分类,与 ground-truth box的IoU大于0.5的为正样本,其余为负样本。论文中每个图片正样本个数为32负样本个数为96。得到所有region proposals的对于每一类的分数,再使用贪心的非极大值抑制方法对每一个SVM分类器类去除相交的多余的框。

3.2 使用一个线性回归器对bounding box进行修正,proposal bounding box的大小位置与真实框的转换关系如下:

综上,整个网络结构如下:

R-CNN在当年无论是在学术界还是工业界都是具有创造性的,但是现在来看RCNN主要存在下面三个问题:

1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;

2)针对传统CNN需要固定尺寸(217*217)的输入图像,crop/warp(归一化)产生物体截断或拉伸,丧失或者改变了图片本身的信息;

3)每一个ProposalRegion都需要进入CNN网络计算,上千个Region存在大量的范围重叠,重复的CNN特征提取导致巨大的计算浪费。

论文: 《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》

发表年份:2015

既然CNN特征提取如此耗时,为什么还要对每个Region proposal进行特征提取,而不是整体进行特征提取,然后在分类之前做一次Region的截取呢,于是就诞生了SPP-Net。

1.解决了CNN需要固定大小输入的变换后导致图片信息丢失或者变化的问题

2.对于一张图,只需要进行一次的特征提取运算,避免了R-CNN中特征重复计算的问题

CNN为什么需要固定大小的输入?

R-CNN中会对图片缩放成217*217的固定大小,从而导致物体发生形变(如下图的上部分所示)。与前面不同,SPP-Net是加在最后一个卷积层的输出的后面,使得不同输入尺寸的图像在经过前面的卷积池化过程后,再经过SPP-net,得到相同大小的feature map,最后再经过全连接层进行分类

以AlexNet为例,经CNN得到conv5输出的任意尺寸的feature map,图中256-d是conv5卷积核的数量。将最后一个池化层pool5替换成SPP layer,将feature map划分成不同大小的网格,分别是`4x4`,`2x2`,`1x1`,每个网格中经过max pooling,从而得到4x4+2x2+1x1=21个特征值,最后将这21个特征值平铺成一个特征向量作为全连接层的输入,这种方式就是 空间金字塔池化 。

与R-CNN不同,SPP-Net中是将整张图片进行一次特征提取,得到整张图片的feature map,然后对feature map中的候选区域(RoIs)经过空间金字塔池化,提取出固定长度的特征向量进入全连接层。

原图候选区域与特征图上的RoIs的转换流程:

综上,整个网络结构如下图。SPP-Net相比R-CNN做了很多优化,但现在来看依然存在一些问题,主要如下:

论文: 《Fast R-CNN》

发表年份:2015

Fast R-CNN是对R-CNN的一个提升版本,相比R-CNN,训练速度提升9倍,测试速度提升213倍,mAP由66%提升到66.9%

主要改进点如下:

多任务损失函数(Multi-task Loss):

        Fast R-CNN将分类和边框回归合并,通过多任务Loss层进一步整合深度网络,统一了训练过程。分为两个损失函数:分类损失和回归损失。分类采用softmax代替SVM进行分类,共输出N(类别)+1(背景)类。softmax由于引入了类间竞争,所以分类效果优于SVM,SVM在R-CNN中用于二分类。回归损失输出的是4*N(类别),4表示的是(x,y,w,h分别表示候选框的中心坐标和宽、高)。

SVD对全连接层进行分解:

        由于一张图像约产生2000个RoIs,将近一半多的时间用在全连接层计算,为了提高运算速度,使用 SVD(奇异值分解) 对全连接层进行变换来提高运算速度。一个大的矩阵可以近似分解为三个小矩阵的乘积,分解后的矩阵的元素数目远小于原始矩阵的元素数目,从而达到减少计算量的目的。通过对全连接层的权值矩阵进行SVD分解,使得处理一张图像的速度明显提升。

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

发表年份:2016

        SPP-Net和Fast R-CNN都有一个非常耗时的候选框选取的过程,提取候选框最常用的SelectiveSearch方法,提取一副图像大概需要2s的时间,改进的EdgeBoxes算法将效率提高到了0.2s,但是还是比较耗时。

        Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box应对目标形状的变化问题(anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal)

Region Proposal Network:

        RPN的核心思想是候选框的提取不在原图上做,而是在feature map上做,这意味着相比原图更少的计算量。在Faster R-CNN中,RPN是单独的分支,通过RPN提取候选框并合并到深度网络中。

多尺度先验框:

RPN网络的特点在于通过滑动窗口的方式实现候选框的提取,每个滑动窗口位置生成9个候选窗口(不同尺度、不同宽高),提取对应9个候选窗口(anchor)的特征,用于目标分类和边框回归,与FastRCNN类似。

anchor的生成规则有两个:调整宽高比和放大。如下图所示,假设base_size为16,按照1:2,1:1,2:1三种比例进行变换生成下图上部分三种anchor;第二种是将宽高进行三种倍数放大,2^3=8,2^4=16,2^5=32倍的放大,如16x16的区域变成(16*8)*(16*8)=128*128的区域,(16*16)*(16*16)=256*256的区域,(16*32)*(16*32)=512*512的区域。

训练过程中,涉及到的候选框选取,选取依据如下:

从模型训练的角度来看,通过使用共享特征交替训练的方式,达到接近实时的性能,交替训练方式为:

Faster R-CNN实现了端到端的检测,并且几乎达到了效果上的最优,有些基于Faster R-CNN的变种准确度已经刷到了87%以上。速度方面还有优化的余地,比如Yolo系列(Yolo v1/v2/v3/v4)。对于目标检测,仍处于一个探索和高度发展的阶段,还不断有更优的模型产生。

一个门外汉的理解 ~ Faster R-CNN

 首先放R-CNN的原理图

显然R-CNN的整过过程大致上划分为四步:

  1.输入图片

  2.生成候选窗口

  3.对局部窗口进行特征提取(CNN)

  4.分类(Classify regions)

而R-CNN的缺陷就在于对每个候选窗口都要进行特征提取,造成了计算时间成本很大。

再放Fast R-CNN的原理图

Fast R-CNN的提高速度的关键就在于将proposal的region映射到CNN的最后一层conv layer的feature map上,意味着一张图片只需要进行一次特征提取。

而既然R-CNN系列已经发展到了Faster,所以我选择直接用Faster R-CNN,而且Faster可以直接做到实时检测目标(速度能达到在视频中实时检测目标)。

且Faster R-CNN的最大改变就是不使用selective search,而是通过所谓的Region ProposalNetwork(RPN),即通过卷积神经网络直接产生region proposal

 RPN的作用就是:

(1) 输出proposal的位置(坐标)和score 

(2) 将不同scale和ratio的proposal映射为低维的feature vector 
(3) 输出是否是前景的classification和进行位置的regression

以上是关于从R-CNN到Faster R-CNN的主要内容,如果未能解决你的问题,请参考以下文章

R-CNNSPPnetFast R-CNNFaster R-CNN的对比

R-CNNFast R-CNNFaster R-CNN算法对比

R-CNNFast R-CNNFaster R-CNN

目标检测梳理:基于深度学习的目标检测技术演进:R-CNNFast R-CNNFaster R-CNN

(转)基于深度学习的目标检测技术演进:R-CNNFast R-CNNFaster R-CNN

Faster R-CNN,YoloV1,YoloV2