第5章卷积神经网络 卷积神经网络(Convolutional Neural Network,CNN)是一种包含卷积计算的前馈型神经网络,其在大型图像处理方面有出色的表现,目前已经广泛用于图像分类、定位等领域。相比于其他神经网络结构,卷积神经网络需要的参数相对较少,使其能够广泛应用。虽然卷积网络也存在浅层结构,但准确度和表现力等原因很少使用。卷积神经网络学术界和工业界不再进行特意区分,一般指深层结构的卷积神经网络,几层、几十层甚至上百层。 本章首先介绍卷积神经网络的基本概念,包括卷积神经网络的发展历史,以及卷积神经网络的基本构成、组件; 其次介绍卷积神经网络和传统前向全连接网络的关系; 然后介绍卷积神经网络的可解释性,神经网络的可解释性是力图打开“黑盒”效应的重要方法; 最后介绍几种典型的神经网络,对每个典型结构进行详细分析。 5.1卷积神经网络概述 卷积神经网络是一种处理已知类似格型拓扑数据的神经网络。这种格型可以是一维的,也可以是二维的,例如以时间间隔采样构成的一维时序数据,或二维像素格型构成的图像数据,卷积神经网络在处理这类数据时具有独特的优势。之所以称为卷积网络,是因为该网络采用了卷积算子,而卷积运算是一种特殊的线性运算。从数学角度看,卷积网络就是在网络各层利用卷积运算替代通用的矩阵乘法而构成的神经网络。 卷积神经网络是一种特殊的深层神经网络模型,特殊性体现在两个方面: 一方面它的神经元之间是非全连接的; 另一方面同一层中某些神经元之间的连接的权重是共享的(相同的)。它的非全连接和权值共享的网络结构使之更类似于生物神经网络,降低了网络模型的复杂度(对于很难学习的深层结构来说这是非常重要的),减少了权值的数量。 5.1.1卷积神经网络的历史 卷积网络最初是受视觉神经机制的启发而设计,是为识别二维形状而设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者其他形式的变形具有高度不变性。1962年,大卫·胡贝尔(David Hubel)和托斯滕·维塞尔(Torsten Wiesel)通过对猫视觉皮层细胞的研究,提出了感受野的概念[1]。在此概念基础上,日本学者福岛邦彦(Kunihiko Fukushima)仿造生物的视觉皮层提出神经认知机模型[2]。神经认知机是一个具有深度结构的神经网络,并且是最早被提出的深度学习算法之一,其隐含层由S层(Simplelayer)和C层(Complexlayer)交替构成。其中S层单元在感受野内对图像特征进行提取,C层单元接收和响应不同感受野返回的相同特征。神经认知机的S层C层组合能够进行特征提取和筛选,部分实现了卷积神经网络中卷积层和池化层的功能,因此被认为是卷积神经网络的启发性开创性研究。 1987年,著名学者亚历山大·韦贝尔(Alexander Waibel)等提出第一个卷积神经网络——时间延迟网络(Time Delay Neural Network,TDNN)[3]。TDNN是一个应用于解决语音识别问题的卷积神经网络,使用快速傅里叶变换(Fast Fourier Transform,FFT)预处理的语音信号作为输入,其隐含层由2个一维卷积核组成,用来提取频率域上的平移不变特征[4]。在TDNN出现之前,BP算法取得了突破性进展,用于进行人工神经网络的训练,因此TDNN也通过BP算法进行学习。TDNN提出后,在同等条件下其性能超过了当时最主流的模型——隐马尔可夫模型(Hidden Markov Model,HMM)。 1988年,张伟(Wei Zhang)等提出了第一个二维卷积神经网络——平移不变人工神经网络(ShiftInvariant Artificial Neural Network,SIANN),并将其应用于检测医学影像[5]。与此同时,杨立昆(Yann LeCun)等在1989年也同样构建了应用于计算机视觉问题的卷积神经网络,即LeNet的最初版本[6]。LeNet包含2个卷积层、2个全连接层,共计6万个学习参数,规模远超TDNN和SIANN,且在结构上与现代的卷积神经网络十分接近。杨立昆对权重进行随机初始化后使用了随机梯度下降进行学习,而后期的深度学习研究一直保持该训练策略。此外,杨立昆在论述网络结构时首次使用了“卷积”一词,“卷积神经网络”也因此得名。 1993年,杨立昆在贝尔实验室完成代码开发并部署于美国国家收音机公司(National Cash Register Coporation)的支票读取系统。但总体而言,由于学习样本不足、数值计算能力有限等问题,且同一时期以支持向量机(Support Vector Machine,SVM)为代表的核学习方法的兴起,这一时期为各类图像处理问题设计的卷积神经网络停留在了研究阶段,应用推广非常受限。 在LeNet的基础上,1998年,杨立昆等构建了更加完备的卷积神经网络LeNet5,并在手写数字的识别问题中取得成功[7]。LeNet5沿用了杨立昆的学习策略并在原有设计中加入了池化层对输入特征进行筛选。LeNet5及其变体定义了现代卷积神经网络的基本结构,其构筑中交替出现的卷积层池化层被认为能够提取输入图像的平移不变特征。LeNet5的成功使卷积神经网络的应用得到关注,微软公司在2003年使用卷积神经网络开发了光学字符读取(Optical Character Recognition,OCR)系统[8]。后期基于卷积神经网络的应用研究也不断拓展,进入人像识别、手势识别等应用领域。 在2006年深度学习理论被提出后,卷积神经网络的表征学习能力得到了关注,并随着计算设备的更新得到发展。自2012年AlexNet网络开始[9],得到GPU计算集群支持的复杂卷积神经网络多次成为ImageNet大规模视觉识别竞赛(ImageNet Large Scale Visual Recognition Challenge,ILSVRC)的优胜算法,如2013年的ZFNet[10]、2014年的VGGNet[11]、GoogLeNet[12]和2015年的残差网络等[13]。 5.1.2卷积神经网络的结构 1. 卷积神经网络的一般结构 卷积神经网络作为深度神经网络的一种,也符合其一般的结构特点,即由输入层、隐含层和输出层构成,如图51所示。 图51深度神经网络的基本结构 1) 输入层 卷积神经网络的输入层可以处理多维数据。常见的,一维卷积神经网络的输入层接收一维或二维数组,其中一维数组通常为时间或频谱采样,二维数组可能包含多个通道; 二维卷积神经网络的输入层接收二维或三维数组; 三维卷积神经网络的输入层接收四维数组。由于卷积神经网络在计算机视觉领域应用较广,因此许多研究在介绍其结构时预先假设了三维输入数据,即平面上的二维像素点和RGB通道。与其他神经网络算法类似,由于使用梯度下降算法进行学习,卷积神经网络的输入特征需要进行标准化处理。具体地,在将学习数据输入卷积神经网络前,需在通道或时间/频率维对输入数据进行归一化,若输入数据为像素,也可将分布于[0,255]的原始像素值归一化至[0,1]区间。输入特征的标准化有利于提升卷积神经网络的学习效率和表现。 2) 输出层 卷积神经网络中输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同。对于图像分类问题,输出层使用逻辑函数或Softmax函数输出分类标签。在物体识别问题中,输出层可设计为输出物体的中心坐标、大小和分类。在图像语义分割中,输出层直接输出每个像素的分类结果。 3) 隐含层 卷积神经网络的隐含层包含卷积层、池化层和全连接层三类常见类型神经元结构,在一些更为复杂的模型结构中可能有Inception模块、残差块等由卷积层和池化层按一定形式组合构成的网络基本单元。在常见神经网络类型中,卷积层和池化层为卷积神经网络所特有的。 2. 卷积层 1) 卷积核 卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数,加上一个偏差量,类似于一个前馈神经网络的神经元。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,区域的大小取决于卷积核的大小,称为感受野,其含义可类比视觉皮层细胞的感受野。卷积核在工作时会有规律地扫过输入特征,在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量: Zl+1(i,j)=[Zwl+1](i,j)+b =∑Klk=1∑fx=1∑fy=1[Zlk(s0i+x,s0j+y)wl+1k(x,y)]+b (i,j)∈{0,1,…,Ll+1},Ll+1=Ll+2p-fs0+1 式中: 求和部分等价于求解一次交叉相关,b为偏差量; Zl和 Zl+1表示第l+1层的卷积输入与输出,也称为特征图; Ll+1为Zl+1的尺寸,这里假设特征图长宽相同; Z(i,j)对应特征图的像素; K为特征图的通道数; f、s0和p是卷积层参数,对应卷积核大小、卷积步长和填充点数。 上式以二维卷积核作为例子,一维或三维卷积核的工作方式与之类似,如图52所示。理论上卷积核也可以先翻转180°,再求解交叉相关,其结果等价于满足交换律的线性卷积,但这样做在增加求解步骤的同时并不能为求解参数取得便利,因此线性卷积核使用交叉相关代替了卷积。 图52一维和二维卷积运算示例 特殊地,当卷积核是f=1,s0=1且不包含填充的单位卷积核时,卷积层内的交叉相关计算等价于矩阵乘法,并由此在卷积层间构建了全连接网络: Zl+1=∑Klk=1∑Lx=1∑Ly=1(Zli,j,kwl+1k+b)=wTl+1Zl+1+b,Ll+1=L 由单位卷积核组成的卷积层也称为网中网(NetworkInNetwork,NIN)或多层感知器卷积层(multilayer perceptron convolution layer,mlpconv)。单位卷积核可以在保持特征图尺寸的同时减少图的通道数,从而降低卷积层的计算量。完全由单位卷积核构建的卷积神经网络是一个包含参数共享的多层感知器(MultiLayer Perceptron,MLP)。 在线性卷积的基础上,一些卷积神经网络使用了更为复杂的卷积,包括平铺卷积、反卷积和扩张卷积。平铺卷积的卷积核只扫过特征图的一部分,剩余部分由同层的其他卷积核处理,因此卷积层间的参数仅被部分共享,有利于神经网络捕捉输入图像的旋转不变特征。反卷积或转置卷积将单个的输入激励与多个输出激励相连接,对输入图像进行放大。由反卷积和向上池化层构成的卷积神经网络在图像语义分割领域有应用,也用于构建卷积自编码器(Convolutional AutoEncoder,CAE)。扩张卷积在线性卷积的基础上引入扩张率以提高卷积核的感受野,从而获得特征图的更多信息,在面向序列数据使用时有利于捕捉学习目标的长距离依赖。 2) 卷积层参数 卷积层参数包括卷积核大小、步长和填充,三者共同决定了卷积层输出特征图的尺寸,是卷积神经网络的超参数。其中卷积核大小可以指定为小于输入图像尺寸的任意值,卷积核越大,可提取的输入特征越复杂。 卷积步长定义了卷积核相邻两次扫过特征图时位置的距离,卷积步长为1时,卷积核会逐个扫过特征图的元素,步长为n时,会在下一次扫描跳过n-1像素。 由卷积核的交叉相关计算可知,随着卷积层的堆叠,特征图的尺寸会逐步减小,例如16×16的输入图像在经过单位步长、无填充的5×5的卷积核后,会输出12×12的特征图。为此,填充是在特征图通过卷积核之前人为增大其尺寸以抵消计算中尺寸收缩影响的方法。常见的填充方法为按0填充(图53)和重复边界值填充。 图53卷积核中RGB图像的按0填充 填充依据其层数和目的可分为四类: (1) 有效填充: 完全不使用填充,卷积核只允许访问特征图中包含完整感受野的位置。输出的所有像素都是输入中相同数量像素的函数。使用有效填充的卷积称为窄卷积,窄卷积输出的特征图尺寸为(L-f)/s+1。 (2) 相同填充/半填充: 只进行足够的填充来保持输出和输入的特征图尺寸相同。相同填充下特征图的尺寸不会缩减,但输入像素中靠近边界的部分相比于中间部分对特征图的影响更小,即存在边界像素的欠表达。使用相同填充的卷积称为等长卷积。 (3) 全填充: 进行足够多的填充使得每个像素在每个方向上被访问的次数相同。步长为1时,全填充输出的特征图尺寸为L+f-1,大于输入值。使用全填充的卷积称为宽卷积。 (4) 任意填充: 介于有效填充和全填充之间,人为设定的填充,较少使用。 再看先前的例子,若16×16的输入图像在经过单位步长的5×5的卷积核之前先进行相同填充,则会在水平和垂直方向填充两层,即两侧各增加2个像素(p=2)变为20×20大小的图像,通过卷积核后,输出的特征图尺寸为16×16,保持了原本的尺寸。 3. 激励函数 卷积层中包含激励函数以协助表达复杂特征,其表达式为 Ali,j,k=g(Zli,j,k) 类似于其他深度学习算法,卷积神经网络通常使用ReLU,其他类似ReLU的变体包括有Leaky ReLU、参数化ReLU、随机化ReLU、指数线性单元等,具体细节见第4章。在ReLU出现以前,Sigmoid函数和双曲正切函数也有使用。 激励函数操作通常在卷积核之后,一些使用预激活技术的算法将激励函数置于卷积核之前。在一些早期的卷积神经网络研究,例如LeNet5中,激励函数在池化层之后。 4. 池化层 在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中最大池化和平均池化最为常见,如图54所示。最大池化是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值; 而平均池化是对每个子区域输出平均值。最大池化是经常采用的方法,在直觉上是有效的,原因在于: 在发现一个特征之后,它的精确位置远不及它与其他特征的相对位置重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量会下降,这在一定程度上也控制了过拟合。 图54池化示意 池化层通常会分别作用于每个输入的特征并减小其大小。当前最常用的池化层形式是每隔2个元素从图像划分出2×2的区块,然后对每个区块中的4个数取平均值或池化值,这将会减少75%的数据量。 池化层的引入是仿照人的视觉系统对视觉输入对象进行降维和抽象。在卷积神经网络过去的工作中,研究者普遍认为池化层有如下三个功效: (1) 特征不变性: 池化操作使模型更加关注是否存在某些特征而不是特征具体的位置。 (2) 特征降维: 池化相当于在空间范围内做了维度约减,从而使模型可以抽取更广范围的特征。同时减小了下一层的输入大小,进而减少计算量和参数个数。 (3) 在一定程度上防止过拟合,更方便优化。 5. 扁平化层 卷积层之后是无法直接连接密集全连接层的,需要把卷积层的数据做扁平化处理,然后直接加上全连接层。也就是把三维(height,width,channel)的数据压缩成长度为 height×width×channel 的一维数组,然后再与全连接层连接。其中height和width分别代表图像的平面尺寸的高度和宽度,而channel表示卷积通道数,也就是上一层采用的卷积核个数。 从图55中可以看到,随着网络的深入,图像块平面尺寸越来越小,但是通道数往往会增大。图中表示长方体的平面尺寸越来越小,这主要是卷积和池化的结果,而通道数由每次卷积的卷积核个数来决定。 图55扁平层示意图 6. 全连接层 卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层。全连接层位于卷积神经网络隐含层的最后部分,并只向其他全连接层和输出层传递信号。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数。 按表征学习观点,卷积神经网络中的卷积层和池化层能够对输入数据进行特征提取,全连接层的作用是对提取的特征进行非线性组合以得到输出,即全连接层本身不被期望具有特征提取能力,而是试图利用现有的高阶特征完成学习目标。 在一些卷积神经网络中,全连接层的功能也由全局均值池化(Global Average Pooling,GAP)取代,全局均值池化会将特征图每个通道的所有值取平均。例如,若有7×7×256维的特征图,全局均值池化将返回一个256维的向量,其中每个元素都是7×7、步长为7、无填充的均值池化值。 5.2卷积神经网络与全连接网络的关系 卷积神经网络与前向神经网络没有很大差别,传统神经网络本质上就是多个全连接层的叠加,而卷积神经网络无非是把全连接层改成卷积层和池化层,即把传统的由一个个神经元组成的层变成了由滤波器组成的层。但卷积神经网络有两种独特机制来减少参数量: 一是连接稀疏性; 二是参数共享。 5.2.1连接稀疏性 例如,图像尺寸为8×8,即64像素,假设有36个单元的全连接层,如图56所示。这一层需要64×36+36=2340个参数,其中64×36是全连接的权重,每一个连接都需要一个权重w; 而另外36个参数对应的偏置项b,每个输出节点对应一个偏置项。 图56全连接网络示意图 卷积神经网络的第一个特性是网络部分连通特性,即模拟局部感受野,以图57所示的9个单元滤波器为例来说明。由卷积的操作可知,输出图像中的任何一个单元只与输入图像的一部分有关系。如图57所示,左侧图像的阴影区域通过滤波器与右侧对应输出单元相连接。而该输出单元与左侧区域的其他单元没有连接,因此连接是稀疏的。而传统前向神经网络中由于都是全连接,所以输出的任何一个单元都要受输入的所有单元影响。这样无形中会降低图像识别效果。从前面的描述可知,滤波器是用来检测特征的,每个滤波器都侧重某一方面特征的描述和发现,因此不同的滤波器能够描述图像的不同模式或特征。因此,期望每一个区域都有自己的专属特征,不希望其受到其他区域的影响。 图57连接的稀疏性示意图 这种局部稀疏性或者说局部感受野使得每个输出单元只有9个连接,因此对应的连接数就是9×36,那么参数是不是9×36+36呢?答案当然不是,此时参数的个数为9+1个,其中9个为卷积核参数,1个为卷积核所对应的偏置量。为什么会出现这种结果,下面进一步剖析其产生原因,即参数共享机制。 5.2.2参数共享机制 仍然以图57所示的9个单元滤波器为例来说明。滤波器有几个单元就几个参数,所以图中所示总共只有9个参数。暂时不考虑偏置项,为什么是9个参数,而不是16×9个参数呢,这是因为对于不同的区域都共享同一个滤波器,因此共享这同一组参数,如图58所示。 图58卷积神经网络示意图 如前所述,每个滤波器都侧重某一方面特征的描述和发现,因此不同的滤波器能够描述图像的不同模式或特征。通常情况下,某一个特征很可能在不止一个地方出现,比如“竖直边界”就可能在一幅图中多处出现,鸟的羽毛就可能出现在图像的不同位置,因此共享同一个滤波器有客观存在的合理性作支撑。由于采用这种参数共享机制,使得卷积神经网络的参数数量大大减少。这样,就可以用较少的参数训练出更加好的模型,而且可以有效地避免过拟合。 同样,由于滤波器的参数共享,即使图片进行了一定的平移操作,同样可以识别出特征,这种特性称为平移不变性。因此,模型也会更加稳健。 连接稀疏性使得卷积神经网络的参数减少,而参数共享机制使得网络参数进一步减少,正是由于上面这两大优势,使得卷积神经网络超越了传统神经网络,开启了神经网络的新时代。 5.3典型的卷积神经网络 CNN的开山之作是杨立昆提出的LeNet5[7],而其真正的爆发期是在2012年AlexNet[9]取得ImageNet比赛分类任务的冠军之后,当年AlexNet的分类准确率远远超过传统方法。该模型能够取得成功主要有三个原因: (1) 海量有标记的训练数据支撑,也就是李飞飞团队提供的大规模有标记的数据集ImageNet; (2) 计算机硬件的支持,尤其是GPU的出现,为复杂的计算提供了强大的支持; (3) 算法的改进,包括网络结构加深、数据增强(数据扩充)、ReLU激活函数和Dropout等。 AlexNet之后,深度学习发展迅速,分类准确率每年都有很大提高,表51给出了四种不同模型的结构对比。图59展示了模型的变化情况,随着模型的变深,Top5错误率也越来越低,在2017年已经降低到2.3%左右; 同样,对于ImageNet数据集,人眼的辨识错误率大概为5.1%,这说明深度学习在图像识别领域的能力已经超过了人类。 图59ILSVRC历年的Top5错误率 表51四种模型对比[14] 模型名AlexNetVGGNetGoogLeNetResNet 提出时间2012年2014年2014年2015年 层数81922152 Top5错误率/%15.47.36.73.57 数据增强++++ Inception--+- 卷积层数51621151 卷积核大小11,5,337,1,3,57,1,3,5 全连接层数3311 全连接层大小4096,4096,10004096,4096,100010001000 Dropout++++ 局部相应归一化+-+- 批归一化---+ 5.3.1LeNet5网络 LeNet5网络可以认为是目前深度经典卷积神经网络的开创者,该网络共包含7层(不包括输入层),如图510所示。 图510LeNet5结构[7] 网络各个层的设置具体如下: 1. C1卷积层 C1卷积层由6个卷积核构成。输入图像大小是32×32,输入图像首先经过6个尺寸为5×5的卷积核进行滤波后得到特征图,由于每个卷积核(滤波器)产生一个特征映射图,所以6个卷积核共产生6个特征图,特征图的大小为28×28。由于每个卷积核滤波操作对整幅图像处理,以像素步长1进行移动,那么水平和垂直方向各有(32-5)/1+1=28次卷积操作,所以得到输出特征图尺寸为28×28。C1有156个可训练参数(每个滤波器5×5=25个滤波器参数和1个偏差参数,共6个滤波器,共(5×5+1)×6=156个参数); C1输出特征图大小为28×28,因此共产生156×(28×28)=122304个连接。 2. S2池化层 S2池化层生成6个14×14的输出特征图。S2输出特征图中的每个单元与C1中相对应特征图的2×2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置,然后通过Sigmoid函数(或其他函数)计算。可训练系数和偏置控制着激活函数的非线性程度。每个单元的2×2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。由于每个特征图只需要一个权值和一个偏置项,S2层有6×(1+1)=12个可训练参数,共形成14×14×(2×2+1)×6=5880个连接。 3. C3卷积层 C3卷积层同样通过5×5的卷积核去处理S2层的输出特征图,得到的特征图尺寸为10×10。(同样每个方向移动步长为1,那么(14-5)/1+1=10)。C3层输出16个特征图,但需要注意的是,C3中不是由单独16个卷积核构成,而是每个特征图由S2中所有6个或者其中的3个、4个特征图组合而成。不把S2中的每个特征图连接到每个C3的特征图的原因: 第一,不完全的连接机制将连接的数量保持在合理的范围内; 第二,也是最重要的一点,通过不同特征图的不同输入来抽取上一层的不同特征。相应地,16个特征图的组合方式如表52所示。这是一种稀疏连接的方式,可以减少连接的数量,同时打破了网络的对称性。 表52S2层到C3层的连接方式 0123456789101112131415 0XXXXXXXXXX 1XXXXXXXXXX 2XXXXXXXXXX 续表 0123456789101112131415 3XXXXXXXXXX 4XXXXXXXXXX 5XXXXXXXXXX 虽然原始特征图只有6种,但是由于不同的选择方式,构造了16个新特征图。由于每种组合里原始特征图需要选择不同的系数,因此也可以将新生成的16个特征图看作由60个滤波器构成(6组3个特征图进行组合,9组4个特征图进行组合,还有一组是全部6个特征图进行组合,则3×6+4×9+6=60),而每个滤波器的参数都是5×5=25个,而最后生成16个特征图,每个特征图需要一个偏置项,所以参数为60×5×5+16=1516个,总连接数为1516×10×10个。 4. S4池化层 S4池化层生成输出16个5×5大小的特征图。特征图中的每个单元与C3中相应特征图的2×2邻域相连接,与C1和S2之间的连接一样。S4层有32个可训练参数(每个特征图需要一个可训练参数和一个偏置,因此有16×(1+1)=32和16×(2×2+1)×5×5=2000个连接。 5. C5卷积层 C5卷积层输出120个特征图。每个单元与S4层的全部16个特征图的5×5邻域相连。由于S4层特征图的大小也为5×5(同滤波器一样),故C5特征图的大小为1×1(5-5+1=1),这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全连接层,是因为本例中输入图像尺寸为32×32,导致此时输出尺寸为1; 如果LeNet5的输入变大,而其他的保持不变,此时特征图的维数就会比1×1大,因此卷积层更符合本身特性。C5层有120×(16×5×5+1)=48120个可训练连接,由于与全部16个单元相连,故只加一个偏置。 6. F6全连接层 F6全连接层输出有84个单元,与C5层全相连。输出层选择84个单元的原因是来自输出层的设计。因为在计算机中字符的编码是ASCII编码,这些图是用7×12=84大小的位图表示的。F6层输出有84×(120×(1×1)+1)=10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,然后将其传递给激活函数函数产生每个单元的一个状态。 7. 输出层 输出层由欧几里得径向基函数单元组成,每类一个单元,每个有84个输入。 5.3.2AlexNet网络 2012年著名人工智能学者杰夫·辛顿和他的学生亚历克斯·克里热夫斯基(Alex krizhevsky)等创造了一个“大型的深度卷积神经网络”,赢得了该年度ImageNet 大规模视觉识别挑战赛(iLsvrc)的冠军,其论文ImageNet classification with deep convolutional networks[9]被引用约2.7万次,被业内普遍视为行业最重要的论文之一。ILSVRC比赛被誉为计算机视觉的年度奥林匹克竞赛,全世界的团队相聚一堂进行技术竞技。2012年采用CNN获得Top5误差率15.4%(Top5误差率是指给定一张测试图像,其标签不在模型认为最有可能的5个结果中的概率),远优于当时排名第二模型26.2%的错误率,震惊了整个计算机视觉界。自2012年起,CNN网络风靡多年。 图511是AlexNet结构,由于采用两台GPU服务器进行运算,所以分成上、下两个部分。图512为AlexNet结构分析图。由图中可知,共有8个隐含层,包括5个卷积层和3个全连接层,图中每个卷积层标注下方给出了每层的输入特征图尺寸,其中前两个数字为平面尺寸,后一个数字为通道数。以卷积层1为例,输入图像尺寸为227×227×3,说明原始输入图像是尺寸227×227的三通道彩色图像。需要说明的是,图511与图512的输入图像尺寸分别是224和227,这是由于作者在2012年和2014年的文章中就分别给出这2种配置。实际上224尺寸图像可以通过补1个零获得与227相同的处理结果。该层在两个GPU上各采用了48个尺寸为11×11的卷积核,步长为4,采用的非线性激活函数为ReLU函数,池化尺寸为3×3、步长为2,并且在该层进行了层标准化。首先输入图像经过卷积核作用后,平面尺寸变为55×55,即(227-11)/4+1=55。因此,经过96个卷积核作用后,输出特征图为55×55×96。然后再进入池化,则根据上述设置,池化后的特征图尺寸变为27×27,即(55-3)/2+1=27,而通道数96保持不变。因此,经过卷积层1的整个作用后,将227×227×3的特征图转换为27×27×96的特征图。依次类推,图中给出了每层作用的参数分析结果,包括后续的其他4个卷积层和3个全连接层。 图513为AlexNet的网络结构简图[9]。AlexNet的结构很简单,只是LeNet的放大版,输入是一个227×227的图像,经过5个卷积层、3个全连接层(包含一个分类层),输出到最后的标签空间。图中也给出了相应的图像尺寸以及通道数变化的情况。 除了上述结构上的创新外,AlexNet网络还有很多独到之处: (1) 非线性激活函数ReLU。在AlexNet之前,一般神经元的激活函数会选择Sigmoid函数或者tanh函数,然而在研究AlexNet网络时,发现在训练时间的梯度衰减方面,这些非线性饱和函数要比非线性非饱和函数慢很多。在AlexNet中用的非线性非饱和函数ReLU。实验结果表明,采用ReLU函数后相比原来的tanh函数,其训练速度大大加快。 (2) 双GPU并行处理。为提高运行速度和提高网络运行规模,AlexNet网络中采用双GPU的设计模式,即每个GPU负责1/2的运算处理,且规定GPU只能在特定的层进行通信交流。如图511所示,卷积层1、卷积层2、卷积层4和卷积层5 仅连接相同GPU上的特征图,而卷积层3和后面的三个全连接层,连接前面层所有GPU的特征图。 〖ZP(〗 图511AlexNet结构[9] 〖ZP)〗 图512AlexNet的网络结构分析图 图513AlexNet的网络结构简图 (3) 局部响应归一化技术。ReLU本来是不需要对输入进行标准化,但进行局部标准化能提高性能。局部响应归一化(Local Response Normalization,LRN)实际就是利用临近的数据做归一化,即 bix,y=aix,y/k+α∑min(N-1,i+n/2)j=max(0,i-n/2)(ajx,y)2β(5.1) 式中: aix,y为第i个卷积核的输出特征图(x,y)坐标经过了ReLU激活函数的输出; n为相邻的几个卷积核; N为这一层总卷积核数量; k、n、α和β为超参数,这些超参数值是在验证集上通过实验获取,最终选择k=2,n=5,α=10-4,β=0.75。 这种归一化操作受真实神经元的某种行为启发,卷积核矩阵的排序是随机任意的,并且在训练之前就已经决定好顺序,因此这种归一化机制实现了某种形式的横向抑制。该策略贡献了约1.2%的误差率下降。LRN作为深度学习训练时的一种提高准确度的技术方法,一般在激活、池化后进行。需要说明的是,这种归一化也可在通道内进行,即i代表通道序号。 (4) 交叠池化。池化层是对相同卷积核特征图中周围神经元输出进行总结,也可以理解成按一定步长移动对前面卷积层的结果进行分块,对块内的卷积映射结果做总结。在AlexNet网络中,使用了重叠的最大池化,而此前CNN中普遍使用平均池化。AlexNet全部使用最大池化,避免平均池化的模糊化效果; 而重叠体现了其输入会受到相邻池化单元的输入影响。并且AlexNet中提出步长比池化核的尺寸小,池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。实验结果表明,使用带交叠的池化相比于传统方法,其Top1和Top5上分别提高了0.4%和0.3%,在训练阶段有避免过拟合的作用。 (5) Dropout技术。在AlexNet网络中,最后的三个全连接层均使用了Dropout技术。训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。AlexNet将Dropout实用化,通过实践证实了它的效果。 5.3.3ZFNet网络 2013年,ImageNet 大规模视觉识别挑战赛(ILSVRC 2013)的冠军获胜模型是纽约大学Matthew Zeiler和Rob Fergus设计的卷积神经网络[10]。该网络以两个作者的名字来命名,即Zeiler&Fergus Net,简称ZFNet。ZFNet模型网络结构没有太大突破,其本质是AlexNet架构的微调优化版,只是在卷积核和步幅上面做了一些优化调整。ZFNet的两个主要贡献: 一是该网络使用一个多层的反卷积网络来可视化训练过程中特征的演化情况,并及时发现潜在的问题; 二是根据遮挡图像局部对分类结果的影响,来探讨到底哪部分输入信息对分类任务更为重要。 1. 利用反卷积实现特征可视化 为了清楚了解卷积神经网络的机理和性能优越的原因,需要对CNN学习到的特征进行分析与解释,为此ZFNet网络提出采用反卷积网络技术进行特征可视化[15]。反卷积网络可以看成是卷积网络的逆过程,最早提出用于无监督学习,而在ZFNet中,反卷积技术仅用于特征可视化。反卷积可视化是以各层得到的特征图作为输入,通过反卷积网络得到最终结果,用以验证显示各层提取到的特征图。例如,想了解AlexNet网络的每层都学习到什么信息,可以对特定层的特征图进行反卷可视化。将AlexNet网络的第3个卷积层输出特征图后面接一个反卷积网络,通过反池化、反激活、反卷积这样的一系列过程,把本来13×13大小的特征图反卷放大(AlexNet第三个卷积层输出特征图13×13×384),得到一张与原始输入图片一样大小的图片(227×227),这样就能够了解第3个卷积层学习到的信息。图514给出了利用反卷积实现特征可视化过程。从图中可以看出,右侧部分是图像卷积网络前向识别处理过程,即每层处理后的特征图,先经过卷积层进行卷积和非线性激活,然后进行池化得到池化后的特征图。其中采用ReLU函数进行激活,采用最大池化方法进行池化。左侧给出了反卷积实现可视化过程,首先得到上面所有层重建后的信息,然后进行正向处理相反的过程,即反池化、反激活和反卷积三步,得到重建后的图像。需要注意的是,左侧图中的反激活就是激活、而反卷积采用转置卷积滤波器进行反卷。这样处理的原因将在后续反池化、反激活、反卷积的基本思想中进行解释[10]。 图514利用反卷积实现特征可视化过程[10] 1) 反池化 从前面定义可知,池化过程不可逆。以最大池化为例,为了进行反池化,需要记录池化过程中最大激活值的坐标位置。然后在反池化时,把池化过程中最大激活值所在位置坐标值激活,其他位置的值置为0。需要注意的是,这种反池化过程只是一种近似过程(因为在正向池化时,其他位置的值并不为0)。 图515反池化示意图 图515给出反池化两个示例,每个示例中左侧都是池化过程,右侧是反池化过程。假设池化块的大小是3×3,采用最大池化后,左侧和右侧示例分别得到输出神经元激活值为9。池化是下采样过程,因此经过池化后3×3大小的像素块就变成1个值。而反池化是池化的逆过程,是一个上采样过程,需要将1个值恢复成3×3大小的像素块。为了使池化可逆,需要记录池化过程中最大值位置坐标(-1,1)和(0,0)。因此,在进行反池化时,根据记录的位置坐标,把对应的像素值填充回该位置,而其他位置的神经元激活值全部为0。需要注意的是,本例中给出的坐标位置,是以像素块的中心点(0,0)来记录其他的位置,因此图515(a)池化位置为(-1,1),而图515(b)池化位置为(0,0)。 图516卷积示意图 2) 反激活 在AlexNet中,ReLU函数是用于保证每层输出的激活值都是正数,因此对于反向过程,同样需要保证每层的特征图为正值,因此反激活过程和激活过程都是直接采用ReLU函数。 3) 反卷积 为了说明反卷积原理,下面举例来对比卷积和反卷积的过程。如图516所示,假设输入图片尺寸为4×4,卷积核尺寸为3×3,步长为1,则卷积后的特征图尺寸为2×2。为了便于对应表示,可以将卷积写成矩阵运算形式。由于输入尺寸元素个数为4×4,将其展开成16×1的向量表示为A∈R16×1,输出图像尺寸为2×2,将其展开成4×1的向量表示为B∈R4×1,则将卷积核表示为矩阵C∈R4×16。需要注意的是,矩阵C是为了后期矩阵运算而扩展的卷积核矩阵,则卷积运算可以表示为 B=CA(5.2) 式中 A=x11 x12 x13 x14 x21 x22 x23 x24 x31 x32 x33 x34 x41 x42 x43 x44, C=w11000 w12w1100 w13w1200 0w1300 w210w110 w22w21w12w11 w23w22w13w12 0w230w13 w310w210 w32w31w22w21 w33w32w23w22 0w330w23 00w310 00w32w31 00w33w32 000w33T, B=y11 y12 y21 y22(5.3) 可以看出,卷积核矩阵C的4行的每一行就对应图516(a)、(b)、(c)和(d)四种情况。图516(a)中,原卷积核为 C1,origin=w11w12w13 w21w22w23 w31w32w33(5.4) 为了后期矩阵计算,将卷积核对应图像尺寸进行拓展成4×4,则拓展后的卷积核为 C1=w11w12w130 w21w22w230 w31w32w330 0000(5.5) 将C1矩阵矢量化,则得到式(5.2)和式(5.3)中的卷积矩阵C的第一行。同理,图516(b)、(c)和(d)所示卷积核分别对应卷积矩阵C的第二至第四行。 有了前面卷积的矩阵分析,则很容易理解反卷积的矩阵形式。对于反卷积,若输入尺寸为2×2的图像,矢量化后表示为B′∈R4×1,则将反卷积等同于如下矩阵运算,即 A′=CTB′(5.6) 其中反卷积后的特征图尺寸4×4,矢量化后表示为A′∈R16×1,反卷积如图517所示。 图517反卷积示意图 经过上面的分析可以看出,反卷积过程非常简单,就是采用卷积过程中转置后的滤波器作为卷积核,直接按照卷积过程运算。因此,反卷积本质上就是转置卷积。 2. ZFNet网络结构分析 图518给出了ZFNet网络结构简图,网络模型参数配置如表53所示。表53给出了每个卷积核和池化层的具体参数配置,以及处理前和处理后的图像尺寸的变化。从图518和表53中可以看出,ZFNet模型包括5个卷积层和3个全连接层。从图中可以看出,ZFNet模型网络结构与AlexNet网络结构类似,只是在卷积核和步幅上面做了一些优化调整,其本质是AlexNet架构的微调优化版。 图518ZFNet网络结构简图 ZFNet与AlexNet的区别: (1) ZFNet网络的第一个卷积层的卷积核尺寸由11×11改为7×7,步长由4改为2。之所以对这些参数进行调整,是由于对特征图可视化而得出的一些结论。通过可视化AlexNet第一层和第二层的特征,发现比较大的步长和卷积核提取的特征不理想,所以缩小了第一层的卷积核的尺寸,实验结果也证明了这种尺寸变化提升了图像分类性能。 表53ZFNet模型参数配置 类型核尺寸(卷积核个数)步长、补零和非线性激活函数输入特征图尺寸输出特征图尺寸 卷积层1 (Conv1)7×7卷积核(96个) stride=2 padding=0 ReLU224×224×3110×110×96 池化3×3 stride=2 padding=0110×110×9655×55×96 归一化对比归一化 卷积层2 (Conv2)5×5卷积核(256个)stride=2 padding=0 ReLU55×55×9626×26×256 池化3×3 stride=2 padding=026×26×25613×13×256 归一化对比归一化 卷积层3 (Conv3)3×3卷积核(384个) stride=1 padding=1 ReLU13×13×25613×13×384 卷积层4 (Conv4)3×3卷积核(384个) stride=1 padding=1 ReLU13×13×38413×13×384 卷积层5 (Conv5)3×3卷积核(256个) stride=1 padding=1 ReLU13×13×38413×13×256 池化3×3 stride=2 padding=013×13×2566×6×256 全连接层1 (FC6) 全连接层2 (FC7) 全连接层3 (FC8) ReLU 92164096 40964096 4096分类数 另外,通过特征可视化可以知道,克里热夫斯基(Krizhevsky)的CNN结构学习到的第一层特征只对于高频和低频信息收敛,对于中层信息还没有收敛; 同时,第二层特征出现了混叠失真,主要是第一个卷积层的步长设置为4引起的,为了解决这个问题,不仅将第一层的卷积核的大小设置为7×7,同时也将步长设置为2。 (2) ZFNet网络将第三、四和五层卷积层中卷积核的数量后期进行调整,分别由384、384、256调整为512、1024、512。 卷积神经网络的结构要素,如卷积核尺寸大小、池化步长、卷积核数量选择等方面都是事先人为设定的。这种设定虽然有一定的先验信息或知识作参考,但仍然带有一定的盲目性,因此需要通过多次试验寻求最佳的设计。ZFNet网络通过可视化网络过程,为卷积神经网络结构要素的选择提供了一个分析方法或依据,虽然还不能确定具体的参数设置,但给出了大致的优化方向。这种方法对于结构要素选择是非常有意义的一种探讨思路。 5.3.4VGGNet网络 VGGNet模型是牛津大学计算机视觉组和谷歌 DeepMind公司的研究员一起研发的深度卷积神经网络,随后该网络以牛津大学视觉几何组(Visual Geometry Group)的缩写来命名[11]。该模型参加2014年的 ImageNet图像分类与定位挑战赛(ILSVRC 2014),获得了分类任务上排名第二、定位任务排名第一的优异成绩。 1. VGGNet网络介绍 该模型的突出贡献在于证明使用尺寸较小的卷积核(如3×3),同时增加网络深度有助于提升模型的效果。VGGNet模型对其他数据集具有很好的泛化能力,到目前为止,VGGNet依然经常用来提取图像特征。表54给出了6种VGGNet模型参数配置。这6种参数配置中,比较著名的有VGG16和VGG19,分别指的是D和E两种配置。表中的黑体部分代表当前配置相对于前面一种配置增加的部分。例如,ALRN相对于A网络增加了LRN; 而B相对于A而言增加了2个卷积层,均表示为Conv364,Conv364是指采用了含有64个3×3卷积核的卷积层。为了便于表示,VGGNet模型中构造了卷积层堆叠块,例如由若干个卷积层堆叠后进行最大池化后构成的结构,可以采用2层卷积层、3个卷积层甚至是4个卷积层堆叠后池化。 2. VGG16典型结构分析 VGGNet成功探讨了卷积神经网络的深度与其性能之间的关系,通过反复堆叠3×3的小型卷积核和2×2的最大池化层,VGGNet成功地构筑了16~19层深的卷积神经网络。VGGNet相比之前主流网络结构,错误率大幅下降。下面以经典的VGG16网络结构进行分析。图519给出了配置D情况下VGG16的网络结构简图,共包括13个卷积层和3个全连接层,其中卷积层、池化层和全连接层分别如图中实线、虚线和实线阴影所示,每个卷积堆叠块最后都是池化层。表55给出了配置D情况下VGG16模型的主要模型参数。从表中可以看出,采用了5段卷积层堆叠第一和第二卷积层段各包括了2个卷积层,而第三至五卷积层段各包括了3个卷积层,所有的卷积层都采用了3×3尺寸的卷积核,卷积核步长为1; 每个卷积层段后跟一个最大池化层,池化尺寸为2×2,步长为2,所以池化后图像平面尺寸减半,而通道数保持不变。 表54VGGNet模型参数配置 卷积网络配置 AALRNBCDE 11层11层13层16层16层19层 输入图像(224×224 RGB图像) Conv364Conv364 LRNConv364 Conv364Conv364 Conv364Conv364 Conv364Conv364 Conv364 最大池化层(Maxpooling) Block 1 Conv3128Conv3128Conv3128 Conv3128Conv3128 Conv3128Conv3128 Conv3128Conv3128 Conv3128 最大池化层(Maxpooling) Block 2 Conv3256 Conv3256Conv3256 Conv3256Conv3256 Conv3256Conv3256 Conv3256 Conv1256Conv3256 Conv3256 Conv3256Conv3256 Conv3256 Conv3256 Conv3256 最大池化层(Maxpooling) Block 3 Conv3512 Conv3512Conv3512 Conv3512Conv3512 Conv3512Conv3512 Conv3512 Conv1512Conv3512 Conv3512 Conv3512Conv3512 Conv3512 Conv3512 Conv3512 最大池化层(Maxpooling) Block 4 Conv3512 Conv3512Conv3512 Conv3512Conv3512 Conv3512Conv3512 Conv3512 Conv3512Conv3512 Conv3512 Conv3512Conv3512 Conv3512 Conv3512 Conv3512Block 5 最大池化层(Maxpooling) Block 5 全连接层(FC4096) 全连接层(FC4096) 全连接层(FC1000) Softmax层 图519VGG16网络结构简图 表55VGG16模型参数配置 类型核尺寸/步长输入特征图尺寸输出特征图尺寸 第一段卷积层 3×3/1224×224×3224×224×64 3×3/1224×224×64224×224×64 MaxPooling2×2/2224×224×64112×112×64 第二段卷积层 3×3/1112×112×64112×112×128 3×3/1112×112×128112×112×128 MaxPooling2×2/2112×112×12856×56×128 第三段卷积层 3×3/156×56×12856×56×256 3×3/156×56×25656×56×256 3×3/156×56×25656×56×256 MaxPooling2×2/256×56×25628×28×256 第四段卷积层 3×3/128×28×25628×28×512 3×3/128×28×51228×28×512 3×3/128×28×51228×28×512 MaxPooling2×2/214×14×51214×14×512 第五段卷积层 3×3/114×14×51214×14×512 3×3/114×14×51214×14×512 3×3/114×14×51214×14×512 MaxPooling2×2/214×14×5127×7×512 全连接层1(FC1) 全连接层2(FC2) 全连接层3(FC3) ReLU 250884096 40964096 40961000 另外,从配置表可以看出,特征图经过卷积层后,尺寸没有发生变化(这是因为采用了补零策略,由于卷积核尺寸为3×3,卷积后尺寸不发生变换,因而补零个数为1),每个卷积层输出特征图的通道数就是每层卷积核的个数。 此外,VGGNet的另外一种经典配置就是配置E情况下的VGG19。VGG19包括16个卷积层和3个全连接层。由于结构非常类似,不再做相应分析,可参考VGG16。 3. VGGNet特点分析 从前面的卷积神经网络分析很容易看清VGG16的网络结构,下面针对VGG16特点进行详细分析。 1) 卷积层堆叠式结构 为了了解卷积层堆叠式结构的产生原因,下面通过一个简单例子进行分析。假设输入图像平面尺寸为m×n,卷积核的步长为1,那么采用5×5的卷积核做一轮卷积运算,则输出特征图的平面尺寸为(m-5+1)×(n-5+1),即(m-4)×(n-4)。同理,利用3×3的卷积核对上述相同的图像进行卷积,可以得到输出特征图尺寸为(m-3+1)×(n-3+1),即(m-2)×(n-2)。如果采用两层堆叠式结构,则对平面尺寸为(m-2)×(n-2)图像再采用3×3的卷积核进行卷积,则此时输出特征图尺寸为(m-4)×(n-4)。由上述例子可知,利用步长为1、尺寸为3×3的卷积核构成的卷积堆叠层,可以实现与5×5的卷积核的单卷积层同样的效果,即实现了5×5的感受野。同理,三层3×3卷积层堆叠可以实现7×7的感受野。 因此,VGGNet网络相比于ImageNet的冠军网络AlexNet和ZFNet而言,有两个优势: (1) 包含三个ReLU卷积层而不是一个,使得决策函数更有判别性; (2) 卷积层堆叠式结构相比单层卷积层而言,同样感受野的条件下但堆叠式模型参数更少,比如输入与输出都是L个通道,使用平面尺寸为3×3的3个卷积层需要3×(3×3×L)×L=27×L2个参数,使用7×7的1个卷积层需要(7×7×L)×L=49×L2个参数,这可以看作是为7×7的卷积施加一种正则化,使它分解为3个3×3的卷积。 2) 1×1卷积核的运用 从表54可以看出,在配置C的网络中,出现了1×1卷积核。使用1×1的卷积层,有两个作用: 一是改变通道数; 二是若输入通道与输出通道数相同,为了实现线性变换,线性变换后也可增加决策函数的非线性,而不影响卷积层的感受野,虽然1×1的卷积操作是线性的,但是ReLU增加了非线性。 5.3.5GoogLeNet网络 GoogLeNet是2014年谷歌公司的克里斯蒂安·塞格迪(Christian Szegedy)提出的一种全新的深度学习网络结构[12],该网络在2014年ImageNet的大规模视觉识别挑战赛(ILSVRC14)的分类和检测上取得了最好结果,将错误率降到6.7%。GoogLeNet和VGGNet被誉为2014年ILSVRC14的“双雄”,在分类任务和检测任务上,GoogLeNet获得了第一名,VGGNet获得了第二名; 而在定位任务上,VGGNet获得第一名。 该网络名字为GoogLeNet而不是GoogleNet,主要原因: 该名称命名由两部分组成,一是该网络的提出者克里斯蒂安·塞格迪在谷歌工作,二是研究者为了表达对1989年杨立昆所提出的LeNet网络的致敬,将两部分组合起来命名为GoogLeNet,既体现了谷歌公司的贡献,也表达了对已有重要学者和重要贡献的崇敬。从技术角度而言,该网络模型的核心内容是发明了深度感知模块(Inception Module,IM),因此GoogLeNet还有另外一个名字叫InceptionNet,“Inception”一词蕴含着“深度感知”。 GoogLeNet和VGGNet模型结构的共同特点是层次更深。VGGNet继承了LeNet以及AlexNet的一些框架结构,AlexNet、VGGNet等结构都是通过增加网络的深度(层数)来获得更好的任务精度; 但层数的增加会出现过拟合、梯度消失、梯度爆炸等问题。而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但模型参数规模比AlexNet和VGGNet小很多,GoogLeNet参数为500万个,AlexNet参数个数是GoogLeNet的12倍,VGGNet参数是AlexNet的3倍。因此,在内存或计算资源有限时,GoogLeNet是比较好的选择; 从模型结果来看,GoogLeNet在较少的参数规模下能获得更加优越的性能,其根本原因在于深度感知模块(Inception Module,IM)的提出。深度感知模块也称为深度感知结构(Inception Architecture,IA),需要说明的是,深度感知模块是本书编者从自身理解角度给出的名称,并不具有通用性,为了阐述方便,后续直接以“Inception 模块”进行表述。 1. Inception 模块提出缘由 通常而言,提高深度神经网络性能最直接的方法是增加网络的尺寸,包括增加网络的深度(网络层数)和网络宽度(每一层的单元数目)两种方式。特别是在可获得大量标记的训练数据的情况下,这种方式是训练高质量模型的一种简单而安全的方法。但是,这个简单的解决方案有三个主要的缺点: 一是更大的尺寸意味着更多的参数,参数规模的增加使得网络容易陷入过拟合,特别是在训练集标注样本有限的情况下,而通常情况下标注数据又难以迅速获取。二是当层数增加时,使得网络优化更为困难,更容易出现梯度消失和梯度爆炸问题。三是增加网络尺寸需要更多的计算资源。例如,在一个深度卷积神经网络中,若两个卷积层相连,它们的滤波器数目的任何均匀增加都会导致计算的平方式增加。如果增加容量,则使用率低下(如果大多数权重结束时接近于0),会浪费大量的计算能力。由于在实际中的计算预算总是有限的,因此计算资源的有效分布更偏向于尺寸无差别的增加。 解决上述不足的方法是引入稀疏特性和将全连接层转换成稀疏连接。这个思路来源于两方面: 一是生物的神经系统连接是稀疏的; 二是有文献指出,如果数据集的概率分布能够被大型且非常稀疏的DNN所描述,那么通过分析前面层的激活值的相关统计特性,以及将输出高度相关的神经元进行聚类,便可逐层构建出最优的网络拓扑结构。这种方式说明,复杂冗余的网络可以在不降低性能情况下进行精简。但是,现在的计算框架对非均匀稀疏数据的计算非常低效,主要是因为查找和缓存的开销。因此,GoogLeNet作者提出了一个思想,既能保持滤波器级别的稀疏特性,又能充分利用密集矩阵的高计算性能。有大量文献指出,将稀疏矩阵聚类成相对密集的子矩阵,能提高计算性能。上述观点便是Inception模块的想法来源。 2. Inception 模块结构分析 传统单纯依靠扩大网络规模或者增大训练数据集是迫不得已的解决方法,从本质上提高网络性能,需要引入新型稀疏连接结构,即采用“小”且“分散”的可重复性堆叠模块,构成深度感知网络来完成复杂任务学习。Inception模块是GoogLeNet的核心组成单元,其结构如图520所示[12]。 图520Inception 模块 如图520(a)所示,原始Inception 模块基本组成结构有1×1卷积、3×3卷积、5×5卷积和3×3最大池化4个部分,最后对4个成分运算结果进行通道上组合。Inception模块的核心思想是通过多个卷积核提取图像不同尺度的信息,最后进行融合,这样可以得到图像更好的表征。Inception模块的特点如下: (1) 多感受野感知: 采用不同大小的卷积核意味着不同大小的感受野。 (2) 池化模块: 池化作用比较明显,在Inception模块专门嵌入了最大池化。 (3) 特征拼接融合: 不同大小的感受野需要进行融合,才能得到更好表示。为了方便对齐,采用尺寸分别为1×1、3×3和5×5的卷积核,得到相同维度的特征进行拼接。设定步长stride=1后,只需要分别设定补零值为0、1、2,就能得到相同的输出特征图平面尺寸。例如,假设输入特征图平面尺寸为m×n,利用1×1滤波器卷积后,其平面尺寸分别为(m-1+0+1)×(n-1+0+1),即m×n; 利用3×3滤波器卷积后,其平面尺寸分别为(m-3+2×1+1)×(n-3+2×1+1),即m×n; 利用5×5滤波器卷积后,其平面尺寸分别为(m-5+2×2+1)×(n-5+2×2+1),即m×n。因此,得到的输出特征图平面尺寸都是m×n,只是通道数不同,可以方便拼接。Inception模块的特征融合如图521所示,经过设置,前面层的输出特征图经过多尺度卷积后,得出融合后的输出特征图。 图521Inception模块特征融合 可以看出,Inception模块的提出,使得深层卷积神经网络设定时,不需要人工确定卷积层中的过滤器类型或是否需要创建卷积层和池化层,而是由网络自行决定这些参数,可以给网络添加所有可能值,将输出连接起来,网络自己决定需要学习什么样的参数。 由原始Inception 模块堆叠起来的网络也存在缺点。由于Inception模块是逐层栈式堆叠的,故输出的关联性统计会产生变化,即更高层抽象的特征会由更高层次捕获,而它们的空间聚集度会随之降低(因为随着层次的升高,3×3和5×5的卷积的比例也会随之升高)。由于所有的卷积核都紧接着上一层的输出,而前面特征图是合并得到的,又有5×5卷积核的通道数与前一层特征图通道数相同,因此计算量很大。 (4) 1×1卷积的特殊运用: 图520(b)展示了针对上述缺点改进的通道约简后的优化Inception模块,它在实际中被广泛使用。对比图520(a)和(b)可以看出,相对于原始模块,约简优化Inception模块在每个操作后都增加了一个1×1的卷积操作。主要有两点作用: 一是对数据进行降维,减少整体参数量; 二是由于1×1卷积线性变换后要经过ReLU函数,因此引入更多的非线性,提高模型的泛化能力。下面通过一个简单例子来分析1×1卷积操作数据维度约简和减少参数的作用。例如,上一层的输出为100×100×128,经过具有256个输出的5×5卷积层之后(stride=1,pad=2),输出数据的大小为100×100×256。其中,卷积层的参数量为5×5×128×256。假如上一层输出先经过具有32个输出的1×1卷积层,再经过一个256个5×5核的卷积层,那么最终的输出数据的大小仍为100×100×256,但采用1×1的卷积的参数量为1×1×128×32+5×5×32×256。对比而言,使用1×1卷积后参数量大致为原来的1/4。 3. GoogLeNet网络结构分析 图522给出了GoogLeNet网络结构。GoogLeNet网络有22层,包括9个Inception模块的堆叠,最后一层使用了2014年新加坡国立大学林敏等提出的网中网模型(Network In Network,NIN)中的全局平均池化层,加上全连接层后再输入到Softmax函数中。其中,卷积和池化模块下面的数字(如3×3+1(S))分别代表卷积核尺寸或池化尺寸、步长,“S”代表特征图大小不变,而“V”代表有效卷积或有效池化。 表56给出了GoogLeNet网络的具体参数配置。从表中可以看出,对于每个Inception模块构成的变换层,其输出通道个数是1×1、3×3和5×5滤波器个数总和加上池化投影个数,即 输出通道个数 =C1×1+C3×3+C5×5+池化投影个数 如表56中黑体所示,其中C1×1、C3×3和C5×5分别为不同尺寸的滤波器个数。 实验证明,引入平均池化层提高了准确率,而加入全连接层更便于后期的微调。此外,GoogLeNet依然使用Dropout技术来防止过拟合。 GoogLeNet增加了两个辅助的Softmax分支,如图522中最右侧输出部分。这两个Softmax分支有两个作用: 一是由于GoogLeNet层数很多,为了避免梯度消失导致模型难以训练,在中间位置增加分支,用于向前传导梯度(反向传播时如果有一层求导为0,链式求导结果则为0); 二是将中间某一层输出用作分类,起到模型融合作用,最后的总损失函数是三个损失函数的加权和,但这只用在模型训练过程中。在实际测试时,这两个辅助Softmax分支会被去掉。 图522GoogLeNet网络结构 表56GoogLeNet网络参数配置 类型尺寸/ 步长输出 特征图深度1×13×3 投影3×35×5 投影5×5池化 投影参数运算 卷积7×7/2112×112×6412.7K34M 最大池化3×3/256×56×640 卷积3×3/156×56×192264192112K360M 最大池化3×3/228×28×1920 Inception(3a)28×28×25626496128163232159K128M Inception(3b)28×28×4802128128192329664380304M 最大池化3×3/214×14×4800 Inception(4a)14×14×512219296208164864364K73M Inception(4b)14×14×5122160112224246464437K88M Inception(4c)14×14×5122128128256246464463K100M Inception(4d)14×14×5282112144288326464580K119M Inception(4e)14×14×832225616032032128128840K170M 最大池化3×3/27×7×8320 Inception(5a)7×7×8322256160320321281281072K54M Inception(5b)7×7×10242384192384481281281388K71M 平均池化7×7/11×1×10240 Dropout(40%)1×1×10240 线性1×1×100011000K1M Softmax1×1×10000 4. Inception模块的改进版本Inceptionv2和Inceptionv3 GoogLeNet网络中提出的Inception模块后来被称为Inception version1,简称Inceptionv1,后期很多学者也不断提出Inception模块的改进版本,包括Inceptionv2、Inceptionv3和Inceptionv4。 1) 设计原则 Inceptionv2和Inceptionv3出现在同一篇论文中[16],在了解Inceptionv2的结构之前,首先来深入了解Inceptionv2设计的思想和初衷,总结起来是4个原则。 (1) 原则一: 慎用信息压缩,避免信息表征性瓶颈。 直观上来说,当卷积不会大幅度改变输入维度时,神经网络可能会执行得更好。过多地减少维度可能会造成信息的损失,这也称为“表征性瓶颈”。为了提高模型分类精度,从输入层到输出层特征维度应缓慢下降,尽量避免使用信息压缩的瓶颈模块,尤其是不应当在模型的浅层使用。从图结构角度来看,CNN模型本质上是一个有向无环图(Directed Acyclic Graph,DAG),其信息自底向上流动,而每一个瓶颈模块的使用都会损失一部分信息,因此当出于计算与存储节省而使用瓶颈模块时,一定要慎重。前期的信息到后面不可恢复,因此尽量不要过度使用信息压缩模块,如不要用1×1的卷积核骤降输出特征图的通道数目,尽量在模型靠后的几层使用。 (2) 原则二: 网络局部处理中的高维度特征表达。 高维度特征表达在网络的局部中处理起来更加容易。暂不考虑计算与内存开销增加的负面因素,增加每层卷积核数量可以增强其表达能力。简单理解,可以认为每个卷积核都具有发现不同模式的能力,因此增加卷积核个数,能够从不同角度去描述输入信号,增强其表达能力。另外,增加卷积神经网络每个神经元的激活值会更多地解耦合特征,使得网络训练更快。网络训练快是指整体所需要的迭代次数少,而不是整体训练所需的时间。 (3) 原则三: 低维嵌入上的空间聚合。 可以在较低维的嵌入上进行空间聚合,而不会损失很多表示能力。例如,在进行更分散(如3×3)的卷积之前,可以减小输入表示的尺寸,而不会出现严重的不利影响。之所以这样做,原因在于低维空间降维期间相邻单元之间相关性很强,降维丢失的信息较少。鉴于这些信号应易于压缩,因此降维可以促进更快地学习。 (4) 原则四: 平衡网络的深度与宽度。 谷歌公司的研究人员将深度学习网络的设计问题视为一个在计算/内存资源限定情况下的结构优化问题,即通过有效组合、堆加各种层/模块,最终使得模型分类精度最高。后期大量实验表明,CNN设计一定要将深度与宽度相匹配,换句话说“瘦高”或“矮胖”的CNN不如深宽匹配度高的网络。 2) Inceptionv2和Inceptionv3核心技术 (1) 批归一化技术。 批归一化[17](Batch Normalization,BN)技术在用于神经网络某层时,会对每一个minibatch数据的内部进行标准化处理,使输出规范化到N(0,1)的正态分布,减少了内部神经元分布的改变。BN技术提出后得到广泛应用。相关文献指出,传统的深度神经网络在训练时,每一层输入的分布都在变化,导致训练变得困难,因此在使用BN之前,只能使用一个很小的学习速率解决这个问题。而对每一层使用BN后,就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数减少为原来的1/10甚至更少,训练时间大大缩短。因为BN某种意义上还起到了正则化的作用,所以可以减少或者取消Dropout,简化网络结构。 (2) 基于大滤波器尺寸分解卷积。 可以将大尺度的卷积分解成多个小尺度的卷积来减少计算量。比如,将1个5×5的卷积分解成两个3×3的卷积串联,如图523所示。假设5×5和两级3×3卷积输出的特征数相同,那两级3×3卷积的计算量就是前者的(3×3+3×3)/5×5=18/25。为了便于表示,将图523(b)所示的Inception模块表示为Inception A。 图5235×5的卷积分解 (3) 不对称卷积分解。 上面的卷积分解方案减小了参数数量,同时也减小了计算量。但随后也出现了两个困惑: 第一,这种分解方案是否影响特征表达,是否会降低模型的特征表达能力?第二,如果这种方案的目的是因式分解计算中的线性部分,那么是否在第一个3×3层使用线性激活?为此,文献[16]进行了对照实验,一组采用两层ReLU,另一组采用线性+ReLU。结果发现,线性+ReLU的效果总是低于两层ReLU。产生这种差距的原因是多一层的非线性激活可以使网络学习特征映射到更复杂的空间,尤其是当对激活输出使用了批归一化技术。 既然大于3×3的卷积可以分解成3×3的卷积,是否继续考虑将其分解成更小的卷积核?当然很容易想到将3×3分解成两个2×2的卷积核,实际中没有采用这种对称分解,而是将3×3的卷积核分解成1×3和3×1卷积的串联,这种分解被称为非对称分解。原因在于,采用非对称分解后,能节省33%的计算量,而将3×3卷积分解为两个2×2卷积仅节省了11%的计算量。3×3卷积分解如图524所示[18]。为了便于表示,将图524(b)所示的Inception模块表示为Inception B。 图5243×3卷积分解 当然,在理论上可以更进一步,任意的n×n卷积都可以被1×n加上n×1卷积核来代替,而且随着n的增大,节省的参数和计算量将激增。研究表明,这种因式分解在网络的浅层似乎效果不佳,但是对于中等大小的特征图有着非常好的效果(12~20的特征图)。 (4) 宽度扩展卷积分解。 为了便于表示,将图525所示的Inception模块表示为Inception C。根据前面所述,按照前面三个原则用来构建三种不同类型的 Inception 模块,分别如图523(b)、图524(b)、图525所示,按引入顺序称为Inception A、Inception B和Inception C,使用“A、B、C”作为名称只是为了叙述方便。 图525宽度扩展卷积分解 (5) 辅助分类技术。 在Inceptionv1构建GoogLeNet网络中引入了辅助分类器的概念,以改善非常深层网络的收敛性。最初的想法是将有用的梯度推到较低的层,以使它们立即可用,并通过在非常深的网络中解决消失的梯度问题来提高训练期间的收敛性。也有其他学者进一步证实辅助分类器可以促进更稳定的学习和更好的收敛。然而,后期Szegedy等发现辅助分类器并未在训练初期改善收敛性: 在两个模型都达到高精度之前,有无辅助分类器的网络训练进程似乎相同。在训练快要结束时,带有辅助分支的网络开始超越没有任何辅助分支的网络的精度,并达到略高的平稳期。 研究表明,在网络训练的不同阶段使用两个辅助分类项,但删除下部辅助分支不会对网络的最终质量产生任何不利影响。因此,Szegedy改变了他们先前的看法,认为可以把辅助分类器充当正则化器。为此,他们在辅助分类损失项对应的全连接层中添加了批归一化和Dropout,结果获得了一定的提升,这也为批处理归一化能充当正则化作用的想法提供了少量的证据支持。 (6) 网络约简技术。 传统的卷积网络会使用池化操作来减少特征图的大小。为了避免特征表达瓶颈,在进行池化之前都会扩大网络特征图的数量。例如,有K个d×d的特征图,如果变成2K个d/2×d/2的特征图,那么可以采用两种方式: 一是先卷积再池化。先构建一个步长为1、2K个卷积核的卷积层,再进行池化。这意味着总计算开销将由大特征图上进行的卷积运算所主导,约2d2K2次操作。二是先池化后卷积。计算量就变为2(d/2)2K2,计算量变为第一种方法的1/4。但第二种方法会引入表达瓶颈问题,因为特征的整体维度由d2K变成了(d/2)2×2K,这导致网络的表达能力减弱。图526给出了两种经典网络约简技术,其中d=35,K=320。 图526两种经典网络约简技术 为了克服表达瓶颈问题,Inceptionv2采用了一种更高效的数据压缩方式——网格约简技术。为了将特征图的大小压缩为1/2大小,同时通道数量变为2倍,采用了一种类似Inception的约简结构,同时做池化和卷积,步长为2,再将两者结果堆叠起来,实现了特征图的压缩和通道的扩增。这种方法既能够减少计算开销,也能避免表达瓶颈。新型网络约简技术如图527所示。 图527新型网络约简技术 (7) 标签平滑正则。 标签平滑正则(Labelsmoothing Regularization,LSR)是一种通过估计标签丢弃的边缘化效应来正则分类器层的机制。 假设zi为未被归一化的对数概率,p为样本的预测概率,q为样本的真实类别标签概率。当分类采用Top1进行表示时,样本的真实概率为狄拉克(Dirac)函数,即q(k)=δk,y,其中y为真实的类别标签。对于每个训练样本x,网络模型计算其关于每个类别标签k∈{1,2,…,K}的概率值,则Softmax层输出的预测概率为 p(k|x)=exp(zk)∑Ki=1exp(zi)(5.7) 式中: zi为未归一化的对数概率值。 假设对该样本关于类别标签p(k|x)的真实分布进行归一化,则有 ∑kp(k|x)=1(5.8) 为简单起见,忽略关于样本x的p和q之间的依赖性。 定义样本的损失函数为交叉熵为 l=-∑Kk=1q(k)log(p(k))(5.9) 最小化交叉熵函数等价于最大化特定类别标签的对数似然值,该特定类别标签是根据其真实分布q(k)选定。由于交叉熵损失函数关于zi是可微的,因此可以用于深度模型的梯度训练,其梯度的相对简洁形式为 lzk=p(k)-q(k),其值区间为[-1,1](5.10) 假设只有单个真实类别标签y的情况,则q(y)=1且q(k)=0(k≠y)时,最小化交叉熵损失函数等价于最大化正确类别标签的对数概率。 对于某个样本x,其类别标签为y,对q(k)计算最大化对数概率,q(k)=δk,y,即k=y时,δk,y=1,k≠y时,δk,y=0。 在采用预测的概率来拟合真实的概率时,只有当对应于真实类别标签的对数值远远大于其他类别标签的对数值时才可行。但其面临两个问题: ① 可能导致过拟合。如果模型学习的结果是对于每个训练样本都将全部概率值分配给真实类别标签,则不能保证其泛化能力。 ② 其鼓励最大逻辑回归值和其他逻辑回归值间的差异尽可能大,但结合梯度l/zk的有界性,其削弱了模型的适应能力。 也就是说,只有模型对预测结果足够有信心时才可能发生的情况。 Inceptionv3 提出了一种机制,鼓励模型少一点自信。虽然最大化训练标签对数似然度,但不是真正期望的目标,这样做能够正则化模型,并提升模型的适应能力。假设有独立于训练样本x的类别标签的分布u(k),对于真实类别标签为y的训练样本,将其类别标签的分布q(k|x)=δk,y替换为 q′(k|x)=(1-ε)δk,y+εu(k)(5.11) 式中: ε为平滑参数。可以看出q′(k|x)是原始真实分布q(k|x)、固定分布u(k)和权重ε的组合。 将类别标签k的分布计算可以看作为两点: 一是将类别标签设为真实类别标签,k=y; 二是采用平滑参数ε,将从分布u(k)中的采样值来取代k。 Inceptionv3 采用类别标签的先验分布作为u(k),如均匀分布,u(k)=1/K,则有 q′(k|x)=(1-ε)δk,y+ε1K(5.12) 故称为类别标签平滑正则化(LabelSmoothing Regularization,LSR)。LSR 交叉熵变为 H(q′,p)=-∑Kk=1q′(k)log(p(k))=(1-ε)H(q,p)+εH(u,p)(5.13) 等价于将单个交叉熵损失函数H(q,p)替换为损失函数H(q,p)和H(u,p)的加权和。损失函数H(u,p)惩罚了预测的类别标签分布p相对于先验分布u的偏差,根据相对权重ε1-ε。该偏差也可以从 KL分歧的角度计算,因为H(u,p)=DKL(u‖p)+H(u),当u为均匀分布时,H(u,p)是评价预测的概率分布p与均匀分布u间的偏离程度。 (8) Inceptionv2网络组成。 表57给出了Inceptionv2网络结构。由前面知识可知,普通卷积后,输出特征图平面尺寸变为(原平面尺寸卷积核尺寸)/步长+1; 而补零卷积不改变平面尺寸,只是将输入通道数变化变成卷积核个数,因此卷积核个数也就是新通道数。前面的7行是经典卷积层、池化层。前三行将传统的7×7卷积分解为三个3×3卷积串接,并且在第一个卷积处就通过步长为2来降低分辨率。而后面的5~7行卷积也一样,但分辨率降低时通过本组的第二个卷积来实现。对于网络的Inception部分,在35×35处有3个传统的Inception模块(图523(b)),每个模块有288个过滤器。采用网格约简技术,将其缩减为具有768个滤波器的17×17网格。之后是如图524(b)所示的5个因式分解Inception模块的实例,利用图527所示的网络约简技术将其缩减为8×8×1280。在最粗糙的8×8级别,有两个图525所示Inception模块,每个图块的串联输出滤波器组大小为2048。 表57Inceptionv2网络结构 行号类型输入图像尺度/步长、滤波器数输出图像 1卷积299×299×33×3/2、32个149×149×32 2卷积149×149×323×3/1、32个147×147×32 3补零卷积147×147×323×3/1、64个147×147×64 4池化147×147×643×3/273×73×64 5卷积73×73×643×3/1、80个71×71×80 6卷积71×71×803×3/2、192个35×35×192 7补零卷积35×35×1923×3/1、288个35×35×288 83×Inception35×35×288如图523(b)所示,288个17×17×768 95×Inception17×17×768如图524(b)所示8×8×1280 102×Inception8×8×1280如图525所示8×8×2048 11池化8×8×20488×81×1×2048 续表 行号类型输入图像尺度/步长、滤波器数输出图像 12线性1×1×20481×1×1000 13Softmax1×1×1000分类器1×1×1000 模型结果与旧的GoogLeNet相比有较大提升,如表58所示。 表58Inceptionv2识别结果 网络Top1误差/%Top5 误差/%Bnops代价 GoogLeNet299.2%1.5 BNGoogLeNet26.8-1.5 BNInception25.27.82.0 Inceptionv223.4-3.8 Inceptionv2 RMSProp23.16.33.8 Inceptionv2 LabelSmoothing22.86.13.8 Inceptionv2 Factorized7×721.65.84.8 Inceptionv2 BNauxiliary21.25.64.8 (9) Inceptionv3网络组成。 Inceptionv3的结构是Inception v2版本的升级,除了上面的优化操作,还使用了四种技术: 一是采用了RMSProp优化器,这是常用的一种神经网络优化算法,在第二章中有具体细节阐述; 二是采用了非对称因式分解的7×7卷积,对于将n×n的卷积分解成n×1和1×n卷积时,发现在网络的前层这样进行卷积分解起不到多大作用,不过在网络网格为m×m(m在[12,20]之间)时结果较好,因此这里将7×7卷积直接分解成1×7和7×1的串联; 三是辅助分类器使用了批归一化技术; 四是将标签平滑技术用于辅助函数的正则化项,如前面技术细节所示,防止网络对某一类别过分自信,出现过拟合现象。 5.3.6残差网络 1. 残差网络的提出缘由 残差网络(Residual Network,ResNet)于2015年提出[13],在ImageNet比赛分类任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成,检测、分割和识别等领域都纷纷使用ResNet。而且由于其优越的性能,在AlphaGoZero的版本中也采用残差网络替代经典卷积神经网络。 实际研究过程中发现,随着网络深度的增加,会出现一种模型退化现象。模型退化就是当网络越来越深时,模型的训练准确率会趋于平缓,但是测试误差会变大,或者训练误差和测试误差都变大(这种情况不是过拟合)。换句话说,模型层数的增加并没有导致性能的提升,而是导致模型性能的下降,这种现象称为模型退化。例如,假设一个最优化的网络结构有10层。当设计网络结构时,由于预先不知道最优网络结构的层数,假设设计了一个20层网络,那么就会有10个冗余层,这对建模显然没有好处。很容易想到,能否让中间多余的层数变成恒等映射,也就是经过恒等映射层时输入与输出完全一样。但是,往往模型很难将这10层恒等映射的参数学习正确,因此出现退化现象,其核心原因在于冗余的网络层学习了非恒等映射的参数。 为此提出了残差网络。与传统深度学习利用多个堆叠层直接拟合期望特征映射的过程不同,残差网络显式地用多个堆叠层拟合一个残差映射。 2. 残差网络基本原理 残差网络的基本结构如图528所示,是带有跳跃的结构。可见图中有一个捷径连接或直连,这个直连实现恒等映射。假设期望的特征映射为H(x),而堆叠的非线性层拟合的是另一个量F(x)=H(x)-x,那么一般情况下最优化残差映射比最优化期望的映射更容易,也就是F(x)=H(x)-x比F(x)=H(x)更容易优化。比如,极端情况下期望的映射要拟合的是恒等映射,此时残差网络的任务是拟合F(x)=0,普通网络拟合F(x)=x,明显前者更容易优化。通过这种残差网络结构构造的网络层数可以很深,且最终的分类效果也非常好。 图528残差网络结构 图529给出了一个34层的残差网络结构图。经过直连后,H(x)=F(x)+x,但图中出现了实线连接和虚线连接的情况。 (1) 实线连接表示通道相同,如图529中第一个方格底纹矩形和第三个方格底纹矩形,都是3×3×64的特征图,由于通道相同,所以采用计算方式为H(x)=F(x)+x。 (2) 虚线连接表示通道不同,如图529的第一个斜线底纹矩形和第三个斜线底纹矩形,分别是3×3×64和3×3×128的特征图,通道不同,采用的计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整x维度。 图52934层残差网络结构 除了上面提到的两层残差学习单元,还有三层的残差学习单元,如图530所示。图中所示两种结构分别针对ResNet34(图530(a))和ResNet50/101/152(图530(b)),一般把图530(a)和(b)所示的结构称为一个残差模块,其中图530(a)是普通模块,图530(b)是“瓶颈设计模块”,采用这种结构的目的就是降低参数数量。从图中可以看出,第一个1×1的卷积把256维的通道数降到64维,然后在64维通道数上进行卷积,最后再通过1×1卷积将通道数进行恢复,图530(b)中用到参数为1×1×256×64+3×3×64×64+1×1×64×256=69632个,而不使用“瓶颈”设计模块则是两个3×3×256的卷积,参数为3×3×256×256×2=1179648个,是降维优化后参数的16.94倍。 图530两种Res层设计 同样,在由1000个类组成的ImageNet 2012分类数据集上评估,模型在128万训练图像上进行训练,并对50k验证图像进行评估,其中分别采用了18层和34层普通网。图531给出了性能对比,图531(a)是普通网络性能图,图531(b)是残差网络性能图。从图中可以看出: 采用普通网络,网络出现退化现象; 采用残差网络,深层网络性能得到优化提升。 图531性能对比 表59列出了不同层数时模型参数配置,给出了不同5种残差网络的结构,深度分别是18、34、50、101和152。首先都通过一个7×7的卷积层,接着是一个最大池化,之后就是堆叠残差块,其中50、101、152层的残差网络使用的残差块是“瓶颈”结构,各网络中残差块个数从左到右依次是8、16、16、33、50。此外,在网络最后层通常连接一个全局平均池化,好处是使参数不需要最优化防止过拟合,对输入与输出的空间变换更具有鲁棒性,加强了特征映射与类别的一致性。 表59不同层数时模型参数配置 层名输出尺寸18层34层50层101层152层 卷积层1112×1127×7,64,步长2 卷积层2_x56×56 3×3最大池化,步长2 3×3,64 3×3,64×23×3,64 3×3,64×31×1,64 3×3,64 1×1,256×31×1,64 3×3,64 1×1,256×31×1,64 3×3,64 1×1,256×3 卷积层3_x28×283×3,128 3×3,128×23×3,128 3×3,128×41×1,128 3×3,128 1×1,512×41×1,128 3×3,128 1×1,512×41×1,128 3×3,128 1×1,512×8 卷积层4_x14×143×3,256 3×3,256×23×3,256 3×3,256×61×1,256 3×3,256 1×1,1024×61×1,256 3×3,256 1×1,1024×231×1,256 3×3,256 1×1,1024×36 卷积层5_x7×73×3,512 3×3,512×23×3,512 3×3,512×31×1,512 3×3,512 1×1,2048×31×1,512 3×3,512 1×1,2048×31×1,512 3×3,512 1×1,2048×3 1×1平均池化,1000维的全连接层,Softmax FLOP1.8×1093.6×1093.8×1097.6×10911.3×109 3. Inceptionv4 Inceptionv4网络中[19],对Inception块的每个网格大小进行了统一,结构如图532所示。图(a)为总结构图,图(b)为Stem模块的结构。其中: 所有图中没有标记“V”的卷积使用相同尺寸填充原则,即其输出网格与输入的尺寸正好匹配; 使用“V”标记的卷积使用有效卷积填充原则,即每个单元输入块全部包含在前几层中,同时输出激活图的网格尺寸也相应会减少。从图532(b)分析可知,输入经过32个步长为2的有效卷积,则输出特征图尺寸变成149×149×32,其中(299-3)/2+1=149; 因此依次进行卷积运算,可以得到级联后的特征图为73×73×160,其中通道数是64+96=160; 在第一个滤波器级联和第二个滤波器级联之间可以看到,左侧先后经过1×1和3×3有效卷积,尺寸变为71×71×96,其中平面尺寸71×71由73-3+1=71得来,右侧经过1×1、1×7、7×1和3×3有效卷积,前三个卷积不改变平面尺寸,而3×3有效卷积同样使得平面尺寸变为71×71,而通道数为96,因此滤波器级联后的特征图为71×71×192,经过卷积和池化后尺寸变为35×35×384。 图532Inceptionv4的结构 图533给出了Inceptionv4网络中的模块结构,其中图(a)是35×35网格块框架(对应图中InceptionA块),图(b)是Inceptionv4网络17×17网格块框架(对应图中InceptionB块); 图(c)是Inceptionv4网络8×8网格块框架(对应图中InceptionC块)。 图534给出了Inceptionv4网络中的约简(Reduction)模块结构,其中图(a)将35×35网格约简到17×17的网格块,图(b)将17×17网格约简到8×8的网格块。需要注意的是,ReductionA模块是一种通用结构。由图中可以看出,k、l、m、n分别为1×1卷积、 图533Inceptionv4网络中的模块结构 图533(续) 7×1卷积、3×3卷积、3×3卷积的卷积核个数。不同的网络结构中,其参数不同。Inceptionv4网络、后续残差网络InceptionResNet的两种版本都采用了这个ReductionA 模块,只是k、l、m、n的个数不同。Inceptionv4中k、l、m、n分别为192、224、256和384。 图534Inceptionv4中的Reduction模块结构 4. InceptionResNet 相较最初的Inception模块,其残差版本采用了更精简的Inception模块。每个Inception模块后紧连接着滤波层(没有激活函数的1×1卷积)以进行维度变换,以实现输入的匹配,这样补偿了在Inception块中的维度降低。残差网络在提出后,为了更好验证性能,在残差网络中尝试了不同的Inception版本,一个是“InceptionResNetv1”,计算代价跟Inceptionv3大致相同,另一个“InceptionResNetv2”的计算代价跟Inceptionv4网络基本相同。InceptionResNet的两个版本结构基本相同,只是细节不同。图535给出了InceptionResNet的结构图[19]。图535(a)为InceptionResNet结构,其中包括了InceptionResNetA、InceptionResNetB和InceptionResNetC三种类型的模块,但两个版本的上述三种类型的Inception模块细节有差异; 图535(b)为InceptionResNetv1的Stem模块,而InceptionResNetv2的Stem模块与Inception4的Stem模块相同。这里仍补充说明,图535(b)中的Stem模块中的给出了步长和卷积的类型,“V”仍然代表有效卷积,因此尺寸会缩小。 图535InceptionResNet网络结构 InceptionResNetv1和InceptionResNetv2两个版本的网络中对应的InceptionResNetA模块如图536所示。其平面尺寸分别为35×35,经过不同尺寸的卷积后,获得了感知度的特征图,进行级联后再通过1×1的无激活的线性卷积变换通道数,分别将通道数变换为256和384。 图536InceptionResNet中的InceptionResNetA模块结构(35×35) InceptionResNetv1和InceptionResNetv2两个版本的网络中对应的InceptionResNetB模块如图537所示。其平面尺寸分别为17×17,经过不同尺寸的卷积后,获得了感知度的特征图,进行级联后再通过1×1的无激活的线性卷积变换通道数,分别将通道数变换为896和1154。 图537InceptionResNet中的InceptionResNetB模块结构 InceptionResNetv1和InceptionResNetv2两个版本的网络中对应的InceptionResNetC模块如图538所示。其平面尺寸分别为8×8,经过不同尺寸的卷积后,获得了感知度的特征图,进行级联后再通过1×1的无激活的线性卷积变换通道数,分别将通道数变换为1792和2048。 图538InceptionResNet中的InceptionResNetC模块结构 InceptionResNetv1和InceptionResNetv2对应的35×35到17×17的reductionA模块与Inceptionv4中的一样,如图533(a)所示; InceptionResNetv1和InceptionResNetv2对应的17×17变为8×8模块,即ReductionB模块,如图539所示。 图539InceptionResNet中的ReductionB模块结构 5.3.7挤压激励网络 2017年,中国科学院软件研究所的胡杰等提出挤压激励网络(SqueezeandExcitation Networks,SENet)[20],该网络获得了2017年ILSVR挑战赛的冠军,使得在ImageNet上的TOP5错误率下降至2.25%。SENet网络的创新点在于关注通道之间的关系,希望模型可以自动学习到不同通道特征的重要程度。 1. SE模块 SE模块首先对卷积得到的特征图进行挤压得到通道级的全局特征,然后对全局特征进行激活学习各个通道间的关系,也得到不同通道的权重,最后乘以原来的特征图得到最终特征[21]。本质上,SE模块是在通道维度上做注意力或者门选操作,这种注意力机制让模型可以更加关注信息量最大的通道特征,而抑制那些不重要的通道特征。另外,SE模块是通用的,这意味着其可以嵌入现有的网络架构中。 如图540所示,SE模块主要包括挤压、激活两个操作,可以适用于任何映射Ftr: X→U,X∈RH′×W′×C′,U∈RH×W×C,卷积核为V=[v1,v2,…,vC],其中vc表示第c个卷积核。那么输出U=[u1,u2,…,uC]为 uc=vcX=∑C′s=1vscxs(5.14) 式中: *代表卷积操作; 而vsc代表一个s通道的2维卷积核,其输入一个通道上的空间特征,它学习特征空间关系,但是由于对各个通道的卷积结果进行求和,所以通道特征关系与卷积核学习到的空间关系混合在一起。而SE模块就是为了抽离这种混杂,使得模型直接学习到通道特征关系。 图540SE模块 1) 挤压 由于卷积只是在一个局部空间内进行操作,U很难获得足够的信息来提取通道之间的关系,对于网络中前面的层,这一问题更严重,因为感受野比较小。为了缓解该问题,在SENet中提出挤压运算,将一个通道上整个空间特征编码为一个全局特征,采用全局平均池化来实现(原则上也可以采用更复杂的聚合策略): zc=Fsq(uc)=1H×W∑Hi=1∑Wj=1uc(i,j)(5.15) 其中: z=[z1,z2,…,zC]∈RC。 2) 激活 挤压运算得到全局描述特征,接下来采用另外一种运算来获取通道之间的关系。该运算需要满足两个准则: 一是要灵活,可以学习到各个通道之间的非线性关系; 二是学习关系不是互斥的,即允许多通道特征,非onehot形式。基于此采用Sigmoid形式的门选机制: s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))(5.16) 式中: δ和σ分别为ReLU和Sigmoid函数,W1∈RCr×C且W2∈RC×Cr。为了降低模型复杂度以及提升泛化能力,采用包含两个全连接层的瓶颈结构,其中第一个全连接层起到降维的作用,降维系数为r(是一个超参数),然后采用ReLU激活。第二个全连接层将其恢复为原始维度。最后将学习到的各个通道的激活值s(Sigmoid激活,介于0~1之间)乘以原始特征U得到最终输出,即 x~c=Fscale(uc,sc)=suc(5.17) 其实整个操作可以看成学习到了各个通道的权重系数sc,从而使得模型对各个通道的特征更有辨别能力,这应该也算一种注意力机制。 2. SE模块在Inception和ResNet上的应用 SE模块的灵活性在于它可以直接应用现有的网络结构中,这里以Inception和ResNet为例进行阐释。对于Inception网络直接应用SE模块; 对于ResNet,SE模块嵌入残差结构中的残差学习分支中,具体如图541所示。 图541加入SE模块的Inception和ResNet网络 同样地,SE模块也可应用于其他网络结构,如ResNetXt、InceptionResNet、MobileNet和ShuffleNet中。表510为SE模块应用在其他网络的参数配置,这里给出SEResNet50和SEResNetXt50的具体结构。 表510SE模块应用于其他网络的参数配置 输出尺寸ResNet50SEResNet50SEResNeXt50(32×4d) 112×112卷积 7×7,64,步长为2 56×56 最大池化3×3,步长为2 卷积,1×1,64 卷积,3×3,64 卷积,1×1,256×3 卷积,1×1,64 卷积,3×3,64 卷积,1×1,256 全连接,[16,256]×3卷积,1×1,128 卷积,3×3,128 卷积,1×1,256 全连接,[16,256] C=32×3 28×28卷积,1×1,128 卷积,3×3,128 卷积,1×1,512×4卷积,1×1,128 卷积,3×3,128 卷积,1×1,512 全连接,[32,512]×4卷积,1×1,256 卷积,3×3,256 卷积,1×1,512 全连接,[32,512] C=32×4 14×14卷积,1×1,256 卷积,3×3,256 卷积,1×1,1026×6卷积,1×1,256 卷积,3×3,256 卷积,1×1,1024 全连接,[64,1024]×6卷积,1×1,512 卷积,3×3,512 卷积,1×1,1024 全连接,[64,1024] C=32×6 7×7卷积,1×1,512 卷积,3×3,512 卷积,1×1,2048×3卷积,1×1,512 卷积,3×3,512 卷积,1×1,2048 全连接,[128,2048]×3卷积,1×1,1024 卷积,3×3,1024 卷积,1×1,2048 全连接,[128,2048] C=32×3 1×1全局平均池化,1000维全连接,Softmax 增加了SE模块后,模型参数以及计算量都会增加,以SEResNet50为例,对于模型参数增加量为 2r∑Ss=1NsC2s 式中: r为降维系数,S为阶段数量,Cs为第s个阶段的通道数,Ns为第s个阶段的重复块数。当r=16时,SEResNet50只增加了约10%的参数量,但计算量却增加不到1%。 3. SE模块的实验效果 SE模块很容易嵌入其他网络中,为了验证SE模块的作用,文献在流行网络如ResNet和VGG中引入SE模块,测试其在ImageNet上的效果,如表511所示。可以看到所有网络在加入SE模块后分类准确度均有一定的提升,且计算量基本持平。 表511ImageNet实验结果和复杂度 原始再现SENet Top1 错误率/%Top5 错误率/%Top1 错误率/%Top5 错误率/%GFLOPs /%Top1 错误率/%Top5 错误率/%GFLOPs /% ResNet50[13]24.77.824.807.483.8623.29(1.51)6.62(0.86)3.87 ResNet101[13]23.67.123.176.527.5822.38(0.79)6.07(0.45)7.60 ResNet152[13]23.06.722.426.3411.3021.57(0.85)5.73(0.61)11.32 ResNeXt50[22]22.2-22.115.904.2421.10(1.01)5.49(0.41)4.25 ResNeXt101[22]21.25.621.185.577.9920.70(0.48)5.01(0.56)8.00 VGG16[11]--27.028.8115.4725.22(1.80)7.70(1.11)15.48 BNInce ption[17]25.27.8225.387.892.0324.23(1.15)7.14(0.75)2.04 Inception ResNetv2[19]19.9+4.9+20.375.2111.7519.80(0.57)4.79(0.42)11.76 此外,文献[21]还测试了SE模块在轻量级网络MobileNet[23]和ShuffleNet[24]上的效果,效果也有提升。最终采用了一系列的SENet进行集成,在ImageNet测试集上的Top5错误率为2.251%,赢得了2017年ImageNet竞赛的冠军。其中最关键的模型是SENet154,其建立在ResNeXt模型基础上。 从前面讨论可知,对于残差网络而言,通过构建不同的版本可以得到两种常用的残差网络结构,即InceptionResNetv1和InceptionResNetv2。具体而言,残差网络中主要包括InceptionResNetA、InceptionResNetB和InceptionResNetC三种类型的Inception模块,以及ReductionA和ReductionB两类维度约简模块。首先在Stem模块,InceptionResNetv1采用了图535(b)中的结构,而InceptionResNetv2采用了与Inceptionv4相同的结构; 其次InceptionResNetA、InceptionResNetB和InceptionResNetC在两个版本中都有差异; 再次约简模块,ReductionB在两种版本中略有差异。总体看来,两个版本的主要差异是ReductionA结构的不同。表512给出了Inceptionv4以及InceptionResNetv1、InceptionResNetv2的滤波器参数设置。 表512ReductionA参数配置 网络klmn Inceptionv4192224256384 InceptionResNetv1192192256384 InceptionResNetv2256256384384 残差和非残差Inception的另外一个技术性区别是,InceptionResNet网络中,在传统层的顶部而非所有层的顶部中使用批归一化。在全部层使用批归一化是合理的,保持每个模型副本在单个GPU上就可以训练。结果证明,使用更大激活尺寸在GPU内存上更加耗时。在部分层的顶部忽略批归一化能够充分增加Inception块的数量。为了可以更好地利用计算资源,这种折中没有必要。 5.3.8区域卷积神经网络及其拓展版本 RossGirshick等于2014年提出区域卷积神经网络(Region Convolutional Neural Network,RCNN),是利用深度学习算法进行目标检测的开创者[25]。其本质就是来做目标检测和语义分割的神经网络。随后几年,提出了多种RCNN的改进版本,如Fast RCNN[26]、Faster RCNN[27]等,代表当时目标检测的前沿水平。 1. 图像分类、目标检测与图像分割 从图像中解析出可供计算机理解的信息,是机器视觉的中心问题。图像分类、目标检测、分割是计算机视觉领域的三大任务。下面具体介绍三大任务的内涵和区别。 图像分类即是将图像结构化为某一类别的信息,用事先确定好的先验类别或实例ID来描述图片。该任务是最简单、最基础的图像理解任务,也是深度学习算法最先取得突破和实现大规模应用的任务。其中,ImageNet是最权威的评测集,每年的ILSVRC催生了大量的优秀深度网络结构,为其他任务提供了基础。根据不同的应用领域,可以进行人脸识别、场景识别等。由于图像分类通常聚焦于图像中最突出的物体,且将图像划分为单个类别,而现实世界的很多图像通常包含的不只是一个物体,此时如果使用图像分类模型为图像分配一个单一标签相对而言比较粗糙并不准确,因此目标检测应运而生。 由于图像分类任务关心图像的整体信息,给出整张图片的内容描述,难以描述图片中的更精确信息; 而目标检测能识别出一张图片的多个物体,关注特定的物体目标,同时获得所关注目标的类别和位置信息。相比分类,目标检测给出的是对图片前景和背景的理解,需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因此检测模型的输出是一个列表,列表的每一项使用一个数组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。目标检测在很多场景有用,如无人驾驶和安防系统。 图像分割包括语义分割和实例分割[28],前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别(实例)意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。 图542和图543给出了三大任务的示例。图542(a)为图像分类,给出了图像中的主题信息表达; 图542(b)为图像分类与定位,不仅给出了图像中目标的类别,还将目标的位置信息以矩形框的形式给出; 图542(c)为多目标的目标检测,同时给出了所有目标的分类信息和位置信息; 图542(d)为多目标的实例分割,将实例的边界标记出来。 图542图像分类、目标检测与语义分割 图543是多目标任务的示意图,图543(a)和(b)分别为图像分类和目标检测,图543(c)和(d)分别为图像分割中的语义分割和实例分割。从图中可以看出,语义分割中对相同的目标类型,例如cube采用了相同的颜色表示,对于重叠部分没有给出边界,实例分割中对于相同种类的个体也进行了分别表示。 图543图像分类、目标检测与语义分割 图544给出了一个更为详细的示例。从图中可以看出,置信度也说明了当前的检测框属于需要查找的目标的一个概率值。为了减少错误检测,通常会给出一个阈值,通过该阈值来过滤掉一些检测错误的目标。图544检测出非常多的目标区域,不同的目标区域也通过不同颜色的矩形框表示出来。 图544目标检测的详细示例 2. 区域卷积神经网络 区域卷积神经网络是针对图像目标检测任务而提出的,它的目标是解决物体识别的难题。在获得特定图像后,希望能够绘制图像中所有物体的边缘。这一过程可以分为区域建议和分类两个部分。 基于RCNN网络的目标检测系统由三个模块组成(图545)[25]: 第一个模块生成类别独立候选区域,这些候选区域定义了检测器可用的候选边界框集合,其主要方法就是选择性搜索方法; 第二个模块是从各个区域提取固定长度特征向量的大型卷积神经网络; 第三个模块是一组类别特定的线性SVM分类器。下面将介绍每个模块的设计思路,描述其测试时间使用情况,详细了解其参数的学习方式,并展示在PASCAL VOC 201012上的结果。 图545目标检测的RCNN网络模型 训练过程从前到后可分成五个部分: 一是构造微调CNN网络的训练数据集; 二是对CNN网络进行微调后,获得候选区域的深度特征表示; 三是区域分类算法的数据集构造; 四是区域分类算法SVM算法的训练; 五是进行边界框回归算法提高精度。 1) 独立候选区域生成算法 图像包含的信息非常丰富,其中的物体有不同的形状、尺寸、颜色、纹理,因此很难从图像中识别出一个物体,而找到物体后确定物体在图像中的位置更加困难。图546给出了四个例子来说明物体识别的复杂性以及难度。图546(a)中的场景是一张桌子,桌子上面放了碗、瓶子和其他餐具等,此时图像中不同物体之间有一定的层次关系,比如要识别“桌子”,可能只是指桌子本身,也可能包含其上面的其他物体。图546(b)中给出了两只猫,可以通过纹理来找到这两只猫,却又需要通过颜色来区分它们。图546(c)中变色龙和周边颜色接近,可以通过纹理来区分。图546(d)中的车辆,很容易把车身和车轮看作一个整体,但它们两者之间在纹理和颜色方面差别都非常大。 图546复杂场景的图像示例 由于实际情况的复杂性,因此进行目标识别时不能通过单一的策略来区分不同的物体,需要充分考虑图像物体的多样性。此外,在图像中物体布局有一定的层次关系,考虑这种关系才能够更好地对物体的类别进行区分。在详细阐述选择性搜索算法前,先给出选择性搜索算法的设计考虑: 一是要适应不同尺度。目标可以在图像以任何比例来出现,且某些目标的边界不如其他目标清晰。穷举搜索通过改变窗口大小来适应物体的不同尺度,选择搜索必须考虑所有对象比例,通过分层算法来实现是很自然的一种选择,因此选择性搜索采用了图像分割以及层次算法来解决这个问题。二是要采用多样化策略。单一的策略无法应对多种类别的图像。正如图546中所观察到的,虽然可能仅通过颜色、纹理或封闭部件就能将区域形成目标,但是阴影和光色等照明条件很可能影响区域判定。因此,希望采用一套多样化的策略来应对所有情况。三是要能够快速计算。选择性搜索的目的是产生一组可能的对象位置,以用于实际的对象识别框架。该集合的创建不应成为计算瓶颈,因此算法的计算速度也成为考虑的一个重要因素。 针对上述算法的设计考虑,下面介绍选择性搜索算法的具体步骤。 (1) 基于图表示的图像分割方法。 图像分割的主要目的是将图像分割成若干个特定的、具有独特性质的区域,然后从中提取出感兴趣的目标。其中,图像区域之间的边界定义是图像分割算法的关键,研究人员基于图表示给出图像区域之间的边界判断[29],分割算法就是利用这个判断标准使用贪婪选择来产生分割。该算法在时间效率上基本与图像表示的边数量呈线性关系,而图像的图表示边与像素点成正比,也就说图像分割的时间效率与图像的像素点个数呈线性关系。这个算法有一个非常重要的特性,它能保持低变化区域的细节,同时能够忽略高变化区域的细节。这个性质特别重要,对图像有一个很好的分割效果,即能够找出视觉上一致的区域,换而言之就是高变化区域有一个很好聚合。 (2) 层次合并算法。 根据上述方法获得原始区域,然后进行区域合并,区域的合并方式是层次合并算法(Hierarchical Grouping Algorithm,HGA),类似于哈夫曼树的构造过程。区域包含的信息比像素丰富,更能够有效地代表物体的特征。层次合并算法如算法51所示。 算法51层次合并算法 1输入: 彩色图片(三通道) 输出: 目标定位位置的候选集合L 2采用基于图表示的图像分割方法获得原始分割区域R={r1,r2,…,rn} 初始化相似度集合S= 3for each 相邻区域对(ri,rj)do 4计算两两相邻区域之间的相似度s(ri,rj) 5将其添加到相似度集合S中,即S=S∪s(ri,rj) 6End 7while S= do 8从相似度集合S中找出最大相似度s(ri,rj)=max(S) 9将最大相似度的两个区域ri和rj合并成为一个区域rt,即rt=ri∪rj 10从相似度集合中除去所有关于ri区域的相似度,即S=S\s(ri,r*) 11从相似度集合中除去所有关于rj区域的相似度,即S=S\s(r*,rj) 12计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度St 13更新相似度集合S,把区域St添加到区域集合S中,即S=S∪St 14同时更新区域集合R,把区域rt添加到区域集合R中,即R=R∪rt 15获取每个区域的边界框,该结果就是物体位置的可能结果L 从算法51可知,层次合并算法中的一个关键点是计算两个区域之间的相似度s(ri,rj),计算公式为 s(ri,rj)=a1scolour(ri,rj)+a2stexture(ri,rj)+a3ssize(ri,rj)+a4sfill(ri,rj)(5.18) 从式(5.18)中可以看出,其相似度采用了多样化的形式,包括颜色相似度scolour(ri,rj)、纹理相似度stexture(ri,rj)、尺寸相似度ssize(ri,rj)和吻合相似度sfill(ri,rj)四种形式。 (3) 颜色相似度。 将某个区域ri内的像素值分成25bins,那么3个通道就组成了长度为75的特征向量Ci={c1i,…,cni},然后对Ci进行L1归一化(也就是Ci的每一个值除以区域ri内像素点的个数),特征向量Ci实际上表示了像素值的分布,于是区域ri和区域rj的颜色相似度为 scolour(ri,rj)=∑nk=1min(cki,ckj)(5.19) 颜色相似度度量了两个区域像素值分布的重叠程度。当两个区域合并之后,新的区域的特征向量Ct就是合并前各个特征向量之和,但是由于特征向量Ci进行了L1归一化,所以没有归一化的特征向量为size(ri)×Ci。因此,合并后的特征向量为 Ct=size(ri)×Ci+size(rj)×Cjsize(ri)+size(rj)(5.20) (4) 纹理相似度。 这里的纹理采用SIFTLike特征,具体做法是对每个颜色通道的8个不同方向计算方差σ=1的高斯微分,每个通道每个颜色获取10bins的直方图(L1norm归一化),这样就可以获取到一个240维的向量Ti={t1i,…,tni}。区域之间纹理相似度计算方式和颜色相似度计算方式类似,合并之后新区域的纹理特征计算方式和颜色特征计算相同,即 stexture(ri,rj)=∑nk=1min(tki,tkj)(5.21) (5) 尺寸相似度。 尺寸是指区域中包含像素点的个数。使用尺寸相似度计算,主要是为了尽量让小的区域先合并,即 Ssize(ri,rj)=1-size(ri)+size(rj)size(im)(5.22) 式中: im是指整幅图像。 (6) 吻合相似度。 吻合相似度主要是衡量两个区域是否更加“吻合”,其指标是合并后的区域的边界框(能够框住区域的最小矩形(没有旋转))越小,其吻合度越高。如果某一个区域被另一个区域完全包裹,这两个区域就应该融合,或者两个区域几乎不接触,这两个区域应该就属于不同的区域。其计算方式为 sfill(ri,rj)=1-size(BBij)-size(ri)-size(rj)size(im)(5.23) 式中: BBij为区域ri和区域rj的外接矩,im指整幅图像。 2) CNN微调训练集构造 给定一系列的输入图像,CNN微调训练集如何构造是一个核心问题。首先用选择性搜索方法在每个图像上生成很多的候选区域,然后在每张图上依次计算每个候选区域与图中目标的真实标注框之间的重叠程度,重叠程度通常用交并比(IoU)来表示。如果重叠程度大于0.5,则标记这个区域为此目标的正样本; 否则,为负样本。对所有的训练图像执行这样的操作,把得到的所有的候选区域保存下来。假如有20个目标,对每个目标都有一些属于其类别的样本称为正样本,其他的不属于任何类的区域图像称为负样本。 3) 训练卷积神经网络来抽取候选区域深度特征 提取候选区域的深度特征采用了AlexNet结构。AlexNet结构如图511所示,中间层配置与AlexNet的默认配置相同,这里主要关注其输入和输出。输入是227×227大小的图像,提取到的是一个4096维度的特征向量,由于是1000类的分类任务,因此最后一层的节点数为1000。需要注意的是,由于提取到的候选区域大小都是不相同的,因此需要把每个区域调整尺寸到规定大小227×227,每个区域提取的深度特征的维度依旧是4096维。输出层要根据任务的不同做出相应的改变,原本AlexNet中输出层数目1000是指1000类的分类任务,如果是对VOC数据集进行处理,则要把输出节点数目设置为20+1(其中,20表示有20个待识别目标,1表示背景类); 对ILSVRC2013来说,要设置为200+1。原文[25]采用AlexNet网络受限于当时CNN的发展,后续的多种CNN都可以用于候选区域深度特征的提取。 下面以VOC数据集为例进行说明。假设按照第一部分已经构造好训练数据集,其类别共有21类,则每个类都有自己对应的样本区域,且这些区域是类别独立的。然后将训练样本输入到改进版的AlexNet进行训练,AlexNet的最后一层依旧是Softmax层,即此时有监督地训练一个21类的图像分类网络。卷积神经网络的具体训练方法: 首先用ILSCRC2012数据集对网络进行有监督预训练,然后使用第一部分里面提取的训练集进行微调。微调的时候采用SGD的方法,学习率设置为预训练时候的1/10(具体为0.001),这样使得网络慢慢地收敛。minibatch的大小为128,minibatch分成两部分,即从第一部分保存下来的候选区域里每次随机抽取32个正样本(在所有类别上)、96个负样本(背景类)。 4) 训练集构造(用于训练多个SVM分类器) 前面阐述了如何构造训练集来对预训练后的CNN进行微调,与真实标注框之间的IoU大于0.5的区域都被标定为正样本。此时,CNN已经训练完成,现在要为每个类别(如猫、狗等)单独训练一个二分类SVM分类器,如“SVM_猫”专门检测猫这个目标,“SVM_狗”专门检测狗这个目标,因此需要对每个二分类的SVM分类器构造其训练集合。以猫目标为例,其具体做法: 首先以每张图像上猫目标的真实标注框作为正样本。然后在图像上生成很多候选区域,考察每个区域与猫目标的真实标注框之间的IoU,如果IoU小于0.3,就认定这个区域为负样本,IoU在0.3~1之间的不用做训练。可以想象,对于训练“SVM_猫”来说,正样本都是包含猫的区域,负样本有可能是背景,也有可能包含了其他目标,如狗。但无论如何,只要该区域不包含猫,或者只包含了一部分猫,其IoU小于0.3,都会被标记为负样本。 5) 为每个类训练一个二分类SVM分类器 假如有20个类,那么就要训练20个二分类器。上一部分讲述了如何为每一个两分类SVM构造相应的训练集,训练集里面的正样本和负样本都要使用上面已经训练好的CNN来提取各自的4096维度的特征向量,然后再对分类器进行训练。需要说明的是,SVM非常适合用于高维度小样本的分类任务,这也是在SVM之前要用CNN将每个图片表示为4096维矢量的原因。利用CNN将图片映射到高维准线性空间,便于利用SVM进行处理。 6) 边界框回归算法 图547候选目标框P、预测目标框 G^和真实目标框G 类似于为每个类别训练一个二分类SVM,还需要为每个类别构造一个边界框回归器来提升检测的准确率。 训练算法的输入是N个样本对{(Pi,Gi)}i=1,…,N,其中Pi=(Pix,Piy,Piw,Pih)是指候选边界框Pi的中心像素坐标以及框的宽度和高度,为了后面方便表示,将上标号i省略。同样,将每个边界框的真实标注表示为G=(Gx,Gy,Gw,Gh),学习算法的目标是学习候选框P和真实标注框G的变换。 图547候选目标框P、预测目标框G^和真实目标框G的示意图,分别用长虚线框、实线框和短虚线框来表示,现在的目的就是想学习到一种变换,这个变换可以将P映射到G。变换的过程如下: G^x=Pwdx(P)+Px,dx(P)=wTx5(P) G^y=Phdy(P)+Py,dy(P)=wTy5(P) G^w=Pwexp(dw(P)),dw(P)=wTw5(P) G^h=Phexp(dn(P)),dh(P)=wTh5(P)(5.24) 式中: d*(P)是候选样本框P用已训练CNN计算pool5层特征5(P)的线性函数,即d*(P)=wT*5(P),其中w*={wx,wy,wh,ww}是待学习的回归器参数。因此,问题变得很直接: 就是通过一定的方法求出变换参数w*={wx,wy,wh,ww},即为回归器,w*={wx,wy,wh,ww}通过正则化的最小均方误差函数(脊回归)来实现,即 w^*=argminw*∑Ni=1(ti*-wT*5(Pi))2+λ‖w*‖2(5.25) 其训练对(P,G)的回归目标ti*表示为 tx=(Gx-Px)/Pw ty=(Gy-Py)/Ph tw=log(Gw/Pw) th=log(Gh/Ph)(5.26) 作为典型的正则化最小均方误差问题,上述优化可以有效地通过闭式解形式获得。 在执行边界框回归时,有两个细微的问题需要注意: 一是正则化很重要,根据验证集将λ设置为1000。二是在选择要使用的训练对(P,G)时必须小心。直观地讲,如果P远离所有真实标注框,那么将P转换为真实标注框G的任务就没有意义,因为距离较远时,问题演变成复杂的非线性问题,线性回归假设前提不合理,这种学习问题变成无效学习问题。因此,候选框P至少在一个真实标注框附近时才进行学习。当且仅当IoU大于阈值(利用验证集将其设置为0.6)时,通过将P分配给最大IoU(如果IoU大于1)的真实标注框G来实现“接近”,所有未分配的投标都将被丢弃。为了学习特定类别的回归问题,应为每个对象类执行一次此操作。 在测试时,会对每个候选框进行评分,并仅预测一次其新的检测窗口。原则上,可以重复此过程(给新预测的边界框重新打分,然后根据该边界框预测新边界框,依此类推)。但是,发现迭代并不能改善结果。 7) RCNN的缺点 RCNN利用神经网络进行自底向上的候选区域判定,实现对目标的分类和定位,在 Pascal VOC 2012 的数据集上,将目标检测的验证指标 mAP 提升到 53.3%,相对于之前最好的结果提升了 30%。在RCNN提出的同时,也给出了一个实用的方法策略,当缺乏大量的标注数据时,通过迁移学习可以减少对数据的依赖性,即采用在其他大型数据集训练过后的神经网络,然后在小规模特定的数据集中进行微调。 RCNN存在以下缺点: (1) 重复计算。重复为每个候选框提取特征非常耗时。选择性搜索为每张图像产生大约2000个候选框,那么每张图像需要经过2000次完整的CNN前向传播得到特征,而且这2000个候选框有很多重叠的部分,造成很多计算都是重复的,这将导致计算量大幅上升,相当耗时。 (2) 性能瓶颈。由于所有的候选框会被放缩到固定的尺寸,这将导致图像的畸变,不符合物体的常见比例; 而且由于重复计算的问题,时间上难以容忍多尺度多比例的数据增强方法去训练模型,使得模型的性能很难有进一步的提升。 (3) 步骤烦琐。整个训练过程分为多个阶段,首先对卷积神经网络微调训练; 然后提取全连接层特征作为SVM的输入,训练得到目标检测器; 最后训练边框回归器。整个过程步骤烦琐不易操作,而且每个阶段分开训练,不利于取得最优的解。此外,每个阶段得到的结果都需要保存,消耗大量的磁盘空间。 (4) 训练占用内存大。每一类分类器和回归器都需要大量的特征作为训练样本。 (5) 目标检测速度慢。由于每次都需要利用获取候选框,并且利用CNN进行特征表示,因此目标检测速度较慢,难以适应实时性要求高的场合。 3. 空间金字塔池化网络 前面分析可以看出,RCNN候选区域缩放后的畸变问题和提取特征时的重复计算导致了模型性能和速度的瓶颈。何凯明等提出的空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet)[30]从两个方面进行改进,有效地解决了传统卷积神经网络对输入图像尺寸的限制,在保证性能的同时,检测速度也有了较大的提升。在2014年的ImageNet 大规模视觉识别挑战赛(ILSVRC)中,该方法在38个参赛团队中取得目标检测第二名、图像分类第三名的成绩。 1) SPPNet的主要改进 SPPNet的改进主要体现在两个方面: 一是解决传统RCNN在提取特征前需要变换到特定尺寸的问题; 二是解决图片的多个候选框重复计算的问题。 CNN一般分为两个部分,即卷积层和全连接层。卷积层不要求固定大小的输入,但全连接层在设计时固定了神经元的个数,故需要固定长度的输入。这也就是CNN需要固定输入大小的问题所在。SPPNet的解决办法是使用“空间金字塔变换层”将接收任意大小的图像输入,输出固定长度的向量,这样就能让SPPNet可接收任意大小的输入图片,不需要对图像做截断/拉伸操作。 在RCNN中,每个候选区域都要送入CNN内提取特征向量,假设一张图片有2000个候选区域,那么需要经过2000次CNN的前向传播,这2000次重复计算过程会有大量计算冗余,耗费大量时间。SPPNet提出了一种从候选区域到全图的特征映射之间的对应关系,通过映射关系可以直接获取候选区域的特征向量,不需要重复使用CNN提取特征,从而大幅度缩短训练时间。 2) 金字塔池化层 空间金字塔池化层接收任意大小的输入,输出固定的向量。空间金字塔池化(Spatial Pyramid Pooling,SPP)层可以对图片提取特征,图548给出其原理示意,即将图片分成1×1、2×2、4×4大小的bin块,然后将图片以三种方式切割并提取特征,这样可以得到一共1+4+16=21种特征,即以不同的大小的bin块来提取特征的过程就是空间金字塔池化。 图548空间金字塔池化层原理示意 空间金字塔池化层与传统的池化层的不同在于空间金字塔池化层由不同尺度的池化层构成,并且池化层的大小与输入的特征图矩阵的通道数成正比。设输入特征图矩阵的尺寸为a×a,数目为k,池化层的分割尺度为n×n,则该池化层的窗口大小为[a/n],移动步长为[a/n],输出的池化后的特征向量长度为n×n×k维。n可以取多个值,构成多个尺度上的池化层,这样空间金字塔池化层的输出特征向量的维度只与输入特征图矩阵的数目和池化层的分割尺度有关,而不再对网络模型的输入图像有尺寸限制。 下面以具体的例子来说明,根据前面步骤,不同大小候选区域在特征图上映射送入SPP层,如图549 所示。图中卷积层特征图通道数为256,SPP层尺度分成三种,即分成1×1(塔底)、2×2(塔中)、4×4(塔顶)三张子图,对每个子图的每个区域做最大池化,再将得到的特征连接到一起,得到(16+4+1)×256维特征向量。因此,无论输入图像大小如何,空间金字塔池化层将该图像变换为固定维度(16+4+1)×256的特征。 图549空间金字塔池化层的网络结构 3) 候选区域到特征图映射变换 在讲解算法之前,先给出感受野前向变换的具体过程,感受野前向变换是指某一层输出结果中一个元素所对应的上一层的区域大小。 (1) 感受野变换。 由卷积神经网络知识可知,在卷积参数计算过程中,卷积层处理后的输出尺寸与输入尺寸、滤波器尺寸、步长和填充大小的关系如表513所示。 表513卷积层输出尺寸与其他参数的关系 类型大小 输入尺寸W1×H1 卷积核F×F 输出尺寸W2×H2 步长S 填充大小P 则有: W2=W1-F+2PS+1 H2=H1-F+2PS+1(5.27) 式(5.27)是当前层到下一层的推导,如果已知后层感受野大小,则从式(5.23)可以推导出前一层的感受野计算式为 W1=(W2-1)S-2P+F H1=(H2-1)S-2P+F(5.28) 相邻两层的感受野计算公式为 ri=(ri+1-1)Si+Fi-2Pi(5.29) ri=ri+1(5.30) 式中: ri为感受野。式(5.29)对卷积层和池化层成立,式(5.30)对神经元层(如ReLU函数、Sigmoid等)成立。 图550给出了从后向前计算感受野的过程。从图中可以看出,特征图Map3中的1×1区域对应特征图Map2中的7×7区域,而Map2中的7×7区域对应于Map1中的11×11区域。其中Map1和Map2之间的参数可以为F=5,P=0,S=1或F=5,P=3,S=2,而Map2和Map3之间的参数可以为F=7,P=0,S=1,其相互关系只要满足式(5.27)即可,但不同的参数性能有差异。 图550感受野变化 感受野计算时有一些情况需要说明: 一是反向第一层卷积层的输出特征图像素的感受野尺寸等于滤波器尺寸; 二是深层卷积层的感受野尺寸和它之前所有层的滤波器尺寸和步长有关系; 三是计算感受野尺寸时,忽略了图像边缘的影响,即不考虑填充的尺寸。 通常需要知道网络中任意两个特征图之间的坐标映射关系(一般是中心点之间的映射),其计算公式为 pi=sipi+1+(ki-1)/2-padding(5.31) pi=pi+1(5.32) 式(5.31)对卷积层和池化层成立,式(5.32)对神经元层(如ReLU函数、Sigmoid等)成立,其中ki表示卷积核尺寸,padding表示补零。式(5.31)可以计算任意一层输入与输出的坐标映射关系,如果是计算任意特征图之间的关系,只需要用简单的组合就可以得到。图551是一个简单的例子,其中步长和补零个数已经给出。 图551感受野变化举例 则有 p1=2p2+5-12-1=2p2+1 p2=3p3+7-12-0=3p3+3p1=6p3+7 因此获得了网络中任意两个特征图之间的坐标映射关系。何凯明在SPPNet中采用一定的方法化简了公式,假设每一层的补零为 padding=ki/2(5.33) 式中: ·表示向下取整。 则有 pi=si·pi+1+((ki-1)/2-ki/2)(5.34) 当ki为奇数时,(ki-1)/2-ki/2=0,则有pi=si·pi+1; 当ki为偶数时,(ki-1)/2-ki/2=-0.5,则有pi=si·pi+1-0.5。 由于pi是坐标值,因此其值为整数,基本上可以认为pi=sipi+1,那么感受野中心点坐标pi只跟前一层pi+1有关。 将式(5.31)进行串接,得到通用的解决方案,即 i0=gL(iL)=αL(iL-1)+βL(5.35) 式中: αL为所有L层的总步长,是所有步长的乘积; βL为式(5.31)的第二项串接以后的结果,则可以得到感受野坐标点的变换。并且有 αL=∏Lp=1Sp βL=1+∑Lp=1∏p-1q=1SqFp-12-Pp (2) 候选区域到特征图变换。 SPPNet是把原始感兴趣的区域(RoI)的左上角和右下角映射到特征图上的两个对应点,如图552所示,特征图上的两对角点就确定了对应的特征图区域(图552(b))。 图552映射示意图 其映射方法为将左上角的点(x,y)映射到特征图上的(x′,y′),使得(x′,y′)在原始图上感受野((a)图阴影框)的中心点与(x,y)尽可能接近。下面针对对应点之间的映射作具体说明。将前面每层都填充P/2得到的简化公式pi=sipi+1,然后把式进行级联得到p0=Spi+1,S=∏i0Si; 对于特征图上的(x′,y′),其在原始图的对应点为(x,y)=(Sx′,Sy′); 最后把原始图片中的RoI映射为特征图中的映射区域((b)图阴影框),则 左上角取: x′=x/S+1; y′=y/S+1 右下角取: x′=x/S-1; y′=y/S-1 综上,SPPNet通过上述两个方面的改进,即解决尺寸变换和RCNN中重复卷积的问题,使得其网络速度提高到RCNN的20多倍,并且没有牺牲检测精度(VOC07 mAP=59.2%)。SPPNet虽然有效地提高了检测速度,但仍然存在一些不足: 一是多阶段训练过程步骤烦琐,仍然需要精调整预训练网络,然后对每个类别都训练SVM分类器,最后还要进行边界框回归,且区域候选也是要通过选择搜索来获得; 二是SPPNet只对其全连接层进行微调,而忽略了之前的所有层; 三是仍然存在RCNN时间和内存消耗比较大的问题。在训练SVM和回归的时候需要用网络训练的特征作为输入,特征保存和读取时间消耗较大。 4. Fast RCNN 2015年,R. Girshick提出了Fast RCNN检测器[26],这是对RCNN和SPPNet的进一步改进。Fast RCNN使人们能够在相同的网络配置下同时训练检测器和边界框回归器。在VOC07数据集上,Fast RCNN将mAP从58.5%(RCNN)提高到70.0%,在VOC2012上的mAP约为66%。基于VGG16的Fast RCNN算法在训练速度上比RCNN快了将近9倍,比SPPNet快大概3倍; 检测速度比RCNN快了213倍,比SPPNet快了10倍。 图553Fast RCNN系统流程图 图553给出了Fast RCNN系统流程图,首先进行候选框提取,采用选择性搜索在图片中获得大约2000个候选框; 然后进行CNN特征图提取与候选框RoI映射,并进行RoI池化。Fast RCNN在数据输入尺寸无限制,而实现这个无限制要求的关键所在正是RoI 池化层,该层的作用是可以在任何大小的特征映射上为每个输入RoI提取固定的维度特征表示,然后确保每个区域的后续分类可以正常执行; 最后将池化后的RoI进行特征提取,进行分类与回归。图553的简化流程图如图554所示。 图554Fast RCNN简化流程图 需要说明的是,使用卷积网络提取图片特征。类似于RCNN,在获取特征映射之后,需要卷积神经网络来进行卷积操作。在此处Fast RCNN使用的卷积神经网络为普通的全链接层fc7,但是有所改动,也有使用VGG16的神经网络。 1) RoI池化层 RoI是指在选择性搜索完成后得到的“候选框”在特征图上的映射。RoI池化层将每个候选区域分为m×n个块。针对每个块执行最大池化操作,使得特征映射上不同大小的候选区域被变换为均匀大小的特征向量,然后送入下一层。 举例来说,某个 RoI区域坐标为(x1,y1,x2,y2),那么输入尺寸大小为(y2-y1)×(x2-x1); 如果合并输出的大小为池高乘以池宽,即PooledheightPooledwidth,则每个网格的大小都为 y2-y1Pooledheight×x2-x1Pooledwidth(5.36) 虽然RoI池化可以看作是针对RoI的特征图像的池化操作,但存在非固定大小输入的问题,故每次池化网格的大小都必须手动计算。因此,首先用选择性搜索等候选框提取算法得到候选框坐标,然后,输入到卷积神经网络中来预测每个候选框中包含的对象。上述步骤中神经网络对RoI进行分类,并没有对整个图片进行分类。 在前面介绍的RCNN中,进行卷积操作之前一般是先将图片分割与形变到固定尺寸,这也正是RCNN的缺点之一。因为这会让图像产生形变,或者图像变得过小,使一些特征产生损失,继而对之后的特征选择产生巨大影响。Fast RCNN与RCNN不同,Fast RCNN在数据的输入上并不对其有什么限制,而实现的关键正是RoI池化层。RoI池化层如图555所示。该层的作用是可以在任何大小的特征映射上为每个输入RoI提取固定维度的特征表示,确保每个区域的后续分类可以正常执行。 图555RoI 池化层 对比图549所示的SPPNet可以看出,RoI的尺度可以是4×4、2×2、3×3等,可以动态调整。不像SPP是固定的4×4、2×2和1×1。而RoI为单尺度的原因是进行了准确度和时间的折中。通常,单尺度是直接将图像定为某种尺寸,直接输入网络来训练即可; 多尺度则要生成一个金字塔,然后在金字塔上找到一个大小与目标比较接近227×227的投影版本。与RoI池化比,SPPNet更准确一些,但是RoI时间要省很多,所以实际中大都采用RoI。Fast RCNN比SPPNet快很多原因也在此。 2) 联合多任务建模——联合候选框回归与目标分类 在进行RoI池化后就可以直接进行深度图像检测,此时神经网络仍然只是对图像进行分类,只不过不是整幅图像分类,而是RoI分类。在Fast RCNN中,输出层不仅仅完成简单分类,而是将候选框目标分类与候选框回归并列放入全连接层,设置两个输出层,形成一个多任务训练模型。 第一个是针对每个RoI的分类概率预测,即获得P=(p0,p1,…,pK),表示属于K类和背景的概率(其中K为总类别数),用Lcls(P,u)表示分类误差,则有 Lcls(P,u)=-logpu(5.37) 式中: u为该RoI的真实类别标签。 第二个是候选框回归损失函数,即针对每个RoI坐标偏移优化。假设RoI 中tk=(tkx,tky,tkw,tkh)(0≤k≤K,k是多类检测的类别序号),对于类别u,在图片中标注了一个真实坐标tu=(tux,tuy,tuw,tuh),而预测值t=(tx,ty,tw,th),二者理论上越接近越好,则将损失函数定义为 Lloc(t,tu)=∑i∈{x,y,w,h}smoothL1(ti,tui)(5.38) 式中 smoothL1(x,x′)=0.5(x-x′)2,|x-x′|≤1 |x-x′|-0.5,其他(5.39) 式中: smooth函数在(-1,1) 之间为二次函数,而其他区域为线性函数,该函数可以增强模型对异常数据的鲁棒性,其具体形式如图556所示。 图556Smooth函数 总损失为上述两个任务单的损失函数和,即 L(P,u,tu,t)=Lcls(P,u)+λu≥1Lloc(tu,t)(5.40) 式中: λ为常数; u≥1为指示函数,当u≥1时值为1,即表示当为前景时,考虑两种损失,当u=0时,即图像为背景时,只考虑分类损失函数。 3) 训练和测试 首先用ILSVRC 20XX数据集进行预训练,预训练是进行有监督分类的训练。然后在PASCAL VOC样本上进行特定调优,调优的数据集包括25%的正样本和75%的负样本。其中正样本是指真实框IoU在0.5~1的候选框,而负样本是指与真实框IoU在0.1~0.5的候选框。PASCAL VOC数据集中既有物体类别标签,也有物体位置标签,有20种物体; 正样本仅表示前景,负样本仅表示背景; 回归操作仅针对正样本进行。在调优训练时,每一个minibatch中首先加入N张完整图片,而后加入从N张图片中选取R个候选框。R个候选框可以复用N张图片前5个阶段的网络特征,例如N=2,R=128。微调前,需要对有监督预训练后的模型进行三步转化: 一是RoI池化层取代有监督预训练后的VGG16网络最后一层池化层。二是两个并行层取代上述VGG16网络的最后一层全连接层和Softmax层。并行层之一是新全连接层1,即将原Softmax层1000个分类输出修改为21个分类输出,表示20种类+背景类,并行层之二是新全连接层2+候选区域窗口回归层。三是上述网络由原来单输入(一系列图像)修改为双输入(一系列图像和这些图像中的一系列候选区域)。 测试流程图如图557所示,即输入图片经过5个卷积池化块操作后,经过2个全连接层获得4096维度的向量,然后计算分类损失和回归损失,最后按照总损失进行输出。 图557测试流程图 4) SVD全连接层加速网络 图像分类任务中,卷积层比全连接层计算时间长; 而在目标检测任务中,选择性搜索算法提取的建议框数目巨大(约2000个),几乎有一半的前向计算时间花费在全连接层。就Fast RCNN而言,由于每个建议框都需要计算分类结果,因此RoI池化层后的全连接层需要进行约2000次,由此考虑在Fast RCNN中采用SVD分解加速全连接层计算。具体实现如下: (1) 物体分类和窗口回归都是通过全连接层实现,假设全连接层输入数据为x,输出数据为y,全连接层参数为W,尺寸为u×v,那么该层全连接计算为 y=Wx(5.41) 计算复杂度为u×v。 (2) 若将W进行SVD分解,并用前t个特征值近似代替,即 W=UΣVT≈U(u,1:t)·Σ(1:t,1:t)·V(v,1:t)T(5.42) 那么原来的前向传播分解成两步,即 y=Wx=U(ΣVT)x=U·z(5.43) 其具体实现过程如图558所示。计算复杂度为u×t+v×t,若t<min(u,v),则这种分解会大大减少计算量。 图558SVD全连接层分解网络 实现时,相当于把一个全连接层拆分为两个全连接层,第一个全连接层不含偏置,第二个全连接层含偏置。实验表明,SVD分解全连接层能使mAP只下降0.3%的情况下提升30%的速度,同时该方法也不必再执行额外的微调操作。 5) 图片中心化采样 RCNN和SPPNet中采用RoI中心采样,即从全部图片的所有候选区域中均匀取样,这样每个SGD的minibatch中包含了不同图像的样本,不同图像之间不能共享卷积计算和内存,运算开销大。Fast RCNN中采用图片中心化采样: minibatch采用层次采样,即先对图像采样(N个),再在采样到的图像中对候选区域采样(每个图像中采样R/N个,一个minibatch共计R个候选区域样本),同一图像的候选区域卷积共享计算和内存,降低了运算开销。 图片中心化方式采样的候选区域来自同一图像,相互之间存在相关性,可能会减慢训练收敛的速度,但是在实验中并没有明显的表现,反而使用N=2,R=128的图片中心化方式比RCNN收敛更快。 这里解释为什么SPPNet不能更新空间金字塔池化层前面的卷积层,而只能更新后面的全连接层: 一种解释卷积特征是线下计算的,无法在微调阶段反向传播误差; 另一种解释反向传播需要计算每一个RoI感受野的卷积层梯度,通常所有RoI会覆盖整个图像,如果用RoI中心采样方式,会由于计算太多整幅图像梯度而变得又慢又耗内存。 5. Faster RCNN网络 图559Faster RCNN基本结构 Faster RCNN网络[27]是Ross B.Girshick在RCNN和Fast RCNN基础上于2016年提出的网络。从结构上看,Faster RCNN用神经网络生成待检测框,替代了其他RCNN算法通过规则等产生候选框的方法,且将特征抽取、候选框提取、候选框回归 图560Faster RCNN具体流程图 和分类都整合在一个网络中实现端到端训练,使得网络的综合性更强,尤其是检测速度得以大幅改善。该网络主要包括骨干网络、区域候选网络(Region Proposal Networks,RPN)、RoI池化与分类三个部分。Faster RCNN的示意图和具体流程分别如图559和图560所示。其中,骨干网络由经典网络共享基础卷积层而构成,用于提取整张图片的特征,例如ZFNet、VGG16或ResNet101等网络去除后面全连接层构成主干网络。主干网络输出下采样后的特征图,送入后续区域候选网络和全连接层进行处理。RPN用于生成区域候选框,该网络通过Softmax函数判断锚框属于正类或者负类,再利用候选框回归算法来修正锚框获得精确的候选区域。RoI池化与分类网络对候选检测框进行分类,并且再次微调候选框坐标。RoI池化收集输入的特征图和候选区域进行特征提取,分类层利用候选框特征图计算候选框的类别,同时利用候选框回归算法获得检测框最终的精确位置。 1) 骨干网络 骨干网络可采用去掉全连接层后ZFNet、VGG16或ResNet101网络等不同类型,实验中采用了ZFNet和VGG16两种模型。骨干网络VGG16共有13个卷积层和4个池化层,其中卷积层后过ReLU激活函数。骨干网络中所有设置相同,即卷积层尺寸为3×3、补零尺寸为1,步长为1。这意味着在Faster RCNN 骨干网络对所有的卷积都做了扩边处理(pad=1,即填充一圈0),导致原图尺寸变为(M+2)×(N+2),再做3×3卷积后输出M×N,如图561所示。正是这种设置,使得骨干网络中的卷积层不改变输入和输出矩阵大小。类似地,池化层尺寸为2×2、没有补零,步长为2。这样每个经过池化层的M×N矩阵,都会变为(M/2)×(N/2)大小。综上所述,骨干网络的卷积层不改变输入与输出大小,池化层使输出长和宽都变为输入的1/2。因此,对于VGG16骨干网络而言,由于有4个池化层,一个M×N大小的矩阵经过骨干网络后固定变为(M/16)×(N/16)。而对于ZFNet骨干网络,由于有三个池化层,则一个M×N大小的矩阵经过骨干网络后固定变为(M/8)×(N/8)。 图561卷积示意图 2) 区域候选网络 经典的检测方法生成检测框非常耗时,如RCNN使用选择性搜索方法生成检测框,还有采用滑动窗口方法。而Faster RCNN则抛弃了前面方法,直接使用区域候选网络生成检测框,这也是Faster RCNN的巨大优势,能极大提升检测框的生成速度。从图562所示可以看出,RPN实际分为两个路径: 一是通过Softmax分类函数将锚框分成正类和负类; 二是通过计算对于锚框的边界框回归偏移量,获得精确的候选区域。而最后的候选层则负责综合正类锚框和对应边界框回归偏移量获取候选区域,同时剔除太小和超出边界的区域框。其具体处理过程如图562所示。 图562阶段1: RPN 经过RPN后完成目标的定位。图563给出了具体的示意图。由图中可以看出,假设锚框个数k=9,假设骨干网络输出的特征图尺寸是W×H×512,经过一个尺寸为3×3的滑动窗卷积层,再通过两个参数个数完全相同但不共享参数的两个1×1的卷积层(可称为姐妹卷积层),输出两个特征图,一个为分数特征图W×H×2k,另一个为坐标特征图W×H×4k。实验中主干网络采用了ZFNet和VGGNet两种配置,而在ZFNet和VGGNet中最后的卷积层5的输出维度分别为256和512,因此经过两种不同主干网络后的特征维度分别为256或512。在卷积层5之后,做了RPN的3×3卷积又融合了周围3×3的空间信息,同时保持维度256或512不变。假设在卷积层5的每个点上都有k个锚框(默认k=9),而每个锚框要分正例和负例,所以每个点由256维矢量转化为2k分类结果; 而每个锚框都有(x,y,w,h)对应4个偏移量,所以回归参数有4k个坐标。全部锚框进行训练导致数据规模巨大,因此随机选取128个正类锚框和128个负类锚框进行训练。 图563Faster RCNN细节信息展示 (1) 锚框定义。 锚框实际上就是一组由向量生成的矩形,如其中每行的4个值(x1,y1,x2,y2)表示矩形左上和右下角点坐标。锚框尺寸根据检测图像设置。例如,可以将任意大小的输入图像矩阵变形为800×600(即图560中的M=800,N=600)。下面计算下锚框的个数,由于原图800×600,VGG下采样16倍后,特征图中每个点设置9个锚框,所以有 ceil800/16×ceil600/16×9=50×38×9 式中: ceil·表示向上取整。因此,VGG输出的特征图尺寸为50×38。输出特征图的每个特征点映射回原图感受野的中心点当成一个基准点,然后围绕基准点选取k个不同尺度、不同比例的锚框。图564中采用了3个尺度3种面积的锚框,面积分别为{1282、2562、5122},比例尺寸分别为{1∶1,1∶2,2∶1}。9个矩形共有3种形状,长宽比约为{1∶1,1∶2,2∶1}三种。实际上,通过锚框引入了检测中常用的多尺度方法。图565给出一组锚框坐标示例。 图564锚框示意图 图565锚框坐标 (2) 矩阵变形。 从图560可以看出,将1×1卷积后的张量先矩阵变形,便于使用Softmax层计算,之后再矩阵变形回来。一幅M×N大小的矩阵送入VGGNet主干网络后,到RPN前变为(M/16)×(N/16),不妨设宽度W=M/16和高度H=N/16。在进入矩阵变形与Softmax函数之前,先做了1×1卷积,而1×1卷积的输出通道数为18,因此经过该卷积后,该卷积的输出图像尺寸为W×H×18,通道数18为9个锚框可能出现正类和负类的所有情况相对应。后面按Softmax分类获得正类锚框,初步提取了检测目标候选区域边框信息。 在进行Softmax前后都要经过矩阵变形主要是因为便于进行二分类。其主要原因是: 在一些深度学习框架中,数据存储的格式是W×H×Channel=W×H×(2×k),这里的通道数Channel=2×k,即2倍的锚框个数。而在Softmax部分要进行正、负二分类,因此会将利用矩阵变形(Reshape层)将其变成W×H×Channel=W×(H×k)×(2),就是将某个维度变成二维进行Softmax分类,而分类后还要恢复成原来的存储形式。 (3) 锚框正类与负类划分。 不是所有锚框都被选择来进行训练,若对每幅图的所有锚框都去优化损失函数,那么会因为负样本过多导致最终得到的模型对正样本预测准确率很低,因此需要对锚框的正类和负类进行选择。假设训练集中的每张图像(含有人工标定的真实框) 的所有锚框(N×M×k),则正、负样本的划分规则如下: ① 对每个标定的真实框区域,与其IoU最大的锚框记为正样本,保证每个真实框至少对应一个正样本锚框。 ② 剩余的锚框,若其与某个标定真实框区域IoU大于0.7,则记为正样本; 若其与任意一个标定真实框的IoU都小于0.3,则记为负样本。因此,每个真实标定框可能会对应多个正样本锚框,但每个正样本锚框只能对应一个真实标定框。 ③ 前两步还剩余的锚框舍弃不用。 ④ 跨越图像边界的锚框舍弃不用。 锚框正类和负类选择如图566所示。 图566锚框正类和负类选择示意图(一个真实标注框可对应多个锚框) 除了进行上述选择外,锚框的数目也通过下面方式进行压缩: 一是对每一个预测为正类锚框的分数进行排序,然后采用非极大值抑制方法,即首先找到分数最高的锚框,然后以此锚框作为基准,计算其他锚框与该锚框的IoU,如果IoU大于阈值(如0.7),就认为是同一个目标,直接舍弃这个锚框,每个图像剩下的锚框数为A; 二是再次选择,由于A个锚框中依然有很多副样本,通过 IoU(大于或等于 0.5 为正样本,否则为负样本),最后选择B个正、负样本。 下面通过一个具体例子来说明选择的大致基准。假设原始图片尺寸为1000×600,那么经过骨干VGG16网络下采样后,则特征图尺寸变为(1000/16)×(600/16)×512,即下采样16倍,且通道数为512; 经过RPN后则变成63×38×9=21546个锚框。经过去除跨越图像边界的部分,则剩余6000个左右的锚框; 然后利用非极大值抑制方法,每幅图像筛选剩下2000个左右的锚框; 最后再次选择剩余256左右的锚框。 3) 边界框回归算法 假设有预测框、锚框和真实标签框三种类型的框,且x、xa和x*分别是x的预测值、锚框和真实标签对应值,变量y、w和h同理。x、y,w、h分别是预测矩形框的中心点坐标及宽和高,xa、ya,wa、ha分别是锚框的中心坐标及宽和高,x*、y*,w*、h*分别是真实标签对应框的中心坐标及宽和高。则有预测框到锚框的变换表示为 x=xa+x y=ya+y w=wa·w h=ha·h(5.44) 而部分都是基于w、h计算出来的,则有 x=wa·tx y=ha·ty w=wa·etw h=ha·eth(5.45) 式中: {tx,ty,tw,th}为预测框(x,y,w,h)对于锚框(xa,ya,wa,ha)的偏移量。 根据式(5.44)和式(5.45),可得 tx=(x-xa)/wa ty=(y-ya)/ha tw=log(w/wa) th=log(h/ha)(5.46) 而{t*x,t*y,t*w,t*h}表示真实标记框(x*,y*,w*,h*)相对于锚框(xa,ya,wa,ha)的偏移量,即 t*x=(x*-xa)/wa t*y=(y*-ya)/ha t*w=log(w*/wa) t*h=log(h*/ha)(5.47) 学习目标自然就是让{tx,ty,tw,th}接近{t*x,t*y,t*w,t*h}的值。 上述算法中用exp函数和log函数,这是因为尺度系数大于零,因此exp函数来表示尺度系数可以满足。而利用log函数的主要原因是对数函数具有一个很重要的特性——非线性压缩,即压缩较大值,因此采用这种方式计算的损失函数可以减小大的目标的作用,有助于改善模型只能学到大目标的缺点。从式(5.46)和式(5.47)可以看出,对于中心点坐标采用线性变换,而对于宽度和高度采用非线性变换,这种设置也是合理的,对于log函数,当自变量较小时可近似为线性变换。 4) 损失函数 Faster RCNN的损失主要分为RPN的损失和Fast RCNN的损失,并且两部分损失都包括分类损失和回归损失,其总损失函数如下: L({pi},{ti})=1Ncls∑iLcls(pi,p*i)+λ1Nreg∑ip*iLreg(ti,t*i)(5.48) 式中: 1Ncls∑iLcls(pi,p*i)为分类损失,包括RPN分类损失和Fast RCNN分类损失; 1Nreg∑ip*iLreg(ti,t*i)为回归损失,也包括RPN回归和Fast RCNN回归损失。 (1) 分类损失。 ① RPN分类损失: RPN的产生的锚框只分为前景和背景,前景的标签为1,背景的标签为0。在训练RPN的过程中,会选择256个锚框,即Ncls=256。真实标注框标签为 p*i=0,负样本 1,正样本(5.49) Lcls(pi,p*i)是两个类别的对数损失,即 Lcls(pi,p*i)=-log[p*ipi+(1-p*i)(1-pi)](5.50) 式中: pi为锚框预测为目标的概率。 式(5.50)是经典二分类交叉熵损失,对于每一个锚框计算对数损失,然后求和除以总的锚框数量Ncls。 ② Fast RCNN分类损失: RPN的分类损失时二分类的交叉熵损失,而Fast RCNN是多分类的交叉熵损失。在Fast RCNN的训练过程中会选出Ncls个进行计算。 (2) 回归损失。 这里将RPN和Fast RCNN的回归损失一起来描述,即λ1Nreg∑ip*iLreg(ti,t*i)部分。从前面可以知道,{tx,ty,tw,th}是预测框(x,y,w,h)对于锚框(xa,ya,wa,ha)的偏移量; {t*x,t*y,t*w,t*h}表示真实标记框(x*,y*,w*,h*)相对于锚框(xa,ya,wa,ha)的偏移量,则有 Lreg(ti,t*i)=s~moothL1(ti,t*i)(5.51) 式中: s~moothL1(ti,t*i)是式(5.39)所定义的平滑L1函数的拓展,即 s~moothL1(x,x′)=0.5(x-x′)2×1/σ2,|x-x′|≤1/σ2 |x-x′|-0.5,其他(5.52) 不同之处在于: RPN训练中σ=3,而原始Fast RCNN中σ=1。对于每一个锚框计算完Lreg(ti,t*i)后还要乘以p*i,如前所述,p*i为正类时值为1,说明里面有物体时,p*i为负类时值为0,说明没有物体。这意味着,只有前景才计算损失,背景不计算损失。 对于参数λ和Nreg在RPN训练过程中的设置进行解释说明。Nreg为输出特征图尺寸,即经过主干网络下采样后的W×H=63×38≈2400,而λ=10,这样分类和回归两个损失函数的权重基本相同,即Ncls=256,而Nreg/λ≈240,二者接近。而代码实现中,往往直接将Nreg取值为正、负样本的总数256(批处理量),然后将λ=1,这样直接使得分类和回归的权重相同,均为1/batch_size,因此不需要额外设置λ。 5) 候选层 候选层负责综合预测框和前景锚框,计算出精准的候选,送入后续RoI 池化层。候选层有3个输入,分别是前景/背景分类器结果、预测的边界框以及im_info信息; 另外,还有参数feat_stride=16。首先解释im_info,对于一幅任意大小P×Q图像,传入Faster RCNN前首先矩阵变形到固定M×N,im_info=[M,N,scale_factor]则保存了此次缩放的所有信息; 然后经过卷积层,经过4次池化尺寸变为W×H=(M/16)×(N/16)大小,其中feature_stride=16则保存了该信息,用于计算锚框偏移量。 候选层按照以下顺序依次处理: (1) 生成锚框,利用预测框对所有的锚框做边界框回归; (2) 按照输入的前景框分数由大到小对锚框进行排序,提取前面若干锚框,即提取修正位置后的前景锚框; (3) 限定超出图像边界的前景锚框为图像边界; (4) 剔除非常小(宽度和高度小于阈值)的前景锚框; (5) 进行非极大值抑制后处理,再次按照前景锚框分数由大到小排序,提取前若干结果作为候选输出。之后输出候选框坐标[x1,y1,x2,y2]。注意,由于在第三步中将锚框映射回原图判断是否超出边界,所以这里输出的锚框是对应M×N输入图像尺度。 6) Faster RCNN训练 Faster RCNN训练是在已经训练好的模型(如ZFNet、VGG16和Res101)的基础上继续进行训练。实际中训练步骤如下: 步骤1: 在已经训练好的ImageNet模型上训练RPN,利用训练好的RPN收集候选框; 步骤2: 利用已有的ImageNet模型,第一次训练Faster RCNN; 步骤3: 利用Faster RCNN参数,第二次训练RPN; 步骤4: 再次利用步骤3中二次训练好的RPN收集候选框,第二次训练Faster RCNN。 训练过程类似于一种“迭代”的过程,循环了2次。通过实验发现,即使迭代循环更多次也不会进一步提升。图567给出了Faster RCNN训练过程。 图567Faster RCNN训练过程 5.4本章小结 卷积神经网络是一类非常重要的神经网络,在深度学习发展历史上具有重要地位。本章系统介绍了卷积神经网络的基本概念、基本原理和关键技术,并选取典型的CNN网络LeNet5、AlexNet、ZFNet、VGGNet、GoogLeNet、ResNet、区域卷积神经网络进行了详细分析与解读。 参考文献 [1]Kandel E R.An introduction to the work of David Hubel and Torsten Wiesel[J].The Journal of Physiology,2010,587(12): 27332741. [2]Fukushima K,Miyake S.Neocognitron: A new algorithm for pattern recognition tolerant of deformations and shifts in position[J].Pattern Recognition,1982,15(6): 455469. [3]Waibel A.Phoneme recognition using timedelay neural networks[C].Meeting of the Institute of Electrical,Information and Communication Engineers(IEICE),1987. [4]Waibel A,Hanazawa T,Hinton G,et al.Phoneme recognition using timedelay neural networks[J].IEEE transactions on acoustics,speech,and signal processing,1989,37(3): 328339. [5]Zhang W.Shiftinvariant pattern recognition neural network and its optical architecture[C].In Proceedings of annual conference of the Japan Society of Applied Physics(JSAP),1988. [6]LeCun Y,Boser B,Denker J S,et al.Backpropagation applied to handwritten zip code recognition[J].Neural computation,1989,1(4): 541551. [7]LeCun Y,Bottou L,Bengio Y,et al.Gradientbased learning applied to document recognition[J].Proceedings of the IEEE,1998,86(11): 22782324. [8]Simard P Y,Steinkrau D,Platt J C.Best practices for convolutional neural networks applied to visual document analysis[C].In: Proceedings of IAPR International Conference on Document Analysis and Recognition(ICDAR), 2003,3: 958962. [9]Krizhevsky A,Sutskever I,Hinton G E.ImageNet Classification with Deep Convolutional Neural Networks [J].Communications of the ACM,2012,60: 8490. [10]Zeiler M D,Fergus R. Visualizing and Understanding Convolutional Neural Networks[C].In: Proceedings of European Conference on Computer Vision(ECCV),2014: 818833. [11]Simonyan K,Zisserman A. Very Deep Convolutional Networks for LargeScale Image Recognition[C].In: Proceedings of International Conference on Learning Representations(ICLR),2015: 114. [12]Szegedy C,Liu W,Jia Y,et al.Going Deeper with Convolutions[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2015: 19. [13]He K M,Zhang X Y,Ren S Q,et al.Deep Residual Learning for Image Recognition[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2016: 770778. [14]我爱机器学习.Deep Learning回顾之LeNet、AlexNet、GoogLeNet、VGG、ResNet [EB/OL].https://www.cnblogs.com/52machinelearning/p/5821591.html. [15]Zeiler M D,Taylor G W,Fergus R.Adaptive deconvolutional networks for mid and high level feature learning[C].In: Proceedings of IEEE International Conference on Computer Vision(ICCV),2011: 20182025. [16]Szegedy C,Vanhoucke V,Ioffe S,et al.Rethinking the Inception Architecture for Computer Vision[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2016: 28182826. [17]Ioffe S,Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift[C].In: Proceedings of International Conference on Machine Learning(ICML),2015: 448456. [18]Feature Extractor [inception v2 v3][EB/OL].https://www.cnblogs.com/shouhuxianjian/p/ 7756192.html. [19]Szegedy C,Ioffe S,Vanhoucke V,et al.Inceptionv4,InceptionResNet and the Impact of Residual Connections on Learning[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2016: 42784284. [20]Hu J,Shen L,Albanie S,et al.SqueezeandExcitation Networks[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2018: 71327141. [21]Hu J,Shen L,Albanie S,et al.SqueezeandExcitation Networks[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2020,42(8): 20112023. [22]Xie S,Girshick R,Dollar P,et al.Aggregated residual transformations for deep neural networks[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2017: 59875995. [23]Howard A G,Zhu M,Chen B,et al.MobileNets: Efficient convolutional neural networks for mobile vision applications[J].arXiv: 1704.04861,2017. [24]Zhang X,Zhou X,Lin M,et al.ShuffleNet: An extremely efficient convolutional neural network for mobile devices[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2018: 68486856. [25]Girshick R,Donahue J,Darrell T,et al.Rich feature hierarchies for accurate object detection and semantic segmentation[C].In: Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR),2014.580587. [26]Girshick R.Fast rcnn[C].In: Proceedings of the IEEE International Conference on Computer Vision(ICCV).2015: 14401448. [27]Ren S Q,He K M,Girshick R,et al.Faster RCNN: Towards RealTime Object Detection with Region Proposal Networks[J].IEEE Transactions on Pattern Analysis & Machine Intelligence,2015,39: 11371149. [28]GarciaGarcia A,OrtsEscolano S,Oprea S,et al.A Review on Deep Learning Techniques Applied to Semantic Segmentation[J].arXiv preprint arXiv: 1704.06857,2017. [29]Felzenszwalb P F,Huttenlocher D P.Efficient graphbased image segmentation[J].Internation Jounal of Computer vision,2004,59(2): 167181. [30]He K,Zhang X,Ren S,et al.Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition[J].IEEE Transactions on Pattern Analysis & Machine Intelligence,2014,37(9): 19041916. [31]Simonyan K,Zisserman A.Very Deep Convolutional Networks for LargeScale Image Recognition[J].arXiv preprint arXiv: 1409.1556,2014. 本章知识点补充 知识点1Hebbian原理 神经反射活动的持续与重复会导致神经元连接稳定性的持久提升,当两个神经元细胞A和B距离很近,并且A参与了对B重复、持续的兴奋时,某些代谢变化会导致A将作为能使B兴奋的细胞。即“一起发射的神经元会连在一起”,学习过程中的刺激会使神经元间的突触强度增加。 受Hebbian原理启发,文章Provable Bounds for Learning Some Deep Representations提出,如果数据集的概率分布可以被一个很大、很稀疏的神经网络所表达,那么构筑这个网络的最佳方法是逐层构筑网络。具体思路是将上一层高度相关的节点聚类,并将聚类出来的每一个小簇连接到一起,如图568所示。这个相关性高的节点应该被连接在一起的结论,即是从神经网络的角度对Hebbian原理有效性的证明。 图568将高度相关的节点连接在一起形成稀疏网络 因此,一个“好”的稀疏结构应该符合Hebbian原理,应该把相关性高的一簇神经元节点连接在一起。在普通的数据集中,这可能需要对神经元节点聚类,但是在图片数据中,邻近区域的数据相关性高,因此相邻的像素点被卷积操作连接在一起。而实际中可能有多个卷积核,在同一空间位置但在不同通道的卷积核的输出结果相关性极高。因此,1×1的卷积就可以很自然地把这些相关性很高的、在同一个空间位置但是不同通道的特征连接在一起。这就是1×1卷积频繁应用于GoogLeNet中的原因。1×1卷积所连接的节点的相关性最高,而稍大尺寸的卷积,如3×3、5×5卷积所连接的节点相关性也很高,因此也可以适当地使用一些大尺寸的卷积,增加多样性。深度感知模块通过4个分支中不同尺寸的1×1、3×3、5×5等小型卷积将相关性很高的节点连接在一起,就完成了其设计初衷,构建出了很高效的符合Hebbian原理的稀疏结构。 知识点2交并比 在目标检测当中,有一个重要的概念就是交并比,一般是指代模型预测的候选框和真实标注框之间的交并比。交并比的定义为 IoU=A∩BA∪B 集合A和集合B的并集包括了图569所示的三个区域,集合C是集合A与集合B的交集。在目标检测当中,IoU就是上面两种集合的比值。A∪B其实就是A+B-C。因此,交并比公式可以写为 IoU=A∩BA+B-(A∩B) 因此可以看出,IoU衡量两个集合的重叠程度。IoU为0时,两个框不重叠,没有交集; IoU为1时,两个框完全重叠。IoU为0~1时,代表两个框的重叠程度,数值越高,重叠程度越高。 图569三个集合区域示意