前言

这是卷积神经网络学习路线的第19篇文章,主要为大家介绍一下旷世科技在2017年发表的ShuffleNet V1,和MobileNet V1/V2一样,也是一个轻量级的卷积神经网络,专用于计算力受限的移动设备。新的架构利用两个操作:逐点组卷积(pointwise group convolution)和通道混洗(channel shuffle),与现有的其他SOTA模型相比,在保证精度的同时大大降低了计算量。ShuffleNet V1在ImageNet和MS COCO上表现出了比其他SOTA模型更好的性能。论文原文见附录。

介绍

当前很多CNN模型的发展方向是变得更大,更深,这让深度卷积神经网络的准确率更高,但难以运行在移动设备上,针对这一问题,许多工作的重点放在对现有预训练模型的剪枝,压缩或使用低比特表示。
这篇论文提出的ShuffleNet基于探索一个可以满足受限条件的高效基础网络架构。论文发现先进的架构如Xception和ResNetXt在小型网络模型中效率较低,因为大量的1*1卷积耗费了大量时间。论文提出了逐点群卷积(pointwise group convolution)帮助降低计算复杂度;但如果只使用逐点群卷积会有副作用,所以论文还提出了通道混洗(channel shuffle)帮助信息流通。基于这两种技术,论文构建了一个名为ShuffleNet的高效架构,相比于其他先进模型,对于给定的计算复杂度预算,ShuffleNet允许使用更多的特征映射通道,在小型网络上有助于编码更多信息。

相关工作

  • 高效模型设计:卷积神经网络在CV任务中取得了极大的成功,在嵌入式设备上运行高质量深度神经网络需求越来越大,这也促进了对高效模型的研究。例如,GoogleNet增加了网络的宽度,复杂度降低很多。SequeezeNet在保持精度的同时大大减少了模型的参数和计算量,ResNet利用高效的bottleneck结构实现了惊人的效果。Xception中提出深度可分离卷积概括了Inception序列。Mobilenet利用深度可分离卷积构建的轻量级模型取得了先进的成果。ShuffleNet的工作是逐点组卷积和深度可分卷积。
  • 模型加速:模型加速有很多方向,有网络剪枝,减少通道数,量化或者因式分解计算中的冗余等,ShuffleNet的工作专注于设计更好的模型来直接提高性能,而不是加速或转换。

方法

针对组卷积的通道混洗

现代卷积神经网络会包含多个重复模块。其中,最为先进的网络例如Xception和ResNeXt将有效的深度可分离卷积或组卷积引入block中,在表示能力和计算消耗之间取得了很好的折中。但是我们注意到这两个设计都没有充分使用1×11\times 11×1的逐点卷积,因为这需要很大的计算复杂度。例如,在ResNeXt中3×33\times 33×3卷积配有逐点卷积(1×11\times 11×1),逐点卷积占了93.4%的multiplications-adds。
在小型网络中,昂贵的逐点卷积造成有限的通道之间充满约束,这会显著的降低计算损失。然而,如果多个组卷积堆叠在一起,会产生一个副作用:某个通道的输出信息会从一小部分输入通道导出,如下图(a)所示,这样的属性降低了通道组之间的信息流通,降低了信息的表示能力。如果我们允许组卷积能够得到不同组的输入数据,即下图(b)所示效果,那么输入和输出通道会是全关联的。具体实现的话,我们就可以对于上一层输出的通道做一个混洗操作,如下图c所示,再分为几个组,和下一层相连。
通道混洗的算法过程如下:

  • 对一个卷积层分为g组,每组有n个通道
  • reshape成(g, n)
  • 再转置为(n, g)
  • Flatten操作,分为g组作为下一层的输入。
  • 通道Shuffle操作是可微的,模型可以保持end-to-end训练。

混洗单元

