搜索
您的当前位置:首页GoogLeNet学习心得

GoogLeNet学习心得

来源:小侦探旅游网
GoogLeNet学习⼼得

综述:

googlenet和vgg是2014年imagenet竞赛的双雄,这两类模型结构有⼀个共同特点是go deeper。跟vgg不同的是,googlenet做了更⼤胆的⽹络上的尝试⽽不是像vgg继承了lenet以及alexnet的⼀些框架,该模型虽然 有22层,但⼤⼩却⽐alexnet和vgg都⼩很多,性能优越。

⽂章提出获得⾼质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),但是这⾥⼀般设计思路的情况下会出现两个缺陷(1.参 数太多,容易过拟合,若训练数据集有限;2.⽹络越⼤计算复杂度越⼤,难以应⽤;3.⽹络越深,梯度越往后穿越容易消失,难以优化模型)。 googlenet的主要思想就是围绕这两个思路去做的:

1.深度,层数更深,⽂章采⽤了22层,为了避免上述提到的梯度消失问题,googlenet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。

2.宽度,增加了多种核 1x1,3x3,5x5,还有直接max pooling的,但是如果简单的将这些应⽤到feature map上的话,concat起来的featuremap厚度将会很⼤,所以在googlenet中为了避免这⼀现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作⽤。

综上googlent有两个最重要的创新点分别是为了解决深度和宽度受限来设计的,由于googlenet的两个辅助loss的限制,很多⽂章拿basemodel的时候⽐较偏向与vgg。

优点:把整个Inception的⽹络架构画出来,更直观感受⽹络结构

1.宽度。总共是9个Inception的模块,每个模块除了num_output的个数不⼀样之外,其他的都是相同的。每⼀个卷积后都要做relu操作。2.深度。除了在最后的全连接计算了loss和top_1,top_5的准确率之外,还在inception_4a/output和inception_4d/output之后进⾏池化卷积全连接,最后计算loss和top_1,top_5。

个⼈感觉这种⽅式,⼀⽅⾯可以⽐较不同深度下的loss和准确率,同时,这些中间层的backward computation会对整个起到调整梯度的作⽤,这样防⽌当层次过深时的梯度消失的问题。

Overview

本⽂提出了⼀种深度卷积神经⽹络, 代号为Inception(是不是让⼈想到《盗梦空间》中⼀层层的梦境呢),获得了ILSVRC14⽐赛的冠军,刷新了图像分类与检测的性能记录。该⽹络 的特点是提升了计算资源的利⽤率,可以在保持⽹络计算资源不变的前提下,通过⼯艺上的设计来增加⽹络的宽度和深度,基于Hebbian法则和多尺度处理来 优化性能。在ILSVRC2014中提交的版本叫GoogLeNet,共有22层。

GoogLeNet⽤的参数⽐ILSVRC2012的冠军AlexNet少12倍,但准确率更⾼。现在的⽬标检测例如R-CNN,结合了深度架构和传统计算机视觉⽅法进⾏⽬标检测。

由于移动设备和嵌⼊式计算的发展,的效率很重要,⼀个好的算法,不仅要具有学术性,也要能⽤于实际中。

Motivation and High Level Considerations

直接提升深度卷积⽹络性能的⽅法是从深度与宽度两⽅⾯增加尺⼨,但⼤尺⼨的⽹络需要更多参数,容易导致过拟合,尤其是数据集不够⼤的时候,直接增加 尺⼨的另⼀个弊端是需要⼤量计算资源。根本的解决办法是将全连接层变为稀疏链接层,⽽⾮均匀稀疏⽹络的弊端是计算效率不⾼,可以采⽤将多个稀疏矩阵合并成 相关的稠密⼦矩阵的⽅法来解决。

Architectural Details

Inception架构的主要思想是找出如何让已有的稠密组件接近与覆盖卷积视觉⽹络中的最佳局部稀疏结构。现在需要找出最优的局部构造,并且重复 ⼏次。之前的⼀篇⽂献提出⼀个层与层的结构,在最后⼀层进⾏相关性统计,将⾼相关性的聚集到⼀起。这些聚类构成下⼀层的单元,且与上⼀层单元连接。假设前 ⾯层的每个单元对应于输⼊图像的某些区域,这些单元被分为滤波器组。在接近输⼊层的低层中,相关单元集中在某些局部区域,最终得到在单个区域中的⼤量聚 类,在下⼀层通过1x1的卷积覆盖。

也可以通过在更⼤的patch上卷积,覆盖少量的在空间上更⼤的聚类,区域越来越⼤,patch数越来越少。

为了避免patch校准问题,现在的滤波器⼤⼩限制在1x1,3x3和5x5,主要是为了⽅便,不是必要的。这样的Inception模块如下:

另外,在pooling层添加⼀个额外的并⾏pooling路径⽤于提⾼效率。

Inception模块之间互相堆放,它们的输出相关性统计⼀定会改变:⾼层次提取⾼抽象性的特征,空间集中性会降低,因此3x3和5x5的卷积核在更⾼层会⽐较多。

