在学习UNet网络结构时碰到了1x1卷积块,一开始不太理解,在阅读了一些博客后逐渐明白了,特此感谢:
为什么要分别使用11,33,1*1的卷积核进行降维和升维
一、卷积运算复习
在图像处理中,卷积操作通过在图像的矩阵上滑动卷积核来捕获局部特征。卷积核是一个矩阵,一般维度有1x1,3x3,5x5等。在滑动过程中,卷积核可以看做对原图像局部的加权求和,如下图计算:
对于原图为4x4矩阵,卷积核大小为3x3,特征图维度为2*2。其中
b
0
=
a
0
∗
w
0
+
a
1
∗
w
1
+
a
2
∗
w
2
+
a
3
∗
w
3
+
a
4
∗
w
4
+
a
5
∗
w
5
+
a
6
∗
w
6
+
a
7
∗
w
7
+
a
8
∗
w
8
b_0=a_0*w_0+a_1*w_1+a_2*w_2+a_3*w_3+a_4*w_4+a_5*w_5+a_6*w_6+a_7*w_7+a_8*w_8
b0=a0∗w0+a1∗w1+a2∗w2+a3∗w3+a4∗w4+a5∗w5+a6∗w6+a7∗w7+a8∗w8,后面以此类推。
这是示例运算,通常原图像存在多个通道,比如RGB三通道等,此时就要求卷积核的通道数与原图像要保持一致,且每一个卷积核对应一个特征图。如果我们想要提取图像的多个特征,就需要多个卷积核,且一个卷积核对应一个特征。举例来说,对于一个6x6x3(WxHxC,C为通道数)的图像来说,卷积核大小为3x3,有4个特征要提取。那么此时卷积核的参数量为3x3x4x3。如下图所示:
二、1x1卷积核运算
在上面的基础上,如果卷积核大小是1x1呢?可以想象,此时卷积核不会改变原图像的长宽,也就是w和h,但是会改变原图像的通道数,这取决于我们想要提取多少个特征。而这么做的目的,则是改变了原图像的维度。
三、1x1卷积核的作用
采用1x1卷积核主要有几个用处:
1.升维或降维
如果卷积核的维度比原图像高,则是升维,反之为降维。这意味着提取特征数量的变化。
2.跨通道特征聚合
如果输入只有一个通道,此时1x1卷积核并没有特殊之处,但是如果有多个通道,卷积核会将它们聚合起来,将多通道的信息融合在一起,且是线性组合,从而完成了升维或降维功能。
3.增加网络表达能力
由于我们通常在卷积操作后面接非线性激活函数,因此提高了网络的非线性表达能力,这样网络可以做的很深。
4.显著减少参数量
从上图可以看出,同样是得到161628的输出,采用1x1卷积核能够显著减少参数量,减少过拟合现象的出现。
四、1x1卷积核的实际应用
1x1卷积核的首次提出是在NIN(Network in Network)中,在后面的GoogLeNet以及ResNet中都有应用。此处附上沐神将NiN的链接网络中的网络。
在NiN里提出用1x1卷积核来代替全连接层,能够显著减少模型的参数。比如输入一张224x224x3的图像,神经网络最后一层是5x5x512,全连接层为4096x100,那么全连接层会首先将最后一层拉平成5x5x512,再做全连接,此时参数为5x5x512x4096x100。但如果我们采用1x1卷积核就不一样,首先采用5x5卷积核,将其变成1x1x4096,再用1x1x1000维度的卷积核进行运算即可,此时参数量为5x5x512x4096+1000x4096,参数量显著减少了。
下图就是在ResNet网络里用到了。