卷积神经网络工作原理研究 - Inception结构研究

深入Mixed层

对同一个卷积层输出,执行各种二次计算,将各种结果堆叠到新输出的depth方向上

《卷积神经网络工作原理研究 - Inception结构研究》 Mixed层示例图

      # mixed: 35 x 35 x 256.
      end_point = 'Mixed_5b'
      with tf.variable_scope(end_point):
        with tf.variable_scope('Branch_0'):
          branch_0 = slim.conv2d(net, depth(64), [1, 1], scope='Conv2d_0a_1x1')
        with tf.variable_scope('Branch_1'):
          branch_1 = slim.conv2d(net, depth(48), [1, 1], scope='Conv2d_0a_1x1')
          branch_1 = slim.conv2d(branch_1, depth(64), [5, 5],
                                 scope='Conv2d_0b_5x5')
        with tf.variable_scope('Branch_2'):
          branch_2 = slim.conv2d(net, depth(64), [1, 1], scope='Conv2d_0a_1x1')
          branch_2 = slim.conv2d(branch_2, depth(96), [3, 3],
                                 scope='Conv2d_0b_3x3')
          branch_2 = slim.conv2d(branch_2, depth(96), [3, 3],
                                 scope='Conv2d_0c_3x3')
        with tf.variable_scope('Branch_3'):
          branch_3 = slim.avg_pool2d(net, [3, 3], scope='AvgPool_0a_3x3')
          branch_3 = slim.conv2d(branch_3, depth(32), [1, 1],
                                 scope='Conv2d_0b_1x1')
        net = tf.concat(axis=3, values=[branch_0, branch_1, branch_2, branch_3])
      end_points[end_point] = net
      if end_point == final_endpoint: return net, end_points

avgPooling 和 tf.concat

一般做Pooling的时候,使用的是maxPooling,在Mixed层出现了avgPooling。

除了Max Pooing之外,常用的还有Mean Pooling——取各样本的平均值。

可能avgpooling就是mean pooling吧。

tf.concat函数也是一个重点知识:这里使用concat将张量进行连接。但是具体的连接形状还需要进一步考证。

《卷积神经网络工作原理研究 - Inception结构研究》 concat

Inception V4架构图

v3的架构图,对于mixed的细节并不是很清晰,所以这里找了一张v4的架构图来看一下。

《卷积神经网络工作原理研究 - Inception结构研究》 Inception v4

看一下右下角,除了参数之外和我们的Mixed模型很像了。(V4比V3更加的深)

《卷积神经网络工作原理研究 - Inception结构研究》 filter

Mixed 层(inception结构)分析

inception结构具有3种不同的形式,(Mixed_5x,Mixed_6x,Mixed_7x),下面就是这3种形式的示例图。
仔细观察,这里有两个特点:
这里使用了很多 1 x 1的卷积核。

Googlenet 中1×1 卷积核分析

一种简单的解释是用来降维。
For example, an image of 200200 with 50 features on convolution with 20 filters of 11 would result in size of 20020020.
但是,1×1卷积核的作用不仅仅于此。

  • 特征变换
    1×1卷积是在Network in Network 中第一次被提出来,作者的目的是为了得到一个深的网络,但作者并不想直接垂直的堆砌一些layer。作者用了一些1×1,3×3的卷积层,因此
    最后的网络架构其实是going wide. 在googlenet中,1×1卷积核有两个作用:
    1 为了使得网络更深,作者引入了类似Network in Network 中的”inception module”
    2 为了降低维度
    3 为了增加更多的非线性变换(eg. RELU)
  • 其他作用
    1 1×1卷积核可以结合max pooling
    2 1×1卷积核可以设置大的步长,这样可以在丢失非常少的信息下降低数据的维度
    3 取代fc层。

1X1卷积核到底有什么作用呢?
版权所属: http://www.caffecn.cn/?/question/136

  1. 实现跨通道的交互和信息整合
    1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中林敏师兄的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。
  2. 进行卷积核通道数的降维和升维,减少网络参数
    进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为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是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。

《卷积神经网络工作原理研究 - Inception结构研究》 图1

最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)

《卷积神经网络工作原理研究 - Inception结构研究》 图2

或者将 n x n 的卷积核改写为 n x 1 和 1 x n 。

v3一个最重要的改进是分解(Factorization),将7×7分解成两个一维的卷积(1×7,7×1),3×3也是一样(1×3,3×1),这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,还有值得注意的地方是网络输入从224×224变为了299×299,更加精细设计了35×35/17×17/8×8的模块;
作者:无话可说
链接:https://www.zhihu.com/question/50370954/answer/138938524
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

《卷积神经网络工作原理研究 - Inception结构研究》 inception结构

    原文作者:中和软件技术推进
    原文地址: https://www.jianshu.com/p/0583f1ba068c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