常用的轻量级网络有哪些?

SequeezeNet

SqueenzeNet出自F. N. Iandola, S.Han等人发表的论文《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and < 0.5MB model size》,作者在保证精度不损失的同时,将原始AlexNet压缩至原来的510倍。

设计思想

在网络结构设计方面主要采取以下三种方式:

  • 用1*1卷积核替换3*3卷积
    • 理论上一个1*1卷积核的参数是一个3*3卷积核的1/9,可以将模型尺寸压缩9倍。
  • 减小3*3卷积的输入通道数
    • 根据上述公式,减少输入通道数不仅可以减少卷积的运算量,而且输入通道数与输出通道数相同时还可以减少MAC。
  • 延迟降采样
    • 分辨率越大的输入能够提供更多特征的信息,有利于网络的训练判断,延迟降采样可以提高网络精度。

网络架构

  SqueezeNet提出一种多分支结构——fire model,其中是由Squeeze层和expand层构成。Squeeze层是由s1个1*1卷积组成,主要是通过1*1的卷积降低expand层的输入维度;expand层利用e1个1*1和e3个3*3卷积构成多分支结构提取输入特征,以此提高网络的精度(其中e1=e3=4*s1)。

  SqueezeNet整体网络结构如下图所示:

实验结果

不同压缩方法在ImageNet上的对比实验结果

由实验结果可知,SqueezeNet不仅保证了精度,而且将原始AlexNet从240M压缩至4.8M,压缩50倍,说明此轻量级网络设计是可行。

MobileNet

MobileNet 是Google团队于CVPR-2017的论文《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》中针对手机等嵌入式设备提出的一种轻量级的深层神经网络,该网络结构在VGG的基础上使用DW+PW的组合,在保证不损失太大精度的同时,降低模型参数量。

设计思想

  • 采用深度可分离卷积代替传统卷积
    • 采用DW卷积在减少参数数量的同时提升运算速度。但是由于每个feature map只被一个卷积核卷积,因此经过DW输出的feature map不能只包含输入特征图的全部信息,而且特征之间的信息不能进行交流,导致“信息流通不畅”。
    • 采用PW卷积实现通道特征信息交流,解决DW卷积导致“信息流通不畅”的问题。
  • 使用stride=2的卷积替换pooling
    • 直接在卷积时利用stride=2完成了下采样,从而节省了需要再去用pooling再去进行一次下采样的时间,可以提升运算速度。同时,因为pooling之前需要一个stride=1的 conv,而与stride=2 conv的计算量想比要高近4倍(个人理解)。

网络架构

DW conv和PW conv MobileNet的网络架构主要是由DW conv和PW conv组成,相比于传统卷积可以降低$dfrac{1}{N} + dfrac{1}{Dk}​$倍的计算量。

标准卷积与DW conv和PW conv如图所示:

深度可分离卷积与传统卷积运算量对比:

$$egin{aligned}
& frac{D_{K} cdot D_{K} cdot M cdot D_{F} cdot D_{F}+M cdot N cdot D_{F} cdot D_{F}}{D_{K} cdot D_{K} cdot M cdot N cdot D_{F} cdot D_{F}} = frac{1}{N}+frac{1}{D_{K}^{2}}
end{aligned}$$

网络结构:

MobileNets的架构

实验结果

由上表可知,使用相同的结构,深度可分离卷积虽然准确率降低1%,但是参数量减少了6/7。

MobileNet-v2

MobileNet-V2是2018年1月公开在arXiv上论文《Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation》,是对MobileNet-V1的改进,同样是一个轻量化卷积神经网络。

设计思想

  • 采用Inverted residuals
    • 为了保证网络可以提取更多的特征,在residual block中第一个1*1 Conv和3*3 DW Conv之前进行通道扩充
  • Linear bottlenecks
    • 为了避免Relu对特征的破坏,在residual block的Eltwise sum之前的那个 1*1 Conv 不再采用Relu
  • stride=2的conv不使用shot-cot,stride=1的conv使用shot-cut

网络架构

Inverted residuals

  ResNet中Residuals block先经过1*1的Conv layer,把feature map的通道数降下来,再经过3*3 Conv layer,最后经过一个1*1 的Conv layer,将feature map 通道数再“扩张”回去。即采用先压缩,后扩张的方式。而 inverted residuals采用先扩张,后压缩的方式。

  MobileNet采用DW conv提取特征,由于DW conv本身提取的特征数就少,再经过传统residuals block进行“压缩”,此时提取的特征数会更少,因此inverted residuals对其进行“扩张”,保证网络可以提取更多的特征。

Linear bottlenecks

  ReLu激活函数会破坏特征。ReLu对于负的输入,输出全为0,而本来DW conv特征通道已经被“压缩”,再经过ReLu的话,又会损失一部分特征。采用Linear,目的是防止Relu破坏特征。

