R-CNN系列

来源:互联网 发布:js判断时间间隔 编辑:程序博客网 时间:2024/06/05 18:15

原帖地址: http://blog.csdn.net/ture_dream/article/details/52763694

AlexNet  


1、简介

    2012年AlexNet成为DeepingLearning的历史突破,得益于Relu和Dropout的提出,大数据训练和GPU并行计算。    
    本文训练了一个深度卷积神经网络(AlexNet),将ILSVRC-2010中120万张高分辨率图像数据分为1000类。测试结果,Top-1和Top-5的错误率分别为37.5%和17%,优于当时最优的水平。

2、网络基本构成及方法

        60millon个参数,650thousand个神经元,包含5个卷积层,其中有几个层后跟着max-pooling层,有3个全连接层和1000-waysoftmax。为使训练更快,文章采用非饱和神经元(RELU非线性特征),包括了大量不常见和新的特征来提升性能,减少训练时间。并利用了两个高效的GPU应用进行卷积运算加速。在全连接层中,为避免过拟合,文章采用了一种叫做“dropout”的方法。
       网络大小主要受限于GPU的内存和训练时间。实验证明,本网络在有两个GTX 580 3GB GPU的机器上训练了5-6天。
       AlexNet网络结构如下图所示:

3、具体改进方法部分

3.1  ReLU非线性

    激活函数,用在各个卷积层和全连接层输出位置。激活函数是深度网络非线性的主要来源。通常包括:simgoid(f(x)=(1+e-x)-1)和tanh(f(x)=sinhx/coshx,图形类似于arctanx,但是值域是[-1,1])作为激活函数。

    用ReLU(f(x)=max(0,x))作为激活函数的原因是:加速收敛、解决了梯度消失问题。

3.2  在多个GPU上训练

     使用两块GTX 580 3GB GPU,在每个GPU上放1/2的神经元,但只有某些层才能进行GPU间的通信,在连接与不连接的平衡中找到性能与准确的平衡点。从而减少了训练时间。

3.3  局部响应归一化

     局部响应归一化层完成一种“临近抑制”操作,对局部输入区域进行归一化。本质上,这个层也是为了防止激活函数的饱和的,用在部分ReLU层后。

     从试验结果看,LRN操作可以提高网络的泛化能力,将错误率降低了大约1个百分点。

3.4  重叠池(pooling)

    传统池层的缩放因子和步长相等,重叠池缩放因子大于步长,这样池滑动卷积过程中就产生了重叠。

    从试验结果看,作者认为Overlapping之后,能够减少网络的过拟合。将Top-1和Top-5的错误率分别降低了0.4%和0.3%。

3.5  总体结构

    网络总共有8层(每一层都带有weight),前五层是卷积层,后三层是全连接层。最后一个全连接层,输入到一个1000-way softmax分类器上,产生一个在1000类别上一个分布。

    局部反应归一化连接在第一、第二卷积层后面;最大池层连接在局部反应归一化层和第五卷积层后面;ReLU非线性公式在每个卷积层和全连接层都有应用。

4、降低过拟合

4.1  数据增强

    1、将图片大小统一变为224*224,通过提取图片的5个224*224切片(中间和四角)和它们的水平翻转来做出预测,预测结果为十次预测的平均值。

    2、第二种数据增强的方式为改变训练图像RGB通道的强度,对RGB空间做PCA,然后对主成分做一个(0,0.1)的高斯扰动。结果让错误率又下降了百分一。

4.2  Dropout

    将某些层隐藏,将50%的神经元输出为0,即将这50%的层隐藏。这些隐藏的神经元不会参加CNN的forward过程,也不会参加backpropagation过程,这些神经元暂时不参加运算,但可以保留。

    dropout可以避免深度网络过拟合,但dropout也使达到收敛的迭代次数变为了原来的2倍。





     R-CNN学习                     

1、简介

       R-CNN是深度学习在目标检测任务上的应用,其中R对应于“Region(区域)”。整体框架与传统方法相似。

       本文两个关键点是:1、使用候选窗口,并用CNN对其进行特征提取;2、样本缺乏时,使用大量辅助样本预先训练,再用自己样本进行微调。

        整体框架大致为:生成候选窗口(Selective Search),进行特征提取(CNN),对窗口进行分类(SVM),边框回归(Bounding box regression)。


R-CNN目标检测系统框图

2、生成候选窗口(Selective Search)

       使用Selective Search方法生成候选窗口,抛弃了滑动窗口范式(传统的SIFT,HOG等方法)。

        Selective Search方法先基于各种颜色特征将图像划分为多个小块,然后自底向上地对不同的块进行合并,在这个过程中,合并前后的每一个块都对应于一个候选窗口,最后挑出最有可能包含待检测目标的窗口作为候选窗口。

         与图像分类区别:图像分类是把输入图像作为样本,依次进行处理;本文是针对一个输入图像,再用SS方法生成2000个左右的候选区域,几乎涵盖了图像中物体可能出现所有位置。

3、特征提取及分类

3.1  训练

       有监督的预训练:当样本缺乏时,用ILSVRC-2012作为辅助样本训练集,进行预训练。

        特定领域微调:用自己的样本,使用随机梯度下降法对预训练的CNN网络进行微调。

        用CNN训练结果训练SVM分类器(二分类),这样我们的SVM分类器就训练好了。

3.2  特征提取及分类

       对于提取的候选窗口,用CNN提取特征。CNN网络模型包含5个卷积层,2个全连接层。

        先将候选窗口图像尺寸变为227*227,在对每个图像进行扭曲,最后输入到CNN模型中,得到提取的特征值。

        将提取的特征值输入到SVM分类器中,得到分类结果。

4、边框回归(Bounding box regression)

        边框回归指的是在给定窗口的基础上去预测真实检测框的位置和大小,也就是说,有了候选窗口之后,如果其被判别成了一个人脸窗口,那就会进一步被调整以得到更加精确的位置和大小——和待检测目标贴合得更好。边框回归一方面提供了一个新的角度来定义检测任务,另一方面对于提高检测结果的精确度有比较显著的作用。



Spatial pyramid pooling (SPP)-net (空间金字塔池化)笔记                     



1、简介

空间金字塔池化,使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量),送入全连接层。整体框架大致为:输入图像,卷积层提取特征,空间金字塔池化提取固定大小特征,全连接层。

具体的流程图如下:

 

2、具体算法的大体流程

    首先通过选择性搜索(selective search),对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样

特征提取阶段。这一步就是和R-CNN最大的区别了,同样是用卷积神经网络进行特征提取,但是SPP-Net用的是金字塔池化。这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度是大大地快啊。江湖传说可一个提高100倍的速度,因为R-CNN就相当于遍历一个CNN两千次,而SPP-Net只需要遍历1次。

最后采用SVM算法进行特征向量分类识别,和R-CNN一样。

3、关键步骤解释:

3.1 如何在feature maps中找到原始图片中候选框的对应区域:

候选框是通过一整张原图片进行检测得到的,而feature maps的大小和原始图片的大小是不同的,feature maps是经过原始图片卷积、下采样等一系列操作后得到的。

直接利用计算的公式:假设(x,y)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系:

(x,y)=(S*x,S*y)

其中S的就是CNN中所有的步长(strides)的乘积,反过来,通过(x,y)坐标求解(x,y),那么计算公式如下:

x=x/S+1

输入原图片检测到的windows,可以得到每个矩形候选框的四个角点,然后再根据公式:

LeftTop:                   x=x/S+1

RightBottom:             x=x/S-1

3.2 空间金字塔池化如何提取特征,得到固定大小的特征向量:

我们假设一个很简单两层网络:输入一张任意大小的图片,假设其大小为(w,h),输出21个神经元。也就是我们输入一张任意大小的特征图的时候,我们希望提取出21个特征。空间金字塔特征提取的过程如下:

 

    如上图所示,当我们输入一张图片的时候,我们利用不同大小的刻度,对一张图片进行了划分。上面示意图中,利用了三种不同大小的刻度(4*4,2*2,1*1),对一张输入的图片进行了划分,最后总共可以得到16+4+1=21个块,我们即将从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。

原文不知道在哪找的了,我加一点,原文提到,ZF模型每个块map到256维,所以上面fixed length representation=21*256。

    第一张图片,我们把一张完整的图片,分成了16个块,也就是每个块的大小就是(w/4,h/4);

    第二张图片,划分了4个块,每个块的大小就是(w/2,h/2);

    第三张图片,把一整张图片作为了一个块,也就是块的大小为(w,h)

    空间金字塔最大池化的过程,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出神经元。最后把一张任意大小的图片转换成了一个固定大小的21维特征(当然你可以设计其它维数的输出,增加金字塔的层数,或者改变划分网格的大小)。上面的三种不同刻度的划分,每一种刻度我们称之为:金字塔的一层,每一个图片块大小我们称之为:windows size了。如果你希望,金字塔的某一层输出n*n个特征,那么你就要用windows size大小为:(w/n,h/n)进行池化了。




         Fast R-CNN笔记                     



1、简介

Fast R-CNN将整个图片送入网络时同时将object proposal(这里称为RoI,一张图片中得到约2k)也送入网络,每一个RoIRol pooling layer(相当于一个单层的SPP layer)统一到一个固定大小的feature map,然后通过两个全连接层(FCs)将其映射到一个特征向量。这个特征分别share到两个新的全连接,连接上两个优化目标,第一个是softmax probabilities,优化目标是分类;第二个是bounding-box regression,优化目标是精确边框位置。

Fast R-CNN目标检测系统框图:

 

2Fast R-CNN系统结构和训练

2.1  Rol pooling layer

Rol pooling layer的作用主要有两个,一个是将image中的rol定位到feature map中对应区域(patch),另一个是用一个单层的SPP layer将这个feature map patch下采样为大小固定的feature再传入全连接层。(具体实现过程可参考:spatial pyramid pooling (Spp)-net(空间金字塔池化)笔记)

2.2  Fine-tuning for detection

