未经同意,不得转载
一、1x1卷积核的作用
(1)实现跨通道的交互和信息整合
使用1x1卷积核,其实就是对不同channel间的信息做线性组合的一个变换过程。比如输入为3x3x3的feature map,后面添加一个1x1x3,64 channels的卷积核,就变成了3x3x64的feature map,原来的3个channels就可以理解为跨通道线性组合变成了64 channels,这就是通道间的信息交互。过程如下图所示:
(2)增加非线性特性
1x1卷积核,利用后接的非线性激活函数可以在保持feature map尺度不变的前提下大幅增加非线性特性,把网络做的很深。
(3)减少模型参数,降低计算量
假设输入feature map的维度为256维,要求输出维度也是256维。有以下两种操作:
- 256维的输入直接经过一个3×3×256的卷积层,输出一个256维的feature map,那么参数量为:
256×3×3×256 = 589824
- 256维的输入先经过一个1×1×64的卷积层,再经过一个3×3×64的卷积层,最后经过一个1×1×256的卷积层,输出256维,参数量为:
(256×1×1×64)+(64×3×3×64)+(64×1×1×256)= 69632
可以看到,参数量减少了大约8.5倍。
二、为什么2个3x3可以代替1个5x5的卷积核
在卷积神经网络中,一般情况下,卷积核越大,感受野(receptive field)越大,看到的图片信息越多,所获得的全局特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。
于是在VGG、Inception网络中,利用两个3×3卷积核的组合替换一个5×5卷积核,这样的好处是:
(1)在具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果;
(2)降低了参数量(从5×5×1 x channels 到 3×3×2 x channels)。
那么为什么可以这样来替换呢?
从卷积的定义可以知道,一张图像经过卷积后的尺寸大小计算方式为:
(W - F + 2P)/ S + 1
其中,W是输入尺寸,F是卷积核大小,P是填充尺寸,S是步长
那么,假设输入是28x28:
- 使用5x5的卷积核对其卷积,步长(stride)为1,填充(padding)为0,得到的结果是:
(28-5 + 0x2) / 1 + 1=24
- 使用2层3x3的卷积核,同样步长(stride)为1,填充(padding)为0
第一层3x3:得到的结果是(28-3 + 0x2)/ 1 + 1=26
第二层3x3:得到的结果是(26-3 + 0x2)/ 1 + 1=24
所以最终结果是2层3x3和1个5x5的卷积核得到的feature map大小是一样的。
同理也能得出三个3x3的卷积核可以替换一个7x7的卷积核。