高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

目录

一、参数数量和理论计算量

二、Xception

三、MobileNetV1

四、MobileNetV2

五、ShuffleNet

六、ShuffleNet  V2


一、参数数量和理论计算量

1、定义

  • 参数数量(params):关系到模型大小,单位通常为M,通常参数用 float32 表示,所以模型大小是参数数量的 4 倍
  • 理论计算量(FLOPs):
    • 是 floating point operations 的缩写(注意 s 小写),可以用来衡量算法/模型的复杂度,这关系到算法速度,大模型的单位通常为 G,小模型单位通常为 M。
    • 通常只考虑乘加操作(Multi-Adds)的数量,而且只考虑 CONV 和 FC 等参数层的计算量,忽略 BN 和PReLU 等等。一般情况,CONV 和 FC 层也会 忽略仅纯加操作 的计算量,如 bias 偏置加和 shotcut 残差加等,目前技术有 BN 的 CNN 可以不加 bias

2、计算公式

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

 

二、Xception

原文地址: Xception:Deep Learning with Depthwise Separable Convolutions

作者:François Chollet

Depthwise(DW)卷积与Pointwise(PW)卷积,合起来被称作Depthwise Separable Convolution(参见Google的Xception)

对于一张5×5像素、三通道彩色输入图片(shape为5×5×3),Depthwise Convolution首先经过第一次卷积运算,不同于上面的常规卷积,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),如下图所示

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

Depthwise Convolution完成后的Feature map数量与输入层的通道数相同,无法扩展Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的feature信息。因此需要Pointwise Convolution来将这些Feature map进行组合生成新的Feature map。

Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map。如下图所示。

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

这两个步骤不起来被称为DepthWise convolution

这种操作是相当有效的,在imagenet 1000类分类任务中已经超过了InceptionV3的表现,而且也同时减少了大量的参数,我们来算一算,假设输入通道数为3,要求输出通道数为256,两种做法:

1.直接接一个3×3×256的卷积核,参数量为:3×3×3×256 = 6,912

2.DW操作,分两步完成,参数量为:3×3×3 + 3×1×1×256 = 795,又把参数量降低到九分之一!

因此,一个depthwise操作比标准的卷积操作降低不少的参数量,同时论文中指出这个模型得到了更好的分类效果。

 

三、MobileNetV1

MobileNets其实就是Exception思想的应用。区别就是Exception文章重点在提高精度,而MobileNets重点在压缩模型,同时保证精度。

 

四、MobileNetV2

五、ShuffleNet

这篇文章在mobileNet的基础上主要做了1点改进:

mobileNet只做了3*3卷积的deepwiseconvolution,而1*1的卷积还是传统的卷积方式,还存在大量冗余,ShuffleNet则在此基础上,将1*1卷积做了shuffle和group操作,实现了channel shuffle 和pointwise group convolution操作,最终使得速度和精度都比mobileNet有提升。
 

如下图所示,

(a)是原始的mobileNet的框架,各个group之间相互没有信息的交流。

(b)将feature map做了shuffle操作

(c)是经过channel shuffle之后的结果。

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

在图(a)中,每个group是互不影响的,所以最后得到的output也无法整合全部的input信息。(b)中,通过将每个group继续分配到每个卷积中,整合了所有group的信息,而不是单单的某个group。(c)是图(b)实现后的结果。

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

ShuffleNet Units 的结构如上图所示,

(a)是一个带depthwiseconvolution (DWConv)的bottleneck unit

(b)在(a)的基础上,进行了pointwisegroup convolution (GConv) and channel shuffle

(c)进行了AVG pooling和concat操作的最终ShuffleNetunit
 

六、ShuffleNet  V2

论文指出单纯的乘加运算FLOPs并不能完全表示模型的运算速度,访存开销memory access cost(MAC)也应该考虑进去。并基于这,设计出了轻量化网络ShuffleNet V2。

提出了4个改进的原则:

(1)单个模块的输入输出通道相同,可以最小化访存开销(MAC)

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

c1:输入通道数

c2:输出通道数

h,w:输入feature map 的高度,宽度

B:FLOPs数,就是计算量,这里假设B恒定,卷积为1*1卷积(pointwise convolution ),因此计算量就是hwc1c2

MAC:访存次数,包括从内存取输入的feature map 的次数hwc1,将结果写回去的次数hwc2,取1*1卷积核参数的次数1*1*c1*c2

假设FLOPs数B恒定,c1*c2乘积一定的条件下,c1==c2可以使得c1+c2的值最小。

(2)过量使用组卷积group convolution ,会增加MAC

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

g:组卷积的group个数

B:FLOPs数,由于这里使用的是组卷积,因此要除g

MAC:访存次数,从MAC公式可以看出,g越大,MAC值越大

(3)网络的分支越多,并行度越差

网络碎片化会降低并行度 一些网络如Inception,以及Auto ML自动产生的网络NASNET-A,它们倾向于采用“多路”结构,即存在一个lock中很多不同的小卷积或者pooling,这很容易造成网络碎片化,减低模型的并行度,相应速度会慢

(4)Element-wise 操作的时间是不可忽略的

像ReLU, AddTensor, AddBias 这些操作,虽然具有比较小的FlOPs数,但是却有比较大的访存MAC
 

 

最终结论:

  1. 使用平衡的卷积,(相同的输入,输出通道数)
  2. 组卷积的group数要谨慎设计
  3. 减少网络的并行度,减少碎片化
  4. 减少Element-wise 操作

 

网络模块:

高效网络:Xception, MobileNet, MobileNet V2, ShuffleNet ,ShuffleNet V2

 

前2个模块为ShuffleNet V1中的模块,(a)为传统模块,(b)为下采样模块

后2个模块为ShuffleNet V2中的模块,(c)为传统模块,(d)为下采样模块

V2和V1模块设计的区别:

  1. v2中的传统模块增加了channel split,假设原始输入通道数为c,将通道分成了c-c’和c’两个通道,实验中,c’=c/2
  2. 将channle shuffle操作移到后面来做
  3. 传统模块中将add操作转化为concat操作,有助于增加信息量,减少运算量
  4. 将Group conv换成了普通的conv,可以减少group数,减少MAC
     

分类任务精度:

ShuffleNet v2 ≥MobileNet v2 > ShuffeNet v1 > Xception

检测任务精度:

ShuffleNet v2 > Xception ≥ ShuffleNet v1 ≥ MobileNet v2

 

 

参考:

https://blog.csdn.net/tintinetmilou/article/details/81607721

https://blog.csdn.net/qq_14845119/article/details/73648100