在实际过程中,我们构建了一个ShuffleNet Unit(混洗单元),便于后面组合为网络模型。

  • Figure2 a是一个残差模块。对于主分支部分,我们可以将其中标准卷积3×33\times33×3拆成深度可分离卷积。我们将第一个1×11\times11×1卷积替换为逐点组卷积,再做通道混洗如图(b)。
  • Figure2 a是ShuffleNet Unit,主分支最后的1×11\times11×1卷积改成1×11\times11×1组卷积,为了适配和恒等映射做通道融合。配合BN层和ReLU激活函数构成基本单元。
  • Figure2 a是做下采样的ShuffleNet unit,这里主要做了2点修改,在辅分支加入了步长为2的3×33\times 33×3平均池化,原本做元素相加的操作转为了通道级联,这扩大了通道数,增加的计算成本却很少。归功于逐点群卷积和通道混洗,ShuffleNet Unit可以高效的计算。相比于其他先进的单元,在相同设置下复杂度较低。例如,给定输入大小h×w×ch\times w\times ch×w×c,通道数为ccc,对应的bottleneck的通道数为mmm。那么:
  • ResNet Unit需要hw(2cm+9m2)hw(2cm+9m^2)hw(2cm+9m2)FLOPS计算量。
  • ResNeXt 需要hw(2cm+9m2/g)hw(2cm+9m^2/g)hw(2cm+9m2/g)FLOPS计算量。
  • ShuffleNet Unit只需要hw(2cm/g)+9mhw(2cm/g)+9mhw(2cm/g)+9mFLOPS计算量。
    其中ggg表示组卷积数目。

网络结构

在上面的基本单元的基础上,论文提出了ShuffleNet的整体架构:

整个架构主要分为3个阶段:

  • 每个阶段的第一个block的步长为2,下一阶段的通道翻倍。
  • 每个阶段内除了步长,其它的超参数保持不变。
  • 每个ShuffleNet Unit的bottleneck通道数为输出的1/4
    这里主要是给出一个基准线。在ShuffleNet Unit中,参数ggg控制逐点卷积的连接稀疏性(即分组数),对于给定的限制下,越大的ggg会有越多的输出通道,这帮助我们编码信息。定制模型需要满足指定的预算,我们可以简单的使用放缩因子s控制通道数,ShuffleNets×\times×即表示通道数缩放到s倍。

实验

实验在ImageNet的分类数据集上做评估,大多数遵循ResNeXt的设置,除了两点:

  • 权重衰减从1e-4降低到了4e-5
  • 数据增强使用较少的aggressive scale增强
    这样做的原因是小网络在模型训练的过程中经常会遇到欠拟合而不是过拟合问题。

逐点卷积的重要性

为了评估逐点卷积的重要性,比较相同复杂度下组数从1到8的ShuffleNet模型,同时论文通过放缩因子s来控制网络宽度,扩展为3种:

从结果来看,有组卷积的一致比没有组卷积的效果好。注意组卷积可允许获得更多通道的信息,我们假设性能的收益源于更宽的特征映射,这帮助我们编码更多信息。并且,较小的模型的特征包含更少的特征映射,这意味着可以从更多的特征映射上获益。
表2还显示,对于一些模型,随着g增大,性能上有所下降。意味着组数增加,每个卷积滤波器的输入通道越来越少,损害了模型,损害了模型的表示能力。
值得注意的是,对于小型的ShuffleNet 0.25×\times×,组数越大性能越好,这表示对于小模型更宽的特征映射更有效。受此启发,在原结构的阶段3删除2个单元,即表2中arch2结构,放宽对应的特征映射,明显新的架构效果要好得多。

有通道混洗和没有通道混洗

Shuffle操作是为了实现多个组之间信息交流,下表表现了有无Shuffle操作的性能差异:

三个不同复杂度下带Shuffle的都表现出更优异的性能,尤其是当组更大(arch2, g=8),具有shuffle操作性能提升较多,这表现出Shuffle操作的重要性。

和其他结构单元做比较

我们对比不同Unit之间的性能差异,使用表1的结构,用各个Unit控制阶段2-4之间的Shuffle Unit,调整通道数保证复杂度类似。

