DNN网络结构设计浅析之GoogLeNet

欢迎转载,请注明出处:http://blog.csdn.net/stund/article/details/73611734

1、背景简介

自从2012年的AlexNet 深度神经网络在ImageNet 竞赛中夺冠后,DNN迅速席卷整个CV 领域。

介绍一下ImageNet: ImageNet 是一个计算机视觉系统识别项目数据库。是美国斯坦福的计算机科学家李菲菲团队组织建成的。包括海量的高质量图像数据集建设,以及基于该数据集设置的比赛 ILSVRC(ImageNet Large Scale Visual Recognition Challenge),2016的ILSVRC竞赛分为五大部分,包括:目标检测、目标定位、视频中目标物体检测、场景分类、场景分析。其中的目标定位图像分类比赛为:1000类图像分类问题,训练数据集126万张图像,验证集5万张,测试集10万张(标注未公布)。评价标准采用top-5错误率,即对一张图像预测5个类别,只要有一个和人工标注类别相同就算对,否则算错。

 

需要进一步优化DNN的效果时,一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,这也就意味着巨量的参数(大到数十亿级别)。但是,巨量参数容易产生过拟合也会大大增加计算量。

 

解决上述两个缺点的方法是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。这点表明臃肿的稀疏网络可能被不失性能地简化。

用这种方式优化得到的深度网络由多深?接下来探索一下真实的GoogLeNet -深度网络结构,同时理解蕴含在深度结构背后的思想。

2、GoogLeNet 结构简介

2.1 GoogLeNet 结构

先看看整个网络的结构:

将对应的模块化单元展开后的结构如下:

2.2 GoogLeNet网络结构的特征

1 . GoogLeNet采用了模块化的结构,方便增添和修改;网络中的Inception网络结构由9组之多。单分支的深度约27层,如果更细致的算法与周边分支累加到一起来有近百层。

2 . 网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后finetune;

3  虽然移除了全连接,但是网络中依然使用了Dropout ;

4  网络中间层产生的的特征应该是非常有识别性的。为了在网络的较前端获取识别特性 与避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度,其产生的损失*0.3的权重后加到总损失里面。实际测试的时候,这两个额外的softmax会被去掉。

5 从网络结构来看,在网络前中部分都选用max pooling而不是传统的ave pooling。9组Inception单元采用2组(28*28)+pooling+5组(14*14)+pooling+2组(7*7)+pooling的对称结构。整个网络将视野窗不断缩小一半(strdie=2),并在网络的后端将7*7降低到1*1的视野窗口。

6 GoogleNet的caffemodel大小约50M,性能优异。而性能类似的VGGNet的caffemodel大小约600M。

将网络结构用表格表示如下:

观察整个GoogLeNet,除了我们比较熟悉的Conv ,Pooling 等单元之外,还有很多模块化的、重复出现的Inception 单元。Inception单元是GoogLeNet的主要结构,从表格中的#1*1、#3*3、#5*5、pooling 等列可知其中其内部包含由卷积、池化等单元。我们可以更深入地去看看Inception 单元内部的结构。

2.3【加餐】VGG 16网络

从历史对比来看VGG 网络比GoogLeNet 还是臃肿很多的。具体可以看看VGG的网络结构。

  • 整个VGG网络由固定3*3 大小的卷积结构、相应的Pooling 池化结构,以及3层全链接结构构成。网络结构单一,全链接网络运算量大。
  • 同时该结构也将特征提取也比较有规律,前面卷积部分提取很多局部特征,后面的全链接全局特征。
  • 具体的网络结构如下:

3 Inception 单元结构

3.1 背景介绍

一句话概况Inception结构的特点:将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。

正如前文提到的通过增加DNN网络的宽度和深度来提升模型性能。作者参考了历史文献提出的一种layer-by-layer的DNN网络构建方法:分析当前网络最后一层节点的输出值的统计相关性,并将这些输出单元聚到若干个内部强相关的簇(group)。那么这些个簇(group)就对应着下一层待连接的新增的神经单元。

3.2 Inception单元详解

基于上面提出的Inception结构的思想,Google的科学家们首先设计了一个原始的Inception 单元结构。

在设计Inceptions单元时,假设前一层网络的每个单元对应于输入照片的某些区域,而且这些单元按滤波器(卷积)分组。那么可以用一层1*1的卷积网络覆盖那些单个神经单元的簇,类似3*3、5*5的卷积网络覆盖相邻空间里聚集的更大的簇。

其具体构成如下图所示:

该结构具有如下的一些特征:

1 采用不同大小的卷积核(卷积是稠密的矩阵运算),对应不同大小的感受视野域(网络结构稀疏),最后拼接到一起融合了不同尺度的特征(不同层面的特征间稀疏)。

2 卷积核分别采用1、3、5主要是方便对齐拼接时的输出维度,设定卷积步长stride=1之后,只要分别设定pad=0、1、2就保证了对齐(输出维数:W-1+2*0, W-3+2*1, W-5+2*2)。

3 使用平行的pooling,因为历史经验显示pooling挺有效果。

4 GoogLeNet网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大(相邻空间聚集度越低),因此随着层数的增加,Inception单元中3x3和5x5卷积的比例也要增加。

5 大量使用的1*1卷积压缩多个filter提取的特征,是由图像特征提取过程中同个视窗的不同filter提取的是同一位置的不同维度的特征具有内部相关性保证的。

原始版本存在的问题:5*5卷积运算的计算量巨大(5*5 vs 3*3 vs 1*1),导致结构中左右子运算量差异很大而降低训练效率。因而提出一个改良后的Inception网络结构,在3*3 与5*5的卷积核前引入1*1的卷积核对输入降维。其具体构成如下图所示:

降维效果举例:

给定上一层输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。

假如先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

改良后的结构的优点是便于在对应的stage增加神经单元数而不显著影响计算复杂度。无处不用的降维操作有效减少了从上一层传递到当前层的数据规模。从而可以方便的增加网络的宽度、深度。

一般而言,一个Inception网络由上述类型的模块堆叠而成,在某些情况下,每两个步骤还会有最大池化层将网格分辨率减半(stride=2)。

4 训练与评估模型

整个模型被设计用于ILSVRC 竞赛。取得了分类误差@top-5=6.67%的最好成绩。 

模型使用了7个GoogLeNet模型的ensemble。每个模型都使用一致从初始化与学习率方法,同时样本抽样方法与训练样本顺序不一致。

网络的所有卷积运算使用Relu (rectified linear activation)激活函数.

输入为224*224d RGB,并减去了均值。

训练算法:async-sgd,  momentum=0.9。

学习率每隔8epochs减少4%。

构造样本策略:按截取8%-100%之间的均匀分布大小的面积,并且图片纵横比在3/4与4/3之间随机选择的方式采样各种尺寸的图像。

针对5W张验证样本太少的问题,将每张图片的较窄的边放缩到256\288\320\352 四种大小,再取变换后图片的左\中\右边的正方形区域(肖像则取上\中\下),再对每个正方形取其4角、正中间224*224、以及整体大小调整到224*224的块,再取每个块的镜像版本。从而每张图片得到4*3*6*2=144个样本。

最终ILSVRC竞赛的效果排名如下:


你可能感兴趣的:(神经网络,dnn,data,mining)