美文网首页
从R-CNN到Faster R-CNN

从R-CNN到Faster R-CNN

作者: _一叶_知秋_ | 来源:发表于2020-05-31 22:00 被阅读0次

    R-CNN

    简介

    论文:《Rich feature hierarchies for accurate object detection and semantic segmentation》

    作者:Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik

    发表年份:2013

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

    原理

    rcnn原理图

    1.生成候选区域

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

    2.CNN特征提取

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

    3.分类与边界回归

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

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

    Region proposal bounding box 与 ground-truth box 转换

    总结

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

    网络结构

    当年的效果

    2013年rncc效果对比

    现在看R-CNN的问题

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

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

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

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


    SPP-Net

    简介

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

    作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun

    发表年份:2015

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

    解决问题

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

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

    原理-问题1

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

    卷积层是不需要输入固定大小的图片,而且还可以生成任意大小的feature map,只是全连接层需要固定大小的输入。因此,固定输入大小约束仅来源于全连接层

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

    ssp vs crop/warp

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

    spp 原理

    原理-问题2

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

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

    假设(x,y)是原始图像上的坐标点,(\hat{x}  ,\hat{y} )是特征图上的坐标,S是CNN中所有的步长的乘积。

    那么左上角的点转换公式如下:

                                                    \hat{x} =\frac{x}{S}+1 ;
\hat{y} =\frac{y}{S}+1

    右下角的点转换公式为:

                                                  \hat{x} =\frac{x}{S}-1 ;
\hat{y} =\frac{y}{S}-1

    一次特征提取

    总结

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

    1)和RCNN一样,训练过程仍然是隔离的,提取候选框 | 计算CNN特征| SVM分类 | Bounding Box回归独立训练,大量的中间结果需要转存,无法整体训练参数;

    2)SPP-Net在无法同时Tuning在SPP-Layer两边的卷积层和全连接层,很大程度上限制了深度CNN的效果;

    3)在整个过程中,Proposal Region仍然很耗时。

    SPP-Net

    当年的效果

    Detection results (mAP) on Pascal VOC 2007. “ft” and “bb” denote fine-tuning and bounding box regression.

    Fast R-CNN

    论文:《Fast R-CNN》

    作者:Ross Girshick

    发表年份:2015

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

    Fast R-CNN vs R-CNN

    主要改进点如下:

    1.借鉴SPP思路,提出简化版的ROI池化层(使用的是单层),同时加入了候选框映射功能,使得网络能够反向传播,解决了SPP的整体网络训练问题(End to End)

    2. 多任务Loss层:

    A)Softmax代替了SVM,证明了softmax比SVM更好的效果;

    B)Smooth L1 Loss取代Bouding box回归。

    Fast R-CNN结构

    多任务损失函数(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

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

    作者:Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun

    发表年份: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提取候选框并合并到深度网络中。

    fast r-cnn(左),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的区域。

    anchor的生成规则

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

    1)丢弃跨越边界的anchor;

    2)与样本重叠区域大于0.7的anchor标记为前景,重叠区域小于0.3的标定为背景;

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

    1)根据现有网络初始化权值w,训练RPN;

    2)用RPN提取训练集上的候选区域,用候选区域训练FastRCNN,更新权值w;

    3)重复1、2,直到收敛。



    总结

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

    相关文章

      网友评论

          本文标题:从R-CNN到Faster R-CNN

          本文链接:https://www.haomeiwen.com/subject/zcrcdftx.html