深度学习:卷积神经网络从入门到精通

内容简介

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

猜你喜欢

转载自blog.csdn.net/valada/article/details/88881148