shortcut

  stride=2的conv不使用shot-cot,stride=1的conv使用shot-cut 

网络架构

Xception

Xception是Google提出的,arXiv 的V1 于2016年10月公开《Xception: Deep Learning with Depthwise Separable Convolutions 》,Xception是对Inception v3的另一种改进,主要是采用depthwise separable convolution来替换原来Inception v3中的卷积操作。

设计思想

  • 采用depthwise separable convolution来替换原来Inception v3中的卷积操作
    与原版的Depth-wise convolution有两个不同之处:
    • 第一个:原版Depth-wise convolution,先逐通道卷积,再1*1卷积; 而Xception是反过来,先1*1卷积,再逐通道卷积;
    • 第二个:原版Depth-wise convolution的两个卷积之间是不带激活函数的,而Xception在经过1*1卷积之后会带上一个Relu的非线性激活函数;

网络架构

  feature map在空间和通道上具有一定的相关性,通过Inception模块和非线性激活函数实现通道之间的解耦。增多3*3的卷积的分支的数量,使它与1*1的卷积的输出通道数相等,此时每个3*3的卷积只作用与一个通道的特征图上,作者称之为“极致的Inception(Extream Inception)”模块,这就是Xception的基本模块。

ShuffleNet-v1

  ShuffleNet 是Face++团队提出的,晚于MobileNet两个月在arXiv上公开《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 》用于移动端前向部署的网络架构。ShuffleNet基于MobileNet的group思想,将卷积操作限制到特定的输入通道。而与之不同的是,ShuffleNet将输入的group进行打散,从而保证每个卷积核的感受野能够分散到不同group的输入中,增加了模型的学习能力。

设计思想

  • 采用group conv减少大量参数
    • roup conv与DW conv存在相同的“信息流通不畅”问题
  • 采用channel shuffle解决上述问题
    • MobileNet中采用PW conv解决上述问题,SheffleNet中采用channel shuffle
  • 采用concat替换add操作
    • avg pooling和DW conv(s=2)会减小feature map的分辨率,采用concat增加通道数从而弥补分辨率减小而带来信息的损失

网络架构

MobileNet中1*1卷积的操作占据了约95%的计算量,所以作者将1*1也更改为group卷积,使得相比MobileNet的计算量大大减少。

  group卷积与DW存在同样使“通道信息交流不畅”的问题,MobileNet中采用PW conv解决上述问题,SheffleNet中采用channel shuffle。

ShuffleNet的shuffle操作如图所示

  avg pooling和DW conv(s=2)会减小feature map的分辨率,采用concat增加通道数从而弥补分辨率减小而带来信息的损失;实验表明:多多使用通道(提升通道的使用率),有助于提高小模型的准确率。

网络结构:

ShuffleNet-v2

huffleNet-v2 是Face++团队提出的《ShuffleNet V2: Practical Guidelines for Ecient CNN Architecture Design》,旨在设计一个轻量级但是保证精度、速度的深度网络。

设计思想

  • 文中提出影响神经网络速度的4个因素:
    • a. FLOPs(FLOPs就是网络执行了多少multiply-adds操作)
    • b. MAC(内存访问成本)
    • c. 并行度(如果网络并行度高,速度明显提升)
    • d. 计算平台(GPU,ARM)
  • ShuffleNet-v2 提出了4点网络结构设计策略:
    • G1.输入输出的channel相同时,MAC最小
    • G2.过度的组卷积会增加MAC
    • G3.网络碎片化会降低并行度
    • G4.元素级运算不可忽视

网络结构

  depthwise convolution 和 瓶颈结构增加了 MAC,用了太多的 group,跨层连接中的 element-wise Add 操作也是可以优化的点。所以在 shuffleNet V2 中增加了几种新特性。

  所谓的 channel split 其实就是将通道数一分为2,化成两分支来代替原先的分组卷积结构(G2),并且每个分支中的卷积层都是保持输入输出通道数相同(G1),其中一个分支不采取任何操作减少基本单元数(G3),最后使用了 concat 代替原来的 elementy-wise add,并且后面不加 ReLU 直接(G4),再加入channle shuffle 来增加通道之间的信息交流。 对于下采样层,在这一层中对通道数进行翻倍。 在网络结构的最后,即平均值池化层前加入一层 1x1 的卷积层来进一步的混合特征。

网络结构

ShuffleNet-v2具有高精度的原因

  • 由于高效,可以增加更多的channel,增加网络容量
  • 采用split使得一部分特征直接与下面的block相连,特征复用(DenseNet)

参考

【Github文章】深度学习500问

原文地址:https://www.cnblogs.com/LXP-Never/p/14840280.html