天天看点

深度学习 1x1卷积核的作用一、简述二、1x1卷积核的作用三、参考博文

一、简述

Inception v1(又名GooLeNet)、VGG等神经网络结构中加入了 1x1卷积核操作,为什么要进行1x1卷积核呢?使用 1x1卷积核其实也可以看成是一种全连接。 接下来介绍一下使用 1x1卷积核 有哪些作用。

二、1x1卷积核的作用

1、降维/升维

1x1卷积核可以通过控制卷积核数量实现降维或升维。

深度学习 1x1卷积核的作用一、简述二、1x1卷积核的作用三、参考博文

卷积层流程图

从卷积层流程图中可以清楚的看到 卷积后的特征图通道数与卷积核的个数是相同的。所以,如果想要升维或降维,只需要通过修改卷积核的个数即可。

举例:如果input的通道个数是3,卷积核个数为4,那么特征图的通道数就为4,达到了升维效果。 如果input的通道个数是3,卷积核个数为1,那么特征图的通道数就为1,达到了降维效果。

而1x1卷积核 与 3x3 或 5x5 等尺寸更大的卷积核相比有什么优势呢?

优势就在于 1x1卷积核 会使用更少的权重参数数量。

举例:Inception v1(又名GooLeNet)的神经网络结构图:

深度学习 1x1卷积核的作用一、简述二、1x1卷积核的作用三、参考博文

左侧是未加入 1x1卷积核的 Inception,右侧是通过加入 1x1卷积核来实现降维的 Inception。接下来解释这张图:

  • 输入层特征维数: 28x28x192
  • 三种尺寸卷积核大小及卷积通道数分别为 1x1x64 、 3x3x128 、5x5x32
  • 右侧图(b)中,在 3x3 卷积之前增加了 1x1的卷积核,且卷积核个数为96 ; 5x5 卷积之前增加了 1x1的卷积核,且卷积核个数为16; 3x3 max pooling后增加了1x1的卷积核,且卷积核个数为32。

左侧图(a)中间层所需参数数量: (1x1x192x64)+ (3x3x192x128) + (5x5x192x32) = 387072

右侧图(b)中间层所需参数数量: (1x1x192x64) + (1x1x192x96) + (1x1x192x16) + (3x3x96x128) + (5x5x16x32) + (1x1x192x32) = 163328

由此可见,右侧图(b)中网络架构中间层所有参数量比左侧图(a)缩小了一大半。

2、增加网络深度(增加非线性)

每使用 1x1卷积核,及增加一层卷积层,所以网络深度得以增加。 而使用 1x1卷积核后,可以保持特征图大小与输入尺寸相同,卷积层卷积过程会包含一个激活函数,从而增加了非线性。

在输入尺寸不发生改变的情况下而增加了非线性,所以会增加整个网络的表达能力。

3、 跨通道信息交互(通道的变换)

使用1x1卷积核,实现降维和升维的操作其实就是 channel 间信息的线性组合变化。

比如:在尺寸 3x3,64通道个数的卷积核后面添加一个尺寸1x1,28通道个数的卷积核,就变成了尺寸3x3,28尺寸的卷积核。 原来的64个通道就可以理解为跨通道线性组合变成了28通道,这就是通道间的信息交互。

注意:只是在通道维度上做线性组合,W和H上是共享权值的滑动窗口。

三、参考博文

https://zhuanlan.zhihu.com/p/40050371?ivk_sa=1024320u

https://blog.csdn.net/a1154761720/article/details/53411365

https://blog.csdn.net/briblue/article/details/83151475

继续阅读