CNN 中, 1X1卷积核的作用

1x1卷积最初引起研究者的重视应该是在Network in Network这篇文章里,后面在GoogLeNet和ResNet中都使用了1x1卷积,那么1x1卷积到底有什么用呢?

我认为主要作用有三点:

1. 实现跨通道的信息交互和整合。1x1卷积核只有一个参数,当它作用在多通道的feature map上时,相当于不同通道上的一个线性组合,实际上就是加起来再乘以一个系数,但是这样输出的feature map就是多个通道的整合信息了,能够使网络提取的特征更加丰富。

2. feature map通道数上的降维。降维这个作用在GoogLeNet和ResNet能够很好的体现。举个例子:假设输入的特征维度为100x100x128,卷积核大小为5x5(stride=1,padding=2)(这里卷积核的厚度为128),通道数为256(指的是一共有256个卷积核),则经过卷积后输出的特征维度为100x100x256,卷积参数量为5x5x128x256=819200。此时在5x5卷积前使用一个64通道(指的是卷积核的个数)的1x1卷积,最终的输出特征维度依然是100x100x256,但是此时的卷积参数量为1x1x128x64 + 5x5x64x256=417792,大约减少一半的参数量。

在一维的数据中,conv1也能起到降维的作用。假设输入的数据维度是8*16(16可以看做是通道数),卷积核大小是5,一共用256个卷积核,此时卷积的参数数目为5x16x256=20480;如果在中间先加入一个8通道的(卷积核的个数)的大小为1的卷积核,则其输出维度为5x8,这一部分的卷积核参数数目为1x16x8=128,再用一个大小为5,个数为256的卷积核进行卷积,其输出维度为:8x256,这一部分的卷积核参数数目为5x8x256=10240。两部分总的参数数目为128+10240=10368。比原来大约减少一半的数量

3. 增加非线性映射次数。1x1卷积后通常加一个非线性激活函数,使网络提取更加具有判别信息的特征,同时网络也能做的越来越深。

原文:https://blog.csdn.net/zzc15806/article/details/83448761 

二. 进行降维引起人们重视的(可能)是在GoogLeNet里。

对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数(也就是卷积核的数目)很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。

        以GoogLeNet的Inception模块为例,输入的feature map是28×28×192,Inception模块中1×1卷积通道为64(此卷积核的厚度为192,个数为64)3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。          同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map的个数是不变的(192个),再加卷积层得到的feature map(64+128+32),会使输出的feature map扩大到416(192+64+128+32),如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256(32+64+128+32)。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。



原文:https://blog.csdn.net/u014114990/article/details/50767786 

 


 

你可能感兴趣的:(机器学习)