1*1卷积核的作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1*1卷积核的作用相关的知识,希望对你有一定的参考价值。

参考技术A (作用1)

(作用2)
1、1x1的卷积核(可能)引起人们的重视是在NIN的结构中,利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用跨通道的pooling的角度解释,认为论文中剔除的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1x1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积后面接了两个cccp层(其实就是解了两个1x1卷积层)。
2、进行降维和升维引起人们重视的(可能)是在GoogleNet里。对于每一个inception模块(如下图),原始模块是左图,右图中是加入了1x1卷积核进行降维的。

虽然左图中的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变很大,而右图加入1x1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就降下来了。以GoogleNet里的3a模块为例,输入的feature map是28x28x192,3a模块中的1x1卷积通道为64, 3x3卷积通道为128, 5x5卷积通道为32,如图左图结构,那么卷积核参数为:1x1x192x64+3x3x192x128 +5x5x192x32.

而右图对3x3和5x5卷积层前分别加入了通道数为96和16的1x1卷积层,参数就成了:1x1x192x64+(1x1x192x96+3x3x96x128)+(1x1x192x16+5x5x16x32)。整个参数大约减少了三分之一。

同时,在并行pooling层后面加入1x1卷积核后可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层就得到feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加入了通道为32的1x1卷积,使得输出的feature map数降到了256.

GoogleNet利用1x1的卷积降维后,得到了更为紧凑的网络结构,虽然总共22层,但是参数数量却只有8层的AlexNet的十二分之一(当然很大一部分原因可能是去掉了全连接层)。

近来十分热门的MSRA同样也利用了1x1卷积,并且是在3x3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都见笑,参数数量进一步减小,如下图所示。

具体参见: caffe cn

1×1卷积核的作用

问题:

  平时论文里经常会看到在网络里面加入1×1的卷积核,那么1×1卷积到底有什么用?其实1×1卷积与其他卷积没有什么不同,实际上就是一个简单的线性叠加。它具有和其它卷积核类似的作用,以下将详细列举。
  关键词:1×1卷积


一、实现跨通道的信息交互和整合:

  如何理解跨通道的信息交互和整合呢?首先还得从三维卷积的计算开始。

  如图所示,蓝色部分是一个7×7×n(维数)的Feature map,黄色块为3×3×3的卷积核,将卷积核对应到蓝色特征中可以得到一个红色阴影区域,举个具体的例子:假设卷积核所有的参数都为1。

  那么红色部分的数值=1×1+4×1+3×1+2×1+0×1+4×1+6×1+2×1+9×1+8×1+7×1+4×1+7×1+5×1+1×1+3×1+1×1+4×1+9×1+4×1+3×1+2×1+0×1+1×1+6×1+1×1+7×1+1×1=103
  紧接着将红色阴影区域向右移动一个单位计算下一个数值,并依次记录下来,得到一个新的特征层(即绿色部分所示),可以发现绿色部分的尺寸变小了,如果需要保持特征尺度不变,这个可以进行padding操作,即在外圈补充数值,可以补0也可以补1,以达到保持特征尺寸不变的目的。
  对于1×1×n大小的卷积核,经过上述的计算方法,可以把n个维度上的数字信息线性组合起来,因此它实现了跨通道(跨维度)的信息交互和整合。

二、降维或升维


  根据卷积核的卷积次数,也可以认为是filter的个数,因为一个卷积核就代表一个filter,进行n次卷积就代表了执行n次滤波操作。完整的执行一轮卷积后会得到一个新的feature map,将这n个feature map堆叠起来(这里可以想象成一个搭积木的过程),这样就可以得到一个n维的特征。降维或升维的过程可由下图清晰的表述。(图源自网络,侵删)

  图左是完整执行了两次滤波操作后的结果,图右是完整执行了四次滤波的结果。其中降维的好处就是减少计算量,下面可以用一个例子来证明:


  上图为未进行1×1卷积操作的结果,下图为执行了1×1卷积操作的结果,可以发现他们最终得到的特征都是30×40×55,但是他们的乘法计算量却相差很大。
  上图的乘法计算量=5×5×200×(30×40)×55(个)=330000000
  而下图的乘法计算量是1×1×200×(30×40)×20(个)+5×5×20×(30×40)×55(个)=37800000
  可以发现37800000/330000000=0.114545…,增加1*1卷积后显著减少了计算量。这种结构也称为瓶颈结构可能有人会问:这样子大幅度的缩小模型的规模会不会影响到网络的性能?其实很多学者在论文中都用事实证明了,只要合理构建瓶颈结构,既可以显著缩小模型规模,又不会降低网络的性能,从而大量减少了计算,加快模型收敛。

三、增加非线性特性:

  1×1的卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。
  Tip:一个filter对应卷积后得到一个feature map,不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征。

四、放在网络的最后可以当成全连接层来理解


  如图所示,b1=a1×w1+a2×w2+…+a6×w6,b1的数值就相当于文中开篇图中红色小立方体位置处的数值。这样一来,全连接的过程就相当于执行1×1卷积的过程了。

以上是关于1*1卷积核的作用的主要内容,如果未能解决你的问题,请参考以下文章

1*1卷积核的理解和作用

深度学习面试题19:1*1卷积核的作用

深度学习面试题19:1*1卷积核的作用

使用更小卷积核的作用——参数量和计算量的分析

1x1卷积层的作用

★tensorflow中“卷积”的深度解析