GoogleLeNet解析:Going deeper with convolutions

GoogleLeNet深度有22层,但是参数量却只有AlexNet的1/12。

为减小计算量并且增加模型宽度,google为此设计了一种名叫inception module的结构。

inception经历了从v1到v4的改进,下图是inception的原始结构。

GoogleLeNet解析:Going deeper with convolutions

该结构将1x1,3x3,5x5的卷积和3x3的最大池化操作堆叠在一起,即增加了网络的宽度,也增加了网络对多尺度的适应性。

但是5x5的卷积核计算量依然很大,并且会造成特征图的厚度很大。所以在3x3,5x5的卷积和3x3的最大池化前加入了1x1的卷积核,以达到降维的目的,这就是inception v1的结构。

GoogleLeNet解析:Going deeper with convolutions

这里举例说明1x1的卷积是如何减少参数量的。

假设,previous layer的输出是大小128x128x256,

经过192个5x5的卷积核之后(stride=1, pad=2),

根据公式(w-f+2p)/s+1计算,输出大小是128x128x192,

参数为256x5x5x192=1228800.

而如果在5x5的卷积前面增加一个64通道的1x1的卷积层,

那么输出大小依然是128x128x192,

但是参数量却是256x1x1x32+32x5x5x192=161792.

这一下就减少了七点几倍的参数量。

下图是基于inception构建的GoogleLeNet的网络结构(图片来自网络)。

GoogleLeNet解析:Going deeper with convolutions

可以看到网络中还增加了两个辅助分类器,是为了避免的很深的网络中梯度消失的问题。

论文中的网络细节如下:

GoogleLeNet解析:Going deeper with convolutions

实验结果

GoogleLeNet解析:Going deeper with convolutions