DeepLearning历程梳理从LeNet至YOLO2


目录

 

目录

一 LeNet-5

二 AlexNet

三 Network in Network

四 VGGNet

五 GoogLeNet

六 ResNet

七 R-CNN

八 SPP-NET

九 Fast-RCNN

十 Faster-RCNN

十一 YOLO v1

十二 SDD

十三 YOLO v2和YOLO 9000


 

附:所有的网络训练都涉及前向传播和反向传播,详细原理和步骤参见:

前向传播:http://www.cnblogs.com/pinard/p/6489633.html

 

反向传播:http://www.cnblogs.com/pinard/p/6494810.html

 

一 LeNet-5

文献:

 

1998Yann LeCun在论文《Gradient-Based Learning Applied to Document Recognition》中提出,是卷积神经网络的鼻祖。

各种方法在测试集上的错误率

LeNet-5小结:

    ·                  卷积神经网络使用3层架构:卷积、下采样、全连接层

    ·                  使用卷积提取图像空间特征

    ·                  下采样使用了图像平均稀疏性

    ·                  激活函数采用了tanh或者sigmoid函数

二 AlexNet

文献:

2012Hinton在《ImageNet Classification with Deep Convolutional Neural Networks》提出。

优点:

1)引入ReLU,学习速度远远超过传统的饱和非线性的激活函数,如tanhsigmoid

(参考:http://www.cnblogs.com/rgvb178/p/6055213.html

    

2)多GPU训练,显著减少训练/检测时间

