作用:
跨通道的特征整合特征通道的升维和降维减少卷积核参数(简化模型)1 跨通道的特征整合
如果当前层和下一层都只有一个通道那么1×1卷积核确实没什么作用,但是如果它们分别为m层和n层的话,1×1卷积核可以起到一个跨通道聚合的作用,所以进一步可以起到降维(或者升维)的作用,起到减少参数的目的。
这里通过一个例子来直观地介绍1×1卷积。输入6x6x1的矩阵,这里的1×1卷积形式为1x1x1,即为元素2,输出也是6x6x1的矩阵。但输出矩阵中的每个元素值是输入矩阵中每个元素值x2的结果。
上述情况,并没有显示1×1卷积的特殊之处,那是因为上面输入的矩阵channel为1,所以1×1卷积的channel也为1。这时候只能起到升维的作用。这并不是1×1卷积的魅力所在。
让我们看一下真正work的示例。当输入为6x6x32时,1×1卷积的形式是1x1x32,当只有一个1×1卷积核的时候,此时输出为6x6x1。此时便可以体会到1×1卷积的实质作用:降维。当1×1卷积核的个数小于输入channels数量时,即降维[3]。
注意,下图中第二行左起第二幅图像中的黄色立方体即为1x1x32卷积核,而第二行左起第一幅图像中的黄色立方体即是要与1x1x32卷积核进行叠加运算的区域。
其实1×1卷积,可以看成一种全连接(full connection)。
第一层有6个神经元,分别是a1—a6,通过全连接之后变成5个,分别是b1—b5,第一层的六个神经元要和后面五个实现全连接,本图中只画了a1—a6连接到b1的示意,可以看到,在全连接层b1其实是前面6个神经元的加权和,权对应的就是w1—w6,到这里就很清晰了:
第一层的6个神经元其实就相当于输入特征里面那个通道数:6,而第二层的5个神经元相当于1*1卷积之后的新的特征通道数:5。w1—w6是一个卷积核的权系数,若要计算b2—b5,显然还需要4个同样尺寸的卷积核[4]。
上述列举的全连接例子不是很严谨,因为图像的一层相比于神经元还是有区别的,图像是2D矩阵,而神经元就是一个数字,但是即便是一个2D矩阵(可以看成很多个神经元)的话也还是只需要一个参数(1*1的核),这就是因为参数的权值共享。
注:1×1卷积一般只改变输出通道数(channels),而不改变输出的宽度和高度
2 降维/升维
由于 1×1 并不会改变 height 和 width,改变通道的第一个最直观的结果,就是可以将原本的数据量进行增加或者减少。这里看其他文章或者博客中都称之为升维、降维。但我觉得维度并没有改变,改变的只是 height × width × channels 中的 channels 这一个维度的大小而已[5]。
图像来自知乎ID: YJango[6]
3 加非线性
1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。
备注:一个filter对应卷积后得到一个feature map,不同的filter不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuron[7]。
4 跨通道信息交互(channal 的变换)
例子:使用1×1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3×3,64channels的卷积核后面添加一个1×1,28channels的卷积核,就变成了3×3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互[7]。
注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window
5 减少计算量
以下图为例,我们可以看到,计算量明显减少。
6 1×1卷积核应用 Inception
这一点健忘的小海豚童鞋讲的很清楚。1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中yjdsh心灵美的西装的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。
进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。
以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。
同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。
而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)[8]。
ResNet
ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构[8]。
参考
[1] 1*1的卷积核与Inception:https://blog.csdn.net/a1154761720/article/details/53411365
[2] 《Network in network》:https://arxiv.org/abs/1312.4400
[3]lldddDeepLearning.ai视频教程 《
Networks in Networks and 1×1 Convolutions》
[4] 如何理解卷积神经网络中的1*1卷积
[5]【CNN】卷积神经网络中的 1*1 卷积 的作用:https://blog.csdn.net/sscc_learning/article/details/79863922
[6] https://www.zhihu.com/question/56024942/answer/194997553
[7] 1×1 卷积核的作用?(附实例):https://zhuanlan.zhihu.com/p/35814486
[8] 1X1卷积核到底有什么作用呢?:http://www.caffecn.cn/?/question/136
扩展知乎话题:卷积神经网络中用1*1 卷积有什么作用或者好处呢?:https://www.zhihu.com/question/56024942
飞艇稳赚不赔的打法积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。
以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。
同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。
而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)[8]。
ResNet
ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构[8]。
参考
[1] 1*1的卷积核与Inception:https://blog.csdn.net/a1154761720/article/details/53411365
[2] 《Network in network》:https://arxiv.org/abs/1312.4400
[3]lldddDeepLearning.ai视频教程 《
Networks in Networks and 1×1 Convolutions》
[4] 如何理解卷积神经网络中的1*1卷积
[5]【CNN】卷积神经网络中的 1*1 卷积 的作用:https://blog.csdn.net/sscc_learning/article/details/79863922
[6] https://www.zhihu.com/question/56024942/answer/194997553
[7] 1×1 卷积核的作用?(附实例):https://zhuanlan.zhihu.com/p/35814486
[8] 1X1卷积核到底有什么作用呢?:http://www.caffecn.cn/?/question/136
扩展知乎话题:卷积神经网络中用1*1 卷积有什么作用或者好处呢?:https://www.zhihu.com/question/56024942