采⽤上⾯的模块有⼀个⼤问题是在卷积层顶端由于滤波器太多,即使是5x5的卷积都会让计算开销过分昂贵。当pooling单元加⼊之后这个问题更加明显: 输出滤波器的数量等于前⼀步中滤波器的数量。pooling层的输出和卷积层的输出融合会导致输出数量逐步增长。即使这个架构可能包含了最优的稀疏结构, 还是会⾮常没有效率,导致计算没经过⼏步就崩溃。

因此有了架构的第⼆个主要思想:在计算要求增加很多的地⽅应⽤维度缩减和预测。即,在3x3和5x5的卷积前⽤⼀个1x1的卷积⽤于减少计算,还⽤于修正线性激活。如下图所⽰,左边是加⼊维度缩减之前的,右边是加⼊维度缩减之后的。

技术上的做法是,保持低层为传统卷积⽅式不变,只在较⾼的层开始⽤Inception模块。

这种架构的两个主要优点:⼀是允许显著增加每⼀步的单元数⽬,计算复杂性不会不受控制。降维的普遍使⽤能保护最后⼀步到下⼀层的⼤量输⼊滤波器,在对它们 ⽤⼤的patch size卷积前⾸先降维。⼆是视觉信息在不同的尺度上进⾏处理然后聚合,这样下⼀步可以同时从不同尺度提取特征。

采⽤了Inception模块的⽹络要⽐没有采⽤Inception模块的同样架构的⽹络快2~3倍。

GoogLeNet

采⽤Inception架构的GoogLeNet如下所⽰:

总体结构:

1.包括Inception模块的所有卷积,都⽤了修正线性单元(ReLU); 2.⽹络的感受野⼤⼩是224x224,采⽤RGB彩⾊通道,且减去均值;

3.#3x3 reduce和#5x5 reduce分别表⽰3x3和5x5的卷积前缩减层中1x1滤波器的个数;pool proj表⽰嵌⼊的max-pooling之后的投影层中1x1滤波器的个数;缩减层和投影层都要⽤ReLU;

4.⽹络包含22个带参数的层(如果考虑pooling层就是27层),独⽴成块的层总共有约有100个;

5.⽹络中间的层次⽣成的特征会⾮常有区分性,给这些层增加⼀些辅助分类器。这些分类器以⼩卷积⽹络的形式放在Inception(4a)和Inception(4b)的输出上。在训练过程中,损失会根据折扣后的权重(折扣权重为0.3)叠加到总损失中。GoogLeNet ⽹络结构图:

辅助分类器的具体细节:

1.均值pooling层滤波器⼤⼩为5x5,步长为3,(4a)的输出为4x4x512,(4d)的输出为4x4x528; 2.1x1的卷积有⽤于降维的128个滤波器和修正线性激活; 3.全连接层有1024个单元和修正线性激活; 4.dropout层的dropped的输出⽐率为70%;

5.线性层将softmax损失作为分类器(和主分类器⼀样预测1000个类,但在inference时移除)。

Training Methodology

利⽤分布式系统和数据并⾏来训练⽹络,虽然实现时只⽤了CPU,但是是可以⽤个别⾼端的GPU⼀周达到收敛的。采⽤异步随机梯度下降,动量为0.9,学习率每8个epoch下降4%。⽤Polyak平均来创建最后的模型。

图像采样的patch⼤⼩从图像的8%到100%,选取的长宽⽐在3/4到4/3之间,光度扭曲也有利于减少过拟合,还使⽤随机插值⽅法结合其他超参数的改变来调整图像⼤⼩。

ILSVRC 2014 Classification Challenge Setup and Results

ILSVRC 2014的分类任务有1000个⼦类,120万训练图像,5万验证图像,10万测试图像,每个图像中有⼀个ground truth,性能测量是基于得分最⾼的分类器预测,常⽤指标为top-1准确率和top-5错误率。 测试时的⼀些⼩技巧:

1.训练了7个⽹络,初始化和权重都相同,只是采样⽅法和随机输⼊图像不同;

2.将图像的短边分别缩放成256、288、320、352这样4种尺度。取图像的左中右块(或上中下块)。每块取四个⾓和中间的224x224的裁剪, 和将这个块缩放到224x224,以及它们的镜像。这样每个图像有4x3x6x2=144个,但可能实际中不需要这么多; 3.softmax概率在多个裁剪和在所有分类器上取平均来获得最后的预测,简单的平均结果最好。

最终的top-5错误率在验证集和测试集上都是6.67%,获得了第⼀。与其他⽅法相⽐的提⾼如下所⽰:

以及分析了多种测试选项:

ILSVRC 2014 Detection Challenge Setup and Results

检测任务的标准是检测出来的bounding box与groundtruth的交叠⽐⼤于50%且是正确的,图像中可能包含多个⽬标或者不包含⽬标,尺度可能很⼤可能很⼩,采⽤的结果报告⽅式是mAP。

采⽤的⽬标检测⽅法与R-CNN很像,但增加了Inception模块作为区域分类器。结合了⽤multi-box的⽅法和Selective Search来提⾼boundingbox的召回率,没有⽤bounding box回归。 下图是⼀些⽐赛结果:下图是单个模型的性能⽐较: 附:⼏个著名的CNN⽹络模型链接

因篇幅问题不能全部显示,请点此查看更多更全内容

Top