3LRNLocal Response Normalization局部响应归一化),提高网络的泛化能力 (此机制能使top-1/5错误率下降了1.4/1.2%

4Overlapping Pooling (重叠池化, Pooling stridePooling Kernel size),在top-1/5上减少了0.4%/0.3%的错误率

5Dropout,是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。Dropout虽然增加了训练时间,但大大推迟了过拟合。(参考:Srivastava N, Hinton G, Krizhevsky A, et al. Dropout: A simple way to prevent neural networks from overfitting[J]. The Journal of Machine Learning Research, 2014, 15(1): 1929-1958.

 

 

 

三 Network in Network

文献:

2013年,Min Lin在《Network-in-network》提出(在卷积后面再跟一个1x1的卷积核对图像进行卷积)。

优点:

1MLP Convolution Layers增强网络局部提取抽象特征和泛化的能力

          

 

例如没有NiN的当前卷积是这样的:3x3 256 [conv] -> [maxpooling],当增加了NiN之后的卷积是这样的:3x3 256 [conv] -> 1x1 256 [conv] -> [maxpooling]

2Global Average Pooling:用来代替传统ConVNetFC。在最后一个feature map层上,对每个feature map分别取均值,然后连接成一个向量后,输入softmax分类器。很大程度上减少参数空间,便于加深网络和训练,有效防止过拟合

四 VGGNet

文献:

2014年《VGGVery deep convolutional networks for large-scale image recognition》提出

基本结构A8个卷基层,3个全连接层,共计11层;

基本结构BAstage2 stage3分别增加一个3*3的卷基层,10个卷积层,总计13

基本结构CB的基础上,stage3stage4stage5分别增加1*1的卷积层,13个卷基层,总计16

基本结构DC的基础上,stage3stage4stage5分别增加3*3的卷积层,13个卷基层,总计16

基本结构ED的基础上,stage3stage4stage5分别增加3*3的卷积层,16个卷基层,总计19

VGG是在从Alex-net发展而来的网络。主要修改一下两个方面

1)更改Filter尺寸为3*31*1;(更深的深度和更小的卷积滤波器尺寸隐式的增强了正则化)

理由:

  • 3*3是最小的能够捕获上下左右和中心概念的尺寸;
  • 两个3*3的卷基层的有限感受野是5*5,三个3*3的感受野是7*7,可以替代大的filter尺寸;
  • 多个3*3的卷基层比一个大尺寸filter卷基层有更多的非线性,使得判决函数更加具有判决性;
  • 多个3*3的卷积层比一个大尺寸的filter有更少的参数;
  • 1*1作用是在不影响输入输出维数的情况下,对输入线进行线性形变,然后通过Relu进行非线性处理,增加网络的非线性表达能力;

 

2multi-scale:在不同尺寸上分别训练/测试,再将结果融合,在结构Ctop-1的错误率减少了1.5%;(每一幅图像单独的[Smin,Smax]中随机选取S来进行尺寸缩放(Smin=256Smax=512)。由于图像中的对象可能是各种尺寸的,因此在训练中采用这种方法是有利的。这同样可以看作是一种尺寸抖动scale jittering的训练集数据增强,使得一个单一模型能够识别各种尺寸的对象。考虑到训练速度,我们使用固定S=384预训练模型相同的配置对一个单尺度模型的所有层进行微调,来训练多尺度模型)

五 GoogLeNet

文献:

2014ILSVRC挑战赛冠军,论文是《Going deeper with convolutions》。

主要的创新在于Inception(参考NIN):

1深度,层数更深,文章采用了22层,为了避免梯度消失问题,googlenet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。除了在最后的全连接计算了losstop_1top_5的准确率之外,还在inception_4a/outputinception_4d/output之后进行池化卷积全连接,继而计算losstop_1top_5

2宽度,总共是9Inception的模块。增加了多种核 1x13x35x5,还有直接max pooling的,但是如果简单的将这些应用到feature map上的话,concat起来的feature map厚度将会很大,所以在googlenet中为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用。

六 ResNet

文献:

2015年《Deep Residual Learning for Image Recognition》提出

 

创新点在于残差网络,如图11所示,其实这个网络的提出本质上是要解决所谓的“退化”问题,即当模型的层次加深时,错误率却提高了。

针对这个问题,作者提出了一个Residual的结构:即增加一个identity mapping(恒等映射),将原始所需要学的函数H(x)转换成F(x)+x,而作者认为这两种表达的效果相同,但是优化的难度却并不相同,作者假设F(x)的优化 会比H(x)简单的多。

使用残差网络的好处:

  • 残差网络解决退化问题。
  • 残差网络可以减轻深层网络的训练负担。
  • 残差网络更容易被优化,并且可以在深度增加的情况下让网络的精度也增加。

七 R-CNN

文献:

2014年《Rich feature hierarchies for Accurate Object Detection and Segmentation》提出。

算法步骤如下:

  • 输入测试图像img
  • selective search方法,在img上提取大约2000个候选区域region proposal
  • 将region proposal 缩放至227*227的img1(wrap),将img1输入至cnn(CNN包括5层卷积和2层全连接层),提取feature map
  • 将每个region proposal的feature map输入至svm,进行分类
  • 将分类好的region proposal进行边框回归,生成预测窗口坐标

上述selective search方法原理步骤参见:

http://blog.csdn.net/mao_kun/article/details/50576003

 

缺点:

  • 缺陷在于计算的时间成本很大(对每个region proposals进行单独的特征提取,本达不到real-time的要求)
  • 进入CNN之前的wrap处理也是存在问题的,这种预处理会使得图像失真,部分信息丢失
  • 训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器
  • SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新

八 SPP-NET

文献:

2015 Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》提出。

SPP-NET是在RCNN的基础上优化而来,创新之处主要为以下两点:

1spatial pyramid pooling结构:上文提到RCNN限制输入必须固定大小,采用warp(或crop)操作难免导致失真、拉伸等问题,因此作者提出了spatial pyramid pooling结构来适应任何大小的图片输入

具体做法是:在conv5层得到的特征图是256层,每层都做一次spatial pyramid pooling。先把每个特征图分割成多个不同尺寸的网格,比如网格分别为4*42*21*1,然后每个网格做max pooling,这样256层特征图就形成了16*2564*2561*256维特征,他们连起来就形成了一个固定长度的特征向量,将这个向量输入到后面的全连接层。

2)上文还提到RCNN2k个候选区域都要经过一次CNN,然而输入图片的某个位置的特征反应在特征图上也是在相同位置。基于这一事实,对某个ROI区域的特征提取只需要在特征图上的相应位置提取就可以了。