可以看到ShuffleNet的表现是比较出色的。有趣的是,我们发现特征映射通道和精度之间是存在直观上的关系,以38MFLOPs为例,VGG-like, ResNet, ResNeXt, Xception-like, ShuffleNet模型在阶段4上的输出通道为50, 192, 192, 288, 576,这是和精度的变化趋势是一致的。我们可以在给定的预算中使用更多的通道,通常可以获得更好的性能。

上述的模型不包括GoogleNet或Inception结构,因为Inception涉及到太多超参数了,做为参考,我们采用了一个类似的轻量级网络PVANET。结果如下:
后面的我就不说了,都是一些速度和精度对比。

结论

论文针对现多数有效模型采用的逐点卷积存在的问题,提出了组卷积和通道混洗的处理方法,并在此基础上提出了一个ShuffleNet unit,后续对该单元做了一系列的实验验证,证明了ShuffleNet的结构有效性。

附录

  • 论文原文:https://arxiv.org/pdf/1707.01083.pdf
  • 参考资料1:https://blog.csdn.net/u011974639/article/details/79200559

推荐阅读

  • 快2020年了,你还在为深度学习调参而烦恼吗?

  • 卷积神经网络学习路线(一)| 卷积神经网络的组件以及卷积层是如何在图像中起作用的?

  • 卷积神经网络学习路线(二)| 卷积层有哪些参数及常用卷积核类型盘点?

  • 卷积神经网络学习路线(三)| 盘点不同类型的池化层、1*1卷积的作用和卷积核是否一定越大越好?

  • 卷积神经网络学习路线(四)| 如何减少卷积层计算量,使用宽卷积的好处及转置卷积中的棋盘效应?

  • 卷积神经网络学习路线(五)| 卷积神经网络参数设置,提高泛化能力?

  • 卷积神经网络学习路线(六)| 经典网络回顾之LeNet

  • 卷积神经网络学习路线(七)| 经典网络回顾之AlexNet

  • 卷积神经网络学习路线(八)| 经典网络回顾之ZFNet和VGGNet

  • 卷积神经网络学习路线(九)| 经典网络回顾之GoogLeNet系列

  • 卷积神经网络学习路线(十)| 里程碑式创新的ResNet

  • 卷积神经网络学习路线(十一)| Stochastic Depth(随机深度网络)

  • 卷积神经网络学习路线(十二)| 继往开来的DenseNet

  • 卷积神经网络学习路线(十三)| CVPR2017 Deep Pyramidal Residual Networks

  • 卷积神经网络学习路线(十四) | CVPR 2017 ResNeXt(ResNet进化版)

  • 卷积神经网络学习路线(十五) | NIPS 2017 DPN双路网络

  • 卷积神经网络学习路线(十六) | ICLR 2017 SqueezeNet

  • 卷积神经网络学习路线(十七) | Google CVPR 2017 MobileNet V1

  • 卷积神经网络学习路线(十八) | Google CVPR 2018 MobileNet V2


欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

