1.简介

ShuffleNet V1是Face++于2017年提出的轻量级深层神经网络。作者在2018年又提出了基于V1版本改进的ShuffleNet V2版本。ShuffleNet V1中的核心思想为group结合shuffle操作来改进传统的ResNet的block。而ShuffleNet V2则根据相同的FLOPs(float-point operations,乘积数量)情况下模型速度差别仍然很大这一现象,指出内存访问损失时间和FLOPS共同决定了网络在实际落地时训练和运行的速度。最终通过实验说明了 卷积层输入输出通道数、group操作数、网络模型分支数以及Elementwise操作数,这四个因素对最终模型速度的影响。ShuffleNet V2根据上述实验结合V1中block的架构对网络结构做出了一定的改进,提升了模型实际引用时的速度。

ShuffleNet V1论文地址:https://arxiv.org/abs/1707.01083
ShuffleNet V2论文地址:https://arxiv.org/abs/1807.11164
ShuffleNet V1/V2代码(caffe):https://github.com/farmingyard/ShuffleNet
ShuffleNet V1代码(Tensorflow):https://github.com/MG2033/ShuffleNet
ShuffleNet V1代码(Pytorch):https://github.com/jaxony/ShuffleNet
ShuffleNet V2代码(Pytorch):https://github.com/miaow1988/ShuffleNet_V2_pytorch_caffe

2.ShuffleNet V1

(1)网络结构
ShuffleNet V1论文总体结构图如下,核心思想为group结合shuffle操作来改进传统的ResNet的block。正是这种结构实现了在不降低网络性能的前提下减少网络参数和计算量。


简单的对上述结构图做下解释。ShuffleNet V1和ResNet结构相对类似,主要有3个stage,各个stage中的那个1对应的结构如下图。各个stage中的3,7,3就是本文提出的shuffle block的个数。而上图中还给出了不同的group参数所对应的通道数。关于group的含义在下面的shuffle block的介绍中详细说明。

(2)shuffle block
接下来通过图文并茂的策略来阐述shuffle block结构是如何实现的。如下图所示,整个block首先通过如下图所示的group操作减少网络参数,并对group操作后输出的特征图作shuffle操作,用以消除由于group造成的特征屏蔽现象,紧接着再跟一个group操作。

如下图所示,展示了group操作以及shuffle操作的简单示意。

最后入下图所示的结构,我们可以发现shufflenet中group操作都是作用于1*1卷积操作中,论文中称之为pointwise group Convolutions。下图的两种结构对应了上述中体结构图中(红框部分)的1和3(7)部分。这两种结构右边结构可以缩小一半的特征图,右边的结构特征图大小不变。

(3)实验结论

首先作者通过实验证明不同group和不同倍数通道情况下的计算量以及分类误差结果。需要注意的是乘1状态下就是整体结构中的通道数。

如下图所示,作者证明了shuffle操作确实有功能。

如下图所示,对比了在相同计算量的情况下,不同网络于shufflenet分类误差的对比。

如下图所示,对比了不同状态下shufflenet和mobilenet的结果对比。

如下图所示,比较了和shufflenet在基本相同分类结果下的计算量的对比。

如下图所示,比较了shufflenet和mobilenet在目标检测数据集coco上的效果。

如下图所示,比较了不同输入尺寸下各个网络的计算量和计算时间。

3.ShuffleNet V2

ShuffleNet V2则根据相同的FLOPs(float-point operations,乘积数量)情况下模型速度差别仍然很大这一现象,指出内存访问损失时间(MAC)和FLOPS共同决定了网络在实际落地时训练和运行的速度。FLOPS和参数量有关可以通过网络结构直接得知,但内存访问损失时间难以得知,因此本文最终通过实验说明了 卷积层输入输出通道数、group操作数、网络模型分支数以及Elementwise操作数,这四个因素对内存访问损失时间(MAC)的影响。ShuffleNet V2根据上述实验结果,结合V1中block的架构对网络结构做出了一定的改进,提升了模型实际应用时的速度。

(1)四个实验

1.卷积层输入输出通道数对MAC的影响
最终的结论为:卷积层的输入和输出特征通道数相等时MAC最小,此时模型速度最快。

2.group操作数对MAC的影响
最终的结论为:过多的group操作会增大MAC,从而使模型速度变慢。

3.网络模型分支数对MAC的影响
最终的结论为:模型中的分支数量越少,模型速度越快。

4.Elementwise操作数对MAC的影响
Elementwise操作所带来的时间消耗远比在FLOPs上的体现的数值要多,因此要尽可能减少Elementwise操作。

根据上述四个实验得到的结论,相应的对ShuffleNet V1做出对应的改进来设计网络结构,也就是ShuffleNet v2。

(2)网络结构

ShuffleNet V2的整体结构图如下,可以看出其和ShuffleNet V1差别不大,因为其整体结构没有改变,改变的是block的设计。

(3)ShuffleNet V2 block
如下图所示,图a,b展示的是ShuffleNet V1的两种block示意图。而图c对应了基于上述实验分别对图a,b中的结构的改进。图d多增加了一个depthwise卷积,有助于增加感受野。

  • 改进点1:利用channel split对输入通道对半分。因为实验一种提到输入输出相同MAC最小。

  • 改进点2:利用channel split替换了group操作。因为实验二中提到group越少MAC越小。

  • 改进点3:将shuffle移到了concat之后。因为实验三提到分支越少MAC越小。(且第一个1*1卷积后没有group,shuffle确实不是必须的)

  • 改进点4:去掉Elementwise改成concat。因为实验四种提到Elementwise越少MAC越小。(且此时经过split正好可以concat)

