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 卷积也进行分组。

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

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

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

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

3.2. ShuffleNet 单元

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

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

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

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

3.3. 整体网络结构

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

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

4. 实验结果

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

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

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

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

获取更多精彩,请关注「seniusen」!

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices的更多相关文章

  1. 【论文阅读】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

    ShuffleNet: An Extremely Efficient Convolutional Neural Network for MobileDevices

  2. [论文阅读] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (MobileNet)

    论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 本文提出的模型叫Mobi ...

  3. 【论文翻译】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文链接:https://arxi ...

  4. [论文理解] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications Intro MobileNet 我 ...

  5. 深度学习论文翻译解析(十七):MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    论文标题:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文作者:Andrew ...

  6. 论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)

    论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications MobileNet由Go ...

  7. 深度学习论文翻译解析(六):MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications

    论文标题:MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications 论文作者:Andrew ...

  8. 【MobileNet-V1】-2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications-论文阅读

    2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications Andrew H ...

  9. 【网络结构】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文解析

    目录 0. Paper link 1. Overview 2. Depthwise Separable Convolution 2.1 architecture 2.2 computational c ...

随机推荐

  1. ERA-interim数据下载

    步骤: 1.python 2.ECWMF账号和密码:编写.ecmwfapirc文件,放置在C:\Users\用户名 目录下,内容: { "url" : "http...& ...

  2. BZOJ2656 [Zjoi2012]数列(sequence)[模拟]

    这个递推式子可以发现$i$是偶数下标可以缩一半,是奇数下标就可以拆成两个下标,$\lfloor \frac{i}{2} \rfloor$以及$\lfloor \frac{i}{2}+1 \rfloor ...

  3. P1801 黑匣子[对顶堆]

    没错我就是专门找对顶堆练习题的.现在感觉对顶堆使用面有点狭窄.这道题由于我询问是随时间单调增的,而且数据比较友好,应该是插入几次就询问一下的.而中位数那题也是经常询问的.如果查询的东西不单调,或者查询 ...

  4. python和CSV

    lines=[]; 表头数据 lines.append(list(retlist[0].keys())) 明细数据 for city in city_list: { lines.append(list ...

  5. jquery 自定义右键菜单

    如果要自定义右键菜单,那么就需要禁止原本的右键菜单,代码如下 document.oncontextmenu = new Function("return false;");//禁止 ...

  6. "TypeError: handler.call is not a function"问题

    进入组件页面时,vue报错:Error in mounted hook: "TypeError: handler.call is not a function", 造成报错原因就是 ...

  7. 【leetcode】341. Flatten Nested List Iterator

    题目如下: Given a nested list of integers, implement an iterator to flatten it. Each element is either a ...

  8. Python 面向对象Ⅲ

    Python内置类属性 __dict__ : 类的属性(包含一个字典,由类的数据属性组成) __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块http ...

  9. [人物存档]【AI少女】【捏脸数据】1224今日份的推荐

    点击下载(城通网盘):AISChaF_20191111222714074.png 点击下载(城通网盘):AISChaF_20191108141610951.png

  10. Java多线程和并发(八),synchronized底层原理

    目录 1.对象头(Mark Word) 2.对象自带的锁(Monitor) 3.自旋锁和自适应自旋锁 4.偏向锁 5.轻量级锁 6.偏向锁,轻量级锁,重量级锁联系 八.synchronized底层原理 ...