轻量级网络汇总:Inception,Xception,SqueezeNet,MobileNet v123Next,ShuffleNet v12,SENet,MNASNet,GhostNet,FBNet

Posted 默一鸣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻量级网络汇总:Inception,Xception,SqueezeNet,MobileNet v123Next,ShuffleNet v12,SENet,MNASNet,GhostNet,FBNet相关的知识,希望对你有一定的参考价值。

轻量级网络汇总:Inception,Xception,SqueezeNet,MobileNet v123Next,ShuffleNet v12,SENet,MNASNet,GhostNet,FBNet

 

Inception

提出卷积的时候,通道卷积和空间卷积是没关系的,最好分开搞,不要一起搞(没有理论证明,只是实验发现)

网络结构就是1x1, 1x1->3x3, avgPool->3x3, 1x1->3x3->3x3,这4路分开过然后concat

Xception, google.

Extreme的Inception, 在InceptionV3 上进行改进,他的结构是先统一过1x1,然后分开分别过3x3,跟depth-wise conv 不同的是,depth-wise conv是先分通道卷积,然后1x1,这里是1x1,然后分通道卷积。

 

SqueezeNet, ICLR2017, 伯克利,斯坦福

再Alexnet的基础上,把3x3换成1x1,减少channel数,把降采样后移。

使用的是Fire模块,就是先1x1卷积作为squeeze,然后1x1和3x3 结果cancatnate作为expand

虽然减少参数,减少计算量,但是加深深度,实际速度也很慢,参数减少一方面是换卷积核,另一方面是他们自己的模型压缩工作。

 

Mobilenet v1, CVPR2017, google

采用深度可分卷积(可分卷积还有空间可分卷积,类似FM,深度可分卷积是14年由一个博士论文提出来的,不是mobilenet),普通卷积先深度卷积(相当于分组卷积,组数等于channel数)然后1x1point卷积。普通卷积计算量为FFKKMN, 深度可分卷积计算量为FFKKM + FFMN, 计算量下降1/N + 1/(K*K)。但是在GPU上有时候加速不明显,因为GPU对于depth width卷积优化不明显。

Mobilenet block结构为3x3 depthwise conv->BN->ReLU6->1x1 conv->BN->ReLU, 普通卷积block结构为3x3 conv->BN->ReLU。其中ReLU6在低精度设备中效果更好ReLU(6)=min(max(0, x), 6)。

 

ShuffleNet v1, CVPR2017, Face++

使用group  convolution和channel shuffle。其中group convolution不是原创,从AlexNet就有,shuffle是。

用shuffle替换掉mobileNet中的1x1卷积,同样为了达到channel之间的交互目的,但是减少了1x1卷积的计算量。在shuffle的时候,把原来每组feature有序重组,而不是完全随机,如123,456,789重组为147,258,369.

同时shuffleNet的bottlenetck的特征降采样了, 主路用的是1x1GConv->shuffle->3x3 stride=2->1x1GConv,旁路是3x3AVGPool stride=2, 最后不用加而是concat。

提到小型网络要多使用通道

 

 ShuffleNet V2,  2018

指出模型的实际速度,与FLOPs, 内存访问时间都有关。实验分析了,通道数,group操作数,网络模型分支数和Elementwise操作数对模型速度的影响。有以下结论:

卷积层的输入和输出特征通道数相同时MAC(内存访问损失时间)最小

过多的Group操作会增大MAC

模型中的分支数量越少,模型速度越快

Elementwise操作的时间消耗比FLOPs上体现的要多

通过这几个结论,设计了新的网络结构,然后对比试验,相同FLOPs数量,更高精度,速度更快。

 

MoblileNet v2, 2018, google

引入inverted residuals和linear bottlenecks。使用了skip connection

原始残差模块为 1x1降维->3x3 conv->1x1升维,这样可以减少3x3的计算量。但是inverted residuals是先升维在depthwise卷积在降维,1x1升维->3x3 depthwith conv->1x1降维,提前升维,提取更多高维信息。

还发现ReLU对低维信号损失很大,所以把降维后也就是最后一个激活层换成线性激活(之前的不用,因为之前的是高维)。

 

SENet, cvpr2018, Momenta 中科院大学

普通卷积之后,再channel上用Global Average Pooling,得到一个1x1xC的向量,这个过程叫Squeeze,然后过两层全连接层,叫做Excitation,然后用sigmoid,然后结果乘回去。其实就是一种attention

 

MobileNet v3, 2019, google

使用NAS搜索

最后几层减少,提前进入avg-pooling.

使用h-switc作为激活函数

引入SE模块,作为轻量级attention模块

 

FBNet CVPR2019

Differentiable NAS, 使用Gumbel Softmax将候选操作使用softmax函数进行混合,将搜索空间变成连续函数,目标函数变成可谓函数,然后直接提度下降, loss由准确率和速度loss组成。

 

MNASNet CVPR2019, google

使用强化学习思路的NAS

 

MobileNext, ECCV2020, 依图

倒残差结构使得优化过程中梯度回传抖动

skip connection影响梯度回传

更宽的网络可以解决梯度混淆问题

提出sandglass block, 实际是嵌套了两个depth width的ResNet,也就是input->1x1 降维 ->depth width 3x3 + ReLU6->1x1 降维 + Linear->1x1升维 + ReLU6 ->depth width 3x3 + linear->1x1升维->output,中间两个skipconnection, 输入输出一个,第一个1x1和最后一个1x1中间一个。并且在skipconnection的时候仅使用一半通道进行,这样不会有精度损失。

 

GhostNet, CVPR2020, 华为

卷积神经网络中特征有冗余(观察特征图,发现有的很像),提出用一部分特征图用深度可分卷积去生成另一部分特征图。而不是生成全部特征图。

以上是关于轻量级网络汇总:Inception,Xception,SqueezeNet,MobileNet v123Next,ShuffleNet v12,SENet,MNASNet,GhostNet,FBNet的主要内容,如果未能解决你的问题,请参考以下文章

深度卷积神经网络各种改进结构块汇总

基础神经网络汇总

模型优化,汇总

专栏目录汇总

『Rethinking the Inception Architecture for Computer Vision』论文笔记

经典神经网络 | 从Inception v1到Inception v4全解析