MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
Abstract
- 本文提出了一类用于移动和嵌入式视觉应用的称为MobileNets的高效模型。MobileNets基于一种流线型架构,使用深度方向可分离的卷积来构建轻量级深度神经网络。本文引入两个简单的全局超参数,有效地在延迟和准确性之间进行权衡。这些超参数允许模型构建者基于问题的约束为他们的应用选择正确大小的模型。
- 本文提出了大量的资源和准确性权衡实验,并显示出强大的性能相比,其他流行的图像网络分类模型。然后,本文展示了MobileNets在各种应用和用例中的有效性,包括对象检测、细粒度分类、人脸属性和大规模地理定位。
- 论文地址:[1704.04861] MobileNets:用于移动视觉应用的高效卷积神经网络 (arxiv.org)
- 当时(2017年)的研究方向可以分为两种,一是压缩复杂网络的预训练模型,二是直接设计并训练小型模型。MobileNet的作者们属于后者,MobileNet不仅可以优化效率(
low latency
),而且可以让使用者根据硬件限制自行选择适合的模型大小(parameters size
)。 - MobileNet V1是由google2016年提出,2017年发布的文章。其主要创新点在于深度可分离卷积,而整个网络实际上也是深度可分离模块的堆叠。专注于移动端或者嵌入式设备中的轻量级CNN网络。
- 不管是在GPU还是在CPU运行,最重要的“耗时杀手”就是conv,卷积层。也就是说,想要提高网络的运行速度,就得到提高卷积层的计算效率。
Introduction
- 自从AlexNet 通过赢得ImageNet挑战赛:ILSVRC 2012 推广深度卷积神经网络以来,卷积神经网络在计算机视觉中变得无处不在。总的趋势是制造更深更复杂的网络,以达到更高的精度[resnet,googlenet]。然而,这些提高准确性的进步并不一定使网络在规模和速度方面更有效。在机器人、自动驾驶汽车和增强现实等许多现实应用中,识别任务需要在计算有限的平台上及时执行。
- 其实,网络压缩优化的方法有两个发展方向,一个是迁移学习,另一个是网络稀疏。迁移学习是指一种学习对另一种学习的影响,好比常说的举一反三行为,以减少模型对数据量的依赖。不过,它也可以通过knowledge distillation(知识蒸馏)实现大模型到小模型的迁移,这方面的工作有港中文汤晓鸥组的MobileID。他们运用模型压缩技术和domain knowledge,用小的网络去拟合大量的数据,并以大型teacher network的知识作为监督,训练了一个小而紧凑的student network打算将DeepID迁移到移动终端与嵌入式设备中。
- 而另一方面,网络稀疏是现在比较主流的压缩优化方向,这方面的工作主要是以网络结构的剪枝和调整卷积方式为主。比如深度压缩,它先通过dropout,L1/L2-regularization等能产生权重稀疏性的方法训练体积和密度都很大的网络,然后把网络中贡献小(也就是被稀疏过的)的权重裁剪掉,相当于去除了一些冗余连接,最后对模型做一下fine-tune就得到他所说的30%压缩率的效果。但它在效率上的提高并不适合大多数的通用CPU,因为它的存储不连续,索引权重时容易发生Cache Miss,反而得不偿失。下面介绍的MobileNet在这方面更有优势,MobileNets主要关注优化延迟,同时兼顾模型大小。
- 本文描述了一种高效的网络架构和一组两个超参数,以便构建非常小、低延迟的模型,轻松满足移动和嵌入式视觉应用的设计要求。本文在下文回顾了以前在建立小模型方面的工作。描述了MobileNet架构和两个超参数宽度乘数和分辨率乘数,以定义更小、更高效的MobileNet。还描述了ImageNet上的实验以及各种不同的应用和用例。
Prior Work
- 随着深度学习的发展,卷积神经网络变得越来越普遍。当前发展的总体趋势是,通过更深和更复杂的网络来得到更高的精度,但是这种网络往往在模型大小和运行速度上没多大优势。一些嵌入式平台上的应用比如机器人和自动驾驶,它们的硬件资源有限,就十分需要一种轻量级、低延迟(同时精度尚可接受)的网络模型,这就是本文的主要工作。
- 毕竟消费类产品很多是嵌入式的终端产品,而且嵌入式芯片的计算性能并不很强。即使我们考虑云计算,也需要消耗大量的带宽资源和计算资源。因此,CNN的优化已成为深度学习产品能否在消费市场落脚生根的一个重要课题之一。所以,有不少学者着手研究CNN的网络优化,如韩松的SqueezeNet,Deep Compression,LeCun的SVD,Google的MobileNet以及这个孙剑的ShuffleNet等。
- 对构建小而有效的神经网络的兴趣越来越大。许多不同的方法通常可以分为压缩预训练网络或直接训练小型网络。本文提出了一类网络架构,允许模型开发人员专门选择一个小型网络,以满足其应用的资源限制(延迟、大小)。MobileNets主要致力于优化延迟,但也会产生小型网络。许多关于小型网络的论文只关注规模,而不考虑速度。
- MobileNet主要由最初在[Rigid-motion scattering for image classification]中引入的深度方向可分离卷积构建,随后在初始模型[Squeezenet]中使用,以减少前几层的计算。
- Flattened networks从完全因子分解的卷积中构建了一个网络,并展示了极端因子分解网络的潜力。独立于本文,Factorized Networks引入了类似的因式分解卷积以及拓扑连接的使用。随后,Xception network演示了如何扩大深度方向可分离滤波器的规模,以超越Inception V3网络。另一个小型网络是Squeezenet,它使用瓶颈方法来设计一个非常小的网络。其他简化的计算网络包括structured transform networks 和deep fried convnets。
- 获得小型网络的不同方法是收缩、分解或压缩预训练网络。文献中已经提出了基于乘积量化、散列和剪枝、矢量量化和霍夫曼编码的压缩。此外,已经提出了各种因子分解来加速预训练网络。另一种训练小网络的方法是知识蒸馏,它使用一个较大的网络来训练一个较小的网络。它是本文方法的补充。另一种新兴的方法是low bit networks。
MobileNet Architecture
-
首先描述MobileNet构建的核心层,这些核心层是深度方向可分离的过滤器。然后,描述MobileNet网络结构,并以两个模型收缩超参数宽度乘数和分辨率乘数的描述结束。
-
Depthwise Separable Convolution
-
MobileNet模型基于深度方向可分离卷积,这是一种分解卷积,将标准卷积分解为深度方向卷积和1 × 1卷积,称为点方向卷积。对于MobileNets,深度方向卷积对每个输入通道应用单个滤波器。逐点卷积然后应用1 × 1卷积来组合深度卷积的输出。标准卷积在一个步骤中将输入滤波并组合成一组新的输出。深度方向可分离卷积将其分为两层,一层用于滤波,另一层用于合并。这种因式分解具有显著减少计算和模型大小的效果。下图显示了标准卷积(a)如何分解为深度方向卷积(b)和1 × 1点方向卷积©。
-
(a)中的标准卷积滤波器由两层代替:( b)中的深度方向卷积和©中的点方向卷积,以构建深度方向可分离滤波器。
-
标准卷积层将 D F × D F × M D_F × D_F × M DF×DF×M特征图F作为输入,并产生 D F × D F × N D_F × D_F × N DF×DF×N特征图G,其中 D F D_F DF是正方形输入特征图的空间宽度和高度,M是输入通道的数量(输入深度), D G D_G DG是正方形输出特征图的空间宽度和高度,N是输出通道的数量(输出深度)。
-
标准卷积层由大小为 D K × D K × M × N D_K ×D_K ×M ×N DK×DK×M×N的卷积核K来参数化,其中 D K D_K DK是假设为平方的核的空间维度,M是输入通道的数量,N是输出通道的数量,如前所述。
-
假设步幅为1且填充,标准卷积的输出特征图计算如下:
-
G k , l , n = ∑ i , j , m K i , j , m , n ⋅ F k + i − 1 , l + j − 1 , m ; ( 1 ) G_{k,l,n}=\sum_{i,j,m}K_{i,j,m,n}·F_{k+i-1,l+j-1,m};(1) Gk,l,n=i,j,m∑Ki,j,m,n⋅Fk+i−1,l+j−1,m;(1)
- 标准卷积的计算成本为: D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F DK · DK · M · N · DF · DF DK⋅DK⋅M⋅N⋅DF⋅DF。其中,计算成本与输入通道的数量M、输出通道的数量N、内核大小Dk × Dk以及特征映射大小DF × DF密切相关。MobileNet模型解决了这些术语及其相互作用。首先,它使用深度方向可分离卷积来打破输出通道数量和内核大小之间的相互影响。
-
标准卷积运算具有基于卷积核过滤特征并组合特征以产生新表示的效果。通过使用被称为深度方向可分离卷积的因子分解卷积,过滤和组合步骤可以被分成两个步骤,以显著降低计算成本。
-
深度方向可分卷积由两层组成:深度方向卷积和点方向卷积。本文使用深度方向卷积对每个输入通道(输入深度)应用单个滤波器。逐点卷积是一种简单的1×1卷积,用于创建深度方向层输出的线性组合。MobileNets对两层都使用batchnorm和ReLU非线性。
-
每个输入通道(输入深度)有一个滤波器的深度方向卷积可以写成:
-
G ^ k , l , m = ∑ i , j K ^ i , j , k ⋅ F k + i − 1 , l + l − 1 , m ; ( 3 ) \hat{G}_{k,l,m}=\sum_{i,j}\hat{K}_{i,j,k}·F_{k+i-1,l+l-1,m};(3) G^k,l,m=i,j∑K^i,j,k⋅Fk+i−1,l+l−1,m;(3)
- 其中, K ^ \hat{K} K^是 D K × D K × M D_K × D_K × M DK×DK×M大小的深度方向卷积核,其中, K ^ \hat{K} K^中的第M个滤波器应用于F中的第M个通道,以产生滤波后的输出特征图g的第M个通道。
-
深度方向卷积的计算成本为: D K ⋅ D K ⋅ M ⋅ D F ⋅ D F D_K · D_K · M · D_F · D_F DK⋅DK⋅M⋅DF⋅DF。
-
深度方向卷积相对于标准卷积非常有效。然而,它只过滤输入通道,而不组合它们来创建新的特征。因此,为了生成这些新特征,需要通过1 × 1卷积计算深度方向卷积输出的线性组合的附加层。
-
深度方向卷积和1 × 1(点方向)卷积的组合称为深度方向可分卷积,最初在[Rigid-motion scattering for image classification]中介绍。
-
通过将卷积表示为滤波和组合的两步过程,可以减少计算量:
- D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F = 1 N + 1 D k 2 \frac{D_K · D_K · M · D_F · D_F + M · N · D_F · D_F}{ D_K · D_K · M · N · D_F · D_F}=\frac{1}{N}+\frac{1}{D^2_k} DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF=N1+Dk21
-
MobileNet使用3 × 3深度方向可分离卷积,其计算量比标准卷积少8到9倍,精度仅略有降低。诸如[Flattened convolutional neural networks,Rethinking the inception architecture]中的空间维度中的额外因式分解没有节省很多额外的计算,因为在深度方向卷积中花费了非常少的计算。
-
-
Network Structure and Training
- 除了第一层是全卷积之外,MobileNet结构建立在深度方向可分离的卷积之上,如前一节所述。通过用如此简单的术语定义网络,本文能够容易地探索网络拓扑来找到一个好的网络。下表中定义了MobileNet架构。
- MobileNet Body Architecture
- 所有层之后都是batchnorm和ReLU非线性,只有最后一个完全连接的层例外,它没有非线性,并馈入softmax层进行分类。下图将具有规则卷积、batchnorm和ReLU非线性的层与每个卷积层后具有深度卷积、1 × 1逐点卷积以及batchnorm和ReLU的因子分解层进行了对比。
- 左图:带batchnorm和ReLU的标准卷积层。右图:深度方向可分离卷积,具有深度方向和点方向层,后跟batchnorm和ReLU。
- 上图中relu可改进为relu6,ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。
- 在深度方向卷积和第一层中,用步长卷积处理下采样。在完全连接图层之前,最终平均池将空间分辨率降低到1。将深度方向和点方向卷积作为单独的层计算,MobileNet有28层。
- 仅仅用少量的乘法来定义网络是不够的。确保这些操作可以有效地实现也很重要。例如,非结构化稀疏矩阵运算通常不会比密集矩阵运算快,直到非常高的稀疏度。本文的模型结构将几乎所有的计算放入密集的1 × 1卷积中。这可以用高度优化的通用矩阵乘法(GEMM)函数来实现。
- 通常卷积是由GEMM实现的,但需要在内存中进行初始重新排序,称为im2col,以便将其映射到GEMM。例如,这种方法被用于流行的Caffe package 。1×1卷积不需要在存储器中进行这种重新排序,并且可以直接用GEMM来实现,该算法是最优化的数值线性代数算法之一。MobileNet的计算时间花在1 × 1卷积上,它也有75%的参数,如下表所示。几乎所有的附加参数都在全连接层中。
- Resource Per Layer Type
- MobileNet模型在TensorFlow中使用RMSprop进行训练,异步梯度下降类似于Inception V3。然而,与训练大模型相反,本文使用较少的正则化和数据增强技术,因为小模型具有较少的过度拟合问题。
- 当训练MobileNets时,可以不使用side heads或标签平滑,并通过限制大型初始训练中使用的小型作物的大小来额外减少图像失真量。此外,本文发现在深度方向滤波器上放置很少或没有权重衰减(l2正则化)是很重要的,因为它们的参数很少。对于下一节中的ImageNet基准测试,所有模型都使用相同的训练参数进行训练,而不管模型的大小如何。
- 除了第一层是全卷积之外,MobileNet结构建立在深度方向可分离的卷积之上,如前一节所述。通过用如此简单的术语定义网络,本文能够容易地探索网络拓扑来找到一个好的网络。下表中定义了MobileNet架构。
-
Width Multiplier: Thinner Models
- 尽管基本的MobileNet架构已经很小并且延迟很低,但是很多时候特定的用例或应用可能需要模型更小更快。为了构建这些更小且计算成本更低的模型,本文引入了一个非常简单的参数α,称为宽度乘数。宽度乘数α的作用是在每一层均匀地细化网络。对于给定的层和宽度乘数α,输入通道数M变为αM,输出通道数N变为αN。
- 具有宽度乘数α的深度方向可分离卷积的计算成本为: D K ⋅ D K ⋅ α M ⋅ D F ⋅ D F + α M ⋅ α N ⋅ D F ⋅ D F D_K · D_K · αM · D_F · D_F + αM · αN · D_F · D_F DK⋅DK⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF。
- 其中,α ∈ (0,1 ),典型设置为1、0.75、0.5和0.25。α = 1是baseline MobileNet,α < 1是reduced MobileNets。宽度乘数具有将计算成本和参数数量的平方减少大约 α 2 α^2 α2的效果。宽度乘数可以应用于任何模型结构,以定义一个新的更小的模型,具有合理的准确性,等待时间和大小的权衡。它用于定义需要从头开始训练的新的简化结构。
-
Resolution Multiplier: Reduced Representation
-
降低神经网络计算成本的第二个超参数是分辨率乘数ρ。本文将其应用于输入图像,随后每一层的内部表示都用相同的乘数缩小。实际上,通过设置输入分辨率来隐式设置ρ。
-
现在,本文可以将网络核心层的计算成本表示为具有宽度乘数α和分辨率乘数ρ的深度方向可分离卷积:
-
D K ⋅ D K ⋅ α M ⋅ ρ D F ⋅ ρ D F + α M ⋅ α N ⋅ ρ D F ⋅ ρ D F D_K · D_K · αM · ρD_F · ρD_F + αM · αN · ρD_F · ρD_F DK⋅DK⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDF
-
其中ρ ∈ (0,1]通常是隐式设置的,因此网络的输入分辨率为224、192、160或128。ρ = 1是baseline MobileNet ,ρ < 1是减少计算的MobileNets。分辨率乘数具有将计算成本降低 ρ 2 ρ^2 ρ2的效果。
-
-
作为示例,可以查看MobileNet中的一个典型层,并了解深度方向可分离卷积、宽度乘数和分辨率乘数如何降低成本和参数。下表显示了当体系结构收缩方法被顺序应用于一个层时,该层的参数的计算和数量。第一行显示完整卷积层的乘法和参数,输入特征映射的大小为14 × 14 × 512,核K的大小为3 × 3 × 512 × 512。将在下一节详细讨论资源和准确性之间的权衡。
- 修改标准卷积的资源使用。请注意,每一行都是在前一行之上添加的累积效果。此示例针对DK = 3、M = 512、N = 512、DF = 14的内部MobileNet层。
-
Experiments
-
在这一节中,本文首先研究深度方向卷积的影响,以及通过减少网络宽度而不是层数来缩小的选择。然后,本文展示了基于两个超参数(宽度乘数和分辨率乘数)减少网络的权衡,并将结果与一些流行的模型进行了比较。然后,本文研究应用于许多不同应用的MobileNets。
-
Model Choices
- 首先,本文展示了与使用全卷积构建的模型相比,使用深度方向可分离卷积的MobileNet的结果。通过下表看到,与全卷积相比,使用深度方向可分离卷积在ImageNet上只降低了1%的精度,而在乘法和参数上节省了大量的时间。
- Depthwise Separable vs Full Convolution MobileNet
- 本文还展示了使用宽度乘数的较薄模型与使用较少层的较浅模型的比较结果。为了使MobileNet更浅,删除了MobileNet Body Architecture表中特征尺寸为14 × 14 × 512的5层可分离滤波器。下表显示,在相似的计算和参数数量下,将MobileNets做得更薄比做得更浅好3%。
-
Narrow vs Shallow MobileNet
- 首先,本文展示了与使用全卷积构建的模型相比,使用深度方向可分离卷积的MobileNet的结果。通过下表看到,与全卷积相比,使用深度方向可分离卷积在ImageNet上只降低了1%的精度,而在乘法和参数上节省了大量的时间。
-
Model Shrinking Hyperparameters
- 下表显示了使用宽度乘数α缩小MobileNet架构的精度、计算和尺寸权衡。精度平稳下降,直到架构在α = 0.25时变得过小。
- MobileNet Width Multiplier
- 下表通过训练输入分辨率降低的MobileNets ,显示了不同分辨率乘法器的精度、计算和尺寸权衡。精度随着分辨率的变化而平稳下降。
- MobileNet Resolution
- 下图显示了根据宽度乘数α ∈ {1,0.75,0.5,0.25}和分辨率{224,192,160,128}的叉积制作的16个模型的ImageNet精度和计算之间的权衡。当模型在α = 0.25时变得很小时,结果是具有跳跃的对数线性。
- 该图显示了ImageNet基准测试中计算(乘法)和精度之间的权衡。注意精度和计算之间的对数线性关系。
- 下图显示了16个模型的ImageNet精度和参数数量之间的权衡,这些模型由宽度乘数α ∈ {1,0.75,0.5,0.25}和分辨率{224,192,160,128}的叉积构成。
- 该图显示了ImageNet基准测试中参数数量和准确性之间的权衡。颜色对输入分辨率进行编码。参数的数量不会因输入分辨率而变化。
- 下表将完整的MobileNet与原始的GoogleNet和VGG16进行了比较。MobileNet几乎与VGG16一样精确,但体积小32倍,计算强度低27倍。它比GoogleNet更精确,但体积更小,计算量少2.5倍以上。
- MobileNet Comparison to Popular Models
- 下表比较了宽度乘数α = 0.5和分辨率为160*160的简化MobileNet。简化的MobileNet比AlexNet好4%,同时比AlexNet小45倍,计算量少9.4倍。它也比Squeezenet在大约相同的大小和22倍的计算量下好4%。
-
Smaller MobileNet Comparison to Popular Models
- 下表显示了使用宽度乘数α缩小MobileNet架构的精度、计算和尺寸权衡。精度平稳下降,直到架构在α = 0.25时变得过小。
-
Fine Grained Recognition
- 本文在斯坦福狗数据集上训练MobileNet进行细粒度识别。本文还扩展了[18]的方法,从网络上收集了比[The unreasonable effectiveness of noisy data for fine-grained recognition]更大但更嘈杂的训练集。
- 本文使用嘈杂的web数据来预训练细粒度的狗识别模型,然后在斯坦福狗训练集上微调该模型。在Stanford Dogs测试集上的结果在下表中。MobileNet几乎可以实现中的最新成果,同时大大降低了计算量和尺寸。
- MobileNet for Stanford Dogs
-
Large Scale Geolocalizaton
- PlaNet 将确定照片拍摄地点的任务视为一个分类问题。该方法将地球划分为地理单元网格,作为目标类,并在数百万张带有地理标签的照片上训练卷积神经网络。PlaNet已经被证明成功地定位了大量不同的照片,并且优于解决相同任务的Im2GPS 。
- 本文在相同的数据上使用MobileNet架构重新训练PlaNet。而基于Inception V3架构的完整PlaNet具有5200万个参数和57.4亿个乘法。MobileNet模型只有1300万个参数,通常有300万个参数用于主体,1000万个参数用于最终层,58万个参数用于多重添加。如表中所示。与PlaNet相比,MobileNet版本的性能仅略有下降,尽管其更加紧凑。此外,它仍然远远超过Im2GPS。
-
Face Attributes
-
MobileNet的另一个用例是用未知或深奥的训练过程压缩大型系统。在面部属性分类任务中,本文展示了MobileNet和知识蒸馏之间的协同关系,蒸馏是一种用于深度网络的知识转移技术。本文试图减少一个具有7500万个参数和1600万个乘法的大型人脸属性分类器。在类似于YFCC100M 的多属性数据集上训练分类器。
-
本文使用MobileNet架构提取人脸属性分类器。蒸馏通过训练分类器来模拟更大模型的输出,而不是ground truth标签,因此能够从大型(并且可能是无限的)无标签数据集进行训练。
-
结合蒸馏训练的可扩展性和MobileNet的简约参数化,最终系统不仅不需要正则化(例如,重量衰减和早期停止),而且表现出增强的性能。从下表可以明显看出。
- 使用MobileNet架构的人脸属性分类。每行对应不同的超参数设置(宽度乘数α和图像分辨率)。
-
基于MobileNet的分类器对激进的模型收缩具有弹性:它实现了与内部相似的跨属性平均精度(平均AP ),而只消耗1%的Multi-Adds。
-
-
Object Detection
- MobileNet还可以在现代目标检测系统中作为有效的基础网络部署。本文根据最近赢得2016年COCO挑战赛的工作,报告了MobileNet在COCO数据上进行对象检测的结果。在下表中,MobileNet在Faster-RCNN和SSD框架下与VGG和Inception V2 进行了比较。
- 在本文的实验中,SSD以300输入分辨率(SSD 300)进行评估,Faster-RCNN与300和600输入分辨率(FasterRCNN 300,Faster-RCNN 600)进行比较。fast-RCNN模型评估每个图像的300个RPN建议框。在COCO train+val上训练模型,排除8k minival图像,并在minival上评估。对于这两个框架,MobileNet都取得了与其他网络相当的结果,而计算复杂度和模型大小却只有前者的一小部分。
- 使用不同框架和网络架构的COCO对象检测结果比较。使用COCO主要挑战度量报告mAP(IoU处的AP = 0.50:0.05:0.95)
-
Face Embeddings
- FaceNet模型是一种先进的人脸识别模型。它基于三元组损失构建人脸嵌入。为了构建移动FaceNet模型,本文通过最小化FaceNet和MobileNet对训练数据的输出的平方差来使用蒸馏进行训练。非常小的MobileNet模型的结果可以在下表中找到。
- 从FaceNet中蒸馏出来的MobileNet
Conclusion
- 本文提出了一种新的基于深度方向可分卷积的模型结构MobileNets。本文还研究了一些导致高效模型的重要设计决策。然后,本文还演示了如何使用宽度倍增器和分辨率倍增器来构建更小、更快的MobileNets,方法是通过牺牲一定的精度来减少大小和延迟。然后,本文将不同的MobileNets与展示出卓越尺寸、速度和准确性特征的流行型号进行了比较。最后,本文还展示了MobileNet在应用于各种任务时的有效性。作为下一步帮助采用和探索MobileNets,本文计划在张量流中发布模型。
对比各种卷积
- 可以计算 CNN 模型中组成模块的计算成本,然后看一下卷积是如何在空间和通道中执行的。
- HxW 表示输入特征图的空间大小,N 代表输入通道数,KxK 代表卷积核的大小,M 代表输出通道数,那么,标准卷积的计算成本变成了 HWNK²M(对于same padding来说)。
- 标准卷积的计算成本与以下因素成比例:
- (1)输出特征图的空间大小 HxW,
- (2)卷积核的大小 K²,
- (3)输入通道和输出通道的数量 NxM。
- 最常用的 3x3 的卷积,可以通过下图进行可视化。在空间(spatial)中输入和输出是局部连接的,而在通道中则是全连接。
- conv1x1 或用于改变通道大小的逐点卷积,如下图所示。这种卷积的计算成本是 HWNM,因为其卷积核大小为 1x1,所以其计算成本是 3x3 卷积的 1/9。这种卷积被用来「融合」各个通道的信息。
- 标准卷积层本质上完成了两件事情,一是通过卷积核提取特征(
filter
),二是将特征图组合起来(combine
)。每个卷积核都可以提取特征得到特征图,这完成了第一件事情;将每个卷积核得到的特征图组合起来得到最终输出,这完成了第二件事情。而整个MobileNet的核心理念深度可分离卷积,它通过分解标准卷积,把原先放在一步内完成的filter
和combine
分成了两个步骤,分别对应两种卷积depthwise convolution
和pointwise convolution
。 depthwise convolution
和标准卷积的区别在于:标准卷积是将每个卷积核应用在所有通道上,而depthwise convolution
针对输入中的每个通道应用不同的卷积核。假设输入有M个通道,标准卷积层有N个卷积核,每个卷积核尺寸为 D k ∗ D k D_k * D_k Dk∗Dk,通道数为M;depthwise convolution
有M个卷积核,每个卷积核的通道数都是1
。但是depthwise convolution
的输入和输出维度都是一样的,那怎么改变维度呢?这时候就轮到pointwise convolution
出场,其本质为1∗1的标准卷积,主要作用就是对输入进行升维和降维。下图更加形象地表现了深度可分离卷积的工作过程:- - 分组卷积
- 分组卷积是标准卷积的一种变体,其中输入特征图的通道被分组,然后卷积在每组通道上独立进行。
- G 代表分组数量,分组卷积的计算成本是 HWNK²M/G,与标准卷积相比,分组卷积的计算成本变成了 1/G。
- G=2 的分组 conv3x3 的例子。与标准卷积相比,分组卷积通道中的连接数更少,这意味着更小的计算成本。
- G=2 的分组 conv1x1 的例子。因此,conv1x1 也可以分组。这种卷积被用在 ShuffleNet 中。
- Depthwise 卷积
- 在 Depthwise 卷积中,卷积是在每个输入通道上独立执行的。这也可以定义为分组卷积的特殊情况:输入和输出的通道数相同,G 等于通道数。depthwise 卷积大大减少了计算成本。
- 通道混洗(Channel shuffle)
- 通道混洗是改变 ShuffleNet中所用通道顺序的操作(层)。这种操作是通过张量整形和转置来实现的。
- 更具体来说,比如 GN’ (=N) 代表输入通道数,输入通道的维度首先被整形为 (G, N’),然后将 (G, N’) 转置为 (N’, G),最后将它拉平到与输入相同的形状。这里,G 代表的是分组卷积中分组的数目,分组卷积通常与 ShuffleNet 中的通道混洗一起使用。
- 虽然不能用乘-加运算次数(MACs)来定义通道混洗的计算成本,但是这些计算应该是需要一些开销的。G=2 的通道混洗的例子。没有进行卷积,只改变了通道顺序。