轻量级网络汇总:
Inception,Xception,SqueezeNet,MobileNet v123Next,ShuffleNet v12,SENet,MNASNet,GhostNet,FBNet
Inception
提出卷积的时候,通道卷积和空间卷积是没关系的,最好分开搞,不要一起搞(没有理论证明,只是实验发现)
网络结构就是1×1, 1×1->3×3, avgPool->3×3, 1×1->3×3->3×3,这4路分开过然后concat
Xception, google.
Extreme的Inception, 在InceptionV3 上进行改进,他的结构是先统一过1×1,然后分开分别过3×3,跟depth-wise conv 不同的是,depth-wise conv是先分通道卷积,然后1×1,这里是1×1,然后分通道卷积。
SqueezeNet, ICLR2017,
伯克利,斯坦福
再Alexnet的基础上,把3×3换成1×1,减少channel数,把降采样后移。
使用的是Fire模块,就是先1×1卷积作为squeeze,然后1×1和3×3 结果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结构为3×3 depthwise conv->BN->ReLU6->1×1 conv->BN->ReLU, 普通卷积block结构为3×3 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中的1×1卷积,同样为了达到channel之间的交互目的,但是减少了1×1卷积的计算量。在shuffle的时候,把原来每组feature有序重组,而不是完全随机,如123,456,789重组为147,258,369.
同时shuffleNet的bottlenetck的特征降采样了, 主路用的是1x1GConv->shuffle->3×3 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
原始残差模块为 1×1降维->3×3 conv->1×1升维,这样可以减少3×3的计算量。但是inverted residuals是先升维在depthwise卷积在降维,1×1升维->3×3 depthwith conv->1×1降维,提前升维,提取更多高维信息。
还发现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->1×1 降维 ->depth width 3×3 + ReLU6->1×1 降维 + Linear->1×1升维 + ReLU6 ->depth width 3×3 + linear->1×1升维->output,中间两个skipconnection, 输入输出一个,第一个1×1和最后一个1×1中间一个。并且在skipconnection的时候仅使用一半通道进行,这样不会有精度损失。
GhostNet, CVPR2020,
华为
卷积神经网络中特征有冗余(观察特征图,发现有的很像),提出用一部分特征图用深度可分卷积去生成另一部分特征图。而不是生成全部特征图。