作用:1. 实现跨通道的交互和信息整合;2. 进行卷积核通道数的降维和升维
详细介绍:
(作用1)
图5 多通道+多卷积核做卷积示示意图。
缩进如图5,输入图像layer m-1有4个通道,同时有2个卷积核w1和w2。对于卷积核w1,先在输入图像4个通道分别作卷积,再将4个通道结果加起来得到w1的卷积输出;卷积核w2类似。所以对于某个卷积层,无论输入图像有多少个通道,输出图像通道数总是等于卷积核数量!
缩进对多通道图像做1x1卷积,其实就是将输入图像于每个通道乘以卷积系数后加在一起,即相当于把原图像中本来各个独立的通道“联通”在了一起。来源:blog
(作用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