文章目录
[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的基本模块。