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

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

作者: b19707134332 | 来源:发表于2017-04-07 14:40 被阅读1886次

    深入Mixed层

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

    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将张量进行连接。但是具体的连接形状还需要进一步考证。

    concat

    Inception V4架构图

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

    Inception v4

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

    filter

    Mixed 层(inception结构)分析

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

    Googlenet 中1x1 卷积核分析

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

    • 特征变换
      1x1卷积是在Network in Network 中第一次被提出来,作者的目的是为了得到一个深的网络,但作者并不想直接垂直的堆砌一些layer。作者用了一些1x1,3x3的卷积层,因此
      最后的网络架构其实是going wide. 在googlenet中,1x1卷积核有两个作用:
      1 为了使得网络更深,作者引入了类似Network in Network 中的"inception module"
      2 为了降低维度
      3 为了增加更多的非线性变换(eg. RELU)
    • 其他作用
      1 1x1卷积核可以结合max pooling
      2 1x1卷积核可以设置大的步长,这样可以在丢失非常少的信息下降低数据的维度
      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的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
    图1

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

    图2

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

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

    inception结构

    相关文章

      网友评论

          本文标题:卷积神经网络工作原理研究 - Inception结构研究

          本文链接:https://www.haomeiwen.com/subject/hbshattx.html