赞
踩
我们都知道,卷积核的作用在于特征的抽取,越是大的卷积核尺寸就意味着更大的感受野,当然随之而来的是更多的参数。早在1998年,LeCun大神发布的LetNet-5模型中就会出,图像空域内具有局部相关性,卷积的过程是对局部相关性的一种抽取。
但是在学习卷积神经网络的过程中,我们常常会看到一股清流般的存在—1*1的卷积!
比如在残差网络的直连里:
残差网络的Bootleneck残差模块里:
在GoogleNet的Inception模块里:
都有1*1卷积核的出现,那么它到底是做什么的?我们应该如何理解1*1卷积的原理?
当1*1卷积出现时,在大多数情况下它作用是升/降特征的维度,这里的维度指的是通道数(厚度),而不改变图片的宽和高。
举个例子,比如某次卷积之后的结果是W*H*6的特征,现在需要用1*1的卷积核将其降维成W*H*5,即6个通道变成5个通道:
如下图就是一个W*H*6的特征,而1*1的卷积核在图上标出,卷积核自身的厚度也是6(图画的好难看!!)
通过一次卷积操作,W*H*6将变为W*H*1,这样的话,使用5个1*1的卷积核,显然可以卷积出5个W*H*1,再做通道的串接操作,就实现了W*H*5。
在这里先计算一下参数数量,一遍后面说明,5个卷积核,每个卷积核的尺寸是1*1*6,也就是一种有30个参数。
我们还可以用另一种角度去理解1*1卷积,可以把它看成是一种全连接,如下图:
第一层有6个神经元,分别是a1—a6,通过全连接之后变成5个,分别是b1—b5,第一层的六个神经元要和后面五个实现全连接,本图中只画了a1—a6连接到b1的示意,可以看到,在全连接层b1其实是前面6个神经元的加权和,权对应的就是w1—w6,到这里就很清晰了:
第一层的6个神经元其实就相当于输入特征里面那个通道数:6,而第二层的5个神经元相当于1*1卷积之后的新的特征通道数:5。
w1—w6是一个卷积核的权系数,如何要计算b2—b5,显然还需要4个同样尺寸的核。
最后一个问题,图像的一层相比于神经元还是有区别的,这在于是一个2D矩阵还是一个数字,但是即便是一个2D矩阵的话也还是只需要一个参数(1*1的核),这就是因为参数的权值共享。
一般的卷积运算可以压缩输入的长度和宽度,1*1卷积核可以整合各个数据通道信息缩小数据尺寸的深度,同时减小计算量
卷积核参数计算:卷积核的长度*卷积核的宽度*卷积核的个数
卷积计算量计算:输出数据大小*卷积核的尺寸*输入通道数
比如(懒得绘图)求输入28*28*192经过5*5*32的卷积核输出为28*28*32的参数大小和运算量大小
① 参数计算:5*5*32
② 运算量计算:(28*28*32)*(5*5)*(192)≈1.2亿
我们把上面你那个例子改一下在中间添加以一个1*1的卷积核
28*28*192先通过一个1*1*16卷积核得到28*28*16的大小然后再经过5*5*32的卷积核得到28*28*32的输出,那么输入输出都和前面那个例子是一样的,只是中间多了一个1*1的卷积核。我们来计算一下现在的计算量
① (28*28*16)*(1*1)*(192)≈2.4M
②(28*28*32)*(5*5)*(16)≈10.0M
所以total computational cost ≈1240万和1.2亿相比
看到了吧,就是添加了一个1*1的卷积核就大大降低计算量的哦,同时应该注意添加了1*1产生的“bottleneck layer”的意思
下面介绍1*1的卷积核与googlenet里面的Inception。
正式介绍之前,首先回顾卷积网络的基本概念。
下面从一般卷积过程介绍1x1的卷积,借用[1]中的图来表示卷积的过程:
对于nxn(n>1)的卷积核,我们通常还要考虑pad(边缘补0的个数),stride(每次卷积移动的步长)。但是当尺寸是1x1时,对于single channel而言就相当于对原特征的scala操作;但是我们一般遇到的都是multi-channel的情况,此时我们便可以根据自己的需要定义卷积核的个数,从而进行降(升)维。如上面所说,如果将它看作cross channel的pooling 操作,它还能帮我们得到在同一位置不同通道之间进行特征的aggregation。
总结一下,1x1的卷积核可以进行降维或者升维,也就是通过控制卷积核(通道数)实现,这个可以帮助减少模型参数,也可以对不同特征进行尺寸的归一化;同时也可以用于不同channel上特征的融合。一个trick就是在降维的时候考虑结合传统的降维方式,如PCA的特征向量实现,这样效果也可以得到保证。
以googlenet[3]中的inception模块为例,来说明1x1的卷积如何来减少模型参数。
左边是naive的inception模块,右边是加入1x1 convolution进行降维的inception。按照上面的说法,我们的这层的模型参数与输入的特征维数(28x28x192),卷积核大小以及卷积通道数(包括三种卷积核,分别是1x1x64,3x3x128,5x5x32),右图中在3x3,5x5 convolution前新加入的1x1的卷积核为96和16通道的,在max pooling后加入的1x1卷积为32通道。那么图a该层的参数为(1x1x192x64)+(3x3x192x128)+(5x5x192x32)
图b该层的参数为(1x1x192x64)+(1x1x192x96)+(1x1x192x16)+(3x3x96x128)+(5x5x16x32)+(1x1x192x32).
比较可知,模型参数减少了。
reference
[1]http://blog.csdn.net/stdcoutzyx/article/details/41596663
[2]http://www.caffecn.cn/?/question/136
[3]going deeper with convolutions
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。