具体做法是:一张任意尺寸的图片,在最后的卷积层conv5可以得到特征图。根据Region proposal步骤可以得到很多候选区域,这个候选区域可以在特征图上找到相同位置对应的窗口,然后使用SPP,每个窗口都可以得到一个固定长度的输出。将这个输出输入到全连接层里面。这样,图片只需要经过一次CNN,候选区域特征直接从整张图片特征图上提取。在训练这个特征提取网络的时候,使用分类任务得到的网络,固定前面的卷积层,只微调后面的全连接层

 

优点:                                                         

l  特征提取不再需要每个候选区域都经过CNN,只需要将整张图片输入到CNN就可以了,ROI特征直接从特征图获取。和R-CNN相比,速度提高了百倍。

l  不限制输入尺寸

缺点:

l  CNN中的conv层在微调时是不能继续训练的。

l  无法做到端到端的检测于是就有了Fast R-CNN

九 Fast-RCNN

文献:

2015年《FAST-RCNN》提出

Fast-RCNN在继承RCNN的同时,吸收了SPP-net的特点。Fast-Rcnn方法解决了R-CNN方法的三个问题:

1)测试时速度慢:R-CNN把一张图片分解成大量的region proposal,每个region proposalCNN提取特征。实际上,这样region proposal大量重叠,特征值之间完全可以共享,造成了运算能力的浪费。

Fast-RCNN解决了这个问题,它将整张图片归一化后直接送入CNN,在最后的卷积层输出的feature map上,再提取region proposal使得在此之前的CNN运算得以共享。

 

2R-CNN在训练时,在采用SVM分类之前,把通过CNN提取的特征存储到硬盘上,这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练数据缓慢。

Fast-Rcnn在训练时,只需要将一张图片送入网络,每张图片一次性地提取CNN特征和region proposal训练数据在GPU内存里直接进入loss,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储到硬盘上。

3R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间。Fast-RCNN把类别判断和位置回归统一用深度神经网络实现,不再需要额外存储。

 

算法步骤如下:

 

l  输入一张图片img

l  selective search方法,在img上提取大约2k个候选区域region proposal

l  把整张图片送入CNN,进行特征提取,得到feature map

l  region proposal映射到CNN的最后一层卷积feature map上;

l  通过RoI pooling层(其实是单层的SPP layer)使得每个建议窗口生成固定大小的feature map

l  继续经过两个全连接层(FC)得到特征向量。特征向量经由各自的FC层,得到两个输出向量,第一个是分类,使用softmax,第二个是每一类的bounding box回归。利用SoftMax LossSmooth L1 Loss对分类概率和边框回归(Bounding Box Regression)联合训练(multi-task

上述SoftMax LossSmooth L1 Loss最终目的就是得到各个类别的概率似然值)和Bounding Box Regression具体原理步骤参见论文或

http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/

http://blog.csdn.net/u013832707/article/details/53641055

 

Rol pooling layer的作用主要有两个:

  • 将image中的rol定位到feature map中对应patch
  • 用一个单层的SPP layer将这个feature map patch下采样为大小固定的feature再传入全连接层。

l  cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。

l  bbox_prdict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。

注意本张图的最后,总代价为两者加权和。Fast-RCNN把两个回归的loss进行联合训练。

十 Faster-RCNN

文献:

2016年《Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks》提出。

 

虽然Fast-Rcnn基于R-CNN有了很大的改进,但是Fast-Rcnn仍然是基于Selective Search方法进行提取region proposal,而Selective Search方法提取region proposal的计算是无法用GPU进行的,无法借助GPU的高度并行运算能力,所以效率极低。而且选取2000个候选区域,也加重了后面深度学习的处理压力。那Faster-RCNN在吸取了Fast-RCNN的特点的前提下,采用共享的卷积网组成RPN网络(Region Proposal Network),RPN直接预测出候选区域建议框,数据限定在300个,RPN的预测绝大部分在GPU中完成,而且卷积网和Fast-RCNN部分共享,因此大幅度提升了目标检测的速度。

 

