ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

ShuffleNet v2

1、四个问题

  1. 要解决什么问题?

    • 轻量化模型。
  2. 用了什么方法解决?

    • 文中提出了几条设计轻量化模型的实践准则(guidelines)。

      1. Guideline 1:输入通道数与输出通道数保持相等可以最小化内存访问成本(memory access cost,简称MAC)。
      2. Guideline 2:组卷积中使用过多的分组数会增加内存访问成本(MAC)。
      3. Guideline 3:网络结构太复杂(分支和基本单元过多)会降低网络的并行程度。
      4. Guideline 4:Element-wise的操作消耗不可忽视(包括ReLU,Tensor相加,bias相加等等)。
    • 这篇文章主要是在ShuffleNet v1的基础之上进行改进的,并依照提出的guidelines重新改进了Shuffle Unit,并构建了ShuffleNet v2。

  3. 效果如何?

    • 文中进行了大量的对比实验,将上述的准则直接对现有的一些模型进行修改,验证准则的准确性。
    • 将ShuffleNet v2与其他模型进行比较,验证了其有效性。
  4. 还存在什么问题?

    • 这篇论文是今年才发表在ECCV18上的文章,各方面考虑得都很全,思路也很新颖,目前网上的复现还不是很多,后面我也去复现试试。

2、论文概述

2.1、引言

  • 目前一些有效地轻量化网络都是基于depth-wise convolution和group convolution的。
  • 大多数文章中针对网络计算复杂性的度量标准是浮点运算量(FLOPs),但是文中通过实验发现,FLOPs并不能与网络的计算速度成正比。

  • 从图中可以看出,相同的FLOPs下,不同网络的实际运行速度有不小差距。
  • 非直接度量标准(FLOPs)和直接度量标准(实际运行速度)的结果有所偏差,原因如下:
    1. 有一些很重要的影响因素,并没有被FLOPs考虑进去。

      1. 一个就是内存访问成本(MAC)。比如执行组卷积时,算力更强的平台如GPU就可以忽略不计,而算力相对较弱的平台如ARM就不能忽略不计了。
      2. 另一个原因就是并行化程度。在相同的 FLOPs 下,网络并行化程度更高的网络速度更快。
    2. 具有相同FLOPs的操作在不同平台上,运行时间效率不同。

2.2、网络设计准则

Guideline1 : Equal channel width minimizes memory access cost (MAC)

  • 输入通道数与输出通道数保持相等可以最小化内存访问成本(memory access cost,简称MAC)。

  • 假设输入通道数为c1c_1c1​,输出通道数为c2c_2c2​,特征图为h×wh \times wh×w。

    • 每个1×11 \times 11×1 卷积层的FLOPs是:B=h⋅w⋅c1⋅c2B = h \cdot w \cdot c1 \cdot c2B=h⋅w⋅c1⋅c2。
    • 则MAC(内存访问操作次数)为:MAC=h⋅w⋅(c1+c2)+c1⋅c2MAC = h \cdot w \cdot (c_1 + c_2) + c_1 \cdot c_2MAC=h⋅w⋅(c1​+c2​)+c1​⋅c2​。
    • 由于c1+c2≥2c1⋅c2=2Bh⋅wc_1 + c_2 \geq 2 \sqrt{c_1 \cdot c_2} = 2 \sqrt{\frac{B}{h \cdot w}}c1​+c2​≥2c1​⋅c2​​=2h⋅wB​​。
    • 带入MAC的式子中,可得:MAC=h⋅w⋅(c1+c2)+c1⋅c2≥2⋅h⋅w⋅Bh⋅w+c1⋅c2MAC = h \cdot w \cdot (c_1 + c_2) + c_1 \cdot c_2 \geq 2 \cdot h \cdot w \cdot \sqrt{\frac{B}{h \cdot w}} + c_1 \cdot c_2MAC=h⋅w⋅(c1​+c2​)+c1​⋅c2​≥2⋅h⋅w⋅h⋅wB​​+c1​⋅c2​。
    • 最终得到MAC≥2⋅B⋅h⋅w+Bh⋅wMAC \geq 2 \cdot \sqrt{B \cdot h \cdot w} + \frac{B}{h \cdot w}MAC≥2⋅B⋅h⋅w​+h⋅wB​。
    • 由此可知,MAC具有下界,当输入与输出通道数相等,即c1=c2c_1 = c_2c1​=c2​时,MAC最小。
  • 关于guideline1的实验结果如下图:

    • 通过变换通道数,保证了几个实验的FLOPs大致一样。从实验结果可以看出,当c1=c2c_1 = c_2c1​=c2​时,速度最快。

Guideline2 : Excessive group convolution increases MAC.

  • 组卷积中使用过多的分组数会增加内存访问成本(MAC)
  • 对于组卷积来说,FLOPs为:B=h⋅w⋅c1⋅c2gB = \frac{h \cdot w \cdot c_1 \cdot c_2}{g}B=gh⋅w⋅c1​⋅c2​​。ggg为分组数。
  • 组卷积的MAC计算公式如下:

  • 假设h,w,c1,Bh, w, c_1, Bh,w,c1​,B不变,如果分组数ggg增加,那么MAC也会增加。
  • 关于guideline2的实验结果如下图:

  • 论文中给出的建议:

    • 分组数应该根据实际课题以及应用的平台谨慎选择。单纯的通过增加分组卷积来增加通道数从而增加精确度是一个不明智的选择。

