精华内容
下载资源
问答
  • 基于深度学习卷积神经网络的地震波形自动分类与识别.pdf
  • 关于深度学习, 图像处理.卷积神经网络的大量参考论文文献.
  • 基于深度学习卷积神经网络的人体行为识别研究.pdf
  • 基于Tensorflow的猫狗大战代码,只需更改文件夹的路径直接可跑,包含答辩XMind脑图等等。资料齐全。
  • 卷积神经网络在图像识别应用,此压缩包包括代码。
  • 基于深度学习卷积神经网络图像识别技术的研究与应用.pdf
  • 2) 既然我们的名字叫人工智能深度学习卷积神经网络入门,这个课程的特点就在于成本最低的, 让你最快速的,最容易的入门。人工智能深度学习卷积神经网络入门的最大的难点在于入门入不了,从而最终放弃。俗话说师傅...
  • 《机器学习从入门到入职》深度学习卷积神经网络算法代码框架用的是keras,数据集选用mnist手写字体识别
  • 想要了解深度学习以及卷积神经网络的人群,学完会有个质的飞跃
  • 原创深度学习卷积神经网络Matlab工具箱源代码下载-DeepLearnToolbox_CNN_lzbV2.0.zip [原创]深度学习Matlab工具箱源代码下载
  • 卷积神经网络 文章目录卷积神经网络一、卷积神经网络基础1.基础知识2.卷积层的简洁实现3.池化二、LeNet三、常见的一些卷积神经网络1.AlexNet2.VGG3.NiN4.GoogLeNet   一、卷积神经网络基础 1.基础知识 二维互相关...
  • 一、卷积神经网络的概述 卷积神经网络(ConvolutionalNeural Network,CNN)最初是为解决图像识别等问题设计的,CNN现在的应用已经不限于图像和视频,也可用于时间序列信号,比如音频信号和文本数据等。CNN作为一个...
  • 使用卷积神经网络实现验证码识别,识别的验证码为四位,其中每位为大小写字母和数字中的任意一个。准确率达到97+%
  • 根据深度学习的原理,用pytorch实现猫狗分类算法,识别率98%。时间在20ms内。利用自己修改的卷积神经网络实现的,值得学习的好例子
  • 深度学习卷积神经网络(详解版)

    千次阅读 多人点赞 2020-11-17 16:06:38
    感受野2.1 生物上的定义2.2 深度学习的定义2.3 感受野的作用2.4 感受野的计算公式2.5 感受野对网络的影响三:卷积神经网络的构成元素3.1 卷积核3.2 步长3.3 填充3.4 输出图像(特征图)四:卷积的计算 一、全局...


    一、全局连接VS局部连接

           生物的神经网络是通过刺激而发生的连接,这说明在生物的神经网络中,什么时候需要哪部分神经网络的神经元,哪部分神经元就会被激活(连接)。
           而我们一开始根据生物神经网络模拟的人工神经网络的相邻神经元之间是全部激活的(全连接),这样不但增加了整个网络的权重和计算量,也增加了无用的信息,使网络容易过拟合。那么在人工神经网络中我们如何去模拟类似生物神经网络的这个过程呢?也就是不用把所有神经元都激活。

           这说明在一幅图中,如果要识别单独的某个物体,模型只要感受到局部的信息即可,无需感受到全图的信息。所以只要提取对应局部位置的特征信息即可,无需把图像上所有的信息都计算一遍。如果我们能够设计出一个只需要提取图像局部信息的网络模型,就可以解决这个问题了,这也就是相当于神经元的局部激活,只在图像的对应位置做计算。

           这样一来,原来在整幅图上做的运算,就变成了在局部做运算了。

           比如我们看到图上有人有马,我们在分辨马和人的位置的时候,是否需要观看整幅图呢?显然不是,我们只是针对目标所在的局部区域进行观看并分析。
           同样,我们判断哪个是人,哪个是马的时候也不一定要看完所有部位,我们只需要看到人的头、胳膊、腿等部位就可以判断图像表示的是人了,很明显,这也是基于局部区域特征而做出的判断。而对于每个小的局部信息做一个处理就要简单的多了,同计算量会大幅减少。

    1.1 局部神经元连接的优势

    在这里插入图片描述
    局部连接,可以看到上一层网络中只有3个神经元和下一层网络的神经元相连接(这张图的流程是从下到上)。

    总结:

    1. 局部连接的第一个作用是减少计算参数。
    2. 局部连接的第二个重要作用就是权重共享。

    1.2 全连接网络的权重参数量

           以mnist数据为例,一张图像的大小是[28,28,1],那就意味着网络输入一张图片的参数就有28 x 28 =784个,如果隐藏层用了256个神经元,那么简单计算一下,第一层网络需要的参数个数(w和b)就有784 x 256+256个,第二层网络需要的参数个数(w和b)就有(256 x 10+10)个。

           而整个网络的计算量就有(784* 256+256)+ (256*10+10) 个,这个参数太多了,随便进行一次反向传播计算量都是巨大的,从计算资源和调参的角度都不建议用传统的神经网络。

    1.3 神经网络的局部特征提取(卷积)

           卷积层最主要的两个特征就是局部连接和权值共享,或者叫做稀疏连接和参数共享。所谓局部连接,就是卷积层的节点仅仅和其前一层的部分节点相连接,只用来学习局部特征。

           局部感知结构的构思理念来源于动物视觉的皮层结构,其指的是动物视觉的神经元在感知外界物体的过程中起作用的只有一部分神经元。

           在计算机视觉中,图像中的某一块区域中,像素之间的相关性与像素之间的距离同样相关,距离较近的像素间相关性强,距离较远则相关性就比较弱,由此可见局部相关性理论也适用于计算机视觉的图像处理领域。

           因此,局部感知采用部分神经元接受图像信息,再通过综合全部的图像信息达到增强图像信息的目的。

           在一幅图像中,想要提取局部数据的特征,最直接的办法就是让这些局部的数据和一个对应大小的权重矩阵做内积运算。这个权重矩阵在神经网络中称为卷积核。

           在神经网络的各个维度的数据中,通过滑动滤波器提取局部数据特征的过程,称为神经网络的卷积过程。这种提取网络特征的模型被称为卷积神经网络模型。

    1、对原始图像的边缘进行某种方式的填充(一般为0填充)。
    2、将掩膜划过整幅图像,计算图像中每个像素点的滤波结果。

    二:感受野

    2.1 生物上的定义

           感受器受刺激兴奋时,通过感受器官中的向心神经元将神经冲动(各种感觉信息)传到上位中枢,一个神经元所反应(支配)的刺激区域就叫做神经元的感受野(receptive field)。

    2.2 深度学习的定义

           在卷积神经网络中,感受野的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。通俗的说,感受野就是输入图像对这一层输出的神经元的影响有多大。

    2.3 感受野的作用

           感受野用来表示网络内部的不同神经元对原图像的感受范围的大小,或者说convNets(cnn)每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。

    2.4 感受野的计算公式

    在这里插入图片描述
           其中,RF是感受野。N_ RF和RF有点像,N代表neighbour, 指的是第n层的a feature在n- 1层的RF,记住N _RF只 是一个中间变量(某一层的感受野),不要和RF混淆。stride是步长, ksize是卷积核大小。

           这个算法从最后一层往前层层迭代直到追溯回input image,从而计算出感受野(RF)。

           可以看到在Conv1中的每一个单元所能看到的原始图像范围是3 x 3,而由于Conv2的每个单元都是由2 x 2范围的Conv1构成,回溯到原始图像,由于卷积核移动的时候重叠了一个像素,应该被减去,最终其实是能够看到的是5 x 5的原始图像范围。
           因此我们说Conv1的感受野是3 x 3,Conv2的感受野是5 x 5.输入图像的每个单元的感受野被定义为1,这应该很好理解,因为每个像素只能看到自己。

    2.5 感受野对网络的影响

           神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和pooling层,在层与层之间均为局部连接。

           神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含全局语义层次更高的特征。相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。

    三:卷积神经网络的构成元素

           卷积神经网络的元素一般由输入图像、卷积核、步长、填充、通道变化、输出图像(特征图)构成。

    3.1 卷积核

           卷积核的形状一般是二维的,指的是卷积核在各个维度上的数据卷积,而各个维度上的卷积核其实是同时卷积的,这样各个维度上的卷积核就形成了一个滤波器,所以说滤波器是三维的。但是在深度学习中,二者的叫法有时候不是很明显。

    1、180度 翻转卷积核。
    2、不做边界填充,直接对图像进行相应位置乘积和。

           卷积核就是图像处理时,给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核。

           数学中的卷积和卷积神经网络中的卷积严格意义上是两种不同的运算。数学中卷积,主要是为了诸如信号处理、求两个随机变量和分布而定义的运算,所以需要“翻转”是根据问题的需要而确定的。

           卷积神经网络中"卷积”,是为了提取图像的特征,其实只借鉴了“加权求和”的特点。数学中的“卷积核”都是已知的或者给定的,卷积神经网络中“卷积核”本来就是trainable的参数,不是给定的,根据数据训练学习的,那么翻不翻转还有什么关系呢?因为无论翻转与否对应的都是未知参数!

           所以说,在CNN中,卷积核的权值不需要提前设计。在CNN中,卷积核一般都是正方形。

    3.2 步长

           卷积核(滤波器)每次移动的像素单位就称为步长。

    3.3 填充

           卷积运算后,输出图片尺寸缩小,越是边缘的像素点,对于输出的影响越小,因为卷积运算在移动的时候到边缘就结束了。中间的像素点有可能会参与多次计算,但是边缘像素点可能只参与一次。所以我们的结果可能会丢失边缘信息。

           那么为了解决这个问题,我们引入padding,什么是padding呢,就是我们认为的扩充图片,在图片外围补充一些像素点,把这些像素点初始化为0.

           经过padding之后,原始图片尺寸为(n+2p) x (n+2p),filter尺寸为fxf,则卷积后的图片尺寸为(n+2p-f+1) x (n+2p-f+1)。若要保证卷积前后图片尺寸不变(步长为1),则p应满足: p=(f-1) / 2

           那么填充的优势是什么呢?

           (1) 保持边界信息,如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次,但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加padding之后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。
           (2) 步长为2的时候,卷积不会丢失信息。

           (3) 卷积神经网络的卷积层加入Padding,可以使得卷积层的输入大小和输出大小一致。

    3.4 输出图像(特征图)

           每层卷积结束后得到的卷积值的组合就是特征图。

    四:卷积的计算

    在这里插入图片描述
           根据对卷积的结构分析,可以确定,卷积过程中的权重参数是和卷积核的大小、输入通道数、输出通道数相关的,而和输入大小、输出大小无关的。

           比如图像输入大小是6 x 6 x 3,卷积核大小是3 x 3,通道变化是从3变到 2,也就是说卷积核从3个通道的输入变成了输出2个通道的输出,当然对应的特征图也成了2个,那么卷积层的参数量就是3 x 3 x 3 x 2+2,后面加的2是输出通道上的偏置。

           根据前面的知识,已经知道卷积层的参数量就是卷积核的形状乘以输入通道数,再乘以输出通道数,再加偏置。即(kernel WkernelL H in channels* out channels+out channels) ,例如某一层卷积神经网络的卷积核是3*3,输入通道为1,输出通道为16,那么这一层网络的参数量就是:
    3 x 3 x 1 x 16+16=160,后面加的16是输出通道上的偏置。

           那么在卷积的某一层当中的运算量到底是多少,这个结果的影响就不仅仅是通道和卷积核的因素了,还和输出特征图的大小,以及批次有关系的。
           例如某一层卷积神经网络的卷积核是3 x 3,输入通道为1,输出通道为16,输出的特征图大小是14 x 14,如果输入数据的批次是100,那么还要乘以这个批次,所以这一层网络的运算量就是:
           (3 x 3 x 1 x 16 +16) x 14 x 14 x 100 = 2822400 + 313600 = 3136000

           卷积核在图上每滑动一次,相当于就做了一次运算结果的变化,所以最后的特征图大小正是卷积核在图上的横向和竖向上的滑动总次数,另外还有批次的影响,如果批次是一次输入2张图像,那么计算上还要乘以2才可以。

    五:卷积神经网络的运行过程

    (1)每个通道上的滤波器对应每个通道上的数据进行卷积,得到每个通道上的特征图。

    (2)每个通道上的滤波器对应每个通道上的数据进行卷积,得到每个通道上的特征图。

    (3)最后对这个特征图加上偏置,就得到了卷积神经网络在这一输出通道上的净输出。

    六:卷积的优势

    (1) 局部感知
    (2) 共享权重
    (3) 参数量少
    (4) 训练时间短
    (5) 模型收敛快
    (6) 精度高

    七:常见的卷积类型

    7.1 一维卷积

    左图:横轴表示次数,纵轴表示频率(统计量)。
    右图:表示卷积核

           一维卷积常用于序列模型,信号处理、自然语言处理领域。

    7.2 二维卷积

           二维卷积常用于计算机视觉、图像处理领域。

    7.3 三维卷积

           三维卷积常用于医学领域(CT影像),视频处理领域(检测动作及人物行为)

    八:分组卷积

           正常情况下,通道之间的全连接,通道融合是充分的。通道分组数越多,通道融合越不充分。

           当处理的问题比较简单的时候,如利用mnist数据集进行十分类,可以利用分组卷积。当处理问题比较复杂的时候,用了分组卷积以后,就会出现减少参数量,降低精度的情况。

           那我们应该怎么做,将输出的特征图通道进行打乱,再去分组,然后利用卷积核进行卷积,得到的结果就相当于把分组之后的通道融合了。这种处理方式叫做通道混洗。

    九:扩张(空洞)卷积

           扩张卷积(dilated convolutions)又名空洞卷积(atrous convolutions),向卷积层引入了一个称为“扩张率(dilation rate)”的新参数,该参数定义了卷积核处理数据时各值的间距。

           换句话说,相比原来的标准卷积,扩张卷积(dilated convolution)多了一个超参数称之为“扩张率”(dilationrate),指的是卷积核各点之间的间隔量,[ 通常convolution的dilatation rate为1],扩张卷积在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(featuremap)的大小保持不变。

           一个扩张率为2的3X3卷积核,感受野与5X5的卷积核相同,但参数数量仅为9个,是5X5卷积参数数量的36%。扩张卷积经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑扩张卷积。

    十:转置卷积

           卷积的时候是将卷积核和对应输入矩阵中的g个值相乘,并且相加,将其转变为一个输出值。一个卷积操作是一个多对一(many-to-one)的映射关系。

           反过来操作。我们想要将输入矩阵中的一个值映射到输出矩阵的g个值,这将是一个一对多(one-to-many)的映射关系。这个就像是卷积操作的反操作,其核心观点就是用转置卷积。

           之所以叫转置卷积是因为,它其实是把我们平时所用普通卷积操作中的卷积核做一个转置,然后把普通卷积的输出作为转置卷积的输入,而转置卷积的输出,就是普通卷积的输入。

           根据反卷积的数学含义,通过反卷积可以将通过卷积的输出信号,完全还原输入信号。转置卷积只能还原shape大小,而不能还原value。所以说转置卷积与真正的反卷积有点相似,因为两者产生了相同的空间分辨率。

           在使用转置卷积所需要注意的几点是:
    (1)转置卷积的过程中图像上采样,越来越大,通道越来越浅。需要注意的是,转置前后padding, stride仍然 是卷积过程指定的数值,不会改变。
    (2) stride=1时候的反卷积,不进行填充。当stride>1的时候,需要在原输入中插入0像素值。
    (3)转置卷积一般会放大图像,也称为上采样过程,而卷积一般是缩小图像,也称为下采样过程。

    展开全文
  • [人工智能]深度学习卷积神经网络的秒懂各种操作

    万次阅读 多人点赞 2017-05-15 18:49:10
    作者:深度学习思考者来给大家总结一下卷积神经网络的各种操作 ,大家能够秒懂!先来几个静态图: 卷积算法的一些神奇GIF动画,包括不同的padding和strides。 上述是四种不同的卷积方式,大家都知道是哪种...

    作者:深度学习思考者
    ###来给大家总结一下卷积神经网络的各种操作 ,大家能够秒懂!
    先来几个静态图:
    这里写图片描述
    这里写图片描述
    这里写图片描述
    卷积算法的一些神奇GIF动画,包括不同的padding和strides。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    上述是四种不同的卷积方式,大家都知道是哪种卷积吧?欢迎评论区给出答案!

    #搞懂卷积神经网络流程
    这里写图片描述
    这里写图片描述
    #揭示输入的图像的真面目
    这里写图片描述
    这里写图片描述
    这里写图片描述

    这里写图片描述

    #结束
    这里写图片描述

    展开全文
  • 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含[卷积](https://baike.baidu.com/item/卷积/9411006)计算且具有深度结构的[前馈神经网络](https://baike.baidu.com/item/前馈神经网络/7580523)...
  • 深度学习卷积神经网络从入门到精通

    万次阅读 多人点赞 2019-03-28 23:30:12
    有兴趣的读者可以从本书开始,通过图像分类、识别、检测和分割的案例,逐步深入卷积神经网络的核心,掌握深度学习的方法和精髓,领会 AlphaGo 战胜人类世界冠军的奥秘。 作者简介 李玉鑑(鉴) 北京工业大学教授,...

    内容简介

    全面介绍各种卷积神经网络的模型、算法及应用,指导读者把握其形成和演变的基本脉络,以帮助读者在较短的时间内从入门达到精通的水平。有兴趣的读者可以从本书开始,通过图像分类、识别、检测和分割的案例,逐步深入卷积神经网络的核心,掌握深度学习的方法和精髓,领会 AlphaGo 战胜人类世界冠军的奥秘

    作者简介

    李玉鑑(鉴)

    北京工业大学教授,博士生导师。华中理工大学(现名为华中科技大学)本科毕业,中国科学院数学研究所硕士毕业,中国科学院半导体研究所博士毕业,北京邮电大学博士后出站。

    曾在中国科学院生物物理所工作,对意识的本质问题关注过多年,并在《21 世纪 100 个交叉科学难题》上发表《揭开意识的奥秘》一文,提出了解决意识问题的认知相对论纲领,对脑计划和类脑研究具有宏观指导意义。长期围绕人工智能的核心目标,在神经网络、自然语言处理、模式识别和机器学习等领域开展教学、科研工作,发表国内外期刊、会议论文数十篇,是本书和《深度学习导论及案例分析》的第一作者。

    本书内容

    前言

    随着谷歌的 AlphaGo、IBM 的 Watson 和百度的小度机器人等智能产品的问世,人工智能成为大众热烈讨论的焦点。深度学习作为其中的核心技术之一,经过学术界与工业界的积极推动,已经被广泛应用于计算机视觉、语音识别和自然语言处理等诸多领域。如果读者想了解深度学习的总体概况,可参考作者编写的《深度学习导论及案例分析》[1]一书。

    本书专注讨论深度学习中应用非常广泛的模型——卷积神经网络,该模型特别适用于图像分类和识别、目标分割和检测以及人工智能游戏方面,受众对象包括计算机、自动化、信号处理、机电工程、应用数学等相关专业的研究生、教师以及算法工程师和科研工作者。

    卷积神经网络是一种特殊的多层感知器或前馈神经网络,具有局部连接、权值共享的特点,其中大量神经元按照一定方式组织起来对视野中的交叠区域产生反应。其前身是日本学者 Fukushima 在感受野概念的基础上提出的神经认知机模型。利用神经认知机的思想,LeCun 等人在 1998 年提出了卷积神经网络的现代雏形 LeNet。2012 年,Krizhevsky 等人取得了卷积神经网络研究的重大突破,提出了著名的 AlexNet。AlexNet 在 ImageNet 的大规模图像分类竞赛中取得优异成绩,为深度学习的全面推广立下了汗马功劳。随后,卷积神经网络模型如雨后春笋般出现,如 VGGNet、GoogLeNet、SPPNet、ResNet、DenseNet、Faster R-CNN、YOLO、SSD、FCN、PSPNet、Mask R-CNN、SiameaseNet、SqueezeNet、DCGAN、NIN,以及在人工智能游戏中用到的深度强化模型等。

    本书的最大特色是对卷积神经网络进行由浅入深的分类描述,依次包括:现代雏形、突破模型、应变模型、加深模型、跨连模型、区域模型、分割模型、特殊模型、强化模型和顶尖成就。这种分类框架是在模型概述和预备知识的基础上逐步展开的,既方便读者入门学习,又有助于读者深入钻研。

    本书的另一大特色是结合 Caffe 或 TensorFlow 的代码来说明各种卷积神经网络模型的具体实现过程,并通过应用案例说明其价值和意义所在。典型的应用案例包括:字符识别、交通标志识别、交通路网提取、大规模图像分类、人脸图像性别分类、图像目标检测、图像语义分割、图像实例分割、人脸图像生成、Flappy Bird 智能体、AlphaGo 的仿效围棋程序等。读者可以通过运行各个应用案例的程序代码和实验数据,检验其演示效果。

    与其他深度学习的书籍相比,本书对卷积神经网络的内容涵盖更为广泛、模型讨论更为深入、应用实践更为细致。特别是,还总结了一些运行卷积神经网络的配置技巧和操作经验。比如,在运行 Mask R-CNN 的时候,需要先安装读取 COCO 数据集的程序,然后再进行训练或测试。在运行 SSD 的时候,可视化结果只给出了类别编号而没有给出类别名,作者对此已进行了修改,以方便读者按照书中所示代码显示相应的类别名。把这些经过摸索得到的技巧和经验分享给读者,对提高读者的深度学习技术水平,无疑具有很好的加速作用。

    本书是集体努力的成果,主要作者包括北京工业大学的李玉鑑、张婷、单传辉、刘兆英、聂小广和欧军。他们对全书的内容进行了精心的布局、认真的编写和细致的整理。同时,曾少锋、刘博文、穆红章、余华擎和方皓达等人在文献资料、实现代码和软件工具的收集方面也提供了积极的帮助。此外,华章公司的温莉芳副总经理和张梦玲编辑对本书的排版提出了许多宝贵的意见。最后,需要特别感谢家人的支持,他们也在不知不觉中以各种方式对此书出版做出了贡献。

    限于作者水平,本书难免在内容取材和结构编排上有不妥之处,希望读者不吝赐教,提出宝贵的批评和建议,我们将不胜感激。

    作者

    2018 年 4 月于北京工业大学


    [1] 此书已由机械工业出版社出版,书号为 ISBN 978-7-111-55075-4。——编辑注

    第 1 章 概述

    深度学习是一种实现人工智能的强大技术,已经在图像视频处理、语音处理、自然语言处理等领域获得了大量成功的应用,并对学术界和工业界产生了非常广泛的影响。卷积神经网络是深度学习中最为重要的模型,2012 年以来极大地推进了图像分类、识别和理解技术的发展。而且通过与其他技术相结合,卷积神经网络还可用于设计实现游戏智能体 Q 网络、围棋程序 AlphaGo,以及语音识别和机器翻译软件等各种应用系统,所取得的成就已经使人工智能迈进了盛况空前、影响深远的新时代。本章主要介绍深度学习的起源和发展,说明卷积神经网络的形成和演变,分析卷积神经网络的应用和影响,讨论卷积神经网络的缺陷和视图,总结卷积神经网络的平台和工具,并概括本书的内容结构及案例数据。

    1.1 深度学习的起源和发展

    深度学习的概念起源于人工神经网络,本质上是指一类对具有深层结构的神经网络进行有效训练的方法。神经网络是一种由许多非线性计算单元(或称神经元、节点)组成的分层系统,通常网络的深度就是其中不包括输入层的层数。

    最早的神经网络是心理学家 McCulloch 和数理逻辑学家 Pitts 在 1943 年建立的 MP 模型[1],如图 1.1 所示。MP 模型实际上只是单个神经元的形式化数学描述,具有执行逻辑运算的功能,虽然不能进行学习,但开创了人工神经网络研究的时代。1949 年,Hebb 首先对生物神经网络提出了有关学习的思想[2]。1958 年,Rosenblatt 提出了感知器模型及其学习算法[3]。在随后的几十年间,尽管神经网络的研究出现过一段与 Minsky 对感知器的批评有关的低潮期[4],但仍然在逐步向前推进,并产生了许多神经网络的新模型[5-10]。到 20 世纪八九十年代,这些新模型终于引发了神经网络的重生,并掀起了对神经网络研究的世界性高潮[11]。其中最受欢迎的模型至少包括:Hopfield 神经网络[8]、波耳兹曼机[9]和多层感知器[10]。最早的深度学习系统也许就是那些通过数据分组处理方法训练的多层感知器[12]。多层感知器,在隐含层数大于 1 时常常称为深层感知器,实际上是一种由多层节点有向图构成的前馈神经网络[13],其中每一个非输入节点是具有非线性激活函数的神经元,每一层与其下一层是全连接的。此外,Fukushima 提出的神经认知机可能是第一个具有“深度”属性的神经网络[14-16],并且也是第一个集成了“感受野”思想的神经网络[17-18],以便有效地对视觉输入的某些特性起反应。更重要的是,神经认知机促成了卷积神经网络结构的诞生和发展[19]。而卷积神经网络作为一种判别模型,极大地推进了图像分类、识别和理解技术的发展,在大规模评测比赛中成绩卓著[20],盛誉非凡。

    图 1.1

    在训练神经网络方面,反向传播无疑是最常用、最著名的算法[10,21]。这是一种有监督学习算法,需要教师指导信号。也就是说,应提供一组训练样本,对给定的输入,指明相应的输出。然而,直到 20 世纪 80 年代末期,反向传播似乎还只是对浅层网络有效,尽管原理上也应对深层网络有效。浅层网络主要是指具有 1 个隐含层的神经网络,如图 1.2 所示。深层网络则主要是指具有 2 个及以上隐含层的神经网络,如图 1.3 所示。在早期的应用中,大多数多层感知器都只用 1 个或很少的隐含层,增加隐含层几乎没有什么经验上的收益。这似乎可以从神经网络的单隐层感知器逼近定理中找到某种解释[22,23],该定理指出,只要单隐层感知器包含的隐含神经元足够多,就能够在闭区间上以任意精度逼近任何一个多变量连续函数。直到 1991 年的时候,关于多层感知器在增加层数时为什么难学习的问题,才开始作为一个深度学习的基本问题,得到了完全的理解。

    图 1.2 浅层(单隐层)神经网络

    图 1.3 深层神经网络

    1991 年,Hochreteir 正式指出,典型的深层网络存在梯度消失或爆炸问题,从而明确确立了深度学习的一个里程碑[24]。该问题是说,累积反向传播误差信号在神经网络的层数增加时会出现指数衰减或增长的现象,从而导致数值计算快速收缩或越界。这就是深层网络很难用反向传播算法训练的主要原因。需要指出的是,梯度消失或爆炸问题又称为长时滞后问题,在循环神经网络中也会出现[25]

    为了在一定程度上克服梯度消失或爆炸问题,1990~2000 年,Hochreiter 的深邃思想推动了若干新方法的探索[26-28]。但除了卷积神经网络以外[29],训练深层网络的问题直到 2006 年才开始得到严肃认真的对待。一个重要的原因是,1995 年之后支持向量机的快速发展减缓了神经网络的有关工作进展[30]

    普遍认为,深度学习正式发端于 2006 年,以 Hinton 及其合作者发表的两篇重要论文为标志:一篇发表在《Neural Computation》上,题目为“A fast learning algorithm for deep belief nets”[31];另一篇发表在《Science》上,题目为“Reducing the dimensionality of data with neural networks”[32]。从那以后,大量的深度学习模型开始重新受到广泛关注,或如雨后春笋般迅速发展起来,其中主要包括受限波耳兹曼机(Restricted Boltzman Machine,RBM)[33]、深层自编码器(deep AutoEncoder,deep AE)[32]、深层信念网络(deep belief net)[31]、深层波耳兹曼机(Deep Boltzman Machine,DBM)[34]、和积网络(Sum-Product Network,SPN)[35]、深层堆叠网络(Deep Stacked Network,DSN)[36]、卷积神经网络(Convolutional Neural Network,CNN)[19]、循环神经网络(Recurrent Neural Network,RNN)[25]、长短期记忆网络(Long Short-Term Memory network,LSTM network)[27]、强化学习网络(Reinforcement Learning Network,RLN)[37]、生成对抗网络(Generative Adversarial Network,GAN)[38]等。通过结合各种有效的训练技巧,比如最大池化(max pooling)[39]、丢失输出(dropout)[40]和丢失连接(dropconnect)[41],这些深度学习模型取得了许多历史性的突破和成就,例如手写数字识别[32]、ImageNet 分类[20]和语音识别[42]。而这些历史性的突破和成就,使深度学习很快在学术界掀起了神经网络的一次新浪潮。其中最主要的原因,当然是深度学习在解决大量实际问题时所表现的性能超越了机器学习的其他替代方法,例如支持向量机[30]

    在理论上,一个具有浅层结构或层数不够深的神经网络虽然在节点数足够大时也可能充分逼近地表达任意的多元非线性函数,但这种浅层表达在具体实现时往往由于需要太多的节点而无法实际应用。一般说来,对于给定数目的训练样本,如果缺乏其他先验知识,人们更期望使用少量的计算单元来建立目标函数的“紧表达”,以获得更好的泛化能力[43]。而在网络深度不够时,这种紧表达可能根本无法建立起来,因为理论研究表明,深度为 k 的网络能够紧表达的函数在用深度为 k-1 的网络来表达时有时需要的计算单元会呈指数增长[44]。这种函数表达的潜在能力说明,深层神经网络(又称深度神经网络)在一定的条件下可能具有非常重要的应用前景。随着深度学习的兴起,这种潜在能力开始逐步显现出来,特别是对卷积神经网络的全面推广应用,使得这种潜在能力几乎得到了淋漓尽致的发挥。

    1.2 卷积神经网络的形成和演变

    卷积神经网络最初是受到视觉系统的神经机制启发、针对二维形状的识别设计的一种生物物理模型,在平移情况下具有高度不变性,在缩放和倾斜情况下也具有一定的不变性。这种生物物理模型集成了“感受野”的思想,可以看作一种特殊的多层感知器或前馈神经网络,具有局部连接、权值共享的特点,其中大量神经元按照一定方式组织起来对视野中的交叠区域产生反应。1962 年,Hubel 和 Wiesel 通过对猫的视觉皮层细胞的研究,提出了感受野的概念[17-18]。1979 年,日本学者 Fukushima 在感受野概念的基础上,提出了神经认知机模型[14-16],该模型被认为是实现的第一个卷积神经网络。1989 年,LeCun 等人首次使用了权值共享技术[45]。1998 年,LeCun 等人将卷积层和下采样层相结合,设计卷积神经网络的主要结构,形成了现代卷积神经网络的雏形(LeNet)[19]。2012 年,卷积神经网络的发展取得了历史性的突破,Krizhevsky 等人采用修正线性单元(Rectified Linear Unit,ReLU)作为激活函数提出了著名的 AlexNet,并在大规模图像评测中取得了优异成绩[46],成为深度学习发展史上的重要拐点。

    在理论上,卷积神经网络是一种特殊的多层感知器或前馈神经网络。标准的卷积神经网络一般由输入层、交替的卷积层和池化层、全连接层和输出层构成,如图 1.4 所示。其中,卷积层也称为“检测层”,“池化层”又称为下采样层,它们可以被看作特殊的隐含层。卷积层的权值也称为卷积核。虽然卷积核一般是需要训练的,但有时也可以是固定的,比如直接采用 Gabor 滤波器[47]。作为计算机视觉领域最成功的一种深度学习模型,卷积神经网络在深度学习兴起之后已经通过不断演化产生了大量变种模型。

    图 1.4 标准卷积神经网络

    从结构的角度看,卷积神经网络起初只能处理黑白或灰度图像,变种模型通过把红、绿、蓝 3 个颜色通道作为一个整体输入已能直接处理彩色图像[46],有些还可以直接处理多帧图像甚至连续图像[48]。同时,变种模型可以使用多个相邻的卷积层或多个相邻的池化层,也可以使用重叠池化和最大池化,还可以使用修正线性单元、渗漏修正线性单元(Leaky ReLU,LReLU)、参数修正线性单元(Parametric ReLU,PReLU)或指数线性单元(Exponential Linear Unit,ELU)取代 sigmoid 单元作为激活函数[46,49-51],也可以在输出层采用软最大函数 softmax 替代 sigmoid 函数以产生伪概率。此外,卷积神经网络可以设计成孪生结构(siamese architecture),把原始数据映射到目标空间,产生对几何扭曲的鲁棒性[52]。最后,卷积神经网络可以设计成快道结构,允许信息通过快道无阻碍地跨越多层流动,使得用梯度下降训练非常深的网络变得更加容易[53]

    从卷积核的角度看,卷积神经网络可以通过采用非常小的卷积核,比如 1×1 和 3×3 大小,被加深成一个更深的网络,比如 16 层或 19 层的 VGGNet[54]。如果采用参数修正线性单元代替修正线性单元,可以把 VGGNet 发展成 MSRANet[55]。而且,卷积神经网络通过使用小卷积核在保持总体计算代价的条件下增加深度和宽度,并与“摄入模块(inception module)”进行集成,可以用来建立谷歌网络(GoogLeNet)[56]。此外,卷积神经网络通过使用微型多层感知器代替卷积核,还可以被扩展成更为复杂的网络,例如“网中网(Network In Network,NIN)”[57]

    从区域的角度看,区域卷积神经网络(Region-based CNN,R-CNN)可以用来抽取区域卷积特征,并通过区域提议进行更加鲁棒的定位和分类[58]。空间金字塔池化网络(Spatial Pyramid Pooling Net,SPPNet)可以克服其输入大小固定的缺点,办法是在最后一个卷积层和第一个全连接层之间插入一个空间金字塔池化层[59]。不管输入的大小如何,空间金字塔池化层都能够产生固定大小的输出,并使用多尺度空间箱(spatial bin)代替滑动窗口对在不同尺度上抽取的特征进行池化。虽然与 R-CNN 相比,空间金字塔池化网络具有能够直接输入可变大小图像的优势,但是它们需要一个多阶段的管道把特征写入硬盘,训练过程较为麻烦。为了解决这个训练问题,可以在 R-CNN 中插入一个特殊的单级空间金字塔池化层(称为感兴趣区池化层,ROI pooling layer),并将其提取的特征向量输入到一个最终分化成两个兄弟输出层的全连接层,再构造一个单阶段多任务损失函数对所有网络层进行整体训练,建立快速区域卷积神经网络(Fast R-CNN)[60],其优点是可以通过优化一个单阶段多任务损失函数进行联合训练。为了减少区域提议的选择代价,可以插入一个区域提议网络与 Fast R-CNN 共享所有卷积层,进一步建立更快速区域卷积神经网络(Faster R-CNN),产生几乎零代价的提议预测对象(或称为目标、物体)边界及有关分数[61]。为了获得实时性能极快的对象检测速度,可以把输入图像划分成许多网格,并通过单个网络构造的整体检测管道,直接从整幅图像预测对象的边框和类概率建立 YOLO 模型,只需看一遍图像就能知道对象的位置和类别[62]。为了更准确地定位对象,还可以在多尺度特征图的每个位置上,使用不同长宽比的缺省框建立单次检测器(SSD)来取代 YOLO[63]。此外,采用空间变换模块有助于卷积神经网络学到对平移、缩放、旋转和其他扭曲更鲁棒的不变性[64]。最后,可以把 Faster R-CNN 扩展成掩膜区域卷积神经网络(Mask R-CNN),在图像中有效检测对象的同时,还能够对每个对象实例生成一个高质量的分割掩膜[65]

    从优化的角度看,许多技术可以用来训练卷积神经网络,比如丢失输出[40,66]、丢失连接[41]和块归一化(batch normalization)[67]。丢失输出是一种减小过拟合的正则化技术,而丢失连接是丢失输出的推广。块归一化(或批量归一化)则是按迷你块大小对某些层的输入进行归一化处理的方法。此外,残差网络(Residual Network,ResNet)采用跨越 2~3 层的连接策略也是一种重要的优化技术,可以用来克服极深网络的训练困难。借助残差学习能够快速有效地成功训练超过 150 层甚至 1000 层的深层卷积神经网络,它在 ILSVRC&COCO 2015 的多项任务评测中发挥了关键作用[68],全部取得了第一名的突出成绩。最后,为了优化模型的结构,还可以采用火焰模块(fire module)建立卷积神经网络的挤压模型 SqueezeNet[69],也可以结合深度压缩(deep compression)技术进一步减少网络的参数[70]

    从模型演变的角度看,卷积神经网络的发展脉络如图 1.5 所示。从图中可以看出,现代卷积网络以 LeNet 为雏形,在经过 AlexNet 的历史突破之后,演化生成了很多不同的网络模型,主要包括:加深模型、跨连模型、应变模型、区域模型、分割模型、特殊模型和强化模型等。加深模型的代表是 VGGNet-16、VGGNet-19 和 GoogLeNet;跨连模型的代表是 HighwayNet、ResNet 和 DenseNet;应变模型的代表是 SPPNet;区域模型的代表是 R-CNN、Fast R-CNN、Faster R-CNN、YOLO 和 SSD;分割模型的代表是 FCN、PSPNet 和 Mask R-CNN;特殊模型的代表是 SiameseNet、SqueezeNet、DCGAN、NIN;强化模型的代表是 DQN 和 AlphaGo。

    图 1.5 卷积神经网络的演变

    1.3 卷积神经网络的应用和影响

    自从卷积神经网络在深度学习领域闪亮登场之后,很快取得了突飞猛进的进展,不仅显著提高了手写字符识别的准确率,而且屡屡在图像分类与识别、目标定位与检测等大规模数据评测竞赛中名列前茅、战绩辉煌。此外,卷积神经网络在人脸验证、交通标志识别、视频游戏、视频分类、语音识别、机器翻译、围棋程序等各个方面也获得广泛的成功应用。

    在手写字符识别方面,LeCun 等人早在 1998 年就采用卷积神经网络模型使 MNIST 数据集上的错误率达到了 0.95% 以下[19],Simard 等人在 2003 年采用交叉熵训练卷积神经网络把 MNIST 数据集上的错误率进一步降到了 0.4%,Ranzato 等人在 2006 年采用大卷积神经网络和无监督预训练又把 MNIST 数据集上的错误率降到了 0.39%,Ciresan 等人在 2012 年采用卷积神经网络的委员会模型把 MNIST 数据集上的错误率降到了目前的最低水平 0.23%。更详细的统计结果请访问网址 http://yann.lecun.com/exdb/mnist/

    在图像分类方面,由 Krizhevsky、Sutshever 和 Hinton 组织的超级视觉队(SuperVision)于 2012 年实现了一个深层卷积神经网络,参加大规模视觉识别挑战赛(ImageNet Large Scale Visual Recognition Challenge 2012,ILSVRC-2012)时获得了最好的前 5 测试错误率(16.4%),比第二名的成绩低 10% 左右[46]。这个卷积神经网络现在称为 AlexNet,使用了“dropout”优化技术和“ReLU”激活函数,以及非常有效的 GPU 实现,显著加快了训练过程。2013~2017 年的挑战赛中,成绩最好的图像分类系统分别是 Claeifai[71]、GoogLeNet[56]、残差网络[68]、六模型集成(ensemble of 6model)[72]、双通道网络(Dual Path Network,DPN)[73],它们都使用了卷积神经网络的模型结构。这些网络获得的前 5 测试错误率分别为 11.7%、6.7%、3.57%、2.99% 和 3.41%。

    在 ILSVR 2012~2017 年的单目标定位挑战赛上,获得最好错误率的系统都集成了卷积神经网络,分别是 AlexNet[46]、Overfeat[74]、VGGNet[54]、ResNet[68]、集成模型 3(ensemble 3)[72]和双通道网络[73],相应的最好错误率分别为34.2%、29.9%、25.3%、9.02%、7.71% 和 6.22%。在 ILSVRC-2014 的目标检测挑战赛上,Lin 等人将 R-CNN 和 NIN 相结合,获得了 37.2% 的平均准确率[57],Szegedy 等人使用 GoogLeNet 获得了 43.9% 的平均准确率[56]。在 ILSVRC-2015 的目标检测挑战赛上,He 等人将 Faster R-CNN 和 ResNet 相结合,获得了 62.1% 的平均准确率,比第二名高出了 8.5%[68]。在 2016 年的目标检测挑战赛上,Zeng 等人采用门控双向卷积神经网络(gated bi-directional CNN)获得了 66.28% 的平均准确率[75]。在 2017 年的目标检测挑战赛上,Shuai 等人将特征金字塔网络与门控双向卷积神经网络相结合,获得了 73.14% 的平均准确率。

    在人脸验证方面,Fan 等人于 2014 年建立了一个金字塔卷积神经网络(pyramid CNN),在 LFW 数据集上获得了 97.3% 的准确率,其中 LFW 是“Labeled Faces in the Wild”的缩写[76]。2015 年,Ding 等人利用精心设计的卷积神经网络和三层堆叠的自编码器建立了一个复杂的混合模型,在 LFW 数据集上获得了高于 99.0% 的准确率[77]。Sun 等人提出了一个由卷积层和摄入层(inception layer)堆叠而成的 DeepID3 模型,在 LFW 数据集上获得了 99.53% 的准确率[78]。此外,Schroff 等人实现了“FaceNet”系统,在 LFW 和 YouTube 人脸数据集上分别获得了 99.63% 和 95.12% 的准确率[79]

    在交通标志识别方面,Ciresan 等人于 2011 年实现了一个由卷积神经网络和多层感知器构成的委员会机器,在德国交通标志识别标准数据集(German Traffic Sign Recognition Benchmark,GTSRB)上获得了 99.15% 的准确率[80]。2012 年,Ciresan 等人提出了一个多列卷积神经网络,在 GTSRB 上获得了 99.46% 的准确率,超过了人类的识别结果[81]

    在视频游戏方面,Mnih 等人于 2015 年通过结合卷积神经网络和强化学习,开发了一个深度 Q- 网络智能体的机器玩家[37],只需输入场景像素和游戏得分进行训练,就能够让很多经典的 Atari 2600 视频游戏成功学会有效的操作策略,达到与人类专业玩家相当的水平。这种深度 Q- 网络智能体在高维感知输入和行为操纵之间的鸿沟上架起了一座桥梁,能够出色地处理各种具有挑战性的任务。

    在视频分类方面,使用独立子空间分析(Independent Subspace Analysis,ISA)方法,Le 等人于 2011 年提出了堆叠卷积 ISA 网络,能够从无标签视频数据中学习不变的时空特征。该网络在 Hollyword 2 和 YouTube 数据集上分别获得了 53.3% 和 75.8% 的准确率[82]。2014 年,Karpathy 等人对卷积神经网络在大规模视频分类上的效果进行了广泛的经验评估,在 Sports-1M 测试集的 200000 个视频上获得了 63.9% 的 Hit@1 值(即前 1 准确率)[83]。2015 年,Ng 等人采用卷积神经网络和长短期记忆循环神经网络的混合模型,在 Sports-1M 测试集上获得了 73.1% 的 Hit@1 值[84]

    在语音识别方面,Abdel-Hamid 等人于 2012 年第一次证实,使用卷积神经网络能够在频率坐标轴上有效归一化说话人的差异,并在 TIMIT 音素识别任务上将音素错误率从 20.7% 降到 20.0%[85]。这些结果在 2013 年被微软研究院的 Abdel-Hamid 等人和 Deng 等人以及 IBM 研究院的 Sainath 等人使用改进的卷积神经网络结构、预训练和池化技术拓展到大词汇语音识别上[86-87]。进一步的研究表明,卷积神经网络对训练集或者数据差异较小的任务帮助最大[88-90]。此外,通过结合卷积神经网络、深度神经网络和基于 i-vector 的自适应技术,IBM 的研究人员在 2014 年说明他们能够将 Switchboard Hub5′00 评估集的词错误率降至 10.4%。

    在机器翻译方面,Gehring 等人使用一种全新的卷积神经网络模型进行从序列到序列的学习[91],能够在非常大的标准数据集上超越循环神经网络的性能,不仅可以大幅提高翻译速度,同时也提高了翻译质量。比如,这种全新的模型在 WMT’16 英语到罗马尼亚语的翻译任务上可比以前最好的系统提高 1.8 的 BLEU 分数,在 WMT’14 英语到法语的翻译任务上可比 Wu 等人的长短期记忆神经翻译模型提高 1.5 的 BLEU 分数[92],在 WMT’14 英语到德语的翻译任务上可超过当前最高水平 0.5 的 BLEU 分数。

    在围棋程序方面,DeepMind 开发的 AlphaGo 利用深层网络和蒙特卡罗树搜索(Monte Carlo tree search),2015 年 10 月首次在完整的围棋比赛中没有任何让子以 5 比 0 战胜了人类的专业选手、欧洲冠军、职业围棋二段选手樊麾[93],这也是计算机围棋程序首次击败围棋职业棋手。2016 年 3 月,AlphaGo 又以 4 比 1 战胜了人类的顶尖高手、世界冠军、职业围棋九段选手李世石。2016 年末 2017 年初,AlphaGo 在中国棋类网站上以 Master 为注册账号与中日韩数十位围棋高手进行快棋对决,连续 60 局无一败绩。2017 年 5 月,在中国乌镇围棋峰会上,AlphaGo 以 3 比 0 战胜排名世界第一的围棋冠军柯洁。

    1.4 卷积神经网络的缺陷和视图

    从上述应用和成果不难看出,卷积神经网络已经使人工智能迈进了盛况空前、影响深远的新时代。不过这并不等于说,可以用卷积神经网络完全实现人类的智能。虽然现在卷积神经网络分类图像中的对象能够达到与人类匹敌的水平[68],但其视觉与人类的视觉相比仍然是非常不同的[94]。事实上,即使成功训练之后,卷积神经网络也仍然可能错分对抗样本。对抗样本是一种含有人类不可感知的微小扰动的非随机图像,如图 1.6 所示,在一幅熊猫图像中加入微量噪声后,它可能变成一幅对抗熊猫图像的样本,人类仍然能够轻松识别它为熊猫,但卷积神经网络却一口咬定它是长臂猿,详情请参见文献[95]。另外,有些人类根本不能识别的噪声图像,如图 1.7 所示,却可能成为卷积神经网络的欺骗图像,让卷积神经网络以高于 99% 的置信度识别它为一个熟知的对象(比如数字)[96]。因此,卷积神经网络在实际应用中仍然存在一些不易被察觉的潜在缺陷。

    图 1.6 对抗图像样本举例

    图 1.7 欺骗图像举例。随机噪声图像欺骗卷积神经网络,被识别为数字 0~9

    为了更好地理解卷积神经网络的成功与失败,一种办法是采用可视化技术来分析其数据表达并解释其工作机理[97-98],例如以某种可见视图方式来显示激活和特征。通过可视化技术,能够按照逐级上升的顺序展现卷积神经网络各层的直觉期望性质,包括组合性、不变性和类别性。常用可视化技术,比如逆变换(inversion)、激活最大化(activation maximization)和卡通化(caricaturization),是以自然原像概念为基础的。自然原像就是那些看起来具有显著自然特征的图像。通常,一幅图像经过卷积神经网络提取特征后,随着层次的深入,可视化结果会变得越来越模糊和抽象[98]。比如,图 1.8 是用 AlexNet 处理一幅狗的图像后可视化各层特征的结果,看起来逐层模糊和抽象。

    图 1.8 卷积神经网络的逐层可视化举例

    1.5 卷积神经网络的 GPU 实现和 cuDNN 库

    只采用 CPU 在大规模数据集中训练卷积神经网络的速度很慢,因此可以结合图形处理单元(Graphic Processing Unit,GPU)进行加速。GPU 具有单指令多数据流结构,非常适合用一个程序处理各种大规模并行数据的计算问题。最常用的 GPU 是英伟达(Nvidia)生产的。编写 GPU 代码可在 CUDA 环境下进行。CUDA(Compute Unified Device Architecture)是一种用于 GPU 通用计算的并行计算平台和编程模型。它以 C 语言为基础,并对 C 语言进行了扩展,能够在显卡芯片上执行程序。CUDA 提供了一个深度神经网络的 GPU 加速库 cuDNN(CUDA Deep Neural Network),完成了对卷积、池化、归一化和激活函数层等标准操作的快速实现。如果读者想了解更多的相关信息,可参考以下网站:

    1.6 卷积神经网络的平台和工具

    为了在解决各种实际问题中有效地利用深度学习模型,特别是卷积神经网络,现在已经有很多开发平台和工具可以选择。比较常用的有 Theano、TensorFlow、Caffe、Caffe 2、CNTK、MXNet、Torch、Deeplearning4J 和 Keras 等,其中 TensorFlow、Caffe 2 和 MXNet 之间的竞争可能会比较激烈。目前,这些平台和工具还没有任何一种完善到足以解决“所有”的业务问题,大多通过专有解决方案提供先进的机器学习和人工智能的功能,包括手写字符识别、图像识别、视频识别、语音识别、自然语言处理和对象识别等高级功能。下面分别对它们进行简要的说明。

    1)Theano 由蒙特利尔大学学习算法学院的 30~40 名教师和学生集体维护,其创始人是深度学习研究的重要贡献者 Yoshua Bengio。Theano 通过 BSD 许可发布,支持快速开发高效的机器学习算法。Theano 的结构相当简单,以 Python 为代码库和接口,其中 C/CUDA 代码也被打包成 Python 字符串。这对开发者来说很难驾驭、调试和重构。Theano 开创了使用符号图来编程网络的趋势,其符号 API 支持循环控制,使得循环神经网络的实现更容易、更高效。虽然 Theano 是一个很好的学术研究工具,在单个 CPU 上的运行效率较高,但缺乏分布式应用程序管理框架,只支持一种编程开发语言,在开发大型分布式应用程序时可能会遇到挑战。

    2)TensorFlow 来自早期的 Google 库 DistBelief V2,是作为 Google Brain 项目的一部分开发的专有深度网络库。由于 TensorFlow 支持广泛的功能,如图像识别、手写字符识别、语音识别、预测以及自然语言处理,所以在 2015 年 11 月 9 日以 Apache 2.0 许可开源后,谷歌立即获得了大量的关注。有些人评价 TensorFlow 是对 Theano 的重新设计。TensorFlow 在 2017 年 2 月 15 日发布了 1.0 版本,是 8 个先前版本的累积,解决了很多不完整的核心功能和性能问题。TensorFlow 的编程接口包括 Python 和 C++,并支持 Java、Go、R 和 Haskell API 的 alpha 版本接口。另外,TensorFlow 支持精细的网格层,允许用户构建新的复杂层类型,允许模型的不同部分在不同的设备上并行训练,还可以使用 C++Eigen 库在 ARM 架构上编译和优化。经过训练的 TensorFlow 模型可以部署在各种服务器或移动设备上,无须实现单独的解码器或加载 Python 解释器。

    3)Caffe 开创于 2013 年年底,可能是第一个主流的行业级深度学习工具包,由领导 Facebook AI 平台工程的贾扬清负责设计和实现,在 BSD 2-Clause 开源许可后发布。作为一种在计算机视觉界最受欢迎的工具包,Caffe 具有优良的卷积神经网络模型结构,在 2014 年 ImageNet 挑战赛中脱颖而出。Caffe 的运行速度快,学习速度为 4ms/图,推理速度为 1ms/图,在单个 Nvidia K40GPU 上每天处理超过 6000 万张图片,是研究实验和商业部署的完美选择。Caffe 是基于 C++ 的,可以在各种跨平台设备上编译,包括一个 Windows 的端口,支持 C++、Matlab 和 Python 等编程接口。而且,Caffe 拥有一个庞大的用户社区为其深层网络存储库做贡献,包括 AlexNet 和 GoogLeNet 两种流行的用户网络。Caffe 的缺点是不支持细粒度网络层,在构建复合层类型时必须以低级语言完成,对常规网络和语言建模的支持总体上很差。

    4)Caffe 2 是 Caffe 的升级版,于 2017 年 4 月 18 日由 Facebook 根据 BSD 许可协议开源,继续强力支持视觉类型问题,并增加了自然语言处理、手写识别和时间序列预测的循环神经网络和长短期记忆网络。Caffe 2 可以把 Caffe 模型轻松转换为实用程序脚本,但更侧重于模块化、卓越的移动和大规模部署,能够像 TensorFlow 一样使用 C++Eigen 库来支持 ARM 架构,并在移动设备上部署深度学习模型。随着 Facebook 最新宣布其改变航向,Caffe 2 在深度学习社区中为大众所热捧,可能超越 Caffe 成为主要的深入学习框架。

    5)CNTK 开始称为 Computational Network Toolkit(计算网络工具包),但在 CNTK 2.0Beta1 版本根据 MIT 许可发布后被正式更名为 Microsoft Cognitive Toolkit(微软认知套件)。CNTK 最早是由微软的计算机科学家开发的,目的是想要更快、更高效地提高语音识别技术,但很快就超越了语音领域并演变成了一个产品,包括一些领先的国际家电制造商和微软的旗舰产品组在内的客户依靠它来执行各种各样的深度学习任务。CNTK 可以运行在使用传统 CPU 或 GPU 的计算机上,既可以运行在一台笔记本电脑上,也可以运行在数据中心的一系列计算机上,支持使用 Python 或 C++ 编程接口的 64 位 Linux 和 Windows 操作系统,能够轻松处理从相对较小到非常巨大等各种规模的数据集。与 TensorFlow 和 Theano 的组成相似,CNTK 的网络被描述为向量运算(如矩阵的加法/乘法或卷积)的符号图,允许用户构建细粒度的网络层并创造新的复合层类型,而不像 Caffe 那样需要通过低级语言实现。此外,CNTK 又有点类似 Caffe,也是基于 C++ 的,具有跨平台的 CPU/GPU 支持,并在 Azure GPU Lab 提供了最高效的分布式计算性能。目前,CNTK 的主要不足是对 ARM 架构缺乏支持,这限制了其在移动设备上的功能。

    6)MXNet(发音为“mix-net”)起源于卡内基-梅隆大学和华盛顿大学,2017 年 1 月 30 日进入 Apache 基金会成为孵化器项目,是一个功能齐全、可编程和可扩展的深度学习框架,支持各种深度学习模型(比如卷积神经网络、循环神经网络和长短期记忆网络),也是目前唯一支持生成对抗网络模型的深度学习框架。而且,MXNet 提供了混合编程模型(命令式和声明式)的功能、大量编程语言的代码(包括 Python、C++、R、Scala、Julia、Matlab 和 JavaScript),以及强大的扩展能力(如 GPU 并行性和内存镜像、编程器开发速度和可移植性),甚至被有些人称为世界上最好的图像分类器。此外,MXNet 与 Apache Hadoop YARN(一种通用的、分布式的应用程序管理框架)集成,使其成为 TensorFlow 的竞争对手。特别是,亚马逊首席技术官 Werner Vogels 选择公开支持 MXNet,苹果公司在 2016 年收购 Graphlab/Dato/Turi 之后也传闻使用它。

    7)Torch 的主要贡献者是 Facebook、Twitter 和 Nvidia,Google Deep Mind 也有一部分功劳。Torch 按 BSD 3 开源许可发布,以非主流编程语言 Lua 实现,在员工熟练掌握之前很难提高整体效率,限制了其广泛应用。当前的版本 Torch7 提供了一个比 Caffe 更详尽的接口库,可以在上面非常方便地对已有模块实现逻辑复杂的调用。相比于 Caffe,Torch7 开放的接口更多,使用更灵活,很少会通过开发者给它实现新功能,而是依赖它去做扩展。但由于 Lua 语言本身功能偏弱,有点先天不足,所以 Torch7 不适合做层本身的组件开发。此外,Torch 缺乏 TensorFlow 的分布式应用程序管理框架。

    8)Deeplearning4J,简称 DL4J,是用 Java 和 Scala 编写的、由 Apache 2.0 授权的开放源码,支持常用的机器学习向量化工具,以及丰富的深度学习模型,包括受限波耳兹曼机、深信度神经网络、卷积神经网络、循环神经网络、RNTN 和长短期记忆网络等。DL4J 是 SkyMind 的 Adam Gibson 的创意,是唯一与 Hadoop 和 Spark 集成的商业级深度学习框架,内置多 GPU 支持,可协调多个主机线程,使用 Map-Reduce 来训练网络,同时依靠其他库来执行大型矩阵操作。DL4J 在 Java 中开源,本质上比 Python 快,速度与 Caffe 相当,可以实现多个 GPU 的图像识别、欺诈检测和自然语言处理等出色功能。

    9)Keras 是一个高层神经网络的应用程序编程接口(Application Programming Interface,API),由纯 Python 语言编写,并且使用 TensorFlow、Theano 或者 CNTK 作为后端。Keras 的设计有 4 个原则:用户友好、模块性、易扩展性和与 Python 协作。用户友好是指 Keras 提供一致而简洁的 API,以及清晰而有用的 bug 反馈,极大地减少了用户工作量。模块性是指 Keras 将网络层、损失函数、优化器、激活函数等方法都表示为独立的模块,作为构建各种模型的基础。易扩展性是指在 Keras 中只需要仿照现有的模块编写新的类或函数即可添加新的模块,非常方便。与 Python 协作是指 Keras 没有单独的模型配置文件,模型完全由 Python 代码描述,具有更紧凑和更易调试的优点。

    如果读者想了解上述开发工具的更多信息和资料,可以访问下面的网址:

    此外,必须介绍一下 CUDA-convnet。这是一个 C++/CUDA 实现的高性能卷积神经网络库,其中甚至包括更一般的前馈神经网络。目前有 CUDA-convnet 和 CUDA-convnet2 两个版本。CUDA-convnet 可以建立任意层的连通性和网络深度,实现任何有向无环图,使用反向传播算法进行训练,需要 Fermi-generation GPU(GTX 4xx、GTX 5xx 或者 Teslax 系列)。在 CUDA-convnet 的基础上,CUDA-convnet2 主要做了 3 个改进。一是在 Kepler-generation Nvidia GPU 上提高了训练速度(Geforce Titan、K20、K40);二是实现了数据并行、模型并行和二者混合并行的方式[99];三是改进了不太友好的代码,完善了一些不完整的文档,而且仍在不断补充完善。CUDA-convnet 和 CUDA-convnet2 的下载网址如下:

    1.7 本书的内容结构和案例数据

    卷积神经网络是目前应用最广的深度学习模型。本书旨在介绍其中比较重要的模型,并通过演示案例说明有关模型的应用价值。下面简述本书的内容结构及案例数据。

    1.7.1 内容结构

    本书共分为 12 章,有关应用案例的章节、框架和平台汇总在表 1.1 中。

    表 1.1 应用案例的章节、框架和平台

    各章的内容结构描述如下:

    第 1 章为概述,介绍深度学习的起源和发展,说明卷积神经网络的形成和演变,分析卷积神经网络的应用和影响,讨论卷积神经网络的缺陷和视图,总结卷积神经网络的平台和工具。

    第 2 章为预备知识,主要介绍卷积神经网络模型有关的数学基础。

    第 3 章为卷积神经网络的现代雏形 LeNet。首先介绍 LeNet 的原始模型,然后描述 LeNet 的标准模型,接着给出 LeNet 的学习算法,说明 LeNet 的 Caffe 代码,并分析 LeNet 的手写数字识别案例、交通标志识别案例和交通路网提取案例。

    第 4 章为卷积神经网络的突破模型 AlexNet。首先介绍 AlexNet 的模型结构,然后依次说明 AlexNet 的 Caffe 和 TensorFlow 代码,并分析 AlexNet 的大规模图像分类案例,最后简介其改进模型 ZFNet。

    第 5 章为卷积神经网络的应变模型。主要介绍 SPPNet 的模型结构,说明 SPPNet 的 Caffe 代码,并分析 SPPNet 的大规模图像分类案例。

    第 6 章为卷积神经网络的加深模型。主要介绍 VGGNet 和 GoogLeNet 的模型结构,说明它们的 TensorFlow 代码,并分析 VGGNet 的物体图像分类案例和 GoogLeNet 的鲜花图像分类案例。

    第 7 章为卷积神经网络的跨连模型。主要介绍快道网络、残差网络、密连网络和拼接网络。对于快道网络,只描述了模型结构。对于其余 3 个网络,还说明了核心模块的 Caffe 代码实现。此外,还分析了残差网络的大规模图像分类案例、密连网络的物体图像分类案例,以及拼接网络的人脸图像性别分类案例。

    第 8 章为卷积神经网络的区域模型。主要介绍区域卷积神经网络、快速区域卷积网络、更快速区域卷积网络、你只看一次网络和单次检测器。对于前两个网络,只描述了模型结构。对于另外 3 个网络,还说明了它们的 TensorFlow 代码,并分析了它们在 VOC 2007 数据集上的图像目标检测案例。

    第 9 章为卷积神经网络的分割模型。主要介绍全卷积网络、金字塔场景分析网络和掩膜区域卷积网络的模型结构,说明它们的 Caffe 或 TensorFlow 代码,并分析它们的图像语义分割、图像几何分割或图像实例分割等应用案例。

    第 10 章为卷积神经网络的特殊模型。主要介绍 4 种模型,包括孪生网络、挤压网络、生成对抗网络和网中网。不仅给出了它们的模型结构,说明了它们的 Caffe 或 TensorFlow 代码,也分析了它们的手写数字验证、大规模图像分类或人脸图像生成等应用案例。

    第 11 章为卷积神经网络的强化模型。主要介绍深层强化学习的标准模型、学习算法和变种模型,并分析一个笨笨鸟 Flappy Bird 智能体的游戏应用案例。

    第 12 章为卷积神经网络的顶尖成就 AlphaGo。主要介绍 AlphaGo 的设计原理和 AlphaGo Zero 的新思想,并分析一个仿效围棋程序 MuGo 的游戏应用案例。

    1.7.2 案例数据

    各章在介绍卷积神经网络的变种模型时,一般还给出了有关的应用案例。这些案例可能重复用到 13 个不同的数据集(大小信息和下载网址详见表 1.2),分别是:MNIST(Mixed National Institute of Standard and Technology)、GTSRB(German Traffic Sign Recognition Benchmark)、RRSI(Road Remote Sensing Image)、ImageNet 2012、CIFAR-10、Oxford-17、AR、VOC 2007、SIFT Flow、ADE20K、COCO(Common Objects in Context)2014、CelebA 和 Gamerecords。

    表 1.2 案例数据的信息描述和下载网址

    下面依次对每个数据集进行详细介绍。

    1)MNIST 是一个著名的手写数字数据集(如图 1.9 所示),包括 60000 个训练样本,10000 个测试样本。其中,每个样本图像的大小为 28×28 像素,仅包含一个单一的手写数字字符。像素的取值范围是[0,255],其中 0 表示黑,255 表示白,中间值表示灰度级。本书在第 3 章和第 10 章使用了 MNIST 数据集。

    图 1.9 MNIST 的手写数字图像举例

    2)GTSRB 是一个德国交通标志数据集(如图 1.10 所示)。其中有两套训练集和测试集,都包含 43 类交通标志。一套有 39209 个训练样本和 12630 个测试样本,另一套有 26640 个训练样本和 12569 个测试样本。本书在第 3 章的交通标志识别案例中选用了前一套训练集和测试集,但从中去掉了少量样本,只用了 39200 个训练样本和 12600 个测试样本。GTSRB 的图片格式是 .ppm 类型,大小在 15×15 到 250×250 之间不等,每个样本的长宽、兴趣区和标签等注释信息存放在相应的 .csv 文件中。为了便于处理,需要把它们的格式先转换成 .jpg 图像类型,并归一化为 32×32 像素大小。

    图 1.10 GTSRB 的交通标志图像举例

    3)RRSI 是一个交通路网遥感图像的数据集(如图 1.11 所示)。交通路网是指公路、城市道路和单位管辖范围允许社会机动车通行的地方,包括广场、公共停车场等用于公众通行的场所。RRSI 实际上共有 30 幅大小不等的图像和2种标注。本书在第 3 章选用了 11 幅来训练,5 幅来测试,进行路网自动提取。

    图 1.11 RRSI 的交通路网遥感图像举例

    4)ImageNet 是一个拥有超过 1500 万幅图像、约 22000 个类别的数据集(如图 1.12 所示),可用于大规模图像识别、定位和检测的研究。本书在第 4 章、第 5 章、第 7 章和第 10 章使用了 2012 年大规模图像视觉识别比赛(Large Scale Visual Recognition Competition,ILSVRC)的数据集 ImageNet(即 ImageNet 2012)设计图像分类案例。ImageNet 2012 包含 1281167 幅训练图像和 50000 幅测试图像,共有 1000 个类别。训练集中各类图像的数目可能不同,最少为 732 幅,最多为 1300 幅。而测试集中各类图像的数目都是 50 幅。

    图 1.12 ImageNet 2012 的物体图像举例

    5)CIFAR-10 是一个常见物体图像数据集(如图 1.13 所示),分为 10 个类别,包含 60000 幅 32×32 的彩色图像,50000 幅用于训练,10000 幅用于测试。注意:根据表 1.2 中的网址下载的 CIFAR-10 是经过封装的,有 3 个版本:Python、Matlab 和 Binary。本书在第 6 章和第 7 章选用了 Binary 版本。

    图 1.13 CIFAR-10 的物体图像举例

    6)Oxford-17 是一个鲜花图像数据集(如图 1.14 所示),其中包含 1360 幅图像,分为 17 类,每类 80 幅图像,大小不尽相同。本书在第 6 章随机选了 1088 幅图像作为训练集,其余 272 幅图像作为测试集,设计了 GoogLeNet 的鲜花图像分类案例。

    图 1.14 Oxford-17 的鲜花图像举例

    7)AR 是一个人脸图像数据集(如图 1.15 所示),包含 126 个人在不同表情、光照和妆容条件下的 4000 多幅人脸图像,但只能下载 100 个人的 2600 幅。本书在第 7 章的 CatNet 性别分类案例中从中选择了 40 名男性和 40 名女性的 2080 幅图像作为训练集,其余的 520 幅图像作为测试集。

    图 1.15 AR 的人脸图像举例

    8)VOC 2007(即 Pascal Voc 2007)是一个关于物体和场景的图像数据集(如图 1.16 所示),可以用于目标检测和语义分割任务。Pascal VOC 的全名是“Pattern Analysis,Statistical Modelling and Computational Learning Visual Object Classes”,指的是模式分析、统计建模、计算学习视觉物体分类。该数据集包含训练验证集文件夹 trainval 和测试集文件夹 test,分别包含 5011 幅和 4952 幅大小不同的图像。而且,这两个文件夹各自又都包含 5 个子文件夹:JPEGImages、Annotations、ImageSets、SegmentationClass 和 SegmentationObject。其中,JPEGImages 存放的是所有图像,包含 20 个类别。Annotations 存放的是 xml 格式的标签文件,每一个 xml 文件都对应于 JPEGImages 下的一幅图像。ImageSets 存放的是具体的图像信息,下设 3 个子文件夹 Layout、Main 和 Segmentation,分别存放人体部位数据(比如 head、hand、feet 等)、20 类图像物体识别数据,以及可用于分割的数据。SegmentationClass 和 SegmentationObject 用来存放分割后的图像,前者标注每个像素的类别,后者标注每个像素属于哪一个物体对象。本书在第 8 章的 Faster R-CNN、YOLO 和 SSD 的目标检测案例中使用了 VOC 2007。

    图 1.16 VOC 2007 的图像举例

    9)SIFT Flow 是一个关于不同场景的图像数据集(如图 1.17 所示),包含 2688 幅图像,其中 2488 幅训练图像、200 幅测试图像。这些图像的像素共有 33 个语义类别标记(桥、山、太阳等)和 3 个几何类别标记(水平、竖直和天空)。本书在第 9 章的 FCN 图像分割案例中使用了 SIFT Flow。

    图 1.17 SIFT Flow 的图像举例

    10)ADE20K 是一个关于不同场景的图像数据集(如图 1.18 所示),包含 20210 幅训练图像和 2000 幅测试图像。这些图像的像素被标记为 3148 个不同的语义类别。本书在第 9 章的 PSPNet 图像分割案例中使用了 ADE20K。

    图 1.18 ADE20K 的场景图像举例

    11)COCO 2014 是微软团队制作的一个图像数据集(如图 1.19 所示),可以用于物体识别、目标检测、语义分割和语义描述。其中,训练集有 82783 幅图像,验证集和测试集分别有 40504 幅图像。由于官方没有给出测试集的真实标签,所以本书在第 9 章的 Mask R-CNN 图像分割案例中使用训练集来学习,使用验证集来测试。

    12)CelebA 是一个名人人脸图像数据集(如图 1.20 所示),共包含 10177 位名人的 202599 幅人脸图像,其中训练集有 162770 幅图像,验证集有 19867 幅图像,测试集有 18962 幅图像。每幅人脸图像有 40 个不同的二值属性标注,比如是否微笑、是否戴眼镜、是否戴帽子等。本书在第 10 章的 DCGAN 人脸生成案例中使用了 CelebA。

    13)Gamerecords 是一个围棋棋局文件数据集(如图 1.21 所示),包含从 2001 年开始一直到 2017 年最新更新的棋局文件。本书在第 12 章 AlphaGo 的仿效围棋程序 MuGo 案例中,使用了 2017 年 4 月及之前发布的部分棋局文件,约 22959 个。每个棋局文件大概包含 200 个着子位置,总共约有 4591800 个着子位置,其中 4491800 个着子位置被用来训练,其余的 100000 个着子位置用来测试。

    图 1.19 COCO 2014 的物体图像举例

    图 1.20 CelebA 的人脸图像举例

    图 1.21 Gamerecords 的棋局举例

    第 2 章 预备知识
    第 3 章 卷积神经网络的现代雏形——LeNet(上)
    第 3 章 卷积神经网络的现代雏形——LeNet(下)
    第 4 章 卷积神经网络的突破模型
    第 5 章 卷积神经网络的应变模型
    第 6 章 卷积神经网络的加深模型
    第 7 章 卷积神经网络的跨连模型(上)
    第 7 章 卷积神经网络的跨连模型(下)
    第 8 章 卷积神经网络的区域模型(上)
    第 8 章 卷积神经网络的区域模型(下)
    第 9 章 卷积神经网络的分割模型(上)
    第 9 章 卷积神经网络的分割模型(下)
    第 10 章 卷积神经网络的特殊模型(上)
    第 10 章 卷积神经网络的特殊模型(下)
    第 11 章 卷积神经网络的强化模型
    第 12 章 卷积神经网络的顶尖成就——AlphaGo(上)
    第 12 章 卷积神经网络的顶尖成就——AlphaGo(下)
    附录 A Caffe 在 Windows 上的安装过程
    附录 B Caffe 在 Linux 上的安装过程
    附录 C TensorFlow 在 Windows 上的安装过程
    附录 D TensorFlow 在 Linux 上的安装过程
    参考文献

    阅读全文: http://gitbook.cn/gitchat/geekbook/5c945f90968b1d64b1e1028c

    展开全文
  • 人工智能,CNN(深度学习卷积神经网络)的教学版PPT,讲解的很到位,非常具体,希望对各位有所帮助
  • 基于深度学习卷积神经网络在图像风格化处理中的应用研究.pdf
  • 卷积神经网络(cnn)的matlab程序,包含了14个m文件。
  • 自己整理的吴恩达深度学习第四课(卷积神经网络)的课件,大家一起深度学习吧。
  • 参阅:https://blog.csdn.net/cxmscb/article/details/71023576
  • 使用Matlab软件,运用简单卷积神经网络实现手写数字识别。
  • 深度卷积神经网络学习过程中,卷积核的初始值通常是随机赋值的.另外,基于梯度下降法的网络参数学习法通常会导致梯度弥散现象.鉴于此,提出一种基于反卷积特征提取的深度卷积神经网络学习方法.首先,采用无监督两层...
  • 详细讲解了深度卷积神经网络中各类卷积的实现方法,有计算公式,有示意图
  • 深度学习-深度卷积神经网络发展

    万次阅读 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


    展开全文
  • VGGNet是牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发的深度卷积神经网络。 VGGNet探索了卷积神经网络深度与其性能之间的关系,通过反复堆叠3*3的小型卷积核和2*2的最大...
  • 深度学习——卷积神经网络原理解析

    千次阅读 多人点赞 2019-03-15 17:02:02
    深度学习——卷积神经网络原理解析 文章目录深度学习——卷积神经网络原理解析前言一、卷积?神经网络?二、卷积神经网络?三、卷积神经网络的组成层四、卷积层五、池化层六、全连接层七、卷积神经网络的经验参数...
  • SSD训练自己的模型 直接套用网上源码,https://blog.csdn.net/weixin_39881922/article/details/80569803,按照这篇文章来做,自己制作好VOC格式的数据集,放在此项目下,在转化为tfrecords格式时出现...用这篇博...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,572
精华内容 44,228
关键字:

深度学习卷积神经网络

友情链接: WMTS.rar