『GoogLeNet』inception

1. 基本的Inception

『GoogLeNet』inception

2. Inception V1

『GoogLeNet』inception

3. 1×1卷积的作用

  • 降低参数数量,例如
    • 输入:20×20×20
    • 卷积:8个5×5,stride=1,padding=0
    • 参数个数:20×5×5×8=4000
  • 加入1×1卷积后
    • 输入:20×20×20
    • 1×1卷积:4个1×1,stride=1,padding=0
    • 1×1卷积输出:4×20×20
    • 卷积:8个5×5,stride=1,padding=0
    • 参数个数:4×1×1×20+8×5×5×4=880

个人觉得针对通道数过多比较适合

【注】每个卷积后都有BatchNorm操作的

4. Inception V2

『GoogLeNet』inception

任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。

GoogLeNet团队发现在网络的前期使用这种分解效果并不好,在中度大小的特征图(feature map)上使用效果才会更好(特征图大小建议在12到20之间)

5. 降低特征图大小

一般情况下,如果想让图像缩小,可以有如下两种方式:

『GoogLeNet』inception

先池化再作Inception卷积,或者先作Inception卷积再作池化。

  • 方法一(左图)先作pooling(池化)会导致特征表示遇到瓶颈(特征缺失)
  • 方法二(右图)是正常的缩小,但计算量很大

为了同时保持特征表示且降低计算量,将网络结构改为下图,使用两个并行化的模块来降低计算量(卷积、池化并行执行,再进行合并)

『GoogLeNet』inception

6. Inception V3

Inception V3一个最重要的改进是分解(Factorization),将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。

7. Inception V4

Inception V4研究了Inception模块与残差连接的结合。ResNet结构大大地加深了网络深度,还极大地提升了训练速度,同时性能也有提升

Inception V4主要利用残差连接(Residual Connection)来改进V3结构,得到Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4网络

ResNet的残差结构如下:

『GoogLeNet』inception

将该结构与Inception相结合,变成下图:

『GoogLeNet』inception

通过20个类似的模块组合,Inception-ResNet构建如下:

『GoogLeNet』inception

8. summary

inception模块说白了就是并行卷积池化,并且用多层小卷积替代单纯的大卷积,可以和残差网络结合一起用,具体并行多少个卷积,什么样的卷积池化根据实际来设计