Guideline3 : Network fragmentation reduces degree of parallelism.

  • 网络结构太复杂(分支和基本单元过多)会降低网络的并行程度。
  • 以下是实验中使用的结构:

  • 实验结果如下:

Guideline4 : Element-wise operations are non-negligible.

  • Element-wise的操作消耗不可忽视
  • 通过去除shortcut和ReLU等,在GPU和ARM上都可以获得将近20%左右的提速。

2.3、ShuffleNet v2

  • ShuffleNet v1中可以优化的点:

    1. depthwise convolution和bottleneck结构增加了MAC。
    2. 组卷积中也使用了太多的组数。
    3. 跨层连接中的element-wise add等也可以去掉。
  • 图(a)和图(b)是ShuffleNet v1中的Shuffle Unit,图©和图(d)是改进后的Shuffle Unit。
    • 增加了Channel Split操作,实际上就是把输入通道分为2部分。
    • 依照guideline2,减少分组卷积的分组数。只将一半的通道送入卷积层,剩下一半保留。
    • 依照guideline1,输入与输出通道数相同。每个分支中的卷积层的输入输出通道数都一致。
    • 依照guideline3,减少基本单元数。因此有一个分支不做任何操作,直接做恒等映射。
    • 依照guideline4,删去一些element-wise操作。最后使用了concat替代了element-wise add,并去除了最后的ReLU。
    • 最后加入了channel shuffle来增加通道之间的信息交流。
    • 在网络的最后,还要在平均池化层之前加入1×11 \times 11×1卷积层来进一步融合特征。
  • 网络结构:

2.4、实验

  • 几个大型模型结果比较:

  • 在COCO数据集下目标检测结果比较:

  • 多个模型综合比较:

3、参考资料

  1. ShuffleNet v2算法笔记
  2. ShuffleNet V2 论文阅读笔记

论文笔记:ShuffleNet v2相关推荐

  1. ShuffleNet 系列(2): ShuffleNet v2 理论讲解

    ShuffleNet V2 概述 论文:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design shuffl ...

  2. ShuffleNet V2 论文阅读笔记

    ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design 阅读笔记 论文链接:https://arxiv.or ...

  3. 论文笔记 | 谷歌 Soft Prompt Learning ,Prefix-Tuning的 -> soft promt -> p tuning v2

    论文笔记 | 谷歌 Soft Prompt Learning ptuning -> Prefix-Tuning -> soft promt -> p tuning v2 " ...

  4. ConvNeXt V2 论文笔记

    ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders(2023.1.2-v1) 链接:   paper     ...

  5. ShuffleNet V2学习笔记

    paper:<ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design> 导语 神经网络架构的设计 ...

  6. 光流 速度_[论文笔记] FlowNet 光流估计

    [论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...

  7. unet论文_图像分割之RefineNet 论文笔记

    RefineNet: Multi-Path Refinement Networks forHigh-Resolution Semantic Segmentation (2017) 论文笔记 文章的创新 ...

  8. 论文笔记 | Counterfactual Samples Synthesizing for Robust VQA

    论文笔记整理:窦春柳,天津大学硕士. 来源:CVPR 2020 链接: https://openaccess.thecvf.com/content_CVPR_2020/papers/Chen_Coun ...

  9. 轻量化网络:ShuffleNet V2

    Guideline 1-4: ShuffleNet V2 疑问: ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture ...

最新文章

  1. 【直播】陈安东,但扬:CNN模型搭建、训练以及LSTM模型思路详解
  2. mac txt 换行符_推荐两款免费的网页代码编辑器(Win和Mac系统)
  3. 【每天读一遍,不久你就会变!】【送给迷茫的朋友】
  4. python中的with
  5. JAVA企业级应用TOMCAT实战视频课程
  6. Python 高级面向对象
  7. “您都对”、“客户都对”也能申请为商标?
  8. OpenStack Glance(镜像服务)基础架构:Basic architecture
  9. 解决 min-width 在 IE6 中无效的方法
  10. 集成Google Play支付
  11. 网络异常模拟测试方法
  12. Unity台北場優化分享 达哥 讲 Unity优化
  13. web程序_通过学号查询学生信息_笔记
  14. adb: error: failed to copy ‘xx‘ to ‘xx‘: remote couldn‘t create file: Permission denied
  15. Linux源码阅读——PCI总线驱动代码(一)整体框架
  16. 阿里云 oss 同区域不同桶名的文件互传
  17. 【学相伴】狂神说 RabbitMQ笔记(简单使用RabbitMQ)
  18. 眼泪水就象汗一样跟倒跟倒就流下来了
  19. 【计算机毕业设计】基于JSP的网上购物系统的设计与实现
  20. Android之来电秀实现(一)

热门文章

  1. 三年程序员之后的思考
  2. JVM 中的守护线程
  3. 图像检索:Fisher Information Matrix and Fisher Kernel
  4. Java直接内存与堆内存
  5. Java HashMap 核心源码解读
  6. 用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
  7. 用初次训练的SVM+HOG分类器在负样本原图上检测HardExample
  8. 编程之美-连连看游戏设计方法整理
  9. Markdown 语法说明 (简体中文版)
  10. 鸟哥的Linux私房菜(基础篇)- 第七章、Linux 文件与目录管理