在深度学习的过程中,发现了很多网络结构中都存在了有1x1卷积的存在。也就是说,之前我们通常选择的卷积核都是3x3或者5x5大小的,作用都是用来提取特征,那么这么使用的1x1卷积核有什么作用呢,表面上看来是不是这个卷积核在输入上滑动,就相当于给输入元素乘以一个系数,逐格逐元素提取特征呢。其实并非这么简单。
另外,1x1卷积这个方法也是现在比较火的方法,如 googLeNet、ResNet、DenseNet ,中得到了非常广泛的应用。特别是在 googLeNet 的 Inception中,发挥的淋漓尽致。
它的作用总结下来大致分为两个方面:
1、改变通道
(1)升 / 降维
(2)数据融合
(3)减少计算量
2、非线性操作

1、改变通道

通道的概念这里在再复习一下。
在彩色图像中通道RGB通道为 3 ,也就是(红、黄、蓝)三个通道。比如一张彩色输入图片为 128x128x3.。这里可能会问,那后面卷积之后出现的(比如说)64x64x32 后面的通道为32吗?
这里的数据就不再是最开始输入的图像数据了,这里通过卷积之后就变成了特征数据,后面的通道32也不再是表示什么红黄蓝之类的东西了,而是与之卷积的卷积核的数量。
(1)降维 / 升维
很容易知道由于1x1的卷积不会改变原始数据的 heightwidth
改变通道的第一个最直观的结果就是可以将原本的数据量进行增加和减少。其实某种意义上来说,这里升维和降维并不严谨,其实它仅仅改变了 height x width x channels 中的 channels 这一个维度的大小。
(2)数据融合
在 Resnet 残差网络中,数据要进行相加,但有时候并不能保证每组数据的通道大小相匹配,这里就可以使用 1x1 卷积来使数据在各个维度上进行匹配,从而对两个数据进行计算。
(3)减少计算量
在 GoogLeNet 中,Inception中的卷积多数先进行了 1×1 卷积操作,再进行其他卷积操作,这样其实可以减少计算量。某些程度上避免过拟合。
比如说,Inception模块中,我们如果不使用1x1卷积,直接使用提取特征的5x5卷积
一个28x28x192的feature map通过 5x5x32卷积后,需要计算的量为:
(28x28x32)x(5x5x192)次,大概要1亿次左右。
而加入之后:
先使用一个1x1x16的卷积核卷积,再使用5x5x32卷积。
就变成了,(28x28x16)x (1x1x192)+ (28x28x32) x (5x5x16)大概要1000多万次。
这样一来计算量就缩小了10倍。很大程度上避免了过拟合现象的发生。

2、非线性操作

在Resnet残差网络中,卷积核进行相关计算后,要经过Relu**函数进行非线性转换最后再输出结果。相当于多进行了一次**操作,从而提升了网络的表达能力,同时它也是模型变得更加的复杂。
CNN中的1x1卷积

相关文章: