卷积核越大越好吗 卷积核( 二 )


什么是卷积核?卷积是图像处理常用的方法,给定输入图像,在输出图像中每一个像素是输入图像中一个小区域中像素的加权平均,其中权值由一个函数定义,这个函数称为卷积核,
比如说卷积公式:R(u,v)=∑∑G(u-i,v-j)f(i,j),其中f为输入,G为卷积核 。
1*1卷积核的作用(作用1)
(作用2)
1、1x1的卷积核(可能)引起人们的重视是在NIN的结构中,利用MLP代替传统的线性卷积核,从而提高网络的表达能力 。文中同时利用跨通道的pooling的角度解释,认为论文中剔除的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合 。而cccp层是等价于1x1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积后面接了两个cccp层(其实就是解了两个1x1卷积层) 。
2、进行降维和升维引起人们重视的(可能)是在GoogleNet里 。对于每一个inception模块(如下图),原始模块是左图,右图中是加入了1x1卷积核进行降维的 。
虽然左图中的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变很大,而右图加入1x1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就降下来了 。以GoogleNet里的3a模块为例,输入的feature map是28x28x192,3a模块中的1x1卷积通道为64, 3x3卷积通道为128, 5x5卷积通道为32,如图左图结构,那么卷积核参数为:1x1x192x64+3x3x192x128 +5x5x192x32.
而右图对3x3和5x5卷积层前分别加入了通道数为96和16的1x1卷积层,参数就成了:1x1x192x64+(1x1x192x96+3x3x96x128)+(1x1x192x16+5x5x16x32) 。整个参数大约减少了三分之一 。
同时,在并行pooling层后面加入1x1卷积核后可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层就得到feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大 。而右图在pooling后面加入了通道为32的1x1卷积,使得输出的feature map数降到了256.
GoogleNet利用1x1的卷积降维后,得到了更为紧凑的网络结构,虽然总共22层,但是参数数量却只有8层的AlexNet的十二分之一(当然很大一部分原因可能是去掉了全连接层) 。
近来十分热门的MSRA同样也利用了1x1卷积,并且是在3x3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都见笑,参数数量进一步减小,如下图所示 。
具体参见: caffe cn

秒懂生活扩展阅读