一、简述
Inception v1(又名GooLeNet)、VGG等神经网络结构中加入了 1×1卷积核操作,为什么要进行1×1卷积核呢?使用 1×1卷积核其实也可以看成是一种全连接。 接下来介绍一下使用 1×1卷积核 有哪些作用。
二、1×1卷积核的作用
1、降维/升维
1×1卷积核可以通过控制卷积核数量实现降维或升维。
卷积层流程图
从卷积层流程图中可以清楚的看到 卷积后的特征图通道数与卷积核的个数是相同的。所以,如果想要升维或降维,只需要通过修改卷积核的个数即可。
举例:如果input的通道个数是3,卷积核个数为4,那么特征图的通道数就为4,达到了升维效果。 如果input的通道个数是3,卷积核个数为1,那么特征图的通道数就为1,达到了降维效果。
而1×1卷积核 与 3×3 或 5×5 等尺寸更大的卷积核相比有什么优势呢?
优势就在于 1×1卷积核 会使用更少的权重参数数量。
举例:Inception v1(又名GooLeNet)的神经网络结构图:
左侧是未加入 1×1卷积核的 Inception,右侧是通过加入 1×1卷积核来实现降维的 Inception。接下来解释这张图:
- 输入层特征维数: 28x28x192
- 三种尺寸卷积核大小及卷积通道数分别为 1x1x64 、 3x3x128 、5x5x32
- 右侧图(b)中,在 3×3 卷积之前增加了 1×1的卷积核,且卷积核个数为96 ; 5×5 卷积之前增加了 1×1的卷积核,且卷积核个数为16; 3×3 max pooling后增加了1×1的卷积核,且卷积核个数为32。
左侧图(a)中间层所需参数数量: (1x1x192x64)+ (3x3x192x128) + (5x5x192x32) = 387072
右侧图(b)中间层所需参数数量: (1x1x192x64) + (1x1x192x96) + (1x1x192x16) + (3x3x96x128) + (5x5x16x32) + (1x1x192x32) = 163328
由此可见,右侧图(b)中网络架构中间层所有参数量比左侧图(a)缩小了一大半。
; 2、增加网络深度(增加非线性)
每使用 1×1卷积核,及增加一层卷积层,所以网络深度得以增加。 而使用 1×1卷积核后,可以保持特征图大小与输入尺寸相同,卷积层卷积过程会包含一个激活函数,从而增加了非线性。
在输入尺寸不发生改变的情况下而增加了非线性,所以会增加整个网络的表达能力。
3、 跨通道信息交互(通道的变换)
使用1×1卷积核,实现降维和升维的操作其实就是 channel 间信息的线性组合变化。
比如:在尺寸 3×3,64通道个数的卷积核后面添加一个尺寸1×1,28通道个数的卷积核,就变成了尺寸3×3,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
Original: https://blog.csdn.net/qq_27278957/article/details/120209780
Author: 高祥xiang
Title: 深度学习 1×1卷积核的作用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/628221/
转载文章受原作者版权保护。转载请注明原作者出处!