空间金字塔池卷积层(SPP)无法进行权值更新,Fast R-CNN使用单层SPP layer。利用随机梯度下降法小批量分层采样,同一张图片里面的ROIregion of interest)在前向传播和反向传播中,计算和存储共享,从而降低了计算,可以实现权值更新。

2.3  Multi-task loss

FRCN有两个loss,以下分别介绍。

对于分类loss,是一个N+1路的softmax输出,其中的N是类别个数,1是背景,使用softmax分类器。对于回归loss,是一个4xN路输出的bounding-box regressor(有4个元素(x,y,w,h),左上角坐标(x,y),宽w,高h),也就是说对于每个类别都会训练一个单独的regressor

在每个标记的ROI中,用一个Multi-task损失函数L,共同训练分类和边框回归:

 

其中,pROIsoftmax输出的离散概率分布;tbbox regressor输出偏移值,v表示其真实值,tu表示其预测值;LCls(p,u)=-logpuLloc(tu,v)为边框回归损失函数:

 

这样设置的目的是想让loss对于离群点更加鲁棒,控制梯度的量级使得训练时不容易跑飞。

2.4  Truncated SVD for faster detection

Fast R-CNN利用了一种名为SVD的矩阵分解技术,其作用是将一个大的矩阵(近似)拆解为三个小的矩阵的乘积,使得拆解之后三个矩阵的元素数目远小于原来大矩阵的元素数目,从而达到在计算矩阵乘法时降低计算量的目的,通过将SVD应用于全连接层的权值矩阵,处理一张图片所需要的时间能够降低30%

 

如上图,参数数量从m×n减少到t×(m+n)t远小于min(m,n)



Faster R-CNN学习                     



1、简介

       Faster R-CNN(其中R对应于“Region(区域)” )是基于深度学习R-CNN系列目标检测最好的方法。使用VOC2007+2012训练集训练,VOC2007测试集测试mAP达到73.2%,目标检测的速度可以达到每秒5帧。

       技术上将RPN网络和Fast R-CNN网络结合到了一起,将RPN获取到的proposal直接连到ROI pooling层,是一个CNN网络实现端到端目标检测的框架。

2、R-CNN系列方法对比

3、Fast R-CNN目标检测系统框图


4、Faster R-CNN

卷积阶段


  RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN网络结构图如上所示(ZF模型:256维),假设给定600*1000的输入图像,经过卷积操作得到最后一层的卷积feature map(大小约为40*60),最后一层卷积层共有256个feature map。

Region ProposalNetwork(RPN)


  在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,那么这个3*3的区域卷积后可以获得一个256维的特征向量。因为这个3*3的区域上,每一个特征图上得到一个1维向量,256个特性图即可得到256维特征向量。

       3*3滑窗中心点位置,对应预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的regionproposal,这种映射的机制称为anchor,产生了k=9个anchor。即每个3*3区域可以产生9个region proposal。所以对于这个40*60的feature map,总共有约20000(40*60*9)个anchor,也就是预测20000个region proposal。

       后边接入到两个全连接层,即cls layer和reglayer分别用于分类和边框回归。clslayer包含2个元素,用于判别目标和非目标的估计概率。reglayer包含4个坐标元素(x,y,w,h),用于确定目标位置。cls:正样本,与真实区域重叠大于0.7,负样本,与真实区域重叠小于0.3。reg:返回区域位置。

      最后根据region proposal得分高低,选取前300个region proposal,作为Fast R-CNN的输入进行目标检测。

5、训练4步阶段:

(1)使用在ImageNet上预训练的模型初始化RPN网络参数,微调RPN网络;

(2) 使用(1)中RPN网络提取region proposal训练Fast R-CNN网络,也用ImageNet上预训练的模型初始化该网络参数;(现在看来两个网络相对独立)

(3) 使用(2)的Fast R-CNN网络重新初始化RPN, 固定卷积层进行微调,微调RPN网络;

(4) 固定(2)中Fast R-CNN的卷积层,使用(3)中RPN提取的region proposal对Fast R-CNN网络进行微调。





1. Girshick, R.B.: Fast R-CNN. In: ICCV. (2015) 1440–1448 

            论文地址:点击打开链接

            code:  https://github.com/rbgirshick/fast-rcnn


2. Ren, S., He, K., Girshick, R., Sun, J.: Faster r-cnn: Towards real-time object  detection with region proposal networks. In: NIPS. (2015)           

            论文地址: 点击打开链接

            code:  https://arxiv.org/pdf/1506.01497v3.pdf

3. Rich feature hierarchies for accurate object detection and semantic segmentation (RCNN)

            论文地址:点击打开链接

            作者的很炫酷的幻灯片:点击打开链接

4. He, K., Zhang, X., Ren, S., Sun, J.: Spatial pyramid pooling in deep convolutional  networks for visual   recognition.  In: ECCV. (2014) 346–361

            论文地址(这个找了好久):点击打开链接

            PPT:http://www.image-net.org/challenges/LSVRC/2014/slides/sppnet_ilsvrc2014.pdf

                   code:  https://github.com/ShaoqingRen/SPP_net

5. 知乎上的讨论:点击打开链接

原创粉丝点击