Inception模型及其实现
Inception模型的出现改变了CNN的发展趋势。在Inception模型出现之前,CNN经历了LeNet-5、AlexNet、VGGNet等模型,但是随着网络的发展,为了追求更好的性能,网络越来越深,参数越来越多,且全连接层的参数量占据了很大的比重,如AlexNet模型参数有6000万个左右,最后的全连接层就有3800万个左右的参数,占了总参数数量的一半多。第一次提出Inception模型的GoogLeNet网络的最后并没有全连接层,而是采用了全局平均值池化,所以参数的数量大大减少。
1.Inception模型介绍
Inception模型的思想和之前的卷积思想不同,LeNet-5模型是将不同的卷积层通过串联连接起来,但是Inception模型是通过串联+并联的方式将卷积层连接起来的。Inception模型是对输入图像并行地执行多个卷积运算或池化操作,并将所有输出结果拼接为一个非常深的特征图,且不同大小卷积核的卷积运算可以得到图像中的不同信息,处理获取到的图像中的不同信息可以得到更好的图像特征。
Inception模型的主要成员包括Inception v1、Inception v2、Inception v3、Inception v4和Inception-ResNet。
下图给出了Inception模块的一个单元结构示意图。
Inception模块的一个单元结构示意图
对于输入矩阵,分别经过1×1卷积核、3×3卷积核、5×5卷积核以及3×3的最大值池化后,由于采用的padding方式为“SAME”,也就是使用全0填充且步长为1,所以输出矩阵的长宽与输入矩阵相同,然后将4个输出矩阵纵向拼接在一起,以得到一个更深的矩阵。
由于一个Inception模块要进行多次运算,所以需要耗费大量的计算资源。为了实现降维,降低运算成本,在3×3、5×5的卷积运算前,在最大值池化的运算后,加入1×1的卷积核。