深度学习模型压缩之MobileNetV2

匿名 (未验证) 提交于 2019-12-03 00:22:01

论文名称:MobileNetV2: Inverted Residuals and Linear Bottlenecks

ժҪ



最后,我们的方法从转换开始就允许输入输出域的解耦,其能对未来的分析提供一个便利的框架。我们在ImageNet分类数据集(Imagenet large scale visual recognition challenge.)、COCO目标检测数据集(Microsoft COCO: Common objects in context)、VOC图像分割数据集(The pascal visual object classes challenge a retrospective.)上进行实验。我们测试了准确率、由乘加操作定义的计算量以及实际延迟和阐述数量之间的权衡关系。



我们的主要贡献在于设计一种新型的层模块:具有线性瓶颈的反向残差(the inverted residual with linear bottleneck)。该模块以低维压缩表示作为输入,首先将其扩展到高维,然后用一个轻量级深度卷积来进行滤波。特征随后投影为一个低维表示与一个线性的卷积,官方实现可作为Tensorflow-Slim模型库的一部分来使用(https://github.com/tensorflow/ models/tree/master/research/slim/ nets/mobilenet)。
这个模块能够使用任何模型中的标准操作来执行,并且可以针对标准的基准测试来在多个关键性能点上都能使用我们的模型打败现在最好结果的模型。更进一步,这个卷积模块非常适合移动端设计,因为它允许通过稀疏化的大的中间层的tensor来显著减少测试阶段所需要占用的内存空间。这减少了许多嵌入式硬件设计对主要内存访问的需求,提供了少量非常快的软件控制缓存策略。


我们的方法可以看作是(Learning transferable architectures for scalable image recognition)改进的相关工作,在这方面我们的做法和ShuffleNet与(Design of efficient convolutional layers using single intra-channel convolution, topological subdivisioning and spatial ”bottleneck” structure)相同,而且进一步提升了性能。同时也提供了内部运用的可视化理解。我们的网络设计基于MobileNetV1,保留了它的简单性,并且不需要任何特殊的操作同时显著提升了它的准确率,在移动应用中的多图像分类和检测任务中取得了最好的效果。


标准卷积利用一个hiwidi的输入张量Li,以及卷积核KRkkdidj得到一个hiwidi输出张量Lj,标准卷积层的计算量为hiwididjkk
深度可分离卷积是标准卷积层的部分替代。就经验而言,他们几乎和标准卷积一样,但是计算损失只有hiwidi(k2+dj),其为深度卷积和1x1逐点卷积的和。有效的深度可分离卷积相较于标准卷积减少了大约k2的参数,MobileNetV2使用k=3(3x3可分离卷积层)因此计算量相较于标准卷积少了8~9倍。但是只有很少的精度损失。

Li构成,每一层之后都有维数为hiwidi的激活张量,通过这节我们将会讨论这些激活张量的基本属性,我们可以将其看作具有di维的有hiwi像素的容器。非正式的,对于真实图片的输入集,一组层激活(对于任意层Li)形成一个“感兴趣流形”,长期以来,人们认为神经网络中的感兴趣流形可以嵌入到低维子空间中。换句话说,当我们单独看一层深度卷积层所有d维通道像素时,这些依次嵌入到一个低维子空间的值以多种形式被编码成信息。
乍一看,这可以通过简单的约减一层的维数来做到,从而减少了运算空间的维数。这已经在MobileNetV1中被采用,通过宽度乘法器来有效对计算量和准确率进行权衡。并且已经被纳入了其他有效的模型设计当中(Shufflenet: An extremely efficient convolutional neural network for mobile devices.)。遵循这种直觉,宽度乘法器允许一个方法来减少激活空间的维数指导感兴趣的流形横跨整个空间。然而,这个直觉当我们知道深度卷积神经网络实际上对每个坐标变换都有非线性激活的时候被打破。就好像ReLU,比如,ReLU应用在一维空间中的一条线就产生了一条射线,那么在Rn空间中,通常产生具有n节的分段线性曲线。
很容易看到通常如果ReLu层变换的输出有一个非零值S,那么被映射到S的点都是对输入经过一个线性变换B之后获得,从而表明对应整个维数的输出部分输入空间被限制在为一个线性变换。换句话说,深度网络只对输出域部分的非零值上应用一个线性分类器。我们应用一个补充材料来更加详细的正式描述。
另一方面,当没有ReLU作用通道时,那必然失去了那个通道的信息。然而,如果我们通道数非常多时,可能在激活流形中有一个结构,其信息仍然被保存在其他的通道中。在补充材料中,我们展示了如果输入流形能嵌入到一个显著低维激活子空间中,那么ReLU激活函数能够保留这个信息同时将所需的复杂度引入到表达函数集合中。




论文的接下来部分,我们将利用瓶颈卷积,我们将输入瓶颈尺寸和内部尺寸的比值称为扩展率。


图1 低维流形嵌入高维空间的ReLU转换的例子。在这些例子中,一个原始螺旋形被利用随机矩阵T经过ReLU后嵌入到一个n维空间中,然后使用T1投影到2维空间中。例子中,n=2,3导致信息损失,可以看到流形的中心点之间互相坍塌。同时n=15,30时信息变成高度非凸。

图2 深度可分离卷积的演化过程。对角线阴影纹理表示层不含非线性。最后的浅色层表示下一个卷积块的起始。注意:d和c从颜色上可以看出是等效块。



图3 残差块在(Aggregated residual transformations for deep neural networks.)与ResNet的不同。对角线阴影层没有用非线性,块中的厚度表示相关的通道数,注意到,经典的残差连接的层都是通道数非常多的层,然而,反向残差连接的是瓶颈层。
瓶颈层的运行时间和参数量,基本的实现结构在表1中体现。对于一个大小为hxw的块,扩展因子t和卷积核大小k,输入通道数为d,输出通道数为d,那么乘加运算有hwdt(d+k2+d)。与之前的计算量比较,这个表达式多出了一项,因为我们有额外的1x1卷积,然而我们的网络性质允许我们利用更小的输入和输出的维数。在表3中我们比较了不同分辨率下MobileNetV1、MobileNetV2、ShuffleNet所需要的尺寸大小。


表3 在不同结构的每个空间分辨率下都需要实现通道数/内存的最大值。假设激活需要16bit,对于ShuffleNet,我们使用2x,g=3来匹配MobileNetV1、MobileNetV2。对于MobileNetV2和ShuffleNet的第一层而言,我们利用在第5节中的技巧来减少内存的需求。虽然ShuffleNet在其他地方利用了瓶颈,非瓶颈张量由于非瓶颈张量之间的shortcuts存在仍然需要被实现。


特别地,在我们的例子中,当内层深度为0时,下面层卷积由于shortcuts变成了恒等函数。当扩展率小于1时,这就变成了一个经典的残差卷积块。然而,为了我们的目的,当扩展率大于1时是最有效的
这个解释允许我们从网络的容量来研究网络的表达能力,而且我们相信对可分离性更进一步探索能够保证对网络的性质理解更加深刻。

残差瓶颈深度可分离卷积块,块的详细结构在表1中可以看到。MobileNetV2包含初始的的32个卷积核的全卷积层,后接19个残差瓶颈层(如表2),我们使用ReLU6作为非线性激活函数,用于低精度计算时,ReLU6激活函数更加鲁棒。我们总使用大小为3x3的卷积核,并且在训练时候利用dropout和batchnorm规范化。


表2 MobileNetV2:每行描述了1个或多个相同的层的序列,重复n次。所有序列相同的层有相同的输出通道数c,第一层的序列步长为s,所有其他的层都用步长为1。所有空间卷积核使用3x3的大小。扩展因子t总是应用在表1描述的输入尺寸中。


权衡超参数 就像MobileNetV1中一样,我们对于不同的性能要求制定不同的结构。通过使用输入图像分辨率以及可调整的宽度乘法器超参数来根据期望的准确率/性能折衷来进行调整。我们先前的工作(宽度乘法器,1,224x224),有大约3亿的乘加计算量以及使用了340万的参数量。我们探索对于输入分辨率从96至224,宽度乘法器从0.35至1.4来探索性能的权衡。网络计算量从7变成了585MMAds,同时模型的尺寸变化影响参数量从1.7M到6.9M。

(G),然后选能够最小化下式的顺序。M(G)=minπ(G)maxi1..n[ARi,π,G|A|]+size(πi),其中R(i,π,G)是与任意点{πi...πn}相连接的中间张量列表。|A|表示张量A的模,size(i)表示i操作期间,内部存储所需要的内存总数。
对于只有不重要的并行结构的图(如残差连接),只有一个重要可行的计算顺序,因此在测试时所需要的总的内存在计算图G中可以简化为:M(G)=maxopG[Aopinp|A|+Bopout|B|+|op

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!