可以看成:Faster-RCNN = RPN(区域生成网络)+ Fast-RCNN,用RPN网络代替Fast-RCNN中的Selective SearchFaster-RCNN的核心思想

算法步骤如下:

l  输入一张图片img

l  RPN方法生成候选区域region proposal,每张图片生成300个;

l  把整张图片送入CNN,进行特征提取,得到feature map

l  region proposal映射到CNN的最后一层卷积feature map上;

l  通过RoI pooling层(其实是单层的SPP layer)使得每个建议窗口生成固定大小的feature map

l  继续经过两个全连接层(FC)得到特征向量。特征向量经由各自的FC层,得到两个输出向量,第一个是分类,使用softmax,第二个是每一类的bounding box回归。利用SoftMax LossSmooth L1 Loss对分类概率和边框回归(Bounding Box Regression)联合训练(multi-task

 

 

 

RPNRegion Proposal Network)的核心思想是使用CNN卷积神经网络直接产生Region Proposal,使用的方法本质上就是滑动窗口(只需在最后的卷积层上滑动一遍),因为anchor机制和边框回归可以得到多尺度多长宽比的Region Proposal

RPN网络也是全卷积网络(FCNfully-convolutional network),可以针对生成检测建议框的任务进行端到端训练(RPN通过反向传播随机梯度下降进行端到端训练,能够同时预测出object的边界和分数。只是在CNN上额外增加了2个卷积层(全卷积层clsreg

①将每个特征图的位置编码成一个特征向量(256dfor ZF and 512d for VGG)。

②对每一个位置输出一个objectness scoreregressedbounds for kregion proposal,即在每个卷积映射位置输出这个位置上多种尺度(3种)和长宽比(3种)的k个(3*3=9)区域建议的物体得分和回归边界

RPN网络的输入可以是任意大小(但还是有最小分辨率要求的,例如VGG228*228)的图片。如果用VGG16进行特征提取,那么RPN网络的组成形式可以表示为VGG16+RPN

RPN详细原理步骤参照论文。

十一 YOLO v1

文献:

2016年《You Only Look Once: Unified, Real-Time Object Detection》提出

YOLO将物体检测作为一个回归问题进行求解:输入图像经过一次网络,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。

YOLO v1检测网络包括24个卷积层和2个全连接层,其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。

YOLO网络借鉴了Network in network网络结构,使用3*3卷积层+1*1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)。

 

YOLO的工作过程分为以下几个过程:

  • 将原图划分为SxS的网格。
  • 每个网格要预测B个bounding boxes,以及C个类别概率Pr(classi|object)。
  • 每个bounding box都包含了5个预测量:(x, y, w, h, confidence),其中(x, y)代表预测box相对于格子的中心,(w, h)为预测box相对于图片的width和height比例,confidence就是上述置信度。于是yolo最终的误差如下:

Loss =λcoord*坐标预测误差 + (含objectbox confidence预测误差 +λnoobj不含objectbox confidence预测误差) + 类别预测误差

=

 

  • 由于输入图像被分为SxS网格,每个网格包括5个预测量:(x, y, w, h, confidence)和一个C类,所以网络输出是SxSx(5xB+C)大小
  • 在检测目标的时候,每个网格预测的类别条件概率和bounding box预测的confidence信息相乘,就得到每个bounding boxclass-specific confidence score:

优点:相比Faster-RCNN更快

缺点:mAP下降

十二 SDD

文献:

2016年《SSD: Single Shot MultiBox Detector》提出。

SSD的特殊之处主要体现在以下3点:

1)多尺度的特征图检测(Multi-scale),如SSD同时使用了上图所示的8*8的特征图和4*4特征图。(Faster RCNNanchor只用在最后一个卷积层,但是在本文中,default box是应用在多个不同层的feature map

2)相比于YOLO v1,作者使用的是卷积层来代替了YOLO v1的全连接层做预测。(如下图所示)

3SSD使用了默认的边界框+12/13/11/21/36个框来做检测aspect ratios

训练过程提出了Smooth L1 loss+softmax loss,将位置定位的准确度值得分置信度融合起来,从而使得对目标物的检测和识别都表现出state-of-the-art的效果。

