精华内容
下载资源
问答
  • 深度卷积神经网络的学习过程中,卷积核的初始值通常是随机赋值的.另外,基于梯度下降法的网络参数学习法通常会导致梯度弥散现象.鉴于此,提出一种基于反卷积特征提取的深度卷积神经网络学习方法.首先,采用无监督两层...
  • 基于深度卷积神经网络的图像分类算法
  • 关于深度学习, 图像处理.卷积神经网络的大量参考论文文献.
  • 用DnCNN网络进行图像去噪。网络中主要使用了批量归一化和ReLU
  • 池化二、LeNet三、常见的一些卷积神经网络1.AlexNet2.VGG3.NiN4.GoogLeNet   一、卷积神经网络基础 1.基础知识 二维互相关(cross-correlation)运算:输入一个二维数组和核数组(卷积核或过滤器),卷积核在输入数组...
  • 深度卷积神经网络详解深度卷积神经网络详解深度卷积神经网络详解深度卷积神经网络详解深度卷积神经网络详解
  • 基于深度卷积神经网络的数字调制方式识别一篇文章,通过卷积神经网络识别调制方式
  • 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含[卷积](https://baike.baidu.com/item/卷积/9411006)计算且具有深度结构的[前馈神经网络](https://baike.baidu.com/item/前馈神经网络/7580523)...
  • 人工智能,CNN(深度学习之卷积神经网络)的教学版PPT,讲解的很到位,非常具体,希望对各位有所帮助
  • 深度卷积神经网络

    2017-07-31 21:09:25
    深度卷积神经网络
  • 基于Tensorflow的猫狗大战代码,只需更改文件夹的路径直接可跑,包含答辩XMind脑图等等。资料齐全。
  • 中科院自动化所的卷积神经网络PPT,包括卷积神经网络发展历程、基本原理,以及近年来的应用,强烈推荐。
  • 深度学习-深度卷积神经网络发展

    万次阅读 2018-07-09 11:12:23
    AlexNet网络现代意义上的深度卷积神经网络起源于AlexNet网络,它是深度卷积神经网络的鼻祖。这个网络相比之前的卷积网络最显著的特点是层次加深,参数规模变大。网络结构如下图所示:这个网络有5个卷积层,它们中的...

    AlexNet网络


    现代意义上的深度卷积神经网络起源于AlexNet网络,它是深度卷积神经网络的鼻祖。这个网络相比之前的卷积网络最显著的特点是层次加深,参数规模变大。网络结构如下图所示:





    这个网络有5个卷积层,它们中的一部分后面接着max-pooling层进行下采样;最后跟3个全连接层。最后一层是softmax输出层,共有1000个节点,对应ImageNet图集中 1000个图像分类。网络中部分卷基层分成2个group进行独立计算,有利于GPU并行化以及降低计算量。


    这个网络有两个主要的创新点:

    1. 新的激活函数ReLU

    2. 标准化(Local Response Normalization

    3. dropout机制。dropout的做法是在训练时随机的选择一部分神经元进行休眠,另外一些神经元参与网络的优化,起到了正则化的作用以减轻过拟合。

    4. 数据增强(data augmentation


    参考:https://blog.csdn.net/guoyunfei20/article/details/78122504

    ZFNet网络

    通过反卷积(转置卷积)进行卷积网络层可视化的方法,以此分析卷积网络的效果,并指导网络的改进,在AlexNet网络的基础上得到了效果更好的ZFNet网络。

    论文是在AlexNet基础上进行了一些细节的改动,网络结构上并没有太大的突破。该论文最大的贡献在于通过使用可视化技术揭示了神经网络各层到底在干什么,起到了什么作用。如果不知道神经网络为什么取得了如此好的效果,那么只能靠不停的实验来寻找更好的模型。使用一个多层的反卷积网络来可视化训练过程中特征的演化及发现潜在的问题;同时根据遮挡图像局部对分类结果的影响来探讨对分类任务而言到底那部分输入信息更重要。下图为典型反卷积网络示意图:



    ZFNet网络结构如下图所示:



    ZFNet在保留AlexNet的基本结构的同时利用反卷积网络可视化的技术对特定卷积层的卷积核尺寸进行了调整,第一层的卷积核从11*11减小到7*7,将stride从4减小到2,Top5的错误率比AlexNet比降低了1.7%。

    参考:https://blog.csdn.net/qq_31531635/article/details/71104334

    GoogLeNet网络


    文献提出了一种称为GoogLeNet网络的结构(Inception-V1)。在AlexNet出现之后,针对图像类任务出现了大量改进的网络结构,总体来说改进的思路主要是增大网络的规模,包括深度和宽度。但是直接增加网络的规模将面临两个问题,首先,网络参数增加之后更容易出现过拟合,在训练样本有限的情况下这一问题更为突出。另一个问题是计算量的增加。GoogLeNet致力于解决上面两个问题。


    GoogLeNet由Google在2014年提出,其主要创新是Inception机制,即对图像进行多尺度处理。这种机制带来的一个好处是大幅度减少了模型的参数数量,其做法是将多个不同尺度的卷积核,池化层进行整合,形成一个Inception模块。典型的Inception模块结构如下图所示:



    上图的模块由3组卷积核以及一个池化单元组成,它们共同接受来自前一层的输入图像,有三种尺寸的卷积核,以及一个max pooling操作,它们并行的对输入图像进行处理,然后将输出结果按照通道拼接起来。因为卷积操作接受的输入图像大小相等,而且卷积进行了padding操作,因此输出图像的大小也相同,可以直接按照通道进行拼接。


    从理论上看,Inception模块的目标是用尺寸更小的矩阵来替代大尺寸的稀疏矩阵。即用一系列小的卷积核来替代大的卷积核,而保证二者有近似的性能。


    上图的卷积操作中,如果输入图像的通道数太多,则运算量太大,而且卷积核的参数太多,因此有必要进行数据降维。所有的卷积和池化操作都使用了1x1卷积进行降维,减少参数量,即降低图像的通道数。因为1x1卷积不会改变图像的高度和宽度,只会改变通道数。


    GoogleNet网络结构如下图所示:



    GoogleNet在ILSVRC 2014的比赛中取得分类任务的第一名,top-5错误率6.67%。相较于之前的AlexNet-like网络,GoogleNet的网络深度达到了22层,参数量减少到AlexNet的1/12,可以说是非常优秀且非常实用的模型。


    为了降低网络参数作者做了2点尝试,一是去除了最后的全连接层,用全局平均池化替代。全连接层几乎占据了AlexNet中90%的参数量,而且会引起过拟合,去除全连接层后模型训练更快并且减轻了过拟合。用全局平均池化层取代全连接层的做法借鉴了Network In Network(以下简称NIN)论文。二是GoogleNet中精心设计的Inception模块提高了参数的利用效率,这一部分也借鉴了NIN的思想,形象的解释就是Inception模块本身如同大网络中的一个小网络,其结构可以反复堆叠在一起形成大网络。不过GoogleNet比NIN更进一步的是增加了分支网络。

    参考:https://www.cnblogs.com/Allen-rg/p/5833919.html

    VGG网络     

    VGG网络由著名的牛津大学视觉组(Visual Geometry Group)2014年提出,并取得了ILSVRC 2014比赛分类任务的第2名(GoogleNet第一名)和定位任务的第1名。同时VGGNet的拓展性很强,迁移到其他图片数据上的泛化性非常好。VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和池化尺寸(2x2)。到目前为止,VGGNet依然经常被用来提取图像特征,被广泛应用于视觉领域的各类任务。


    VGG网络的主要创新是采用了小尺寸的卷积核。所有卷积层都使用3x3卷积核,并且卷积的步长为1。为了保证卷积后的图像大小不变,对图像进行了填充,四周各填充1个像素。所有池化层都采用2x2的核,步长为2。全连接层有3层,分别包括4096,4096,1000个节点。除了最后一个全连接层之外,所有层都采用了ReLU激活函数。下图为VGG16结构图:



    VGG与Alexnet相比,做了以下改进:

    1.去掉了LRN层(局部响应归一化层),作者实验中发现深度卷积网络中LRN的作用并不明显

    2.采用更小的连续3x3卷积核来模拟更大尺寸的卷积核,例如2层连续的3x3卷积层可以达到一层5x5卷积层的感受野,但是所需的参数量会更少,两个3x3卷积核有18个参数(不考虑偏置项),而一个5x5卷积核有25个参数。后续的残差网络等都延续了这一特点


    残差网络


    残差网络(Residual Network)用跨层连接(Shortcut Connections)拟合残差项(Residual Representations)的手段来解决深层网络难以训练的问题,将网络的层数推广到了前所未有的规模,作者在ImageNet数据集上使用了一个152层的残差网络,深度是VGG网络的8倍但复杂度却更低,在ImageNet测试集上达到3.57%的top-5错误率,这个结果赢得了ILSVRC2015分类任务的第一名,另外作者还在CIFAR-10数据集上对100层和1000层的残差网络进行了分析。VGG19网络和ResNet34-plain及ResNet34-redisual网络对比如下:




    之前的经验已经证明,增加网络的层数会提高网络的性能,但增加到一定程度之后,随着层次的增加,神经网络的训练误差和测试误差会增大,这和过拟合还不一样,过拟合只是在测试集上的误差大,这个问题称为退化。


    为了解决这个问题,作者设计了一种称为深度残差网络的结构,这种网络通过跳层连接和拟合残差来解决层次过多带来的问题,这种做法借鉴了高速公路网络(Highway Networks)的设计思想,与LSTM有异曲同工之妙。这一结构的原理如下图所示:



    后面有文献对残差网络的机制进行了分析。得出了以下结论:残差网络并不是一个单一的超深网络,而是多个网络指数级的隐式集成,由此引入了多样性的概念,它用来描述隐式集成的网络的数量;在预测时,残差网络的行为类似于集成学习;对训练时的梯度流向进行了分析,发现隐式集成大多由一些相对浅层的网络组成,因此,残差网络并不能解决梯度消失问题。


    为了进一步证明残差网络的这种集成特性,并确定删除掉一部分跨层结构对网络精度的影响,作者进行了删除层的实验,在这里有两组实验,第一组是删除单个层,第二组是同时删除多个层。为了进行比较,作者使用了残差网络和VGG网络。实验结果证明,除了个别的层之外,删掉单个层对残差网络的精度影响非常小。相比之下,删掉VGG网络的单个层会导致精度的急剧下降。这个结果验证了残差网络是多个网络的集成这一结论。


    第三组实验是对网络的结构进行变动,集调整层的顺序。在实验中,作者打乱某些层的顺序,这样会影响一部分路径。具体做法是,随机的交换多对层的位置,这些层接受的输入和产生的输出数据尺寸相同。同样的,随着调整的层的数量增加,错误率也平滑的上升,这和第二组实验的结果一致。


    但是笔者认为作者的这种解释有些牵强。普通意义上的集成学习算法,其各个弱学习器之间是相互独立的,而这里的各个网络之间共享了一些层,极端情况下,除了一层不同之外,另外的层都相同。另外,这些网络是同时训练出来的,而且使用了相同的样本。

    GoogleNet-Inception-Like网络改进系列

    Inception-V2(GoogleNet-BN)

    作者基于GoogleNet的基本结构进行了改进,Top1错误率相较减少了2个百分点,主要做了以下的改进:

    1.加入了BN层,减少了Internal Covariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯

    2.学习VGG用2个3x3的conv替代Inception模块中的5x5,既降低了参数数量,也加快了计算速度。


    Inception-V3

    Inception-V3一个最重要的改进是卷积核分解(Factorization),将7x7的卷积核分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),我们称为非对称分解,如下图所示。这样做既可以加速计算减少参数规模,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性。

    除此以外作者对训练优化的算法也做了改进:
    1.通过改进AdaGrad提出了RMSProp一种新的参数优化的方式。RMSprop是Geoff Hinton提出的一种自适应学习率方法。AdaGrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,因此可缓解AdaGrad算法学习率下降较快的问题。 实验证明RMSProp在非凸条件下优化结果更好。
    2.采用了Label Smoothing的策略,该方法是一种通过在输出标签中添加噪声,实现对模型进行约束,降低模型过拟合程度的一种正则化方法。

    Inception-V4
    Inception-v4相较于v3版本增加了Inception模块的数量,整个网络变得更深了。

    Xception
    Xception是Google针对Inception v3的另一种改进,主要是采用Depthwise Separable Convolution来替换原来Inception v3中的卷积操作, 在基本不增加网络复杂度的前提下提高了模型的效果。什么是Depthwise Separable Convolution? 通常,在一组特征图上进行卷积需要三维的卷积核,也即卷积核需要同时学习空间上的相关性和通道间的相关性。Xception通过在卷基层加入group的策略将学习空间相关性和学习通道间相关性的任务分离,大幅降低了模型的理论计算量且损失较少的准确度。
    Xception网络结构如下图所示:
    Inception-ResNet v1/v2
    作者基于Inception-v3和Inception-v4将残差网络的思想进行融合,分别得到了Inception-ResNet-v1和Inception-ResNet-v2两个模型。不仅提高了分类精度而且训练的稳定性也得到增强。
    Inception-ResNet-v2 网络结构如下图所示:
    NASNet
    此论文由Google brain出品,是在之前的一篇论文NAS-Neural Architecture Search With Reinforcement Learning的基础做了突破性的改进,使得能让机器在小数据集(CIFAR-10数据集)上自动设计出CNN网络,并利用迁移学习技术使得设计的网络能够被很好的迁移到ImageNet数据集,验证集上达到了82.7%的预测精度,同时也可以迁移到其他的计算机视觉任务上(如目标检测)。该网络的特点为:
    1.延续NAS论文的核心机制,通过强化学习自动产生网络结构。
    2.采用ResNet和Inception等成熟的网络拓扑结构减少了网络结构优化的搜索空间,大型网络直接由大量的同构模块堆叠而成,提高学习效率。
    3.在CIFAR-10上进行了架构搜索,并将最好的架构迁移到ImageNet图像分类和COCO物体检测上。
    下图为采用AutoML设计的Block结构:


    WRN(wide residual network)


    作者认为,随着模型深度的加深,梯度反向传播时,并不能保证能够流经每一个残差模块(residual block)的权重,以至于它很难学到东西,因此在整个训练过程中,只有很少的几个残差模块能够学到有用的表达,而绝大多数的残差模块起到的作用并不大。因此作者希望使用一种较浅的,但是宽度更宽的模型,来更加有效的提升模型的性能。



    ResNet原作者针对CIFAR-10所使用的的网络,包含三种Residual Block,卷积通道数量分别是16、32、64,网络的深度为6*N+2。而在这里,WRN作者给16、32、64之后都加了一个系数k,也就是说,作者是通过增加Residual Block卷积通道的数量来使模型变得更宽,从而N可以保持很小的值,就可以是网络达到很好的效果。 


    CIFAR-10和CIFAR -100性能对比:


       

    上述实验表明单独增加模型的宽度是对模型的性能是有提升的。不过也不能完全的就认为宽度比深度更好,两者只有相互搭配,才能取得更好的效果。


    ResNeXt


    作者提出 ResNeXt 的主要原因在于:传统的提高模型准确率的做法,都是加深或加宽网络,但是随着超参数数量的增加(比如通道数,卷积核大小等),网络设计的难度和计算开销也会增加。因此本文提出的 ResNeXt 结构可以在不增加参数复杂度的前提下提高准确率。


    这篇论文提出了ResNeXt网络,同时采用了VGG堆叠的思想和Inception 的 split-transform-merge 思想,但是可扩展性比较强,可以认为是在增加准确率的同时基本不改变或降低模型的复杂度。这里提到一个名词cardinality,原文的解释是the size of the set of transformations,如下图(a)(b) cardinality=32所示:



    通过实验给出了下面的结论:

    1.证明ResNeXt比ResNet更好,而且Cardinality越大效果越好

    2.增大Cardinality比增大模型的width或者depth效果更好


    当时取得了state-of-art的结果,虽然后来被其它的网络结构超越,但就在最近Facebook 在图像识别技术上又有了新突破,基于ResNeXt 101-32x48d在ImageNet测试中准确度达到创纪录的 85.4%!(使用了35亿张图像,1.7万主题标签进行模型训练,规模史无前例!!!笔者这里不下什么结论,各位看官自行体会...)


    DenseNet


    DenseNet 是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。下面是DenseNet 的一个示意图:



    DenseNet可以有效地减少网络参数规模,达到减轻过拟合的效果,对小数据集合的学习很有效果。但是由于中间输出的feature map数量是多层Concat的结果,导致网络在训练和测试的时候显存占用并没有明显的优势,计算量也没有明显的减少!


    MobileNet


    MobileNets是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,网络设计的核心Separable Convolution可以在牺牲较小性能的前提下有效的减少参数量和计算量。Separable Convolution将传统的卷积运算用两步卷积运算代替:Depthwise convolution与Pointwise convolution,如下图所示:


    从图中可以明确的看出,由于输入图片为三通道,Depthwise conv的filter数量只能为3,而传统的卷积方法会有3x3总共9个filter。


    后续的MobileNet-v2主要增加了残差结构,同时在Depthwise convolution之前添加一层Pointwise convolution,优化了带宽的使用,进一步提高了在嵌入式设备上的性能。可分离卷积如下图所示:


    参考:https://mp.weixin.qq.com/s/28GtBOuAZkHs7JLRVLlSyg


    展开全文
  • 该资源采用Visio绘图软件制作,包含卷积池化操作的绘图,以及线性层的绘图。供各位网友参考。
  • 自适应深度卷积神经网络模型构建方法
  • 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积或相关计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 [1-2] 。由于卷积神经...
  • 我的毕设做的是基于opencv和卷积神经网络的人脸识别项目。在做完这个项目之后,我一直想好好总结一下所学到的关于卷积神经网络的知识。现在趁着有点空闲,随手记录一点以前学过的,或者正在学习的知识点,相当于一个...

    1.前言

    我的毕设做的是基于opencv和卷积神经网络的人脸识别项目。在做完这个项目之后,我一直想好好总结一下所学到的关于卷积神经网络的知识。现在趁着有点空闲,随手记录一点以前学过的,或者正在学习的知识点,相当于一个备忘录。

    **

    2.卷积神经网络模型概览

    **
    常见的卷积神经网络结构
    从一开始的LeNet到后来的VGGNet,再到google的Inception系列,再到ResNet系列,每一种神经网络模型都有其创新的点,下面我们就来按照历史脉络好好讲解一下各种模型的特点。(里面涉及到的各种卷积神经网络的基础知识要点可以参见我的另一篇基础博客)

    2.1LeNet模型结构

    LeNet网络结构是再1998年由lecun提出的。它被创造出来的目的是解决手写数字识别的问题。即它是一个10分类任务的解决办法。下图是它的一个基本的网络结构。
    LeNet网络结构
    网络结构图中显示的很清楚。它包括了两个卷积层,两个下采样层,两个全连接层和一个激活层,最后有一个sotfmax分类层。可以说,LeNet麻雀虽小,五脏俱全。包括了基本的卷积神经网络的所有单元。

    2.2 AlexNet

    话不多说,我们直接上来看AlexNet的网络结构:
    在这里插入图片描述
    我们可以看到,它的网络结构被分成了两支,这是因为当时的GPU计算能力不够,显存容量不够大。为了完成模型的训练,作者使用了两块显卡来进行分布式的训练。我们现在想要训练这样一个模型,只需要实现其中一条就好了。
    emmmm我其实个人是想知道怎么进行分布式训练的,但是我没有两块显卡(贫穷限制了我的发展) 找不到相关技术资料,这里就不赘述了。
    对比刚刚的LeNet,我们可以发现从结构上来看,它并没有很大的改变。我们看它的网络结构:输入层是224* 224的数据,然后进行了多轮卷积(提取特征),其中包括11* 11的卷积核,5* 5的卷积核,3* 3的卷积核。虽然在图片上我们只画了卷积层,但我们应该知道,每一个卷积层之后都会跟上一个激活层(用来增加模型的非线性表达能力),一个降采样pooling层(减小数据量,提取主要特征),以及一个局部归一化处理(对数据进行一定的约束,使我们的数据约束在一定的范围内,使网络更好的收敛)。经过多个卷积层之后,就会有三个fc层(全连接层)。同样的,在每一个fc层之后,也会有有一个relu激活层,以及一个dropout层(减小参数量,防止过拟合,增加i网络结构变化)。最后呢,通过一个fc层+softmax层来将我们的数据映射到一个一千维的向量上去(因为实现的是一千种物品的分类网络),这个向量就是我们输入的图像在这一千个类别上的概率分布。其中概率值最高的那个类别就是网络判断出来图像所属的类别。相较与LeNet网络,它的网络深度更深,并且成功运用了gpu进行运算,为后面的人们打开了新世界大门。整个网络的参数量在60兆以上,最中训练出来的模型文件在200兆以上。它最大的意义在于,通过这次实验,证明了更深层次的卷积神经网络,可以提取出更加鲁棒的特征信息,并且这些特征信息能更好的区分物品类别。

    我个人的意见是,这个更深层网络提取更高维度的特征,它是这么个意思:前面的卷积层提取一些浅层的特征,比如纹理,形状(我们输入的是颜色特征),然后中间的卷积层呢,提取的是一些更复杂的特征,这些特征难以描述,就类似于我们中国说看山不是山,看水不是水的境界,只可意会,不可言传。而最后的分类信息,就是最后的看山还是山,看水还是水的境界。

    在AlexNet网络中,有以下特点:

    • 增加了relu非线性激活函数,增强了模型的非线性表达能力。成为以后卷积层的标配。
    • dropout层防止过拟合。成为以后fc层的标配。
    • 通过数据增强,来减少过拟合。
    • 引入标准化层(Local Response Normalization):通过放大那些对分类贡献较大的神经元,抑制那些对分类贡献较小的神经元,通过局部归一的手段,来达到作用。

    当然后来人们通过研究发现,这个LRN层并没有啥太好的作用,所以在后来的网络结构中,它被BN层(批归一化层)取代了。

    2.3 ZFNet

    在这里插入图片描述
    ZFNet在AlexNet的基础上做了小小的改进:

    • 调整第一层卷积核大小为7*7
    • 设置卷积参数stride=2

    通过更小的卷积核和更小的步长,来提取更多的信息,确保网络提取出来的信息更加有效。其次,它增加了卷积核数量,导致网络更加庞大。
    最重要的是:它从可视化的角度出发,解释了CNN有非常好的性能的原因。
    在这里插入图片描述

    如图所示,右半边是我们一个正常的神经网络的数据流向:对于一副输入图像,我们通过pooling层来进行下采样,再通过卷积层进行特征提取,通过relu层来提升非线性表达能力。对于最后的输出结果,我们怎么把它还原成原始的图片呢?
    实际上,如果我们想进行100%的还原是不可能的,因为每一次的pooling层都会丢失一些信息。因此我们在可视化的时候,更主要的是对它的特征的语义进行更高层次的分析。通过对输出层进行上采样,可以得到与我们原始图像大小一致的特征图。通过观察这些特征图,作者得出了这样的一些结论:

    • 特征分层次体系结构(就是我前面说的三层)
    • 深层特征更鲁棒(区分度高,不受图片微小的影响)
    • 深层特征收敛更慢

    2.4 VGGNet

    它由牛津大学计算机视觉组和Google Deepmind共同设计。主要是为了研究网络深度对模型准确度的影响,并采用小卷积堆叠的方式,来搭建整个网络。它的参数量达到了138M,整个模型的大小>500M.网络结构如下:
    在这里插入图片描述
    从上面的结构中我们可以看到,VGGNet的网络结构被分为11,13,16,19层。每层都包含了不同数量的卷积层(需要注意的是,每层卷积层之后都有激活层和池化层,只是由于长度限制没有在表中列出来),最后通过三个fc层来将我们的特征进行最后的向量化,最终得到一个1000维的向量,这个向量经过softmax之后,就会得到最终我们类别上的概率分布。而概率值最高的那个,就是我们所要分类的那个类别。
    VGGNet的特点:

    • 网络深,卷积层多。结构哦更加规整,简单。
    • 卷积核都是3* 3的或者1* 1的,且同一层中channel的数量都是相同的。最大池化层全是2*
      2。
    • 每经过一个pooling层后,channel的数量会乘上2.
      也就是说,每次池化之后,Feature Map宽高降低一半,通道数量增加一倍。VGGNet网络层数更多,结构更深,模型参数量更大。

    VGGNet的意义:

    • 证明了更深的网络,能更好的提取特征。
    • 成为了后续很多网络的backbone。

    2.5 GoogleNet/Inception v1

    在设计网络结构时,不仅仅考虑网络的深度,也会考虑网络的宽度,并将这种结构定义为Inception结构(一种网中网(Network in Network)的结构,即原来的节点也是一个网络)。
    值得一提的是,GoogleNet网络的参数量只有6.9兆,模型大小大约50M.
    为什么GoogleNet网络的参数这么少呢?我们先来看一下它的基本单元的结构:
    在这里插入图片描述
    主要原因就是它有效的利用了1* 1 的卷积核。不同于VGGNet从上到下的类似于一个串的结构,Inception的结构表现为一个网中网的结构。也就是说,对于我们中间的一个隐藏层层,它的每个节点也都是一个卷积网络。对于前一层传入进来的特征图,这层的每一个节点对它进行了1* 1 ,3* 3,5* 5的卷积和3* 3的pooling操作。其中值得一提的是,在3* 3和5* 5 的卷积操作之前,该网络用1* 1 的卷积核降低了输入层的channel的数量。例如:我们的输入是一个56* 56 * 128维的这么一个特征(这时候128就是我们channel的数量)。我们通过一个1* 1 的卷积核,可以将通道数降为32,然后我们将它再输入到3* 3的卷积核中。大大减少了计算量。最后,我们将所有的Feature Map进行连接,最后得到这个层的输出。
    在ZFNet的学习中我们知道,更深层的网络收敛的速度就越慢。在GoogleNet中,为了保证网络更深之后,能够哦收敛的比较好,它采用了两个loss来对网络参数进行调节,进而确保在网络变深之后,依然能够达到一个比较好的收敛效果。
    这里需要解释一下什么叫网络宽度:网络深度指的是当前的这个网络一共有多少层,宽度则是说在同一层上channel的数量。
    在这里插入图片描述
    这里我们举了一个例子,来说明如何通过1* 1 的卷积核来进行计算量的一个节省,以及参数规模的一个降低。大家自行体会。

    2.6 Inception v2/v3

    在提出了Inception v1之后,google又提出了Inception v2/v3/v4.在前面介绍视觉感受野的时候,我们曾经说过,一个大的卷积核可以由多个小的卷积核来替代。在v2/v3中,他们有效的利用了这个知识。在Inceptiion v2中,伟大的作者们通过两层3* 3的卷积核代替掉了5* 5的卷积核。而在Inception v3中,更是桑心病狂 别出心裁的用n* 1 + 1* n的卷积核代替了n* n的卷积核。
    在这里插入图片描述
    通过这样的操作,我们能够实现什么样的效果呢?

    • 参数量降低,计算量减少。
    • 网络变深,网络非线性表达能力更强(因为在每一个卷积层后面都可以增加一个激活层)

    要注意的是,在实验中伟大的先行者们发现,并不是拆分都能达到很好的效果。卷积的拆分最好是用在中间的部分,不要在图像的开始就进行这样的拆分。

    2.7 ResNet

    它是在2015年,有何凯明团队提出,引入了跳连的结构来防止梯度消失的问题,进而可以进一步加大网络深度。它的结构如下所示:
    在这里插入图片描述
    跳连的结构如下所示:
    在这里插入图片描述
    可以发现,其他的网络中,都是从上到下的串联的结构 ,而resnet网络则是跳连结构,它的意思是将输入特征直接传输到输出层,和经过卷积之后的特征相加,共同组成输出层的一部分。
    那么,为什么通过跳连结构就可以加深网络的深度呢?在VGG网络中,我们知道当网络深度达到一定界限的时候,在训练中就较难收敛。较难收敛的原因就是随着网络深度的加深,产生了梯度消失的问题。什么是梯度消失呢?有基础的人应该知道,卷积神经网络在进行BP时,都是通过梯度来计算权重修改量的。而梯度的计算遵循的是链式法则,即一个参数的梯度是多个梯度相乘之后的结果。假如每个梯度都小于1的话,那么,x1 * x2* x3* x4…,当n趋于无穷的时候,limxn=0,即梯度消失。假如每个梯度都大于1的话,那么,x1 * x2 x3 * x4…,当n趋于无穷的时候,limxn=正无穷,即梯度爆炸。(这里的n其实就是卷积的层数)所以理论上来说,伴随着网络的加深,我们可以提取到更好的特征,但是网络的参数是非常难以调节的,因为这时候我们求解出来的梯度是没办法来调节参数的。而resnet通过跳连的结构,就可以缓解这个问题。
    我们可以很清楚的从跳连结构示意图中看到,加入了跳连结构之后,并没有增加模型的参数量,尽管它改变了网络结构。
    从ResNet的网络结构中我们可以发现,它在一开始时设置卷积核大小为7
    7,这是因为一开始的时候我们的输入图像的channel只有3,与7* 7的卷积核进行计算的话并不会增加多少计算量。而在ResNet网络的最后,伟大的作者们又一次别出心裁,用average pool层代替了全连接层。这一手操作也是大大的降低了参数量和计算量。因为我们知道,全连接层的参数多,且计算最为复杂,在VGG中,全连接层的参数量占到了总参数量的80%。而pooling层并没有参数。
    接下来我们来讨论一下,为什么ResNet网络可以缓解梯度消失的问题呢? 跳连结构实际上也被称为恒等映射:H(x)=F(x)+x。当F(x)=0时,H(x)=x,这就是所谓的恒等映射。这个跳连的这根线,可以实现差分放大的效果,将梯度放大,来缓解梯度的消失(具体的我也不太明白,等以后有时间再更一篇专门写的吧)。举个例子,假设F(x)=2x,当x从5变化成为5.1时,F(x)从10变为10.2.如果这时候求F(x)的导数的话,公式为(10.2-10)/(5.1-5)=2.而如果变成H(x)的话,导数为(10.2+5.1-(10.0+5))/(5.1-5)=3.这样就放大了导数,即梯度。
    在ResNet中有两种跳连结构:
    在这里插入图片描述
    左边的是当层数较小时,不用1* 1的卷积核来降低参数量和计算量,后面的是在50,101,152层的网络中,用1* 1 的卷积核来降低参数量和计算量。
    在ResNet中,除了跳连结构之外,它还采用了BatchNormalization批归一化来对数据scale和分布进行约束,同时BN层也可以进行简单的正则化,提高网络抗过拟合能力(每个卷积之后配合一个BN层)。
    ResNet的设计特点:

    • 核心单元简单堆叠。
    • 跳连结构解决网络梯度消失问题。
    • Average Pooling层代替fc层。
    • BN层加快网络训练速度和收敛时的稳定性。
    • 加大网络深度,提高模型的特征抽取能力。

    **

    3.卷积神经网络结构对比

    **

    在这里插入图片描述

    展开全文
  • 是一篇有关深度学习的利用预训练网络对遥感图像进行分类的论文,原文是英文的,题目是我翻译的
  • 卷积神经网络(CNN)与深度卷积神经网络(DCNN)

    万次阅读 多人点赞 2020-08-19 16:55:18
    深度卷积神经网络,如:AlexNet AlexNet与LeNet结构类似,但使用了更多的卷积层和更大的参数空间来拟合大规模数据集ImageNet。 卷积神经网络就是含卷积层的网络。AlexNet是浅层神经网络和深度神经网络的分界..

    作为小白,看到DCNN,一直想知道与CNN的区别,也没找到明确的说法,以下是自己的一点想法,欢迎指正!

     

    目录

    一、CNN与DCNN

    二、基于pytorch的实现

    1.LeNet-5

    2.AlexNet


    一、CNN与DCNN

    卷积神经网络,如:LeNet

    深度卷积神经网络,如:AlexNet

    AlexNet是第一个现代深度卷积网络模型,首次使用了许多现代深度卷积网络的技术方法,比如,采用ReLu作为非线性激活函数,使用Dropout防止过拟合,是用数据增强提高模型准确率,使用GPU进行并行训练等。

    AlexNet与LeNet结构类似,但使用了更多的卷积层和更大的参数空间来拟合大规模数据集ImageNet。

    卷积神经网络就是含卷积层的网络。AlexNet是浅层神经网络和深度神经网络的分界线。

    (选自书《动手学深度学习》、《神经网络与深度学习》)

    二、基于pytorch的实现

    参考卷积神经网络之 - Lenet

    LeNet、AlexNet模型实现(pytorch)

    1.LeNet-5:

    来自《神经网络与深度学习》

    Input -> conv1 (6) -> pool1 -> conv2 (16) -> pool2 -> fc3 (120) -> fc4 (84) -> fc5 (10) -> softmax

    代码实现与原文存在一定差异

    import torch
    import torch.nn as nn
    import torch.nn.functional as func
    
    class LeNet5(nn.Module):
        def __init__(self,num_classes, grayscale=False):
            """
                  num_classes: 分类的数量
                  grayscale:是否为灰度图
                  """
            super(LeNet5, self).__init__()
    
            self.grayscale = grayscale
            self.num_classes = num_classes
    
            if self.grayscale:  # 可以适用单通道和三通道的图像
                in_channels = 1
            else:
                in_channels = 3
    
            self.conv1 =self.conv1 = nn.Conv2d(in_channels, 6, kernel_size=5)
            self.conv2 = nn.Conv2d(6, 16, kernel_size=5)
            self.fc1 = nn.Linear(16*5*5, 120)
            self.fc2 = nn.Linear(120, 84)
            self.fc3 = nn.Linear(84, num_classes)
    
        def forward(self, x):
            x = func.max_pool2d(self.conv1(x), 2)   # 原始的模型使用的是 平均池化
            x = func.max_pool2d(self.conv2(x), 2)
            x = x.view(x.size(0), -1)
            x = self.fc3(self.fc2(self.fc1(x)))
            x = func.softmax(x,dim=1)
            return x
    
    #(最后模拟了一个输入,输出一个分类器运算后 10 个 softmax 概率值)
    num_classes = 10  # 分类数目
    grayscale = True  # 是否为灰度图
    data = torch.rand((1, 1, 32, 32))
    print("input data:\n", data, "\n")
    model = LeNet5(num_classes, grayscale)
    x= model(data)
    print(x)
    

    2.AlexNet

     

    preview

    来自《神经网络与深度学习》

     

    假设输入为32*32大小图像,代码实现与上文所述存在一定差异。

    import torch
    import torch.nn as nn
    class AlexNet(nn.Module):
        def __init__(self,num_classes, grayscale=False):
    
            super(AlexNet, self).__init__()
            self.grayscale = grayscale
            self.num_classes = num_classes
            if self.grayscale:  # 可以适用单通道和三通道的图像
                in_channels = 1
            else:
                in_channels = 3
    
            self.features = nn.Sequential(
                nn.Conv2d(in_channels, 96, kernel_size=11,padding=1),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=2),
                nn.Conv2d(96, 256, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=2),
                nn.Conv2d(256, 384, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.Conv2d(384, 384, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.Conv2d(384, 256, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=2),
            )
            self.classifier = nn.Sequential(
                nn.Dropout(),
                nn.Linear(256 * 3 * 3, 4096),
                nn.ReLU(inplace=True),
                nn.Dropout(),
                nn.Linear(4096, 4096),
                nn.ReLU(inplace=True),
                nn.Linear(4096, 10),
            )
    
        def forward(self, x):
            x = self.features(x)
            x = x.view(x.size(0), 256 * 3 * 3)
            x = self.classifier(x)
            return x
    
    #最后模拟了一个输入,输出一个分类器运算后的值
    num_classes = 10  # 分类数目
    grayscale = True  # 是否为灰度图
    data = torch.rand((1, 1, 32, 32))
    print("input data:\n", data, "\n")
    model = AlexNet(num_classes,grayscale)
    x=model(data)
    print(x)

    展开全文
  • 深度卷积神经网络基本介绍

    万次阅读 多人点赞 2018-05-29 18:22:48
    关于深度卷积神经网络的前世今生,就不在此处进行过多的介绍。在此,主要对网络的各个组成部分进行简要介绍:图1 基本的深度卷积网络结构 通过图1可知深度卷积神经网络主要是由输入层、卷积层、激活函数、池化层、...

        关于深度卷积神经网络的前世今生,就不在此处进行过多的介绍。在此,主要对网络的各个组成部分进行简要介绍:



    图1 基本的深度卷积网络结构

           通过图1可知深度卷积神经网络主要是由输入层、卷积层、激活函数、池化层、全连接层和输出层组成。以下将以人脸识别为例对网络的各个组成部分进行简单的介绍:

            输入层:深度卷积网络可直接将图片作为网络的输入,通过训练提取特征,但是为了获得更好的效果,通常需要将图片进行预处理,在人脸识别中,就需要进行人脸检测等处理(MTCNN是一种较好的人脸检测方法)。此外,在样本不足的情况下会需要进行样本增强处理,包括旋转、平移,剪切、增加噪声、颜色变换等。

            卷积层:通过卷积运算实质是对输入进行另一种表示,若将卷积层视为黑盒子,那么我们可以将输出看作是输入的另外一种表示,而整个网络的训练也就是训练出这种表示所需的中间参数。图2为一般神经网络的示意图:


    图2 简单神经网络

            图2中w和b即为网络训练所需得到的参数,在卷积层中需要添加激活函数对运算进行非线性化。深度卷积网络将小的神经网络串联起来构成深度神经网络,主要有两种特殊的处理方式:

    1. 采用局部感受野:神经元仅与其相邻的上一层神经元相连接,通过对学习到的局部特征进行组合形成最后的全局特征。
    2. 采用权值共享:同一个卷积核在对不同的局部感受野进行操作时,采用相同的权值参数,能够减少网络运行过程中所需的参数计算量。通过每一层的多个卷积核获得图片的不同特征,不需要特意考虑特征在图片中的具体位置,该处理方式使得其在分析和处理图片任务上具有显著优势


    图3 卷积操作示意图


            图3为某个三维图进行卷积处理,同一卷积核对不同输入层进行卷积操作,得到一组输出,多个卷积核得到多少个输出。不同的图层和不同的输入图处理方法相似,中间的卷积运算时一种对参数进行处理的过程,而最后决定分类个数的是最后一层全连接层的个数。如100张图片,大小为32*32,图片为3维,即输入为100*32*32*3,通过大小为3*3的256个卷积核进行边缘补充后计算,输出为100*32*32*256,即在该层的卷积运算仅需对256个卷积核进行共享就可实现卷积操作,大大减少了所需参数。

            卷积运算输入和输出窗口的大小变化为:,其中W为输入的长/宽(输入长宽不一定相等),F为卷积核的大小,P为边缘补充个数,S为步长(卷积间隔个数),如图3中,输入为5*5,卷积核的大小为3*3,边缘补充为1,步长为2,其计算即为N=(5-3+1*2)/2+1,故而输出为3*3。

            vggnet通过实验证明三个3*3的卷积核效果比一个7*7的卷积核效果好,2个3*3的卷积核比一个5*5的网络效果好。此外,resnet提出的残差网络结构能有效的避免网络中参数泛华的问题。

            池化层:是卷积神经网络中的一种对数据进行的特殊处理操作,通过池化处理缩小图片特征尺寸,能有效的去除由上一层的结果作为输入而带来的计算量较大的问题,图4为常使用的池化方法。


    图4 平均池化和最大池化

          2*2的池化可以使特征图大小减半,后常采用大小为3*3,步长为2,pad=0的卷积核替换池化层,可实现类似的效果。

          激活函数:网络中卷积操作和池化操作都是线性操作,而生活中的大量样本,在进行分类时并不是线性关系,因而需要在网络中引入非线性元素使得网络能解决非线性问题。常见的激活函数如下:


    图5 Relu函数及其改进函数

            全连接层:该层是网络中消耗参数最多的层,若全连接层的输入是4*4*100,全连接层的输出是512,则该层需要4*4*100* 512个参数;而一般的卷积层,若卷积核为4*4,输出为512,则仅需4*4*512个参数。常见的网络会含有两个全连接层,第二个全连接层的输出与分类个数的输出对应,而近期有文献表明,第一个卷积层是可以通过全局平均池化层等替换。

            以上是通过个人学习进行的简要总结,若有不对的地方大家可以指出,期待与大家共同学习进步。


    展开全文
  • 用MATLAB实现卷积神经网络,并对图像进行特征提取 文件列表: CNN CNN\cnnapplygrads.m CNN\cnnbp.m CNN\cnnff.m CNN\cnnnumgradcheck.m CNN\cnnsetup.m CNN\cnntest.m CNN\cnntrain.m CNN\expand.m CNN\...
  • 基于卷积神经网络的图像识别 基于卷积神经网络的图像识别
  • 本代码是基于Matlab的卷积神经网络源代码案例,本代码本人使用Matlab2014b可以正常运行。欢迎大家留言评论,互相学习研讨。
  • 深度卷积神经网络之AlexNet

    千次阅读 2019-02-13 22:40:00
    摘要:我们训练了一个大型的深度卷积神经网络,将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分成1000个不同的类别。在测试数据上,我们实现了第1位和第5位错误率分别为37.5%和17.0%,大大优于之前的先进水平。...
  • 卷积神经网络的matlab代码,代入数据就可以成功运行!!
  • 利用卷积神经网络对轴承故障数据进行分类,通过构造简单的卷积神经网络,达到良好的识别分类效果
  • 动手学深度学习:卷积神经网络,LeNet,卷积神经网络进阶 卷积神经网络基础 目录: 1、卷积神经网络的基础概念 2、卷积层和池化层 3、填充、步幅、输入通道和输出通道 4、卷积层的简洁实现 5、池化层的简洁实现 1、...
  • 卷积神经网络ppt

    2018-10-04 16:50:08
    非常详细的CNN模型的ppt,适合做演讲介绍用,内容简介,通俗易懂。
  • 卷积神经网络 入门介绍 展示PPT 深度学习 CNN

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,836
精华内容 43,934
关键字:

常见的深度卷积神经网络