深度学习500问——Chapter17:模型压缩及移动端部署(4)

发布于:2024-10-10 ⋅ 阅读:(7) ⋅ 点赞:(0)

文章目录


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

17.9.1 SequeezeNet

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

1.1 设计思想

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

  • 用 1*1 卷积核替换 3*3 卷积

                理论上一个 1*1卷积核的参数是一个3*3卷积核的1/9,可以将模型尺寸压缩9倍。

  • 减小3*3卷积的输入通道数

                根据上述公式,减少输入通道数不仅可以减少卷积的运算量,而且输入通道数与输出通道数相同时还可以减少MAC。

  • 延迟降采样

                分辨率越大的输入能够提供更多特征的信息,有利于网络的训练判断,延迟降采样可以提高网络精度。

1.2 网络架构

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

SqueezeNet整体结构如下图所示:

1.3 实验结果

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

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

17.9.2 MobileNet

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

2.1 设计思想

  • 采用深度可分离卷积代替传统卷积

                采用DW卷积在减少参数数量的同时提升运算速度。但是由于每个feature map只被一个卷积核卷积,因此经过DW输出的feature map不能只包含输入特征图的全部信息,而且特征之间的信息不能交流,导致“信息流通不畅”。

                采用PW卷积实现通道特征信息交流,解决DW卷积导致“信息流通不畅”的问题。

  • 使用stride=2的卷积替换pooling

                直接在卷积时利用stride=2完成了下采样,从而节省了需要再去用pooling再去进行一次下采样的时间,可以提升运算速度。同时,因为pooling之前需要一个stride=1的conv,而与stride=2 conv的计算量相比要高近4倍(个人理解)。

2.2 网络结构

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

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

网络结构:

  • MobileNets的架构:

2.3 实验结果

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

17.9.3 MobileNet-v2

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

3.1 设计思想

  • 采用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

3.2 网络架构

  • 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 。

  • 网络架构

17.9.4 Xception

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

4.1 设计思想

  • 采用depthwise separable convolution来替换原来Inception v3中的卷积操作
    与原版的Depth-wise convolution有两个不同之处:

                第一个:原版Depth-wise convolution,先逐通道卷积,再1*1卷积; 而Xception是反过来,先1*1卷积,再逐通道卷积;

                第二个:原版Depth-wise convolution的两个卷积之间是不带激活函数的,而Xception在经过1*1卷积之后会带上一个Relu的非线性激活函数;

4.2 网络架构

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