(4)实验结果
如下表所示是先有的模型在速度、效果、FLOPs上的详细对比。

Note:实验中不少结果都和前面几点发现吻合,比如MobileNet v1速度较快,很大一部分原因是因为简单的网络结构,没有太多复杂的支路结构;IGCV2和IGCV3因为group操作较多,所以整体速度较慢;最后的几个通过自动搜索构建的网络结构,和前面的第3点发现对应,因为支路较多,所以速度较慢。 (引自网络)

在目标检测实验coco数据集中的速度,map的结果对比。如下图中的带星号的ShuffleNet V2代表的是在1*1卷积层前增加一个3*3的depthwise卷积层。

ShuffleNet V1/V2 | 轻量级深层神经网络相关推荐

  1. 轻量化网络—ShuffleNet V1 V2理解

    轻量化网络-ShuffleNetV2理解 ShuffleNetV2原始论文:https://openaccess.thecvf.com/content_ECCV_2018/html/Ningning_ ...

  2. 第八课:ShuffleNet v1、ShuffleNet v2学习

    前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容.来源于哔哩哔哩博主"霹雳吧啦Wz",博主学习作为笔记记录,欢 ...

  3. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design

    手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). ​​​​​​高效的CNN设计不只是用在服务器,云端,资源 ...

  4. 用深层神经网络解释大脑的运作

    来源:混沌巡洋舰 Daniel Yamins,麻省理工学院博士后的一位计算神经科学,有时会为了他的机器视觉项目辛苦工作到午夜以后.他煞费苦心地设计了一个系统,可以识别图片中的物体,而不管其大小.位置和 ...

  5. 【TensorFlow】笔记2:深层神经网络

    一.深度学习 vs 深层神经网络 深度学习:一类通过多层非线性变换对高复杂性数据建模算法的集合. 1.激活函数 线性模型的最大特点:任意线性模型的组合仍是线性模型,能够解决的问题也是有限的,这就是线性 ...

  6. TensorFlow:实战Google深度学习框架(三)深层神经网络

    第四章 深层神经网络 4.1 深度学习与深层神经网络 4.1.1 线性模型的局限性 4.1.2 激活函数实现非线性化 4.1.3 多层网络解决异或问题 4.2 损失函数 4.2.1 经典损失函数 1. ...

  7. 为什么深层神经网络难以训练_“用魔法击败魔法”?一群计算神经学家正借神经网络解释大脑...

    原文:Deep Neural Networks Help to Explain Living Brains [1] 作者:Anil Ananthaswamy(科普作家) 译者:Yang 2011 年冬 ...

  8. TensorFlow学习笔记——深层神经网络

    引言 TensorFlow 版本1.15pip3 install tensorflow==1.15.0. 这是<TensorFlow实战Google深度学习框架(第2版)>的学习笔记,所有 ...

  9. 吴恩达deeplearning.ai系列课程笔记+编程作业(6)第二课 改善深层神经网络-第二周:优化算法 (Optimization algorithms)

    第二门课 改善深层神经网络:超参数调试.正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and ...

最新文章

  1. Linux运维之道之ENGINEER1.1(配置邮件服务器,数据库管理基础,表数据管理)
  2. 【Java】反射( reflection)机制 详解
  3. python自加自减_Java自增和自减运算符(++和--)
  4. Spring-AOP 混合使用各种切面类型及不同切面总结
  5. segment fault
  6. stay hungry stay foolish原文_弟子规原文+译文+注释
  7. 补习系列(20)-大话 WebSocket 与 尬聊的实现
  8. 【opencv】图像处理之开闭运算
  9. 日期相关的小函数汇总
  10. 测试用例设计方法——正交实验法
  11. (转载)学好 Python 的 11 个优秀资源
  12. 100部5星国外经典电影
  13. CREO二维CAD图纸导出1:1比例导出,单位为mm
  14. ImportError: DLL load failed while importing _openmp_helpers: 拒绝访问。sklearn库拒绝访问
  15. 微信小程序之个人中心静态页面
  16. 跨域请求传递Cookie
  17. 数据库课程设计--淘宝购物订单系统
  18. JAVA 如何使用延迟
  19. 运用Acronis True Image恢复系统
  20. Gartner 发布中国IaaS PaaS市场服务报告,天翼云强势入选

热门文章

  1. ios项目如何实现版本更新?
  2. WWDC20 发布会你看了吗?看完 WWDC20 后的感受
  3. 东北大学计算机与教育,东北大学计算机和吉林大学的计算机应该选择哪个?
  4. java-net-php-python-ssm二手手机回购网站计算机毕业设计程序
  5. java邮件模板代码_Java的Spring框架中实现发送邮件功能的核心代码示例
  6. 分享实用的学习课程,软件。
  7. Tiktok 弹幕游戏直播互动数据获取方案
  8. 人体姿态估计(Human Pose Estimation)文献综述
  9. 在mysql中unique唯一索引的作用_MySQL_MySQL中的唯一索引的简单学习教程,mysql 唯一索引UNIQUE一般用于不 - phpStudy...
  10. 在计算机语言中go是什么意思,Golang中’*’和’’的含义是什么?