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

文章目录

[17.9 常用的轻量级网络有哪些](#17.9 常用的轻量级网络有哪些)

[17.9.1 SequeezeNet](#17.9.1 SequeezeNet)

[17.9.2 MobileNet](#17.9.2 MobileNet)

[17.9.3 MobileNet-v2](#17.9.3 MobileNet-v2)

[17.9.4 Xception](#17.9.4 Xception)


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组成,相比于传统卷积可以降低倍的计算量。

标准卷积与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的基本模块。

相关推荐
灰太狼不爱写代码15 分钟前
CUDA11.4版本的Pytorch下载
人工智能·pytorch·笔记·python·学习
volcanical2 小时前
Dataset Distillation with Attention Labels for Fine-tuning BERT
人工智能·深度学习·bert
L_cl2 小时前
【NLP 17、NLP的基础——分词】
人工智能·自然语言处理
西西弗Sisyphus2 小时前
大型语言模型(LLMs)演化树 Large Language Models
人工智能·语言模型·自然语言处理·大模型
车载诊断技术4 小时前
电子电气架构 --- 什么是EPS?
网络·人工智能·安全·架构·汽车·需求分析
KevinRay_4 小时前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
跃跃欲试-迪之4 小时前
animatediff 模型网盘分享
人工智能·stable diffusion
Captain823Jack5 小时前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
被制作时长两年半的个人练习生5 小时前
【AscendC】ReduceSum中指定workLocal大小时如何计算
人工智能·算子开发·ascendc
Captain823Jack5 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词