神经网络学习历程与总结

先从DNN深度神经网络开始学习,神经网络的学习包括以下几个知识点:

1、神经网络的权重初始化

2、批量归一化

3、激活函数的选取

4、神经网络的后向传播BP算法

5、神经网络的各种快速优化器

6、神经网络的正则化

神经网络需要注意的是:梯度的消失问题、过拟合问题!!

以上构成了神经网络的基本框架。

   随后对卷积神经网络进行系统的学习。卷积神经网络不同于全连接的深度神经网络,而是采用卷积核的形式构造网络,要求的权重就是卷积核中的参数。

简述卷积神经网络的发展历程:

LeNet可以说是CNN的开端:

                      

  C5层输出1*1*120特征图,可以把它理解为一个120维的向量,将这个向量与F6的84个神经元全连接,然后84个神经元再与out层10个神经元全连接,输出0-9的标签。

2、AlexNet 可以说是具有历史意义的一个网络结构,实现1000个类别分类任务。

  1. 非线性激活函数:ReLU
  2. 防止过拟合的方法:Dropout,Data augmentation
  3. LRN归一化层的使用,本质上,这个层也是为了防止激活函数的饱和
  4. AlexNet全部使用最大池化

AlexNet 优势在于:网络增大(5个卷积层+3个全连接层+1个softmax层),解决过拟合(dropout,data augmentation,LRN)

 

                   

3、随后又出现了GoogleNet和VGGNet

  • GoogLeNet包含5million参数,只是AlexNet的1/12,其中AlexNet包含60million参数

googlenet的主要思想就是围绕这两个思路去做的:

    1.深度,层数更深,采用了22层,为了避免上述提到的梯度消失问题,googlenet巧妙的在不同深度处增加了两个辅助分类器来保证梯度回传消失的现象。而在实际测试的时候,这两个额外的softmax会被去掉。

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

                                  

   随后googlenet出现各种改进:V2使用2个3x3卷积层代替单个的5x5卷积层,V3考虑任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代,用nx1卷积来代替大卷积核,这里设定n=7来应对17x17大小的feature map。v4引入残差网络,解决梯度消失问题.

VGG 

   VGG由5层卷积层,每一段内有2~3个卷积层、3层全连接层、softmax输出层构成,层与层之间使用max-pooling分开,所有隐层的激活单元都采用ReLU函数。VGG的结构图:
                                     
      VGG是在模仿AlexNet的网络结构,但没有采用AlexNet中比较大的卷积核尺寸(如7x7),而是通过降低卷积核的大小(3x3),增加卷积子层数来达到同样的性能。   

                                      
(测试阶段)全连接转卷积

      这也是VGG的一个特点,在网络测试阶段将训练阶段的三个全连接替换为三个卷积,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽或高的输入,而“全连接转卷积”,替换过程如下:
                                     
例如7x7x512的layer要跟4096个神经元的layer做全连接,则替换为对7x7x512的layer做卷积核4096种、每个卷积核为7x7*512的卷积。

4、残差网络

    ResNet引入了残差网络结构(residual network),通过这种残差网络结构,解决了梯度消失问题,可以把网络层弄的很深(据说目前可以达到1000多层),并且最终的分类效果也非常好。

                                  

ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是学习所谓的残差F(x) = H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不下降。

      实际上这条捷径是在进行ReLU非线性激活函数之前加上的,而这里的每一个节点都执行了线性函数和ReLU激活函数。所以插入的时机是在线性激活之后,ReLU激活之


    上面主要讲了卷积神经网络的各种框架,接下来就目标检测任务,学习了各种卷积网络,这要从最开始的RCNN说起。。。。

    object detection要解决的问题两个问题:物体在哪里,是什么?是什么是一个分类问题,一般用交叉熵;在哪里是一个边框回归问题,一般用smoothL1函数。

    RCNN最大的创新在于:不再使用滑动框在图像上滑动来搜索目标,而是产生独立的候选区域,常见的搜索方法如选择性搜索selective search。

    采用 Alexnet,Alextnet 的输入图像大小为277*277大小的图片,通过五个卷积层和两个全连接层进行前向传播,对每个候选区域抽取一个4096维度的特征向量。通过 Selective Search 产生的候选区域大小不一,首先对候选区域图像进行转换,使得它符合R-CNN的输入(277*277),R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。在测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征。

 分类:根据网络提取的特征,然后用 SVM 进行类别的识别,并产生分数。

 边框回归:根据网络提取的特征,用线性回归模型,进行边框回归

