zoukankan      html  css  js  c++  java
  • 论文-ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

    1、摘要

      当下神经网络架构设计主要以indirect metric,比如FLOPs,作为指导,但是direct metric,比如speed,也依赖于其他的因素,比如memory acccess cost,platform characters。因此,这篇文章不再局限于FLOPs的评估,而是在target platform上去评估直接的指标,并且通过一系列的控制实验,得出了几个高效网络设计的practical guidelines。

    2、背景

      (1)Group convolution和depth-wise convolution是目前轻量化网络(Xception、MobileNet、MobileNetV2、ShuffleNet、CondenseNet等)的关键block。

      (2)为了度量计算复杂度,一个广泛使用的度量是浮点运算的数量,或FLOPs。然而,FLOPs是一个间接的衡量标准。它只是直接指标如speed、latency的一个近似反映,而不等效于它们。

        例如下图(c)所示,同等FLOPs下,速度上:ShuffleNet v2 > Xception > MobileNet v2 > ShuffleNet v1

      

        间接量度和直接量度的不一致主要来源于2个方面:访存开销和并行度。

      

      (3)第二,根据平台的不同,使用相同的FLOPs的操作可能会有不同的运行时间。比如,3*3卷积并不绝对地比1*1卷积慢9倍。

    3、高效网络设计的实用指南

      G1:相等的通道宽度最小化内存访问开销(MAC) (Equal channel width minimizes memory access cost (MAC)

      文章针对1*1卷积给出了理论推导和实验验证。

      理论分析:

      1*1卷积的操作数为B=hwc1c2,其中h和w分别为feature map的高和宽,c1和c2分别为输入通道数和输出通道数,则MAC=hw(c1+c2)+c1c2,前面2项为输入和输出feature map的访存,后面一项为kernel的访存。由均值不等式可以得到:

      

      可以看出,在FLOPs一定的情况下,当c1=c2时MAC取下界。

       实验验证:

      

      

       G2:过度的组卷积会增加MAC (Excessive group convolution increases MAC

      组卷积是通过将所有channel之间的稠密卷积变为部分channel之间稀疏卷积来降低计算复杂度(FLOPs)。因此,在一定的FLOPs约束下可以有更多的通道,但增加的通道会导致更多的访存。

      理论分析:

      

      实验验证:

      

       

       G3:网络碎片化降低了并行度 (Network fragmentation reduces degree of parallelism

       GoogLeNet系列和自动生成架构,在每个网络block中广泛采用“multi-path”结构,,类似下图,大量的小操作符(这里称为“片段操作符”)被使用,而不是一些大的操作符.

      

      实验验证:

      

       

       G4:逐点运算不可忽视  (Element-wise operations are non-negligible)

       逐点运算:ReLU, AddTensor, AddBias, etc .They have small FLOPs but relatively heavy MAC. Specially, we also consider depthwise convolution as an elementwise operator as it also has a high MAC/FLOPs ratio.
       实验验证:

      

       

     4、ShuffleNet V2: an Efficient Architecture 

              

       (c)  引入channel split操作,其中C/2通道保持identity连接(遵守“G3碎片化”规则),另外C/2通道在进行1*1卷积、3*3深度卷积、1*1卷积时保持通道不变(遵守“G1通道相等”规则),而且这两个1*1卷积不再进行分组(遵守“G2过度分组”规则),这2个C/2通道最后通过concat合成C个通道,不再进行Element wise的Add操作,并且深度卷积和ReLU现在只粗在于C/2个通道中(遵守“G4逐点运算”规则)

      (d)  对于下采样block,文章没有像(c)那样做很多规则相关的说明,它其实是违反了一些规则的:首先是引入了2个分支(违反“G3碎片化”规则),然后是右边分支存在C-M/2这个升通道的1*1卷积(违反“G1通道相等”规则),当然如果C=M/2就不再违反了。

      

    5、实验

       


     

  • 相关阅读:
    解决 Python 连不上pip库的问题(使用国内镜像地址)
    【原】Coursera—Andrew Ng机器学习—Week 2 习题—Linear Regression with Multiple Variables 多变量线性回归
    【原】Coursera—Andrew Ng机器学习—Week 1 习题—Linear Regression with One Variable 单变量线性回归
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 4_Linear Regression with Multiple Variables 多变量线性回归
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 3_Linear Algebra Review
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 2_Linear regression with one variable 单变量线性回归
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 1_Introduction and Basic Concepts 介绍和基本概念
    vue项目中的父子组件之间的传值。
    精确讲述闭包及内存泄漏
    vue项目富文本编辑器vue-quill-editor之自定义图片上传
  • 原文地址:https://www.cnblogs.com/wt-seu/p/12586459.html
Copyright © 2011-2022 走看看