2014年Google提出了多尺度、更宽的Inception网络结构,不仅比同期的VGG更新小,而且速度更快。Xception则将Inception的思想发挥到了极致,解开了分组卷积和大规模应用的序幕。
本文将详细讲述
- Inception v1的多尺度卷积和Pointwise Conv
- Inception v2的小卷积核替代大卷积核方法
- Inception v3的卷积核非对称拆分
- Bottleneck卷积结构
- Xception的Depthwise Separable Conv深度可分离卷积
多尺度卷积
Inception 最初提出的版本主要思想是利用不同大小的卷积核实现不同尺度的感知,网络结构图如下:
Inception Module基本组成结构有四个成分。1*1卷积,3*3卷积,5*5卷积,3*3最大池化。最后对四个成分运算结果进行通道上组合,这就是Inception Module的核心思想:利用不同大小的卷积核实现不同尺度的感知,最后进行融合,可以得到图像更好的表征。
使用了多尺度卷积后,我们的网络更宽了,同时也提高了对于不同尺度的适应程度。
Pointwise Conv
使用了多尺度卷积后,我们的网络更宽了,虽然提高了对于不同尺度的适应程度,但是计算量也变大了,所以我们就要想办法减少参数量来减少计算量,于是在 Inception v1 中的最终版本加上了 1x1 卷积核,网络结构图如下:
图a与图b的区别就是是否使用了 1x1 卷积进行压缩降维
使用1x1 卷积核主要目的是进行压缩降维,减少参数量,这就是Pointwise Conv,简称PW。
举个例子,假如输入的维度是 96 维,要求输出的维度是 32 维,二种计算方式:
- 第一种:用3x3的卷积核计算,参数量是
3*3*96*32=27648
(为了方便计算,这里忽略偏置bias,后面的计算均如此) - 第二种:先用1x1卷积核将输出通道降维到32,参数量是
1*1*96*32=3072
,再用3x3卷积计算输出,参数量是3*3*32*32=9216
,总的参数量是3072+9216=12288
从结果12288/27648=0.44
可以看到,第二种方式的参数量是第一种方式的0.44倍,大大减少了参数量,加快训练速度。
由Inception Module组成的GoogLeNet(Inception V1):