zoukankan      html  css  js  c++  java
  • ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

    1. 摘要

    作者介绍了一种计算非常高效的 CNN 结构称之为 ShuffleNet,它是专门为计算资源非常有限的移动设备设计的。

    这种新的结构主要用到了两种操作:分组点卷积(pointwise group convolution )和通道打乱(channel shuffle),这可以极大降低计算代价同时保持模型的准确率。

    2. 介绍和相关工作

    经典的 Xception 和 ResNeXt 结构在网络非常小的时候因为密集的 1×1 卷积而变得低效,因此作者提出用分组点卷积来减小 1×1 卷积的计算代价。为了避免分组卷积带来副作用,作者想出了一个新奇的通道打乱操作来帮助信息在不同的通道之间流动。与其它流行的轻量级网络相比,在同样的计算负担下,ShuffleNet 可以允许特征图的通道数更多,这有利于编码更多的信息,对小模型的效果提升是非常重要的。

    分组卷积最早用在 AlexNet 中来将模型分布到不同的 GPU 上,然后在 ResNeXt 中验证了其有效性,而深度可分离卷积在 Xception 和 MobileNet 中取得了不错的效果。因此,作者在这里一种新奇的形式将分组卷积和深度可分离卷积这两个技术进一步结合了起来。

    3. 方法

    3.1. 为分组卷积设计的通道打乱

    在微型网络结构中, 由于 1×1 卷积计算代价很高,在计算资源有限的情况下特征图的通道数就会受限,这会极大地降低模型的准确率。为了解决这个问题,一个简单的方案就是通道之间进行稀疏连接,也就是对 1×1 卷积也进行分组。

    如下图左边所示,输出特征图只与一部分输入特征图相连接。但这样就会带来一个副作用,叠加几个卷积层后,输出的特征图都只由输入特征的其中一部分产生,比如图中红色部分的特征就只由输入的红色部分特征得来,而蓝色部分的特征就只由输入的蓝色部分特征得来。这阻止了不同组之间特征的信息流动因此会减弱网络的表示能力。

     如果我们允许分组卷积可以获取不同组的特征,那么输入通道和输出通道之间就会完全相关联,如上图中间部分所示。先把每个组内的特征分为几个子组特征,再把每个子组特征分别送到下一层的每个组中去卷积。这个过程可以有效和优雅地通过一个通道打乱操作来实现:假设一层卷积分为了 gg 个组,输出有 g×ng×n 个通道,那么我们先把输出通道维度变为 (g,n)(g,n),转置后再展平作为下一层的输入。注意即使两个卷积划分的组数不一样,这个操作也是有效的,而且这个操作也是可微的,也就是说可以嵌入到网络中进行端到端的训练。

    第一层卷积分为 3 个组,第二层卷积也分为 3 个组。

    第一层卷积分为 2 个组,第二层卷积分为 4 个组。

    3.2. ShuffleNet 单元

    从最左边的瓶颈结构开始,作者将第一个 1×1 卷积替换为一个 1×1 的分组卷积加上一个通道打乱操作,然后是一个 3×3 的深度卷积,最后一个 1×1 的分组卷积用来保证输入和输出的维度一致。最后没有通道打乱是因为加上的话结果也差不多,注意在深度卷积后面没有激活函数。

    针对有步长的情况,作者做了两个改进,一个是跳跃连接改为一个 3×3 的平均池化,然后是对特征进行拼接而不是逐元素的相加。

    假设输入大小为 c×h×wc×h×w,瓶颈层的通道数为 mm,那么 ResNet 单元需要 hw(2cm+9m2)hw(2cm+9m2) FLOPs,ResNext 单元需要 hw(2cm+9m2/g)hw(2cm+9m2/g) FLOPs,而 ShuffleNet 单元只需要 hw(2cm/g+9m)hw(2cm/g+9m) FLOPs,gg 代表分组卷积的组数。也就是说,在同样的计算负担下,ShuffleNet 可以允许更多的特征通道,这对小型网络处理信息是非常重要的。

    除此之外,在 ShuffleNet 中深度卷积只应用在瓶颈层的特征图,因为尽管它理论上复杂度比较低,但是在移动设备上比较难以实现。

    3.3. 整体网络结构

    网络中的 ShuffleNet 单元可以划分为三个阶段,每个阶段的第一个单元步长为 2,每经过一个阶段特征图通道数翻倍,瓶颈层的特征图通道数为输出通道数的四分之一。

    分组卷积的组数 gg 控制着点卷积的稀疏性,在同一个复杂度下,组数越多,特征图的通道数就可以越大。另外,我们还可以用一个缩放因子 ss 来调整网络每一层的通道数,这样的网络表示为 ShuffleNet s×ShuffleNet s×。

    4. 实验结果

    在 ImageNet 的分类误差如下所示:

    可以看到,分组点卷积一致要比不分组好,而且小的模型从中受益更多,分组后分类误差降低得更多。

    可以看到,在分组比较多的情况下,通道打乱操作更有利于模型的性能提升,也进一步验证了不同组之间特征融合的重要性。

    与用其它基本单元比如 VGG、ResNet 等组成的网络以及 MobileNet 相比,ShuffleNet 都展示了其优越的性能。

  • 相关阅读:
    Java中用Apache POI生成excel和word文档
    openlayers实现画圆
    openlayers实现wfs属性查询和空间查询
    jquery自定义控件拖拽框dragbox
    基于openlayers实现聚类统计展示
    openlayers实现在线编辑
    openlayers之selectfeature
    J
    HDU-1051Wooden Sticks
    HDU-1087Super Jumping! Jumping! Jumping!
  • 原文地址:https://www.cnblogs.com/ziwh666/p/12485139.html
Copyright © 2011-2022 走看看