[关闭]
@Team 2018-06-03T14:05:00.000000Z 字数 1197 阅读 1014

【随笔记录】1*1卷积核的作用

石文华


之前只是知道1x1的卷积核用在Inception模块中具有降维的作用,并没有认真的思考它是怎么样实现降维的,以及它还有哪些作用。于是查阅了一些资料,并记录了它的一些作用,如下:
1、灵活的控制特征图的深度
1x1的卷积核由于大小只有1x1,所以并不需要考虑像素跟周边像素的关系,它主要用于调节通道数,对不同的通道上的像素点进行线性组合,然后进行非线性化操作,可以完成升维和降维的功能,如下图所示,选择2个1x1大小的卷积核,那么特征图的深度将会从3变成2,如果使用4个1x1的卷积核,特征图的深度将会由3变成4。
image.png-333kB

2、减少参数
前面所说的降维,其实也是减少了参数,因为特征图少了,参数也自然跟着就减少,相当于在特征图的通道数上进行卷积,压缩特征图,二次提取特征,使得新特征图的特征表达更佳。接着再通过两个例子来看看它是如何减少参数的。
(1)在GoogleNet的3a模块中,假设输入特征图的大小是28*28*192,1x1卷积通道为64,3x3卷积通道为128,5x5卷积通道为32,如下图所示:
image.png-144.6kB
左边的卷积核参数计算如下:
192 × (1×1×64) +192 × (3×3×128) + 192 × (5×5×32) = 387072
而右图的3x3卷积层前加入通道数为96的1x1的卷积,5x5的特征图后面加入通道数为16的1x1的卷积,参数的计算如下:
192 × (1×1×64) +(192×1×1×96+ 96 × 3×3×128)+(192×1×1×16+16×5×5×32)= 157184
(2)在ResNet模块中,假设输入的特征图的维度是w*h*256,并且最后要输出的也是256个特征图,如下图所示:
image.png-67.6kB
左边的计算如下:
w*h*256*3*3*256 =589824*w*h
右边的计算如下:
w*h*256*1*1*64 + w*h*64*3*3*64 +w*h*64*1*1*256 = 69632*w*h
结果相差大概8.5倍。
3、实现了跨通道的信息组合,并增加了非线性特征
使用1*1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3*3,64channels的卷积核前面添加一个1*1,28channels的卷积核,就变成了3*3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互。因为1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep,增加非线性特性。

参考:
https://blog.csdn.net/a1154761720/article/details/53411365/
https://www.zhihu.com/question/56024942/answer/369745892

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注