名称:GhostNet: More Features from Cheap Operations
来源:CVPR2020
论文地址:https://arxiv.org/abs/1911.11907
PyTorch代码:https://github.com/huawei-noah/ghostnet
摘要
由于存储和计算资源有限,在嵌入式设备上部署卷积神经网络(CNNs)是困难的。特征映射的冗余性对于那些成功的卷积神经网络是一个重要特征,但在神经结构设计中却鲜有人研究。本文提出了一种新的Ghost模块来从廉价的操作中生成更多的特征地图。在一组固有特征映射的基础上,采用一系列低成本的线性变换,生成了大量能够充分揭示固有特征信息的重影特征映射。提出的Ghost模块可以作为一个即插即用组件来升级现有的卷积神经网络。设计了Ghost瓶颈来堆叠Ghost模块,从而可以很容易地建立轻量级GhostNet。在基准测试上的实验表明,Ghost模块是基线模型中卷积图层的一种令人印象深刻的替代方案,并且在ImageNet ILSVRC-2012分类数据集上,我们的Ghost Net可以获得比MobileNetV3更高的识别性能(例如:75.7%的TOP-1准确率),而计算成本与MobileNetV3相似。
1.Introduction
深卷积神经网络在图像识别[27,12]、目标检测[42,30]、语义分割[36,3]等计算机视觉任务中表现出优异的性能。传统的CNN通常需要大量的参数和浮点运算(Flops)才能达到令人满意的精度,例如ResNet-50[12]大约有25.6M个参数,需要4.1B Flops才能处理大小为224×224的图像。因此,深度神经网络设计的最新趋势是为移动设备(如智能手机和自动驾驶汽车)探索具有可接受性能的便携和高效的网络结构。
多年来,人们提出了一系列研究紧凑深度神经网络的方法,如网络剪枝[10,37]、低位量化[40,22]、知识提炼[15]等。[10]提出了对神经网络中不重要的权值进行剪枝。[28]利用‘1范数正则化方法对滤波器进行剪枝,得到有效的CNN。[40]将权重和激活量化为1位数据,以实现较大的压缩和加速比。[15]介绍了用于将知识从较大模型转移到较小模型的知识蒸馏。然而,这些方法的性能往往是由预先训练的深度神经网络作为它们的基线来实现的。
此外,高效的神经结构设计在以较少的参数和计算量建立高效的深度网络方面具有很高的潜力,近年来已经取得了相当大的成功。这种方法还可以为自动搜索方法[58,41]提供新的搜索单元。例如,MobileNet[17,44,16]利用深度卷积和逐点卷积构造了一个单元,用于用更大的滤波器逼近原始卷积层,并获得了相当的性能。ShuffleNet[57,38]进一步探索了信道混洗操作以提升轻量化模型的性能。
在训练有素的深度神经网络的特征映射中,丰富甚至冗余的信息往往保证了对输入数据的全面理解。例如,图1显示了由ResNet-50生成的输入图像的一些特征映射,并且存在许多相似的特征映射对,就像彼此的幽灵一样。特征映射中的冗余可能是成功的深度神经网络的一个重要特征。我们倾向于采用冗余的功能映射,而不是避免冗余的功能映射,但以一种经济高效的方式。
本文介绍了一种新的Ghost模块,可以用较少的参数生成更多的特征。具体地说,深度神经网络中的一个普通卷积层将被分成两部分。第一部分涉及普通的卷积,但它们的总数将受到严格控制。给定第一部分的固有特征映射,然后应用一系列简单的线性操作来生成更多的特征映射。与普通卷积神经网络相比,在不改变输出特征映射大小的情况下,Ghost模块的总体参数需求和计算复杂度都有所降低。基于Ghost模块,我们建立了一个高效的神经体系结构,即GhostNet。我们首先在基准神经结构中替换原有的卷积层以演示Ghost模块的有效性,然后在几个基准视觉数据集上验证我们GhostNets的优越性。实验结果表明,Ghost模块能够在保持相似识别性能的情况下,降低通用卷积层的计算开销,在移动设备上的各种任务上,Ghost Nets能够以快速推理超越MobileNetV3[16]等最先进的高效深度模型。
论文的其余部分安排如下:第二部分简要总结了该领域的相关工作,然后是第三部分提出的Ghost模块和GhostNet,第四部分是实验和分析,最后是第五部分的结论。
2.RelatedWork
在这里,我们从模型压缩和紧凑模型设计两个方面回顾了现有的神经网络轻量化方法。
2.1. Model Compression
对于给定的神经网络,模型压缩的目的是减少计算、能量和存储成本。修剪连接[11,10,49]会切断神经元之间不重要的连接。通道修剪[50,14,28,37,55,19,32]进一步的目标是移除无用的通道,以便在实践中更容易地加速。模型量化[40,20,22]表示神经网络中的权重或激活压缩和计算加速度的离散值。具体地说,仅具有1位值的二值化方法[20,40,35]可以通过有效的二进制操作极大地加速模型。张量分解[23,25,7]通过利用权重的冗余性和低秩性质来减少参数或计算量。知识提炼[15,43]利用较大的模型来教授较小的模型,这提高了较小模型的性能。这些方法的性能通常取决于给定的预训练模型。对基本操作和架构的改进将使它们走得更远。
2.2. Compact Model Design
随着在嵌入式设备上部署神经网络的需要,近年来提出了一系列紧凑型模型[9,5,17,44,16,57,38,52,53,46]。SqueezeNet[9]使用瓶颈方法,以50×更少的参数实现AlexNet级别的精度。Exception[5]利用纵深卷积运算来更有效地使用模型参数。MobileNets[17]是一系列基于深度可分离卷积的轻量级深度神经网络。MobileNetV2[44]提出倒置残差块,MobileNetV3[16]进一步利用AutoML技术,以更少的FLOP实现更好的性能。ShuffleNet[57]引入了信道混洗操作,以改善信道组之间的信息流交换。ShuffleNetV2[38]为紧凑的模型设计进一步考虑了目标硬件上的实际速度。虽然这些模型在极少的失败次数下获得了很好的性能,但是特征映射之间的相关性和冗余性一直没有得到很好的利用。
3. Approach
在这一部分,我们将首先介绍Ghost模块,利用几个小的过滤器从原有的卷积层生成更多的特征图,然后开发一个具有极其高效的体系结构和高性能的新的Ghost Net。
3.1. Ghost Module for More Features
深卷积神经网络[27,45,12]通常由大量的卷积组成,这会导致巨大的计算成本。尽管最近的工作,如MobileNet[17,44]和ShuffleNet[38]都引入了深度卷积或混洗运算,以使用较小的卷积滤波器(浮数运算)来构建高效的CNN,但剩余的1×1卷积层仍将占用相当大的内存和FLOP。考虑到主流CNN计算的中间特征图中广泛存在的冗余,如图1所示,我们建议减少所需的资源,即用于生成它们的卷积滤波器。实际上,给定输入数据X∈R(c×h×w),其中c是数字并且h和w分别是输入数据的高度和宽度,用于产生n个特征地图的任意卷积层的操作可以表示为:
其中∗是卷积运算,b是偏置项,Y∈R(h’×w’×n)是n个通道的输出特征图,f∈R(c×k×k×n)是该层中的卷积滤波器。另外,h’和w’分别是输出数据的高度和宽度,k×k是卷积滤波器f的核大小。在该卷积过程中,所需的触发器数目可计算为n·h’·w’·c·k·k,由于滤波器n的数目和信道数c通常非常大(例如256或512),因此该数目通常高达数十万。
根据方程式1,要优化的参数(在f和b中)的数量由输入和输出特征映射的维度明确地确定。如图1所示,卷积层的输出特征图通常包含许多冗余,并且它们中的一些可能彼此相似。我们指出,没有必要用大量的触发器和参数来逐个生成这些冗余的特征映射。假设输出的特征映射是具有一些廉价转换的少数内部特征映射的“重影”。这些本征特征图通常具有较小的尺寸,并且由普通卷积滤波器产生。具体地说,使用一次卷积生成m个本征特征映射Y’∈R(h’×w’×m):
其中,f’∈R(c×k×k×m)是所使用的滤波器,m≤n,为简单起见省略偏置项。超参数例如滤波器大小、步长、填充,与普通卷积(等式)中的值相同。1)保持输出要素地图的空间大小(即h’和w’)一致。为了进一步获得所需的n个特征映射,我们建议对Y’中的每个固有特征进行一系列廉价的线性运算,以根据以下函数生成s个重影特征:
其中Yi’是在Y’中的第i个固有特征映射。上面的函数是用于生成第j个重影特征映射Yj的第j个(除了最后一个)线性运算,也就是说,Yi’可以具有一个或多个重影特征映射{yij}(s) j=1。最后一个重影i是用于保持本征特征映射的身份映射,如图2(B)所示。通过利用等式3,我们可以获得n=m·s特征映射Y=[Y11,Y12,···,Yms]作为Ghost模块的输出数据,如图2(B)所示。注意,线性运算Φ在计算成本比普通卷积小得多的每个信道上操作。在实践中,Ghost模块中可能有几种不同的线性运算,例如3×3和5×5的线性核,这将在实验部分进行分析。
与现有方法的不同之处.所提出的Ghost模块与现有的高效卷积方案有很大的不同。
i)与文献[17,9,57]中广泛使用1×1逐点卷积的单元相比,Ghost模块中的初级卷积可以具有自定义的核大小。
ii)现有的方法[17,44,57,38]采用逐点卷积的方法处理跨通道的特征,然后进行深度卷积处理空间信息。而Ghost模块则采用普通卷积的方式,先生成少量的本征特征图,然后利用廉价的线性运算来增强特征,增加通道数。
iii)在以往的高效体系结构[17,57,52,24]中,处理每个特征图的运算仅限于深度卷积或移位运算,而Ghost模块中的线性运算可以具有很大的多样性。
iv)此外,Ghost模块中的身份映射与线性变换并行,以保持固有特征映射。
复杂性分析.因为我们可以在等式3中利用所提出的Ghost模块,为了生成与普通卷积层相同数量的特征映射,我们可以很容易地将Ghost模块集成到现有的设计良好的神经结构中,以降低计算成本。在这里,我们进一步分析了使用Ghost模块在内存使用和理论加速方面的收益。例如,有1个恒等式映射和m·(s−1)=n s·(s−1)线性运算,并且每个线性运算的平均核大小等于d×d。理想情况下,n·(s−1)线性运算可以具有不同的形状和参数,但特别是考虑到CPU卡或GPU卡的使用,在线推理会受到阻碍。因此,我们建议采取在一个Ghost模块中实现相同大小(例如3×3或5×5)的线性运算,以实现高效实施。用Ghost模块升级普通卷积的理论加速比为:
3.2. Building Efficient CNNs
Ghost Bottlenecks. 利用Ghost模块的优点,介绍了专门为小型CNN设计的Ghost瓶颈(G-BNeck)。如图3所示,Ghost瓶颈似乎类似于ResNet[12]中的基本残留块,其中集成了几个卷积层和捷径。建议的Ghost瓶颈主要由两个堆叠的Ghost模块组成。第一个Ghost模块充当增加通道数量的扩展层。我们将输出通道数与输入通道数之比称为扩展比。第二个Ghost模块减少通道数量以匹配快捷路径。然后在这两个Ghost模块的输入和输出之间连接快捷方式。批次规格化(BN)[21]和RELU非线性在每一层之后应用,除了按照MobileNetV2[44]的建议在第二个Ghost模块之后不使用RELU之外。上面描述的Ghost瓶颈是STRIDE=1。至于在STRIDE=2的情况下,捷径由下采样层实现,并且在两个Ghost模块之间插入具有STRIDE=2的深度卷积。在实际应用中,Ghost模块的主要卷积是逐点卷积,因为它的效率很高。
**GhostNet.**在Ghost瓶颈的基础上,我们提出了GhostNet,如表7所示。我们遵循MobileNetV3[16]的基本架构,利用它的优势,用我们的Ghost瓶颈取代了MobileNetV3中的瓶颈块。GhostNet主要由以Ghost模块为构建块的Ghost瓶颈堆栈组成。第一层是具有16个滤波器的标准卷积层,然后是信道逐渐增加的一系列Ghost瓶颈。这些Ghost瓶颈根据其输入特征地图的大小被分成不同的阶段。除了每个阶段的最后一个是STRIDE=2之外,所有的Ghost瓶颈都以STRIDE=1应用。最后,利用全局平均汇集和卷积层将特征映射转换为1280维的特征向量进行最终分类。挤压和激励(SE)模块[18]也适用于某些重影瓶颈中的残留层,如表7所示。与MobileNetV3不同,我们没有使用硬摆动非线性功能,因为它的延迟很大。虽然进一步的超参数调整或基于自动结构搜索的GHOST模块将进一步提高性能,但本文提出的体系结构提供了一个可供参考的基本设计。
**Width Multiplier .**尽管表7中给定的体系结构已经可以提供低延迟和有保证的准确性,但在某些场景中,我们可能需要更小、更快的模型或更高的特定任务精度。要根据需要定制网络,我们只需将因子α均匀地乘以每层的信道数即可。该系数α称为宽度乘数,因为它可以改变整个网络的宽度。宽度乘法器可以对模型大小和计算代价进行二次α2左右的控制,通常α越小,延迟越小,性能越低,反之亦然。
4. Experiments
在本节中,我们首先用提出的Ghost模块替换原有的卷积层,以验证其有效性。然后,使用新模块构建的GhostNet架构将在图像分类和目标检测基准上进行进一步测试。
Datasets and Settings. 为了验证Ghost模块和GhostNet架构的有效性,我们在几个基准视觉数据集上进行了实验,包括CIFAR-10[26]、ImageNet ILSVRC 2012数据集[6]和MS Coco对象检测基准[8]。
利用CIFAR-10数据集对该方法的性能进行了分析,该方法由10类6万幅32×32彩色图像组成,包含5万幅训练图像和10000幅测试图像。采用包括随机裁剪和镜像[12,14]的常见数据增强方案。ImageNet是一个包含超过120万张训练图像和50K张验证图像的大规模图像数据集,分别属于1000个类别。训练过程中采用了常用的数据预处理策略,包括随机裁剪和翻转[12]。我们还在MS Coco数据集[31]上进行了目标检测实验。遵循通常的做法[29,30],我们在COCO traval35k分裂(80K训练图像和来自验证集的随机35K图像子集的联合)上训练模型,并用5K图像对Minival分裂进行评估。
4.1. Efficiency of Ghost Module
4.1.1 Toy Experiments.
我们在图1中提供了一个图,以指出存在一些类似的功能映射对,可以使用一些有效的线性操作高效地生成这些映射对。在这里,我们首先进行玩具实验,观察原始特征图和生成的重影特征图之间的重建误差。以图1中的三对(即红色、贪婪和蓝色)为例,使用ResNet-50的第一个残差块[12]来提取特征。将左边的要素作为输入,将另一个要素作为输出,我们利用一个小的纵卷积滤波器来学习映射,即它们之间的线性运算Φ。卷积滤波器d的大小范围为1到7,表2中示出了具有不同d的每对的MSE(均方误差)值。
在表2中可以发现,所有的MSE值都非常小,这表明深度神经网络中的特征映射之间存在很强的相关性,这些冗余的特征映射可以由多个固有的特征映射生成。除了上述实验中使用的卷积外,我们还可以探索其他一些低成本的线性运算来构建Ghost模块,如仿射变换和小波变换。然而,卷积是目前硬件已经很好支持的一种高效运算,它可以涵盖许多广泛使用的线性运算,如平滑、模糊、运动等。此外,虽然我们还可以了解每个滤波器的大小。线性运算的Φ,不规则的模块会降低计算单元(如中央处理器和图形处理器)的效率。因此,我们建议将Ghost模块中的d设为固定值,并利用深度卷积来实现方程。3在后续实验中构建高效的深度神经网络。
4.1.2 CIFAR-10.
在CIFAR-10数据集上,我们在两种流行的网络体系结构(VGG-16[45]和ResNet-56[12])上对所提出的Ghost模块进行了评估。由于VGG-16最初是为ImageNet设计的,因此我们使用其在文献中广泛使用的变体[56]进行以下实验。这两个模型中的所有卷积层都被提出的Ghost模块所取代,新模型分别记为Ghost-VGG-16和Ghost-ResNet-56。我们的训练策略严格遵循[12]中的设置,包括动量、学习率等。我们首先分析Ghost模块中两个超参数s和d的影响,然后将Ghost模型与最新的方法进行比较。
**Analysis on Hyper-parameters.**如等式3中所述。提出的高效深度神经网络Ghost模块具有两个超参数,即用于生成m=n/s本征特征映射的s和用于计算Ghost特征映射的核大小d×d的线性运算(即深度卷积滤波器的大小)。在VGG-16体系结构上测试了这两个参数的影响。首先,我们在{1,3,5,7}中修正s=2并调整d,并在表3中列出CIFAR-10验证集上的结果。我们可以看到,d=3的Ghost模块的性能优于较小或较大的Ghost模块。这是因为1×1大小的核函数不能在特征地图上引入空间信息,而d=5或d=7等较大的核函数会导致过拟合和更多的计算量。因此,出于有效性和效率的考虑,我们在后续实验中采用d=3。在研究了所提出的Ghost模块中使用的内核大小之后,我们保持d=3,并将其他超参数s调整在{2,3,4,5}的范围内。事实上,s与结果网络的计算成本直接相关,也就是说,s越大,压缩和加速比越大,正如等式5和等式4中所分析的那样。从表4中的结果看,随着s的增加,FLOP明显减少,精度逐渐降低,这与预期不谋而合。特别是当s=2时,也就是将VGG-16压缩2×时,该方法的性能甚至比原模型略有提高,表明了Ghost模块的优越性。
**Comparison with State-of-the-arts.**我们在VGG-16和ResNet-56架构上将GhostNet与几个有代表性的最先进型号进行了比较。比较的方法包括不同类型的模型压缩方法,‘1剪枝[28,34],SBP[14],信道剪枝(CP)[14]和AMC[13]。对于VGG-16,在加速度为2倍的情况下,我们的模型可以获得比原始模型略高的精度,这表明VGG模型存在相当大的冗余度。我们的Ghost-VGG-16(s=2)以最高的性能(93.7%)超过竞争对手,但故障明显较少。对于已经比VGG-16小得多的ResNet-56,我们的模型可以达到与基线相当的精度,加速比为2倍。我们还可以看到,其他具有相似或更大计算量的最新模型获得的精度比我们的要低。
**Visualization of Feature Maps.**我们还可视化了GHOST模块的特征映射,如图4所示。虽然生成的特征映射来自主特征映射,但它们确实有显著的差异,这意味着生成的特征足够灵活,可以满足特定任务的需要。
4.1.3 Large Models on ImageNet
接下来,我们将Ghost模块嵌入到标准的ResNet50[12]中,并在大规模的ImageNet数据集上进行了实验。RESNET-50有大约25.6M个参数和4.1B个触发器,前5名误差为7.8%。我们用我们的重影模块替换ResNet50中的所有卷积层,以获得紧凑的模型,并将结果与几种最先进的方法进行比较,如表6所示。优化器、学习率和批次大小等训练设置与[12]中的完全相同,以便进行公平比较。
从表6的结果可以看出,我们的GhostResNet-50(s=2)在保持原来ResNet-50的精度的同时,获得了大约2倍的加速比和压缩比。与最新的Thinet[37]、NISP[55]、V型通用滤波器[48]和稀疏结构选择(SSS)[19]方法相比,我们的方法在2倍加速设置下可以获得明显更好的性能。当s进一步增加到4时,基于Ghost的模型仅有0.3%的精度下降,计算加速比约为4倍。相比之下,具有相似权重或失败的比较方法[52,54]的性能要比我们的低得多。
4.2. GhostNet on Visual Benchmarks
在展示了所提出的Ghost模块在高效生成特征地图方面的优势之后,我们分别使用Ghost在图像分类和目标检测任务上的瓶颈来评估设计良好的GhostNet体系结构,如表7所示。
4.2.1 ImageNet Classification
为了验证所提出的GhostNet的优越性,我们对ImageNet分类任务进行了实验。我们遵循[57]中使用的大多数训练设置,除了8个GPU上的批大小为1,024个时的初始学习率设置为0.4。所有结果都报告了ImageNet验证集上的单个裁剪TOP-1性能。对于GhostNet,为简单起见,我们在主要卷积中设置核大小k=1,在所有Ghost模块中设置s=2和d=3。几种现代小型网络体系结构被选为竞争对手,包括MobileNet系列[17,44,16],ShuffleNet系列[57,38],IGCV3[46],ProxylessNAS[2],BNet[51],MnasNet[47]等。结果汇总在表7中。这些模型分为四个计算复杂性级别,即典型的移动应用,即∼50、∼150和200-300MFLOPS。从结果可以看出,在这些小的网络中,一般来说,较大的FLOPS会导致较高的精度,这说明了它们的有效性。我们的GhostNet在不同的计算复杂度水平上始终优于其他竞争对手,因为GhostNet在利用计算资源生成功能图方面效率更高。
**Actual Inference Speed.**由于GhostNet是为移动应用而设计的,因此我们在基于ARM的手机上使用TFLite工具进一步测量了GhostNet的实际推理速度[1]。遵循[17,44]中的常用设置,我们使用单线程模式,批量大小为1。从图7的结果可以看出,GhostNet在相同延迟的情况下,TOP-1准确率比MobileNetV2高约0.5%,GhostNet需要更少的运行时间才能达到类似的性能。例如,75.0%准确率的GhostNet只有40ms的延迟,而类似准确率的MobileNetV3处理一张图像大约需要45ms。总体而言,我们的机型总体上优于著名的最先进机型,即MobileNet系列[17,44,16],ProxylessNAS [2], FBNet [51], and MnasNet [47].
4.2.2 Object Detection
为了进一步评估GhostNet的泛化能力,我们在MS Coco数据集上进行了目标检测实验。我们使用traval35k分割作为训练数据,并按照[29,30]在平均平均精度(MAP)中报告了对Minival分割的结果。两级更快的R-CNN和特征金字塔网络(FPN)[42,29]和一级RetinaNet[30]都被用作我们的框架,而GhostNet作为骨干特征提取器的替代。我们使用SGD从ImageNet预先训练的权重中使用[29,30]中建议的超参数对所有模型进行了12个历元的训练。将输入图像的大小调整为800的短边和不超过1333的长边。表8显示了检测结果,通常使用224×224图像计算触发器。以极低的计算成本,GhostNet实现了与MobileNetV2和MobileNetV3相似的MAP,无论是在一级Retinanet框架上还是在两级更快的R-CNN框架上。
5. Conclusion
为了降低现有深度神经网络的计算成本,提出了一种新的Ghost模块,用于构建高效的神经网络结构。Basic Ghost模块将原始卷积层分成两部分,并使用较少的滤波器来生成多个本征特征图。然后,进一步应用一定数量的廉价变换操作来高效地生成重影特征地图。在基准模型和数据集上进行的实验表明,该方法是一个即插即用的模块,可以将原始模型转换为紧凑的模型,同时保持可比较的性能。此外,使用建议的新模块构建的GhostNet在效率和准确性方面都优于最先进的便携式神经架构。
References(lue。。。)