整体损失函数公式如下,第一项为置信度的损失,第二项为位置的损失,N为匹配的默认边框的数目,a为平衡因子,交叉验证的时候取值为1

优点:运行速度可以和YOLO v1媲美,检测精度可以和Faster RCNN媲美。

缺点:

  1. 需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。
  2. 虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别。作者认为,这是由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。

 

十三 YOLO v2和YOLO 9000

文献:

2016年《YOLO9000:Better, Faster, Stronger》提出。

创新点如下:

  1. Batch Normalization:提高网络的收敛性,同时还消除了对其他形式的正则化(regularization)的依赖。使用Batch Normalization可以从model中去掉Dropout,而不会产生过拟合。通过对YOLO的每一个卷积层增加Batch Normalization,最终使得mAP提高了2%,同时还使model正则化
  2. High resolution classifier YOLO从224*224增加到了448*448,为了适应新的分辨率,YOLO v2的分类网络以448*448的分辨率先在ImageNet上进行Fine Tune,Fine Tune10个epochs,让网络有时间调整他的滤波器(filters),好让其能更好的运行在新分辨率上,还需要调优用于检测的Resulting Network。最终通过使用高分辨率,mAP提升了4%。
  3. Convolution with anchor boxes YOLO2去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在416*416而不是448*448。
  4. Dimension clusters之前Anchor Box的尺寸是手动选择的,所以尺寸还有优化的余地。 为了优化,在训练集(training set)Bounding Boxes上跑了一下k-means聚类,来找到一个比较好的值。
  5. Direct location prediction用Anchor Box的方法,会让model变得不稳定,尤其是在最开始的几次迭代的时候。大多数不稳定因素产生自预测Box的(x,y)位置的时候。按照之前YOLO的方法,网络不会预测偏移量,而是根据YOLO中的网格单元的位置来预测坐标,这就让Ground Truth的值介于0到1之间。而为了让网络的结果能落在这一范围内,网络使用一个 Logistic Activation来对于网络预测结果进行限制,让结果介于0到1之间。 网络在每一个网格单元中预测出5个Bounding Boxes,每个Bounding Boxes有五个坐标值tx,ty,tw,th,t0,他们的关系见下图(Figure3)。假设一个网格单元对于图片左上角的偏移量是cx,cy,Bounding Boxes Prior的宽度和高度是pw,ph,那么预测的结果见下图右面的公式

 

  1. Fine-Grained Features:YOLO修改后的Feature Map大小为13*13,这个尺寸对检测图片中尺寸大物体来说足够了,同时使用这种细粒度的特征对定位小物体的位置可能也有好处。Faster F-CNN、SSD都使用不同尺寸的Feature Map来取得不同范围的分辨率,而YOLO采取了不同的方法,YOLO加上了一个Passthrough Layer来取得之前的某个26*26分辨率的层的特征。这个Passthrough layer能够把高分辨率特征与低分辨率特征联系在一起,联系起来的方法是把相邻的特征堆积在不同的Channel之中,这一方法类似与Resnet的Identity Mapping,从而把26*26*512变成13*13*2048。YOLO中的检测器位于扩展后(expanded )的Feature Map的上方,所以他能取得细粒度的特征信息,这提升了YOLO 1%的性能
  2. Multi-ScaleTrainingYOLO v2每迭代几次都会改变网络参数。每10Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320352…..608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。
  3. Draknet19YOLO v2基于一个新的分类model,有点类似与VGG。YOLO v2使用3*3filter,每次Pooling之后都增加一倍Channels的数量。YOLO v2使用全局平均Pooling,使用Batch Normilazation来让训练更稳定,加速收敛,使model规范化。

最终的model–Darknet19,有19个卷积层和5maxpooling层,处理一张图片只需要5.58 billion次运算,在ImageNet上达到72.9%top-1精确度,91.2%top-5精确度。

  1. Training for detection:网络去掉了最后一个卷积层,而加上了三个3*3卷积层,每个卷积层有1024个Filters,每个卷积层紧接着一个1*1卷积层

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值