卷积神经网络学习路线(十九) | 旷世科技 2017 ShuffleNetV1相关推荐

  1. 卷积神经网络学习路线(十七) | Google CVPR 2017 MobileNet V1

    前言 这是卷积神经网络的第十七篇文章,Google 2017年发表的MobileNet V1,其核心思想就是提出了深度可分离卷积来代替标准卷积,将标准卷积分成Depthwise+Pointwise两部 ...

  2. 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2

    前言 这个系列已经更新了20多篇了,感谢一直以来大家的支持和等待.前面已经介绍过MobileNet V1,MobileNet V2,MobileNet V3,ShuffleNet V1这几个针对移动端 ...

  3. 卷积神经网络学习路线(五)| 卷积神经网络参数设置,提高泛化能力?

    前言 这是卷积神经网络学习路线的第五篇文章,主要为大家介绍一下卷积神经网络的参数设置,调参技巧以及被广泛应用在了哪些领域,希望可以帮助到大家. 卷积神经网络的参数设置 这个举个例子来说是最好的,因为直 ...

  4. 花书+吴恩达深度学习(十九)构建模型策略(训练模型顺序、偏差方差、数据集划分、数据不匹配)

    目录 0. 前言 1. 调试模型顺序 2. 偏差方差的解决方法 3. 数据集的选取划分 4. 数据不匹配问题 5. 评估指标的选取 6. 贝叶斯最佳误差 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  5. 卷积神经网络学习——第二部分:卷积神经网络训练的基本流程

    卷积神经网络学习--第二部分:卷积神经网络训练的基本流程 一.序言 二.训练流程 1.数据集引入 2.构建网络 (1)四层卷积神经网络 (2)两层全连接层网络 3.模型训练 4.模型评估 三.总结 一 ...

  6. ​厦大等高校研究人员利用卷积神经网络学习脑电地形图表示进行分类

    脑电图(EEG)地形图表征(Electroencephalography topographical  representation, ETR)可以监测区域大脑活动,是一种可以用于探索皮层机制和联系的 ...

  7. ​利用卷积神经网络学习脑电地形图表示进行分类

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 脑电图(EEG)地形图表征(Electroencephalography topographical  represen ...

  8. 卷积神经网络学习指南_卷积神经网络的直观指南

    卷积神经网络学习指南 by Daphne Cornelisse 达芙妮·康妮莉丝(Daphne Cornelisse) 卷积神经网络的直观指南 (An intuitive guide to Convo ...

  9. C++语言学习(十九)——C++类型识别

    C++语言学习(十九)--C++类型识别 一.C++类型识别简介 1.C++类型识别简介 C++是静态类型语言,其数据类型是在编译期就确定的,不能在运行时更改. C++语言中,静态类型是对象自身的类型 ...

最新文章

  1. disk boot failure,insert system disk and press enter
  2. android id 重名_Android App 自定义权限重名不能安装解决办法
  3. 为什么TCP建立连接需要三次握手
  4. 用美图秀秀(微软调色版)生成的R分量为255的图片在MATLAB和OpenCV中R分量为254
  5. 轨道半径对氦原子基态能级的影响He
  6. linux删去分区的文件夹,如何恢复 Linux 分区下误删的文件?
  7. SAP Spartacus 中的依赖注入 Dependency Injection 介绍
  8. linux下tomcat脚本,Linux下重启多个 tomcat 服务的脚本(推荐)
  9. MySQL—修改数据库root用户密码
  10. Cocos2d-x3.1TestCpp之NewRenderTest Demo分析
  11. 基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)
  12. win7计算机右键直接有设备管理器等相关,为什么我的计算机点击右键后里头没有设备管理器了?windows7旗舰版的,不知怎么就不见了...
  13. c++优先队列小节(常常弄混)
  14. 智能客户—ERP技术新方向
  15. 几行代码快速去掉迅雷临时文件的后缀
  16. Hulu热招 | ADI广告数据和算法团队
  17. 【Android】基于Airtest实现大麦网app自动抢票程序
  18. ubuntu软件的卸载
  19. 如果你有多余的想象力,请安放在手机上
  20. 【远程文件浏览器】Unity+Lua开发调试利器

热门文章

  1. 运营笔记:一个新公众号怎么吸粉?看看这位大神怎么做的!
  2. 任泽平最新演讲:从这6个周期,读懂中国经济未来走势
  3. 给虚拟机下载安装jdk,hadoop等(非常详细的步骤)
  4. 区块链技术应用到现实场景中,是个什么样?
  5. [变分法介绍]优美的旋轮线:最速下降线问题,通过费马光学原理的初等证明
  6. Chtholly Nota Seniorious
  7. 【数据结构与算法分析】证logXX 对所有的X0成立
  8. 套利[题目][j2]
  9. domoticz添加和风天气与彩云天气
  10. python语言下,B站(bilibili)热门排行榜视频封面爬取程序V1.0 小白也能看懂,八十岁没牙老太太看完拿舌头都能爬封面!!