RCNN存在四个明显的问题:

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

  2)针对传统CNN需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入CNN的信息丢失;

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

  4)三个模型是分别训练——CNN提取图像特征、SVM预测类别、回归模型的边界,这也导致流程不易训练。

   为了改进RCNN的缺点,出现了fast-RCNN。Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。

原来的方法:许多候选框(比如两千个)-->CNN-->得到每个候选框的特征-->分类+回归
现在的方法:一张完整图片-->CNN-->得到每张候选框的特征-->分类+回归

  1. Fast R-CNN的RegionProposal是在feature map之后做的,不用对所有的区域进行单独的CNN Forward步骤。
  2. 最后一个卷积层后加了一个ROI pooling layer。输入图片size不同导致得到的feature map尺寸也不同,加入这个ROI Pooling层,可以对每个region都提取一个固定维度的特征表示
  3. Fast R-CNN直接使用softmax替代SVM分类
  4. 将边框回归Bounding Box Regression直接加入到CNN网络中训练,这样整个的训练过程是端到端的(除去region proposal提取阶段)。

 Fast R-CNN存在的问题:选择性搜索找出所有的候选框,非常耗时。

  解决:加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做了。Faster R-CNN的主要贡献就是设计了提取候选区域的网络RPN,代替了费时的选择性搜索Selective Search,使得检测速度大幅提高。

整体架构

引入Anchors,为最后一个特征图的每一个像素点,都定义9个框,判断9个框里哪个是目标,哪个是背景,然后再对那些事目标的框进行边框回归。

              

RCNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)

2.每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取

3.对候选框中提取出的特征,使用SVM分类器判别是否属于一个特定类

4.对于属于某一类别的候选框,用回归器进一步调整其位置

Fast R-CNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索)

2.对整张图片输进CNN,得到feature map

3.找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层

4.对候选框中提取出的特征,使用softmax函数判别是否属于一个特定类

5.对于属于某一类别的候选框,用回归器进一步调整其位置

Faster R-CNN

1.对整张图片输进CNN,得到feature map

2.卷积特征输入到RPN,得到候选框的特征信息

3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类

4.对于属于某一类别的候选框,用回归器进一步调整其位置

之后还出现了Mask R-CNN、SSD、YOLO目标检测网络。

Mask R-CNN就是 在Faster R-CNN基础上,再引入分割掩码网络,同时引入FPN特征金字塔。

SSD通过将多层的特征图都应用到RPN中,用于解决小目标检测问题,它只有两个损失函数,其实就是fasterRCNN的阉割版;

    YOLO 创造性的将候选区和对象识别这两个阶段合二为一,实际上,YOLO并没有真正去掉候选区,而是采用了预定义的候选区(并不是Faster RCNN所采用的Anchor)。也就是将图片划分为 7*7=49 个网格(grid),每个网格允许预测出2个边框(注意这里是预测得到的,而Faster RCNN的Anchor使我们预先自己定义的),总共 49*2=98 个bounding box。可以理解为98个候选区

YOLO存在的缺点是: 精度低,小目标和邻近目标检测效果差,YOLO与Fast R-CNN相比有较大的定位误差;输出层为全连接层,YOLO 训练模型只支持与训练图像相同的输入分辨率。

未解决YOLO缺点,出现YOLOv2:

  • 输出层使用卷积层替代 YOLOv1 的全连接层;
  • 将前面一层的26*26的特征图和本层13*13的特征图进行连接,与ResNet网络的shortcut类似, 具体操作:对于26*26*512的特征图,经passthrough层处理之后就变成了13*13*2048的新特征图(特征图大小变为1/4,而通道数变为以前的4倍),然后与后面的13*13*1024特征图连接在一起形成13*13*3072的特征图,最后在该特征图上卷积做预测
  • 引入anchor boxes,Faster R-CNN中anchor box 的大小和比例是按经验设定的,YOLOv2 对其做了改进,采用 k-means 在训练集 bbox 上进行聚类产生合适的先验框. 
  • 位置预测使用逻辑函数,作者就没有采用预测直接的偏移量的方法,而使用了预测相对于grid cell的坐标位置的办法,作者又把ground truth限制在了0到1之间,利用logistic回归函数来进行这一限制。

                            

     YOLO3采用多尺度来对不同size的目标进行检测,越精细的grid cell就可以检测出越精细的物体。用上采样的方法来实现这种多尺度的feature map,concat连接的两个张量是具有一样尺度的(两处拼接分别是26x26尺度拼接和52x52尺度拼接,通过(2, 2)上采样来保证concat拼接的张量尺度相同)。作者并没有像SSD那样直接采用backbone中间层的处理结果作为feature map的输出,而是和后面网络层的上采样结果进行一个拼接之后的处理结果作为feature map

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值