An Overview of DCNN Architectures: Efficient Models
Contents
In this post, we discuss the computally efficient DCNN architectures, such as MobileNet, ShuffleNet and their variants.
Architectures | Resources |
---|---|
ResNet | [paper] [code (pytorch)] |
ResNeXt | [paper] [code (lua, official)] [code (pytorch)] |
MobileNet | [paper] [code] |
MobiletNet V2 | [paper] [code] |
ShuffleNet | [paper] [code] |
ShuffleNet V2 | [paper] [code] |
SqueezeNet | [paper] [code] |
SqueezeNeXt | [paper] [code] |
Convolution Operation and Its Variants
首先来回顾一下卷积操作的计算成本的表示方式。给定以下条件:
- 输入:尺寸为$H\times W\times N$的feature map
- 卷积:$M$个$K\times K\times N$大小的卷积核
- 输出:尺寸为$H\times W\times M$的feature map
则卷积操作的计算成本为$HWNK^2M$。可以看出,该计算成本主要受限于:
- 输出feature map的空间尺寸$H\times W$
- 卷积核尺寸$K\times K$
- 输入与输出的channel数量$N$与$M$
一般来说,输出feature map的尺寸是无法改变的,所以efficient models主要是在第2、3点上做文章。
Standard Convolution
基本的卷积指的是同时在空间($H$与$W$方向)与通道($C$方向)上进行卷积操作,其操作成本即为上述的$HWNK^2M$。
Conv 3x3
$3\times 3$的卷积操作如上图所示,可以看出,在空间与通道上都是稠密的连接,其计算成本为$9\times HWNM$。
- 空间上,output map上的每一点都与input map上的9个点(图中只表现了3个)相关联
- 通道上,output map的每个通道都与input map上的所有通道相关联
Conv 1x1
$1\times 1$的卷积又称为pointwise卷积,主要作用是改变input map的通道数量,“融合”各通道的信息。其计算成本为$HWKM$,是$3\times 3$卷积的$1⁄9$。
- 空间上,output map上的每一点都只与input map上的一个点相关联
- 通道上,与$3\times 3$卷积类似,output map的每个通道都与input map上的所有通道相关联
Grouped Convolution
分组卷积是基本卷积的变种,主要是将input feature map的通道分组进行卷积,各个组之间卷积操作相互独立,最后再将各个组的结果连接起来。
- 令$G$代表分组数量,则其计算成本为$HWNK^2M/G$,是基本卷积的$1/G$
- $G$越大,则在通道上的卷积操作越稀疏
Depthwise Convolution
Depthwise卷积是对input map的每一个通道进行单独的卷积,可以视为$G=N$的分组卷积操作的特例。
使用$N$个尺寸为$K\times K\times 1$的卷积核对尺寸为$H\times W\times N $的输入feature map进行卷积,输出相同尺寸的feature map
计算成本为$HWNK^2$,通过忽略通道方面的卷积,depthwise卷积大幅减少了计算成本
Channel Shuffle
Channel shuffle是将input feature map的通道顺序进行随机打乱的一种操作。其操作主要通过reshape与transpose实现:
- 输入feature map尺寸为$H\times W\times N$,其中$N=GN’$
- 将输入reshape为$H\times W \times G\times N’$
- 将输入transpose为$H\times W\times N’\times G$
- 将输入reshape回$H\times W\times N$,作为输出
其计算成本无法用加法与乘法的操作次数来衡量,不过也是有一定开销的。
Efficient Models
ResNet & ResNeXt
对ResNet/ResNeXt的详细介绍可见之前的文章,这里主要介绍其卷积操作的结构。
ResNet的residual unit主要是一种bottleneck的结构,其能从一定程度上降低计算成本:
- 先用一个$1\times 1$的卷积减少输入的通道数,从而减少之后$3\times 3$卷积的计算成本
- 而后用$3\times 3$的卷积进行卷积
- 最后用$1\times 1$的卷积来恢复通道数
ResNeXt的主要改进在于使用分组的$3\times 3$卷积代替了ResNet中的普通$3\times 3$卷积。如此一来,节省下的计算成本可以让第一步$1\times 1$卷积的通道缩减比率变得小一些,从而使得ResNeXt能在与ResNet相近的计算成本时获得更好的准确率。
SqueezeNet
主要是改进了Inception的结构,提出所谓的squeeze + expand的fire module:
- 先用一个$1\times 1$的卷积减少输入的通道数,从而减少之后的计算成本
- 而后分别用$1\times1$与$3\times 3$的卷积进行卷积
- 在通道上连接上一步的两个输出结果
MobileNet
MobileNet主要是使用了separable convolution modules,也就是1个depthwise卷积加上1个pointwise卷积(也就是$1\times 1$卷积),使得卷积在空间与通道上的操作分离开来,从而显著地减少了计算成本。
- 首先使用depthwise卷积处理$H\times W\times N$的输入,其中使用了$N$个$K\times K\times 1$的卷积核,计算成本为$HWNK^2$
- 其次使用pixelwise的卷积处理上一步的输出,其中使用了$M$个$1\times 1\times N$的卷积核,计算成本为$HWNM$
所以1次separable卷积的计算成本为$HWN(K^2+M)$,而普通的卷积操作的计算成本为$HWNK^2M$。由于一般情况下(例如$M=32, K=3$时),$M\gg K^2$,所以separable卷积的计算成本为普通方式的$\frac{K^2+M}{K^2M}\approx\frac{1}{K^2}$,即大约$1⁄8$或者$1⁄9$倍。
同时,可以看出,此时的计算成本的瓶颈主要在于$1\times 1$卷积计算成本中的$M$因素。
ShuffleNet
ShuffleNet主要是使用分组卷积来降低separable卷积操作中的$1\times 1$卷积的计算成本。同时,ShuffleNet还在分组卷积之后增加了channel shuffle操作,防止某一通道只在某一组中进行卷积,使得各个通道的输出都有可能传入到各个组中去,从而避免了精度降低。
MobileNet V2
MobileNet V2主要在ResNet的residual unit的基础上,
- 使用depthwise卷积替换了普通的$3\times 3$卷积
- 使用$1\times 1$卷积首先扩大通道数,而后在最后减少通道数
当然,MobielNet V2的unit也可以表示成如上图这样的形式(由于MobileNet V2是由一堆units叠在一起的,所以可以这么看)。这样的话,原始版本的MobileNet中的$1\times 1$卷积就被拆成了两个。令$T$表示通道数的减小比率,则原始的$1\times 1$卷积的计算成本为$HWN^2$,拆成2个$1\times 1$卷积的计算成本为$2HWN^2/T$。MobileNet V2使用$T=6$,则其$1\times 1$卷积的计算成本是MobileNet V1的$1⁄3$。
SqueezeNeXt
ShuffleNet V2
ShuffleNet V2主要是通过实验研究了在设计与评价轻量级网络的方法,并从中归纳了一些经验性的准则。
首先是直接指标(例如速度)与间接指标(例如 FLOPs)之间的差异。由于FLOPs仅和卷积部分相关,尽管这一部分需要消耗大部分的时间,但其它过程例如数据I/O、数据重排和元素级运算(张量加法、ReLU等)也需要消耗一定程度的时间。FLOPs近似的网络也会有不同的速度。这两者的差异主要在于:
- 对速度有较大影响的几个重要因素对 FLOPs 不产生太大作用。
- 其中一个因素是内存访问成本 (MAC)。在某些操作(如组卷积)中,MAC 占运行时间的很大一部分。对于像 GPU 这样具备强大计算能力的设备而言,这就是瓶颈。在网络架构设计过程中,内存访问成本不能被简单忽视。
- 另一个因素是并行度。当 FLOPs 相同时,高并行度的模型可能比低并行度的模型快得多。
- FLOPs 相同的运算可能有着不同的运行时间,这取决于硬件平台以及其网络实现。
通过实验研究,该文章提出了评价与设计的经验准则:
- 评价准则:
- 应该用直接指标(例如速度)替换间接指标(例如 FLOPs)
- 这些指标应该在目标平台上进行评估。
- 设计准则:
- 相同的通道宽度可最小化MAC
- 过度的组卷积会增加 MAC
- 网络碎片化(例如GoogLeNet或者Inception的多路径分支结构)会降低并行度
- 元素级运算的计算成本不可忽视
基于此,该文章提出了ShuffleNet V2的单元结构: