5 卷积神经网络(CNN)
卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图像识别领域的应用获得了巨大的成功。
5.1 卷积神经网络的组成层
以图像分类任务为例,在表5.1所示卷积神经网络中,一般包含5种类型的网络层次结构:
表5.1 卷积神经网络的组成
CNN层次结构 |
输出尺寸 |
作用 |
输入层 |
W1×H1×3 |
卷积网络的原始输入,可以是原始或预处理后的像素矩阵 |
卷积层 |
W1×H1×K |
参数共享、局部连接,利用平移不变性从全局特征图提取局部特征 |
**层 |
W1×H1×K |
将卷积层的输出结果进行非线性映射 |
池化层 |
W2×H2×K |
进一步筛选特征,可以有效减少后续网络层次所需的参数量 |
全连接层 |
(W2⋅H2⋅K)×C |
将多维特征展平为2维特征,通常低维度特征对应任务的学习目标(类别或回归值) |
W1×H1×3对应原始图像或经过预处理的像素值矩阵,3对应RGB图像的通道;K表示卷积层中卷积核(滤波器)的个数;W2×H2 为池化后特征图的尺度,在全局池化中尺度对应1×1;(W2⋅H2⋅K)是将多维特征压缩到1维之后的大小,C对应的则是图像类别个数。
5.1.1 输入层
输入层(Input Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅利叶变换的二维波形数据,甚至是自然语言处理中一维表示的句子向量。以图像分类任务为例,输入层输入的图像一般包含RGB三个通道,是一个由长宽分别为H和W组成的3维像素值矩阵H×W×3,卷积网络会将输入层的数据传递到一系列卷积、池化等操作进行特征提取和转化,最终由全连接层对特征进行汇总和结果输出。根据计算能力、存储大小和模型结构的不同,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为N,则输入层的输出数据为N×H×W×3。
5.1.2 卷积层
卷积层(Convolution Layer)通常用作对输入层输入数据进行特征提取,通过卷积核矩阵对原始数据中隐含关联性的一种抽象。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征。图5.1表示卷积操作过程中的不同填充策略,上半部分采用零填充,下半部分采用有效卷积(舍弃不能完整运算的边缘部分)。

图5.1 卷积操作示意图
5.1.3 **层
**层(Activation Layer)负责对卷积层抽取的特征进行**,由于卷积操作是由输入矩阵与卷积核矩阵进行相差的线性变化关系,需要**层对其进行非线性的映射。**层主要由**函数组成,即在卷积层输出结果的基础上嵌套一个非线性函数,让输出的特征图具有非线性关系。卷积网络中通常采用ReLU来充当**函数(还包括tanh和sigmoid等)ReLU的函数形式如公式(5-1)所示,能够限制小于0的值为0,同时大于等于0的值保持不变。
f(x)={0xif x<0if x≥0(5-1)
5.1.4 池化层
池化层又称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受域内最大、平均与总和的特征值作为输出,最常用的是最大池化。
5.1.5 全连接层
全连接层(Full Connected Layer)负责对卷积神经网络学习提取到的特征进行汇总,将多维的特征输入映射为二维的特征输出,高维表示样本批次,低位常常对应任务目标。
5.2 卷积在图像中有什么直观作用
在卷积神经网络中,卷积常用来提取图像的特征,但不同层次的卷积操作提取到的特征类型是不相同的,特征类型粗分如表5.2所示。
表5.2 卷积提取的特征类型
卷积层次 |
特征类型 |
浅层卷积 |
边缘特征 |
中层卷积 |
局部特征 |
深层卷积 |
全局特征 |
图像与不同卷积核的卷积可以用来执行边缘检测、锐化和模糊等操作。表5.3显示了应用不同类型的卷积核(滤波器)后的各种卷积图像。
表5.3 一些常见卷积核的作用
卷积作用 |
卷积核 |
卷积后图像 |
输出原图 |
⎣⎡000010000⎦⎤ |
 |
边缘检测(突出边缘差异) |
⎣⎡10−1000−101⎦⎤ |
 |
边缘检测(突出中间值) |
⎣⎡−1−1−1−18−1−1−1−1⎦⎤ |
 |
图像锐化 |
⎣⎡0−10−15−10−10⎦⎤ |
 |
方块模糊 |
⎣⎡111111111⎦⎤×91 |
 |
高斯模糊 |
⎣⎡121242121⎦⎤×161 |
 |
5.3 卷积层有哪些基本参数?
卷积层中需要用到卷积核(滤波器或特征检测器)与图像特征矩阵进行点乘运算,利用卷积核与对应的特征感受域进行划窗式运算时,需要设定卷积核对应的大小、步长、个数以及填充的方式,如表5.4所示。
表5.4 卷积层的基本参数
参数名 |
作用 |
常见设置 |
卷积核大小 (Kernel Size) |
卷积核的大小定义了卷积的感受野 |
在过去常设为5,如LeNet-5;现在多设为3,通过堆叠3×3的卷积核来达到更大的感受域 |
卷积核步长 (Stride) |
定义了卷积核在卷积过程中的步长 |
常见设置为1,表示滑窗距离为1,可以覆盖所有相邻位置特征的组合;当设置为更大值时相当于对特征组合降采样 |
填充方式 (Padding) |
在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略 |
设置为’SAME’表示对不足卷积核大小的边界位置进行某种填充(通常零填充)以保证卷积输出维度与与输入维度一致;当设置为’VALID’时则对不足卷积尺寸的部分进行舍弃,输出维度就无法保证与输入维度一致 |
输入通道数 (In Channels) |
指定卷积操作时卷积核的深度 |
默认与输入的特征矩阵通道数(深度)一致;在某些压缩模型中会采用通道分离的卷积方式 |
输出通道数 (Out Channels) |
指定卷积核的个数 |
若设置为与输入通道数一样的大小,可以保持输入输出维度的一致性;若采用比输入通道数更小的值,则可以减少整体网络的参数量 |
卷积操作维度变换公式:
Od={⌈s(Id−ksize)+1)⌉,⌈sId⌉,padding=VALIDpadding=SAME
其中,Id为输入维度,Od为输出维度,ksize为卷积核大小,s为步长
5.4 卷积核有什么类型?
常见的卷积主要是由连续紧密的卷积核对输入的图像特征进行滑窗式点乘求和操作,除此之外还有其他类型的卷积核在不同的任务中会用到,具体分类如表5.5所示。
表5.5 卷积核分类
卷积类别 |
示意图 |
作用 |
标准卷积 |
 |
最常用的卷积核,连续紧密的矩阵形式可以提取图像区域中的相邻像素之间的关联关系,3×3的卷积核可以获得3×3像素范围的感受视野 |
扩张卷积(带孔卷积或空洞卷积) |
 |
引入一个称作扩张率(Dilation Rate)的参数,使同样尺寸的卷积核可以获得更大的感受视野,相应的在相同感受视野的前提下比普通卷积采用更少的参数。同样是3×3的卷积核尺寸,扩张卷积可以提取5×5范围的区域特征,在实时图像分割领域广泛应用 |
转置卷积 |
 |
先对原始特征矩阵进行填充使其维度扩大到适配卷积目标输出维度,然后进行普通的卷积操作的一个过程,其输入到输出的维度变换关系恰好与普通卷积的变换关系相反,但这个变换并不是真正的逆变换操作,通常称为转置卷积(Transpose Convolution)而不是反卷积(Deconvolution)。转置卷积常见于目标检测领域中对小目标的检测和图像分割领域还原输入图像尺度。 |
可分离卷积 |
 |
标准的卷积操作是同时对原始图像H×W×C三个方向的卷积运算,假设有K个相同尺寸的卷积核,这样的卷积操作需要用到的参数为H×W×C×K个;若将长宽与深度方向的卷积操作分离出变为H×W与C的两步卷积操作,则同样的卷积核个数K,只需要(H×W+C)×K个参数,便可得到同样的输出尺度。可分离卷积(Seperable Convolution)通常应用在模型压缩或一些轻量的卷积神经网络中,如MobileNet[1]、Xception[2]等 |
6. CNN经典网络
6.1 LeNet-5
6.1.1 模型介绍
LeNet-5是由LeCun 提出的一种用于识别手写数字和机器印刷字符的卷积神经网络(Convolutional Neural Network,CNN)[1],其命名来源于作者LeCun的名字,5则是其研究成果的代号,在LeNet-5之前还有LeNet-4和LeNet-1鲜为人知。LeNet-5阐述了图像中像素特征之间的相关性能够由参数共享的卷积操作所提取,同时使用卷积、下采样(池化)和非线性映射这样的组合结构,是当前流行的大多数深度图像识别网络的基础。
6.1.2 模型结构

图6.1 LeNet-5网络结构图
如图6.1所示,LeNet-5一共包含7层(输入层不作为网络结构),分别由2个卷积层、2个下采样层和3个连接层组成,网络的参数配置如表4.1所示,其中下采样层和全连接层的核尺寸分别代表采样范围和连接矩阵的尺寸(如卷积核尺寸中的“5×5×1/1,6”表示核大小为5×5×1、步长为1且核个数为6的卷积核)。
表6.1 LeNet-5网络参数配置
网络层 |
输入尺寸 |
核尺寸 |
输出尺寸 |
可训练参数量 |
卷积层C1
|
32×32×1 |
5×5×1/1,6 |
28×28×6 |
(5×5×1+1)×6 |
下采样层S2
|
28×28×6 |
2×2/2 |
14×14×6 |
(1+1)×6 ∗
|
卷积层C3
|
14×14×6 |
5×5×6/1,16 |
10×10×16 |
1516∗ |
下采样层S4
|
10×10×16 |
2×2/2 |
5×5×16 |
(1+1)×16 |
卷积层C5∗
|
5×5×16 |
5×5×16/1,120 |
1×1×120 |
(5×5×16+1)×120 |
全连接层F6
|
1×1×120 |
120×84 |
1×1×84 |
(120+1)×84 |
输出层 |
1×1×84 |
84×10 |
1×1×10 |
(84+1)×10 |
∗ 在LeNet中,下采样操作和池化操作类似,但是在得到采样结果后会乘以一个系数和加上一个偏置项,所以下采样的参数个数是(1+1)×6而不是零。
∗ C3卷积层可训练参数并未直接连接S2中所有的特征图(Feature Map),而是采用如图4.2所示的采样特征方式进行连接(稀疏连接),生成的16个通道特征图中分别按照相邻3个特征图、相邻4个特征图、非相邻4个特征图和全部6个特征图进行映射,得到的参数个数计算公式为6×(25×3+1)+6×(25×4+1)+3×(25×4+1)+1×(25×6+1)=1516,在原论文中解释了使用这种采样方式原因包含两点:限制了连接数不至于过大(当年的计算能力比较弱);强制限定不同特征图的组合可以使映射得到的特征图学习到不同的特征模式。

图6.2 S2与C3之间的特征图稀疏连接
∗ C5卷积层在图4.1中显示为全连接层,原论文中解释这里实际采用的是卷积操作,只是刚好在5×5卷积后尺寸被压缩为1×1,输出结果看起来和全连接很相似。
6.1.3 模型特性
- 卷积网络使用一个3层的序列组合:卷积、下采样(池化)、非线性映射(LeNet-5最重要的特性,奠定了目前深层卷积网络的基础)
- 使用卷积提取空间特征
- 使用映射的空间均值进行下采样
- 使用tanh或sigmoid进行非线性映射
- 多层神经网络(MLP)作为最终的分类器
- 层间的稀疏连接矩阵以避免巨大的计算开销
6.2 AlexNet
6.2.1 模型介绍
AlexNet是由Alex $Krizhevsky 提出的首个应用于图像分类的深层卷积神经网络,该网络在2012年ILSVRC(ImageNetLargeScaleVisualRecognitionCompetition)图像分类竞赛中以15.3^{[2]}$。AlexNet使用GPU代替CPU进行运算,使得在可接受的时间范围内模型结构能够更加复杂,它的出现证明了深层卷积神经网络在复杂模型下的有效性,使CNN在计算机视觉中流行开来,直接或间接地引发了深度学习的热潮。
6.2.2 模型结构

图6.3 AlexNet网络结构图
如图6.3所示,除去下采样(池化层)和局部响应规范化操作(Local Responsible Normalization, LRN),AlexNet一共包含8层,前5层由卷积层组成,而剩下的3层为全连接层。网络结构分为上下两层,分别对应两个GPU的操作过程,除了中间某些层(C3卷积层和F6−8全连接层会有GPU间的交互),其他层两个GPU分别计算结 果。最后一层全连接层的输出作为softmax的输入,得到1000个图像分类标签对应的概率值。除去GPU并行结构的设计,AlexNet网络结构与LeNet十分相似,其网络的参数配置如表6.2所示。
表6.2 AlexNet网络参数配置
网络层 |
输入尺寸 |
核尺寸 |
输出尺寸 |
可训练参数量 |
卷积层C1 ∗
|
224×224×3 |
11×11×3/4,48(×2GPU) |
55×55×48(×2GPU) |
(11×11×3+1)×48×2 |
下采样层Smax∗
|
55×55×48(×2GPU) |
3×3/2(×2GPU) |
27×27×48(×2GPU) |
0 |
卷积层C2
|
27×27×48(×2GPU) |
5×5×48/1,128(×2GPU) |
27×27×128(×2GPU) |
(5×5×48+1)×128×2 |
下采样层Smax
|
27×27×128(×2GPU) |
3×3/2(×2GPU) |
13×13×128(×2GPU) |
0 |
卷积层C3 ∗
|
13×13×128×2GPU |
3×3×256/1,192(×2GPU) |
13×13×192(×2GPU) |
(3×3×256+1)×192×2 |
卷积层C4
|
13×13×192(×2GPU) |
3×3×192/1,192(×2GPU) |
13×13×192(×2GPU) |
(3×3×192+1)×192×2 |
卷积层C5
|
13×13×192(×2GPU) |
3×3×192/1,128(×2GPU) |
13×13×128(×2GPU) |
(3×3×192+1)×128×2 |
下采样层Smax
|
13×13×128(×2GPU) |
3×3/2(×2GPU) |
6×6×128(×2GPU) |
0 |
全连接层F6 ∗
|
6×6×128×2GPU |
9216×2048(×2GPU) |
1×1×2048(×2GPU) |
(9216+1)×2048×2 |
全连接层F7
|
1×1×2048×2GPU |
4096×2048(×2GPU) |
1×1×2048(×2GPU) |
(4096+1)×2048×2 |
全连接层F8
|
1×1×2048×2GPU |
4096×1000 |
1×1×1000 |
(4096+1)×1000×2 |
卷积层C1输入为224×224×3的图片数据,分别在两个GPU中经过核为11×11×3、步长(stride)为4的卷积卷积后,分别得到两条独立的55×55×48的输出数据。
下采样层Smax实际上是嵌套在卷积中的最大池化操作,但是为了区分没有采用最大池化的卷积层单独列出来。在C1−2卷积层中的池化操作之后(ReLU**操作之前),还有一个LRN操作,用作对相邻特征点的归一化处理。
卷积层C3 的输入与其他卷积层不同,13×13×192×2GPU表示汇聚了上一层网络在两个GPU上的输出结果作为输入,所以在进行卷积操作时通道上的卷积核维度为384。
全连接层F6−8中输入数据尺寸也和C3类似,都是融合了两个GPU流向的输出结果作为输入。
6.2.3 模型特性
- 所有卷积层都使用ReLU作为非线性映射函数,使模型收敛速度更快
- 在多个GPU上进行模型的训练,不但可以提高模型的训练速度,还能提升数据的使用规模
- 使用LRN对局部的特征进行归一化,结果作为ReLU**函数的输入能有效降低错误率
- 重叠最大池化(overlapping max pooling),即池化范围z与步长s存在关系z>s(如Smax中核尺度为3×3/2),避免平均池化(average pooling)的平均效应
- 使用随机丢弃技术(dropout)选择性地忽略训练中的单个神经元,避免模型的过拟合
6.3 ZFNet
6.3.1 模型介绍
ZFNet是由Matthew D.Zeiler和Rob Fergus在AlexNet基础上提出的大型卷积网络,在2013年ILSVRC图像分类竞赛中以11.19%的错误率获得冠军(实际上原ZFNet所在的队伍并不是真正的冠军,原ZFNet以13.51%错误率排在第8,真正的冠军是Clarifai这个队伍,而Clarifai这个队伍所对应的一家初创公司的CEO又是Zeiler,而且Clarifai对ZFNet的改动比较小,所以通常认为是ZFNet获得了冠军)[3−4]。ZFNet实际上是微调(fine-tuning)了的AlexNet,并通过反卷积(Deconvolution)的方式可视化各层的输出特征图,进一步解释了卷积操作在大型网络中效果显著的原因。
6.3.2 模型结构


图6.4 ZFNet网络结构图(原始结构图与AlexNet风格结构图)
如图6.4所示,ZFNet与AlexNet类似,都是由8层网络组成的卷积神经网络,其中包含5层卷积层和3层全连接层。两个网络结构最大的不同在于,ZFNet第一层卷积采用了7×7×3/2的卷积核替代了AlexNet中第一层卷积核11×11×3/4的卷积核。图4.5中ZFNet相比于AlexNet在第一层输出的特征图中包含更多中间频率的信息,而AlexNet第一层输出的特征图大多是低频或高频的信息,对中间频率特征的缺失导致后续网络层次如图6.5(c)能够学习到的特征不够细致,而导致这个问题的根本原因在于AlexNet在第一层中采用的卷积核和步长过大。


图6.5 (a)ZFNet第一层输出的特征图(b)AlexNet第一层输出的特征图(c)AlexNet第二层输出的特征图(d)ZFNet第二层输出的特征图
表6.3 ZFNet网络参数配置
网络层 |
输入尺寸 |
核尺寸 |
输出尺寸 |
可训练参数量 |
卷积层C1 ∗
|
224×224×3 |
7×7×3/2,96 |
110×110×96 |
(7×7×3+1)×96 |
下采样层Smax
|
110×110×96 |
3×3/2 |
55×55×96 |
0 |
卷积层C2 ∗
|
55×55×96 |
5×5×96/2,256 |
26×26×256 |
(5×5×96+1)×256 |
下采样层Smax
|
26×26×256 |
3×3/2 |
13×13×256 |
0 |
卷积层C3
|
13×13×256 |
3×3×256/1,384 |
13×13×384 |
(3×3×256+1)×384 |
卷积层C4
|
13×13×384 |
3×3×384/1,384 |
13×13×384 |
(3×3×384+1)×384 |
卷积层C5
|
13×13×384 |
3×3×384/1,256 |
13×13×256 |
(3×3×384+1)×256 |
下采样层Smax
|
13×13×256 |
3×3/2 |
6×6×256 |
0 |
全连接层F6
|
6×6×256 |
9216×4096 |
1×1×4096 |
(9216+1)×4096 |
全连接层F7
|
1×1×4096 |
4096×4096 |
1×1×4096 |
(4096+1)×4096 |
全连接层F8
|
1×1×4096 |
4096×1000 |
1×1×1000 |
(4096+1)×1000 |
卷积层C1与AlexNet中的C1有所不同,采用7×7×3/2的卷积核代替11×11×3/4,使第一层卷积输出的结果可以包含更多的中频率特征,对后续网络层中多样化的特征组合提供更多选择,有利于捕捉更细致的特征。
卷积层C2采用了步长2的卷积核,区别于AlexNet中C2的卷积核步长,所以输出的维度有所差异。
6.3.3 模型特性
ZFNet与AlexNet在结构上几乎相同,此部分虽属于模型特性,但准确地说应该是ZFNet原论文中可视化技术的贡献。
- 可视化技术揭露了激发模型中每层单独的特征图。
- 可视化技术允许观察在训练阶段特征的演变过程且诊断出模型的潜在问题。
- 可视化技术用到了多层解卷积网络,即由特征**返回到输入像素空间。
- 可视化技术进行了分类器输出的敏感性分析,即通过阻止部分输入图像来揭示那部分对于分类是重要的。
- 可视化技术提供了一个非参数的不变性来展示来自训练集的哪一块**哪个特征图,不仅需要裁剪输入图片,而且自上而下的投影来揭露来自每块的结构**一个特征图。
- 可视化技术依赖于解卷积操作,即卷积操作的逆过程,将特征映射到像素上。
6.4 Network in Network
6.4.1 模型介绍
Network In Network (NIN)是由MinLin等人提出,在CIFAR-10和CIFAR-100分类任务中达到当时的最好水平,因其网络结构是由三个多层感知机堆叠而被成为NIN[5]。NIN以一种全新的角度审视了卷积神经网络中的卷积核设计,通过引入子网络结构代替纯卷积中的线性映射部分,这种形式的网络结构激发了更复杂的卷积神经网络的结构设计,其中下一节中介绍的GoogLeNet的Inception结构就是来源于这个思想。
6.4.2 模型结构

图 6.6 NIN网络结构图
NIN由三层的多层感知卷积层(MLPConv Layer)构成,每一层多层感知卷积层内部由若干层的局部全连接层和非线性**函数组成,代替了传统卷积层中采用的线性卷积核。在网络推理(inference)时,这个多层感知器会对输入特征图的局部特征进行划窗计算,并且每个划窗的局部特征图对应的乘积的权重是共享的,这两点是和传统卷积操作完全一致的,最大的不同在于多层感知器对局部特征进行了非线性的映射,而传统卷积的方式是线性的。NIN的网络参数配置表6.4所示(原论文并未给出网络参数,表中参数为编者结合网络结构图和CIFAR-100数据集以3×3卷积为例给出)。
表6.4 NIN网络参数配置(结合原论文NIN结构和CIFAR-100数据给出)
网络层 |
输入尺寸 |
核尺寸 |
输出尺寸 |
参数个数 |
局部全连接层L11 ∗
|
32×32×3 |
(3×3)×16/1 |
30×30×16 |
(3×3×3+1)×16 |
全连接层L12 ∗
|
30×30×16 |
16×16 |
30×30×16 |
((16+1)×16) |
局部全连接层L21
|
30×30×16 |
(3×3)×64/1 |
28×28×64 |
(3×3×16+1)×64 |
全连接层L22
|
28×28×64 |
64×64 |
28×28×64 |
((64+1)×64) |
局部全连接层L31
|
28×28×64 |
(3×3)×100/1 |
26×26×100 |
(3×3×64+1)×100 |
全连接层L32
|
26×26×100 |
100×100 |
26×26×100 |
((100+1)×100) |
全局平均采样GAP ∗
|
26×26×100 |
26×26×100/1 |
1×1×100 |
0 |
局部全连接层L11实际上是对原始输入图像进行划窗式的全连接操作,因此划窗得到的输出特征尺寸为30×30(1stride32−3k+1=30)
全连接层L12是紧跟L11后的全连接操作,输入的特征是划窗后经过**的局部响应特征,因此仅需连接L11和L12的节点即可,而每个局部全连接层和紧接的全连接层构成代替卷积操作的多层感知卷积层(MLPConv)。
全局平均采样层或全局平均池化层GAP(Global Average Pooling)将L32输出的每一个特征图进行全局的平均池化操作,直接得到最后的类别数,可以有效地减少参数量。
6.4.3 模型特点
- 使用多层感知机结构来代替卷积的滤波操作,不但有效减少卷积核数过多而导致的参数量暴涨问题,还能通过引入非线性的映射来提高模型对特征的抽象能力。
- 使用全局平均池化来代替最后一个全连接层,能够有效地减少参数量(没有可训练参数),同时池化用到了整个特征图的信息,对空间信息的转换更加鲁棒,最后得到的输出结果可直接作为对应类别的置信度。
6.5 VGGNet
6.5.1 模型介绍
VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以7.32%的错误率赢得了2014年ILSVRC分类任务的亚军(冠军由GoogLeNet以6.65%的错误率夺得)和25.32%的错误率夺得定位任务(Localization)的第一名(GoogLeNet错误率为26.44%)[5],网络名称VGGNet取自该小组名缩写。VGGNet是首批把图像分类的错误率降低到10%以内模型,同时该网络所采用的3×3卷积核的思想是后来许多模型的基础,该模型发表在2015年国际学习表征会议(International Conference On Learning Representations, ICLR)后至今被引用的次数已经超过1万4千余次。
6.5.2 模型结构

图 6.7 VGG16网络结构图
在原论文中的VGGNet包含了6个版本的演进,分别对应VGG11、VGG11-LRN、VGG13、VGG16-1、VGG16-3和VGG19,不同的后缀数值表示不同的网络层数(VGG11-LRN表示在第一层中采用了LRN的VGG11,VGG16-1表示后三组卷积块中最后一层卷积采用卷积核尺寸为1×1,相应的VGG16-3表示卷积核尺寸为3×3),本节介绍的VGG16为VGG16-3。图4.7中的VGG16体现了VGGNet的核心思路,使用3×3的卷积组合代替大尺寸的卷积(2个3×3卷积即可与5×5卷积拥有相同的感受视野),网络参数设置如表4.5所示。
表4.5 VGG16网络参数配置
网络层 |
输入尺寸 |
核尺寸 |
输出尺寸 |
参数个数 |
卷积层C11
|
224×224×3 |
3×3×64/1 |
224×224×64 |
(3×3×3+1)×64 |
卷积层C12
|
224×224×64 |
3×3×64/1 |
224×224×64 |
(3×3×64+1)×64 |
下采样层Smax1
|
224×224×64 |
2×2/2 |
112×112×64 |
0 |
卷积层C21
|
112×112×64 |
3×3×128/1 |
112×112×128 |
(3×3×64+1)×128 |
卷积层C22
|
112×112×128 |
3×3×128/1 |
112×112×128 |
(3×3×128+1)×128 |
下采样层Smax2
|
112×112×128 |
2×2/2 |
56×56×128 |
0 |
卷积层C31
|
56×56×128 |
3×3×256/1 |
56×56×256 |
(3×3×128+1)×256 |
卷积层C32
|
56×56×256 |
3×3×256/1 |
56×56×256 |
(3×3×256+1)×256 |
卷积层C33
|
56×56×256 |
3×3×256/1 |
56×56×256 |
(3×3×256+1)×256 |
下采样层Smax3
|
56×56×256 |
2×2/2 |
28×28×256 |
0 |
卷积层C41
|
28×28×256 |
3×3×512/1 |
28×28×512 |
(3×3×256+1)×512 |
卷积层C42
|
28×28×512 |
3×3×512/1 |
28×28×512 |
(3×3×512+1)×512 |
卷积层C43
|
28×28×512 |
3×3×512/1 |
28×28×512 |
(3×3×512+1)×512 |
下采样层Smax4
|
28×28×512 |
2×2/2 |
14×14×512 |
0 |
卷积层C51
|
14×14×512 |
3×3×512/1 |
14×14×512 |
(3×3×512+1)×512 |
卷积层C52
|
14×14×512 |
3×3×512/1 |
14×14×512 |
(3×3×512+1)×512 |
卷积层C53
|
14×14×512 |
3×3×512/1 |
14×14×512 |
(3×3×512+1)×512 |
下采样层Smax5
|
14×14×512 |
2×2/2 |
7×7×512 |
0 |
全连接层FC1
|
7×7×512 |
(7×7×512)×4096 |
1×4096 |
(7×7×512+1)×4096 |
全连接层FC2
|
1×4096 |
4096×4096 |
1×4096 |
(4096+1)×4096 |
全连接层FC3
|
1×4096 |
4096×1000 |
1×1000 |
(4096+1)×1000 |
6.5.3 模型特性
- 整个网络都使用了同样大小的卷积核尺寸3×3和最大池化尺寸2×2。
-
1×1卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。
- 两个3×3的卷积层串联相当于1个5×5的卷积层,感受野大小为5×5。同样地,3个3×3的卷积层串联的效果则相当于1个7×7的卷积层。这样的连接方式使得网络参数量更小,而且多层的**函数令网络对特征的学习能力更强。
- VGGNet在训练时有一个小技巧,先训练浅层的的简单网络VGG11,再复用VGG11的权重来初始化VGG13,如此反复训练并初始化VGG19,能够使训练时收敛的速度更快。
- 在训练过程中使用多尺度的变换对原始数据做数据增强,使得模型不易过拟合。
6.6 GoogLeNet
6.6.1 模型介绍
GoogLeNet作为2014年ILSVRC在分类任务上的冠军,以6.65%的错误率力压VGGNet等模型,在分类的准确率上面相比过去两届冠军ZFNet和AlexNet都有很大的提升。从名字GoogLeNet可以知道这是来自谷歌工程师所设计的网络结构,而名字中GoogLeNet更是致敬了LeNet[0]。GoogLeNet中最核心的部分是其内部子网络结构Inception,该结构灵感来源于NIN,至今已经经历了四次版本迭代(Inceptionv1−4)。

图 6.8 Inception性能比较图
6.6.2 模型结构

图6.9 GoogLeNet网络结构图
如图6.9中所示,GoogLeNet相比于以前的卷积神经网络结构,除了在深度上进行了延伸,还对网络的宽度进行了扩展,整个网络由许多块状子网络的堆叠而成,这个子网络构成了Inception结构。图6.9为Inception的四个版本:Inceptionv1在同一层中采用不同的卷积核,并对卷积结果进行合并;Inceptionv2组合不同卷积核的堆叠形式,并对卷积结果进行合并;Inceptionv3则在v2基础上进行深度组合的尝试;Inceptionv4结构相比于前面的版本更加复杂,子网络中嵌套着子网络。
表 6.6 GoogLeNet中Inceptionv1网络参数配置
网络层 |
输入尺寸 |
核尺寸 |
输出尺寸 |
参数个数 |
卷积层C11
|
H×W×C1 |
1×1×C2/2 |
2H×2W×C2 |
(1×1×C1+1)×C2 |
卷积层C21
|
H×W×C2 |
1×1×C2/2 |
2H×2W×C2 |
(1×1×C2+1)×C2 |
卷积层C22
|
H×W×C2 |
3×3×C2/1 |
H×W×C2/1 |
(3×3×C2+1)×C2 |
卷积层C31
|
H×W×C1 |
1×1×C2/2 |
2H×2W×C2 |
(1×1×C1+1)×C2 |
卷积层C32
|
H×W×C2 |
5×5×C2/1 |
H×W×C2/1 |
(5×5×C2+1)×C2 |
下采样层S41
|
H×W×C1 |
3×3/2 |
2H×2W×C2 |
0 |
卷积层C42
|
2H×2W×C2 |
1×1×C2/1 |
2H×2W×C2 |
(3×3×C2+1)×C2 |
合并层M
|
2H×2W×C2(×4) |
拼接 |
2H×2W×(C2×4) |
0 |
6.6.3 模型特性
-
采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
-
之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
-
网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。但是,使用5x5的卷积核仍然会带来巨大的计算量。 为此,文章借鉴NIN2,采用1x1卷积核来进行降维。