GoogleNet模型解读

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunpeng19960715/article/details/65938564

GoogleNet模型解读

GoogLeNet, 2014年ILSVRC挑战赛冠军,将Top5 的错误率降低到6.67%. 一个22层的深度网络.

一、特别之处

文章提出获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),但是这里一般设计思路的情况下会出现两个缺陷(1.参数太多,容易过拟合,若训练数据集有限;2.网络越大计算复杂度越大,难以应用;3.网络越深,梯度越往后穿越容易消失,难以优化模型)。

Inception结果的主要思路是用密集成分来近似最优的局部稀疏结构。如下图的a图所示,卷积核大小不同,感受野的大小也不同,最后的拼接意味着不同尺度性的融合。卷积核大小为1、3、5,是为了对齐方便,比如在卷积步长为1时,只要分别设定pad为0、1、2,则卷积后就可以得到相同维度的特征。

googlenet的主要思想就是围绕这两个思路去做的:

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

2.宽度,增加了多种核1x1,3x3,5x5,还有直接max pooling的,但是如果简单的将这些应用到feature map上的话,concat起来的feature map厚度将会很大,所以在googlenet中为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用。5*5的卷积核会带来巨大的计算量,所以采用1 * 1的卷积核进行降维。下面的B图,以下是googlenet用的inception可以称之为inception v1,如下图所示:

image

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

二、模型解读

image

caffe的实现和原来论文的模型是有不同的:
GoogLeNet共有22层,原始数据输入大小为224 * 224 * 3.

第一层卷积层 conv1 ,pad是3,64个特征,7 * 7 步长为2,输出特征为 112 * 112 * 64,然后进行relu,经过pool1(红色的max pool) 进行pooling 3 * 3的核,步长为2, [(112 - 3+1)/2]+1 = 56 特征为56 * 56 * 64 , 然后进行norm

第二层卷积层 conv2, pad是1,3 * 3,192个特征,输出为56 * 56 * 192,然后进行relu,进行norm,经过pool2进行pooling,3 * 3的核,步长为2 输出为28 * 28 * 192 然后进行split 分成四个支线

第三层开始时 inception module ,这个的思想受到使用不同尺度的Gabor过滤器来处理多尺度问题,inception module采用不同尺度的卷积核来处理问题。3a 包含 四个支线:

  • 1: 64个1 * 1的卷积核(之后进行RULE计算) 变成28 * 28 * 64

  • 2: 96个1 * 1的卷积核 作为 3 * 3卷积核之前的reduce,变成28 * 28 * 96, 进行relu计算后,再进行128个3 * 3的卷积,pad为1, 28 * 28 * 128

  • 3:16个1 * 1的卷积核 作为5 * 5卷积核之前的reduce,变成28 * 28 * 16, 进行relu计算后,再进行32个5 * 5的卷积,pad为2,变成28 * 28 * 32

  • 4:pool层,3 * 3的核,pad为1,输出还是28 * 28 * 192,然后进行32个 1 * 1的卷积,变成 28 * 28 * 32。

将四个结果进行连接,输出为28 * 28 * 256。

image

然后将3a的结果又分成四条支线,开始建立3b的inception module

3b

1:128个1 * 1的卷积核(之后进行RULE计算) 变成28 * 28 * 128

2:128个1 * 1的卷积核 作为3 * 3卷积核之前的reduce,变成28 * 28 * 128, 再进行192个3 * 3的卷积,pad为1, 28 * 28 *192,进行relu计算

3:32个1 * 1的卷积核 作为5 * 5卷积核之前的reduce,变成28 * 28 * 32, 进行relu计算后,再进行96个5 * 5的卷积,pad为2,变成28 28 96

4:pool层,3 * 3的核,pad为1,输出还是28 * 28 * 256,然后进行64个1 * 1的卷积,变成28 * 28 * 64。

三、参数

image

四、总结

GoogLenet采用Inception结构,不仅进一步提升了预测分类的准确率,而且极大地减少了参数量,分析原因如下:

1.采用了模块化的结果,方便增添和修改;
2.网络最后采用average pooling来代替全连接层,将top-1的成功率提高了0.6%;
3.网络移除了全连接层,但是保留了Dropout层;
4.网络增加了两个辅助的softmax用于向前传到梯度,避免梯度消失。

Reference

1.http://www.cnblogs.com/gkwang/p/4625410.html
2.http://blog.csdn.net/sunbaigui/article/details/50807362
3.《深度学习-caffe之经典模型详解与实战》

其他比较全面的解读:

1.http://blog.csdn.net/shuzfan/article/details/50738394 GoogLeNet系列解读

猜你喜欢

转载自blog.csdn.net/sunpeng19960715/article/details/65938564