纵览轻量化卷积神经网络SqueezeNe
机器之心专栏
作者:余霆嵩
本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。
目录
一、引言
二、轻量化模型
2.1SqueezeNet
2.2MobileNet
2.3ShuffleNet
2.4Xception
三、网络对比
一、引言
自年AlexNet以来,卷积神经网络(简称CNN)在图像分类、图像分割、目标检测等领域获得广泛应用。随着性能要求越来越高,AlexNet已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的CNN网络,如VGG、GoogLeNet、ResNet、DenseNet等。由于神经网络的性质,为了获得更好的性能,网络层数不断增加,从7层AlexNet到16层VGG,再从16层VGG到GoogLeNet的22层,再到层ResNet,更有上千层的ResNet和DenseNet。虽然网络性能得到了提高,但随之而来的就是效率问题。
效率问题主要是模型的存储问题和模型进行预测的速度问题(以下简称速度问题)
第一,存储问题。数百层网络有着大量的权值参数,保存大量权值参数对设备的内存要求很高;第二,速度问题。在实际应用中,往往是毫秒级别,为了达到实际应用标准,要么提高处理器性能(看英特尔的提高速度就知道了,这点暂时不指望),要么就减少计算量。只有解决CNN效率问题,才能让CNN走出实验室,更广泛的应用于移动端。对于效率问题,通常的方法是进行模型压缩(ModelCompression),即在已经训练好的模型上进行压缩,使得网络携带更少的网络参数,从而解决内存问题,同时可以解决速度问题。
相比于在已经训练好的模型上进行处理,轻量化模型模型设计则是另辟蹊径。轻量化模型设计主要思想在于设计更高效的「网络计算方式」(主要针对卷积方式),从而使网络参数减少的同时,不损失网络性能。
本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。
(PS:以上四种均不是模型压缩方法!!)
以下是四个模型的作者团队及发表时间
其中ShuffleNet论文中引用了SqueezeNet;Xception论文中引用了MobileNet
二、轻量化模型
由于这四种轻量化模型仅是在卷积方式上做了改变,因此本文仅对轻量化模型的创新点进行详细描述,对实验以及实现的细节感兴趣的朋友,请到论文中详细阅读。
2.1SqueezeNet
SqueezeNet由伯克利斯坦福的研究人员合作发表于ICLR-,论文标题:
《SqueezeNet:AlexNet-levelaccuracywith50xfewerparametersandlt;0.5MB》
命名:
从名字——SqueezeNet就知道,本文的新意是squeeze,squeeze在SqueezeNet中表示一个squeeze层,该层采用1*1卷积核对上一层featuremap进行卷积,主要目的是减少featuremap的维数(维数即通道数,就是一个立方体的featuremap,切成一片一片的,一共有几片)。
创新点:
1.采用不同于传统的卷积方式,提出firemodule;firemodule包含两部分:squeeze层+expand层
创新点与inception系列的思想非常接近!首先squeeze层,就是1*1卷积,其卷积核数要少于上一层featuremap数,这个操作从inception系列开始就有了,并美其名曰压缩,个人觉得「压缩」更为妥当。
Expand层分别用1*1和3*3卷积,然后concat,这个操作在inception系列里面也有。
SqueezeNet的核心在于Firemodule,Firemodule由两层构成,分别是squeeze层+expand层,如下图1所示,squeeze层是一个1*1卷积核的卷积层,expand层是1*1和3*3卷积核的卷积层,expand层中,把1*1和3*3得到的featuremap进行concat。
具体操作情况如下图所示:
Firemodule输入的featuremap为H*W*M的,输出的featuremap为H*M*(e1+e3),可以看到featuremap的分辨率是不变的,变的仅是维数,也就是通道数,这一点和VGG的思想一致。
首先,H*W*M的featuremap经过Squeeze层,得到S1个featuremap,这里的S1均是小于M的,以达到「压缩」的目的,详细思想可参考Google的Inception系列。
其次,H*W*S1的特征图输入到Expand层,分别经过1*1卷积层和3*3卷积层进行卷积,再将结果进行concat,得到Firemodule的输出,为H*M*(e1+e3)的featuremap。
fire模块有三个可调参数:S1,e1,e3,分别代表卷积核的个数,同时也表示对应输出featuremap的维数,在文中提出的SqueezeNet结构中,e1=e3=4s1。
讲完SqueezeNet的核心——Firemodule,看看SqueezeNet的网络结构,如下图所示:
网络结构设计思想,同样与VGG的类似,堆叠的使用卷积操作,只不过这里堆叠的使用本文提出的Firemodule(图中用红框部分)
看看Squezeenet的参数数量以及性能:
在这里可以看到,论文题目中提到的小于0.5M,是采用了DeepCompression进行模型压缩之后的结果!!
看了上图再回头看一看论文题目:
SqueezeNet:AlexNet-levelaccuracywith50xfewerparametersandlt;0.5MB
标!题!党!SqueezeNetlt;0.5MB,这个是用了别的模型压缩技术获得的,很容易让人误以为SqueezeNet可以压缩模型!!
SqueezeNet小结:
1Firemodule与GoogLeNet思想类似,采用1*1卷积对featuremap的维数进行「压缩」,从而达到减少权值参数的目的;
2采用与VGG类似的思想——堆叠的使用卷积,这里堆叠的使用Firemodule
SqueezeNet与GoogLeNet和VGG的关系很大!
2.2MobileNet
MobileNet由Google团队提出,发表于CVPR-,论文标题:
《MobileNets:EfficientConvolutionalNeuralNetworksforMobileVisionApplications》
命名:
MobileNet的命名是从它的应用场景考虑的,顾名思义就是能够在移动端使用的网络模型。
创新点:
1.采用名为depth-wiseseparableconvolution的卷积方式代替传统卷积方式,以达到减少网络权值参数的目的。
通过采用depth-wiseconvolution的卷积方式,达到:1.减少参数数量2.提升运算速度。(这两点是要区别开的,参数少的不一定运算速度快!还要看计算方式!)
depth-wiseconvolution不是MobileNet提出来的,也是借鉴,文中给的参考文献是年的博士论文——《L.Sifre.Rigid-motionscatteringforimageclassification.hDthesis,Ph.D.thesis,》
depth-wiseconvolution和groupconvolution是类似的,depth-wiseconvolution是一个卷积核负责一部分featuremap,每个featuremap只被一个卷积核卷积;groupconvolution是一组卷积核负责一组featuremap,每组featuremap只被一组卷积核卷积。Depth-wiseconvolution可以看成是特殊的groupconvolution,即每一个通道是一组。
MobileNets精华在于卷积方式——depth-wiseseparableconvolution;采用depth-wiseseparableconvolution,会涉及两个超参:WidthMultiplier和ResolutionMultiplier这两个超参只是方便于设置要网络要设计为多小,方便于量化模型大小。
MobileNet将标准卷积分成两步:
第一步Depth-wiseconvolution,即逐通道的卷积,一个卷积核负责一个通道,一个通道只被一个卷积核「滤波」;第二步,Pointwiseconvolution,将depth-wiseconvolution得到的featuremap再「串」起来,注意这个「串」是很重要的。「串」作何解?为什么还需要pointwiseconvolution?作者说:Howeveritonlyfiltersinputchannels,itdoesnot
转载请注明:http://www.shijichaoguyj.com/wxjs/11955.html