【机器学习】关于CNN中1×1卷积核和Network in Network的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haolexiao/article/details/77073258

前天去面某公司的AI部门,被问到了关于1×1卷积核的相关问题,因为之前没有了解过,所以也没有答上来,回来查阅了相关资料,特此总结一番。

1×1的卷积核

卷积核在CNN中经常被用到,一般常见的是3×3的或者5×5的,见下图,这里不多赘述
这里写图片描述这里写图片描述
那么1×1的卷积核,就像上面那样。
一般1×1的卷积核本质上并没有对图像做什么聚合操作,以为就是同一个w去乘以原图像上的每一个像素点,相当于做了一个scaling
1×1卷积核最初是在Network in Network这个网络结构中提出来的。它用了比AlexNet更少的参数,达到了跟其一样的效果。

1×1卷积核的作用

那么1×1卷积核有什么作用呢,如果当前层和下一层都只有一个通道那么1×1卷积核确实没什么作用,但是如果它们分别为m层和n层的话,1×1卷积核可以起到一个跨通道聚合的作用所以进一步可以起到降维(或者升维)的作用,起到减少参数的目的
比如当前层为 x×x×m即图像大小为x×x,特征层数为m,然后如果将其通过1×1的卷积核,特征层数为n,那么只要n<m这样就能起到降维的目的,减少之后步骤的运算量(当然这里不太严谨,需要考虑1×1卷积核本身的参数个数为m×n个)。这个作用在参考文献6里有举例说明。换句话说,如果使用1x1的卷积核,这个操作实现的就是多个feature map的线性组合,可以实现feature map在通道个数上的变化。
而因为卷积操作本身就可以做到各个通道的重新聚合的作用,所以1×1的卷积核也能达到这个效果。

Network in Network

NIN网络是第一个提出1×1卷积核的论文,同时其也提出了Network in Network的网络概念。因为一般卷积操作可以看成特征的提取操作,而一般卷积一层只相当于一个线性操作,所以其只能提取出线性特征。所以该作者就像能否在卷积层后也加入一个MLP使得每层卷积操作能够提取非线性特征。
其实这里的MLP,指的是同一层中,不同特征层之间,同一个位置上的值的MLP
理解了这一点就好办了,详细的图见参考文献8中的那个图:
这里写图片描述
这里写图片描述
所以NIN只得是,一个神经网络之中,其每一层之间的特征提取又加上了一个小的神经网络。

NIN与1×1卷积核的关系

那么NIN与1×1卷积核又有什么关系呢
因为NIN中的MLP层可以用两层1×1卷积核来代替,比如当前这一层是54×54×96的图像层,然后过一个1×1×96的卷积核,还是一个54×54×96的卷积层,然后再过一个1×1×96的卷积核,还是一个54×54×96的卷积层。
但是这样但看最开始那个96个特征层的图像同一个位置不同层之间的像素点,相当于过了一个96×96×96的MLP网络
可以再参考下参考文献7中caffe的实现。

用卷积核实现全连接层

In Convolutional Nets, there is no such thing as “fully-connected layers”. There are only convolution layers with 1x1 convolution kernels and a full connection table. – Yann LeCun

LeCun经常说一个全连接层的网络可以用1×1卷积核去替换,虽然这个说法被批了(见参考文献1)
但是1×1卷积核确实可以实现全连接层
具体的操作是,输入是224x224x3 的图像,假设经过变换之后最后一层是[7x7x512]的,那么传统的方法应该将其展平成为一个7x7x512长度的一层,然后做全连接层,假设全连接层为4096×1000层的(假设有1000个分类结果)。
那么用1×1卷积核怎么做呢,因为1×1卷积核相当于在不同channel之间做线性变换,所以:

  1. 先选择7×7的卷积核,输出层特征层数为4096层,这样得到一个[1×1×4096]层的
  2. 然后再选择用1×1卷积核,输出层数为1000层,这样得到一个[1×1×1000]层的

这样就搞定了。

扩展:用卷积层代替全连接层的好处

这样做其实有非常多的好处,比如上面的例子中输入是224x224x3 的图像,如果此时图像变得更大了,变成384x384大小的了,那么一开始按照32作为步长来进行卷积操作,最后还按照这个网络结构能得到一个[6×6×1000]层的,那么前面那个[6×6]有什么用呢,这个代表每一个位置上,其属于1000个分类结果中的打分,所以这在图像分割等领域等领域有着非常重要的作用【之前一篇论文就是用的这种方法Fully Convolutional Networks for Semantic Segmentation】。
【上面这些步骤如果在全连接网络中做的话,需要多做36次,而在全卷积网络中只用做一次就好。】
这个详见参考文献2和9

参考资料

  1. Is a fully connected neural network conceptually similar to a 1x1 convolutional neural network?
  2. CS231n Convolutional Neural Networks for Visual Recognition的一个课程笔记 FC->CONV conversion部分讲的是这个。
    它还有个中文翻译版,CS231n课程笔记翻译:卷积神经网络笔记
  3. One by One [ 1 x 1 ] Convolution - counter-intuitively useful
  4. What is the purpose served by 1x1 convolutions in the papers?
  5. 1x1 Convolutions - Why use them?
  6. 1*1的卷积核与Inception
  7. 深度学习(二十六)Network In Network学习笔记
  8. (Paper)Network in Network网络分析
  9. 论文阅读笔记:Fully Convolutional Networks for Semantic Segmentation
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页