1x1卷积核的作用归纳和实例分析

一、1x1卷积核介绍

1x1卷积核,又称为网中网(Network in Network)。

其实1x1卷积,可以看成一种全连接(full connection)。

二、举例说明实际作用

例子1:线性变换

这里通过一个例子来直观地介绍1x1卷积。输入32x32x1的矩阵,这里的1x1卷积形式为1x1x1,即为一个元素元素X,输出也是32x32x1的矩阵。但输出矩阵中的每个元素值是输入矩阵中每个元素值与元素X相乘的结果。

1x1卷积核的作用归纳和实例分析

上述情况,并没有显示1x1卷积的特殊之处,那是因为上面输入的矩阵channel为1,所以1x1卷积的channel也为1。这时候只能起到线性变换或者理解为放缩的作用。这种用法是不常见的。

例子2:降低通道数(归纳整理进行一次输入通道间的非线性映射)

让我们看一下真正work的示例。当输入为32x32x10时,1x1卷积的形式是1x1x10(只有一个卷积核的情况下后面的个数我就不写了),此时输出为32x32x1。此时便可以体会到1x1卷积的实质作用:降维。当1x1卷积核的个数小于输入channels数量时,即降维。

蓝色虚线是卷积的对应关系,在输入中滑动,每一次滑动到一个位置,按照卷积核十个channel的权重计算输入channel之间的加权求和,然后进行红色虚线的对应位置输出,输出为单一通道

1x1卷积核的作用归纳和实例分析

其实就等价于输入channel之间的权重链接之后统一到一个输出featuremap中。

如果有多个这种卷积核那就等价于多种不懂的权重全连接关系,可以理解为多种不同的整合归纳方式。

注:1x1卷积一般只改变输出通道数(channels),(因为滑动step的设置一般为1)所以不改变输出的宽度和高度,会生成一个拥有通道数量等于卷积核个数的,长宽不变的featuremap

三、1x1卷积核作用

降低/提升通道数

1x1卷积核的作用归纳和实例分析

增加非线性

1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性**函数),把网络做的很deep。但是同时也相应的增加了网络深度。

一个filter对应卷积后得到一个feature map,我认为可以理解为输入的一种映射关系,一个针对现有featuremap概括归纳,也可以理解为一次更高维的特征提取整合。

不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuron。建立多种映射关系,得到一个更加丰富的概括结论。

跨通道信息交互(channal 的变换)

使用1x1卷积核,实现通道数变化的操作其实就是channel间信息的线性组合变化,更加丰富的深度特征提取方式,3x3x输入通道数x64的卷积核后面添加一个1x1x64x28的卷积核,就变成了3x3x28的卷积核,原来的64个中间特征就可以理解为跨通道线性组合变成了28个最终输出特征,这就是通道间的信息交互。

四、1x1卷积应用

Inception

1x1卷积核的作用归纳和实例分析

提高表达能力也就是上面所说的增加非线性度、实现跨通道的信息整合的作用。同时进行降维和升维也是一个点。

对于每一个Inception模块:

原始模块(左图):虽然卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大。计算量也会很大。max pooling后feature map输入输出通道数是不变的,再加不同蓝色卷积层得到的其他feature map,会使输出的feature map扩大到416,如果每个模块都这样,不断叠加,网络的输出会越来越大。

改进模块(右图)中是加入了1×1卷积进行通道数降低之后再卷积。卷积核参数、运算复杂度也就跟着降下来了。在max pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,使得输出的feature map数降到了256。

GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。

ResNet

1x1卷积核的作用归纳和实例分析

主要目的是减少计算量和参数量

ResNet在3×3卷积层的前后都使用这种结构,先减少通道数,在进行通道数的扩充,虽然增加了网络层数,但是总体的参数数量减少了,因为进行3×3卷及操作的通道数减少了,具体可见如下图的结构。

其中右图又称为”bottleneck design”,因为像一个瓶颈一样,通道数由大变小在由小变大,目的一目了然,就是为了降低参数的数目,第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。

对于常规ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中,目的是减少计算和参数量。

参考文献

主要来自于大佬的专栏,加入了一些自己的解释:一文读懂卷积神经网络中的1x1卷积核 - 知乎

1*1的卷积核与Inception

《Network in network》

Networks in Networks and 1x1 Convolutions - Deep convolutional models: case studies | Coursera

如何理解卷积神经网络中的1*1卷积

【CNN】卷积神经网络中的 1*1 卷积 的作用

卷积神经网络中用1*1 卷积有什么作用或者好处呢? - 知乎

1×1 卷积核的作用?(附实例)

ResNet解析 - ****博客blog.****.net!

1X1卷积核到底有什么作用呢?

ResNet解析 - ****博客

卷积神经网络中用1*1 卷积有什么作用或者好处呢?

待看文献

mlpconv层(cccp层)mlpconv层 convolution层