新智元投稿  

作者:王云鹤
编辑:元子
【新智元导读】华为研究员提出一种新型轻量神经网络架构,表现全面超越谷歌MobileNet V3和Facebook的FBNet,相关成果已被CVPR 2020收录。论文提出了一个全新的Ghost模块,旨在通过廉价操作生成更多的特征图。「新智元急聘主笔、编辑、运营经理、客户经理,添加HR微信(Dr-wly)或扫描文末二维码了解详情。」
卷积神经网络推动了计算机视觉诸多任务的进步,比如图像识别、目标检测等。但是,神经网络在移动设备上的应用还亟待解决,主要原因是现有模型又大又慢。因而,一些研究提出了模型的压缩方法,比如剪枝、量化、知识蒸馏等;还有一些则着重于高效的网络结构设计,比如MobileNet,ShuffleNet等。本文就设计了一种全新的神经网络基本单元Ghost模块,从而搭建出轻量级神经网络架构GhostNet。
在一个训练好的深度神经网络中,通常会包含丰富甚至冗余的特征图,以保证对输入数据有全面的理解。如下图所示,在ResNet-50中,将经过第一个残差块处理后的特征图拿出来,三个相似的特征图对示例用相同颜色的框注释。该对中的一个特征图可以通过廉价操作(用扳手表示)将另一特征图变换而获得,可以认为其中一个特征图是另一个的"幻影"。因为,本文提出并非所有特征图都要用卷积操作来得到,"幻影"特征图可以用更廉价的操作来生成。
图1 ResNet50特征图可视化
在本文中,作者提出了一种新颖的Ghost模块,可以使用更少的参数来生成更多特征图。具体来说,深度神经网络中的普通卷积层将分为两部分。第一部分涉及普通卷积,但是将严格控制它们的总数。给定第一部分的固有特征图,然后将一系列简单的线性运算应用于生成更多特征图。与普通卷积神经网络相比,在不更改输出特征图大小的情况下,该Ghost模块中所需的参数总数和计算复杂度均已降低。基于Ghost模块,作者建立了一种有效的神经体系结构,即GhostNet。作者首先在基准神经体系结构中替换原始的卷积层,以证明Ghost模块的有效性,然后在几个基准视觉数据集上验证GhostNet的优越性。实验结果表明,所提出的Ghost模块能够在保持相似识别性能的同时降低通用卷积层的计算成本,并且GhostNet可以超越MobileNetV3等先进的高效深度模型,在移动设备上进行快速推断。
详解新型轻量神经网络架构GhostNet基础,即插即用的Ghost模块
深度卷积神经网络通常引用由大量卷积组成的卷积神经网络,导致大量的计算成本。尽管最近的工作,例如MobileNet和ShuffleNet引入了深度卷积或混洗操作,以使用较小的卷积核(浮点运算)来构建有效的CNN,其余$ 1 \times1 $卷积层仍将占用大量内存和FLOPs。
鉴于主流CNN计算出的中间特征图中存在大量的冗余(如图1所示),作者提出减少所需的资源,即用于生成它们的卷积核。实际上,给定输入数据$ X \ in \ mathbb {R} ^ {c \timesh \timesw} $,其中$ c $是输入通道数,$ h $和$ w $是高度,输入数据的宽度,分别用于生成$ n $个特征图的任意卷积层的运算可表示为:
\begin{equation}
Y = X*f+b,
\end{equation}
其中$ * $是卷积运算,$ b $是偏差项,$ Y \ in \ mathbb {R} ^ {h'\times w'\times n} $是具有$ n $个通道的输出特征图, $ f \ in \ mathbb {R} ^ {c \timesk \times k \timesn} $是这一层中的卷积核。另外,$ h'$和$ w'$分别是输出数据的高度和宽度,$ k \times ·······k$分别是卷积核$ f $的内核大小。在此卷积过程中,由于卷积核数量$n $和通道数$ c $通常非常大(例如256或512),所需的FLOPs数量达$ n \cdot h'\cdot w'\cdot c \cdot k \cdot k $之多。
图2 (a) 普通卷积层 (b) Ghost模块
根据上述公式,要优化的参数数量($ f $和$ b $中的参数)由输入和输出特征图的尺寸确定。如图1中所观察到的,卷积层的输出特征图通常包含很多冗余,并且其中一些可能彼此相似。作者指出,没有必要使用大量的FLOP和参数一一生成这些冗余特征图,而是说,输出特征图是少数原始特征图通过一些廉价转换的"幻影"。这些原始特征图通常具有较小的大小,并由普通的卷积核生成。具体来说,$ m $个原始特征图$ Y'\ in \ mathbb {R} ^ {h'\times w'\times m} $是使用一次卷积生成的:
\begin{equation}
Y' = X*f',
\end{equation}
其中$ f'\ in \ mathbb {R} ^ {c \times k \times k \timesm} $是使用的卷积核,$ m \ leq n $,为简单起见,这里省略了偏差项。超参数(例如卷积核大小,stride,padding)与普通卷积中的超参数相同,以保持输出特征图的空间大小(即$ h'$和$ w' $)保持一致。为了进一步获得所需的$ n $个特征图,作者提出对$ Y'$中的每个原始特征应用一系列廉价的线性运算,以生成$ s $个幻影特征图:
\begin{equation}
y_{ij} = \Phi_{i,j}(y'_i),\quad \forall\; i = 1,...,m,\;\; j = 1,...,s,
\end{equation}
其中$ y'_i $是$ Y'$中第$ i $个原始特征图,上述函数中的$ \ Phi_ {i,j} $是第j个线性运算,用于生成第$ j $个幻影特征图$ y_ {ij} $,也就是说,$ y'_i $可以具有一个或多个幻影特征图$ \{y_ {ij} \} _ {j = 1 } ^ {s} $。最后的$ \ Phi_ {i,s} $是用于保留原始特征图的恒等映射,如图2(b)所示。通过使用廉价操作,我们可以获得$ n = m \cdot s $个特征图$ Y = [y_ {11},y_ {12},\cdots,y_ {ms}] $作为Ghost模块的输出数据。注意,线性运算$ \ Phi $在每个通道上运行,其计算量比普通卷积少得多。实际上,Ghost模块中可能有几种不同的线性运算,例如$ 3 \times3 $和$ 5 \times5 $线性内核,将在实验部分进行分析。
复杂度分析:Ghost模块带来的内存和计算量的收益
利用Ghost模块生成与普通卷积层相同数量的特征图,我们可以轻松地将Ghost模块替换卷积层,集成到现有设计好的神经网络结构中,以减少计算成本。在这里,我们来进一步分析通过使用Ghost模块带来的内存和计算量的收益。具体来说,Ghost模块具有一个恒等映射和$ m \cdot (s-1)= \frac{n}{s} \cdot (s-1)$个线性运算,并且每个线性运算的平均内核大小为$ d \times d $。理想情况下,$ n \cdot (s-1)$个线性运算可以具有不同的形状和参数,但是特别是考虑到CPU或GPU的实用性,在线推理会受到阻碍。因此,作者建议在一个Ghost模块中采用相同大小的线性运算(例如全$ 3 \times3 $或全$ 5 \times5 $)以高效实现Ghost模块。使用Ghost模块升级普通卷积的理论加速比为
\begin{equation}
\begin{aligned}
r_s &= \frac{n\cdot h'\cdot w'\cdot c\cdot k\cdot k}{\frac{n}{s}\cdot h'\cdot w'\cdot c\cdot k\cdot k + (s-1)\cdot \frac{n}{s}\cdot h'\cdot w'\cdot d\cdot d}\\
&= \frac{c\cdot k\cdot k}{\frac{1}{s}\cdot c\cdot k\cdot k+\frac{s-1}{s}\cdot d\cdot d} \approx \frac{s\cdot c}{s+c-1}\approx s.
\end{aligned}
\end{equation}
其中$ d \times d $的幅度与$ k \times k $和$ s \ll c $相似。同样,参数压缩比可以计算为:
\begin{equation}
\begin{aligned}
r_c &= \frac{n\cdot c\cdot k\cdot k}{\frac{n}{s}\cdot c\cdot k\cdot k + (s-1)\cdot\frac{n}{s}\cdot d\cdot d} \approx \frac{s\cdot c}{s+c-1} \approx s.
\end{aligned}
\label{eq:rc}
\end{equation}
它大约等于加速比。
GhostNet:基于利用Ghost模块的构建Ghost bottleneck
Ghost Bottleneck:利用Ghost模块的优势,作者介绍了专门为小型CNN设计的Ghost bottleneck(G-bneck)。如图3所示,Ghost bottleneck似乎类似于ResNet中的基本残差块(Basic Residual Block),其中集成了多个卷积层和shortcut。Ghost bottleneck主要由两个堆叠的Ghost模块组成。第一个Ghost模块用作扩展层,增加了通道数。这里将输出通道数与输入通道数之比称为expansion ratio。第二个Ghost模块减少通道数,以与shortcut路径匹配。然后,使用shortcut连接这两个Ghost模块的输入和输出。这里借鉴了MobileNetV2,第二个Ghost模块之后不使用ReLU,其他层在每层之后都应用了批量归一化(BN)和ReLU非线性激活。上述Ghost bottleneck适用于stride= 1,对于stride = 2的情况,shortcut路径由下采样层和stride = 2的深度卷积(Depthwise Convolution)来实现。出于效率考虑,Ghost模块中的初始卷积是点卷积(Pointwise Convolution)。
图3 Ghost bottleneck
GhostNet基于Ghost bottleneck,作者提出GhostNet,如表1。作者遵循MobileNetV3的基本体系结构的优势,然后使用Ghost bottleneck替换MobileNetV3中的bottleneck。GhostNet主要由一堆Ghost bottleneck组成,其中Ghost bottleneck以Ghost模块为构建基础。第一层是具有16个卷积核的标准卷积层,然后是一系列Ghost bottleneck,通道逐渐增加。这些Ghost bottleneck根据其输入特征图的大小分为不同的阶段。除了每个阶段的最后一个Ghost bottleneck是stride = 2,其他所有Ghost bottleneck都以stride = 1进行应用。最后,利用全局平均池和卷积层将特征图转换为1280维特征向量以进行最终分类。SE模块也用在了某些Ghost bottleneck中的残留层,如表1中所示。与MobileNetV3相比,这里用ReLU换掉了Hard-swish激活函数。尽管进一步的超参数调整或基于自动架构搜索的Ghost模块将进一步提高性能,但表1所提供的架构提供了一个基本设计参考。
表1 GhostNet网络架构。
消融实验表明了Ghost模块的优越性
如上所述,Ghost模块具有两个超参数,也就是,$ s $用于生成$ m = n / s $个内在特征图,以及用于计算幻影特征图的线性运算的$d\times d$(即深度卷积核的大小)。作者测试了这两个参数的影响。
首先,作者固定$ s = 2 $并在$ \{1,3,5,7 \} $范围中调整$ d $,并在表2中列出CIFAR-10验证集上的结果。作者可以看到,提出的$ d = 3 $的Ghost模块的性能优于更小或更大的Ghost模块。这是因为大小为$ 1×1 $的内核无法在特征图上引入空间信息,而较大的内核(例如$ d = 5 $或$ d = 7 $)会导致过拟合和更多计算。因此,在以下实验中作者采用$ d = 3 $来提高有效性和效率。
表2 超参数d的影响
在研究了内核大小的影响之后,作者固定$ d = 3 $并在$ \{2,3,4,5 \} $的范围内调整超参数$ s $。实际上,$ s $与所得网络的计算成本直接相关,即,较大的$ s $导致较大的压缩率和加速比。从表3中的结果可以看出,当作者增加$ s $时,FLOP显着减少,并且准确性逐渐降低,这是在预期之内的。特别地,当$ s = 2 $,也就是将VGG-16压缩$ 2 \times $时,Ghost模块的性能甚至比原始模型稍好,表明了所提出的Ghost模块的优越性。
表3 超参数s的影响
作者将Ghost模块用在VGG-16和ResNet-56架构上,然后和几个代表性的最新模型进行了比较。Ghost-VGG-16 ($ s = 2 $)以最高的性能(93.7%)胜过竞争对手,但FLOPs明显减少。对于已经比VGG-16小得多的ResNet-56,基于Ghost模块的模型可以将计算量降低一半时获得可比的精度,还可以看到,其他具有相似或更大计算成本的最新模型所获得的准确性低于Ghost模型。
表4 在CIFAR-10数据集和SOTA模型对比
特征图可视化
作者还可视化了Ghost模块的特征图,如图4所示。图4展示了Ghost-VGG-16的第二层特征,左上方的图像是输入,左红色框中的特征图来自初始卷积,而右绿色框中的特征图是经过廉价深度变换后的幻影特征图。尽管生成的特征图来自原始特征图,但它们之间确实存在显着差异,这意味着生成的特征足够灵活,可以满足特定任务的需求。
图4 Ghost-VGG-16的第二层输出特征图可视化
图5 原始VGG-16的第二层输出特征图可视化
GhostNet性能
ImageNet分类数据集:为了验证所提出的GhostNet的优越性,作者对ImageNet分类任务进行了实验。在ImageNet验证集上报告的所有结果均是single crop的top-1的性能。对于GhostNet,为简单起见,作者在初始卷积中设置了内核大小$ k = 1 $,在所有Ghost模块中设置了$ s = 2 $和$ d = 3 $。作者和现有最优秀的几种小型网络结构作对比,包括MobileNet系列、ShuffleNet系列、IGCV3、ProxylessNAS、FBNet、MnasNet等。结果汇总在表5中,这些模型分为3个级别的计算复杂性,即~50,~150和200-300 MFLOPs。从结果中我们可以看到,通常较大的FLOPs会在这些小型网络中带来更高的准确性,这表明了它们的有效性。而GhostNet在各种计算复杂度级别上始终优于其他竞争对手,主要是因为GhostNet在利用计算资源生成特征图方面效率更高。
表5 GhostNet在ImageNet数据集的表现
硬件推理速度:由于提出的GhostNet是为移动设备设计的,因此作者使用TFLite工具在基于ARM的手机华为P30Pro上进一步测量GhostNet和其他模型的实际推理速度。遵循MobileNet中的常用设置,作者使用Batch size为1的单线程模式。从图6的结果中,我们可以看到与具有相同延迟的MobileNetV3相比,GhostNet大约提高了0.5%的top-1的准确性,另一方面GhostNet需要更少的运行时间来达到相同的精度。例如,精度为75.0%的GhostNet仅具有40毫秒的延迟,而精度类似的MobileNetV3大约需要46毫秒来处理一张图像。总体而言,作者的模型总体上胜过其他最新模型,例如谷歌MobileNet系列,ProxylessNAS,FBNet和MnasNet。
这里打个广告,华为内部开发了一款神经网络部署工具Bolt,对GhostNet实现做了进一步优化,速度相比其他框架如NCNN、TFLite更快。感兴趣的读者可以参考:
图6 GhostNet和其他模型的FLOPs、推理速度对比
COCO目标检测数据集为了进一步评估GhostNet的泛化能力,作者在MS COCO数据集上进行了目标检测实验。具有功能金字塔网络(FPN)的两阶段Faster R-CNN和单阶段的RetinaNet作为baseline,而GhostNet用于骨干网络做特征提取器。表6显示了检测结果,其中FLOPs是使用$ 224 \times224 $输入图像计算的。通过使用显着降低的计算成本,GhostNet可以在单阶段的RetinaNet和两阶段的Faster R-CNN框架上达到和MobileNetV2和MobileNetV3类似的mAP。
表6 GhostNet在COCO数据集的表现
为了减少最新的深度神经网络的计算成本,本文提出了一种用于构建高效的神经网络结构的新型Ghost模块。Ghost模块将原始卷积层分为两部分,首先使用较少的卷积核来生成原始特征图,然后,进一步使用廉价变换操作以高效生产更多幻影特征图。在基准模型和数据集上进行的实验表明,该方法是一个即插即用的模块,能够将原始模型转换为更紧凑的模型,同时保持可比的性能。此外,在效率和准确性方面,使用提出的新模块构建的GhostNet均优于最新的轻量神经网络,如MobileNetV3。
基于一组原始的特征图,论文作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的"幻影"特征图(Ghost feature maps)。该Ghost模块即插即用,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。在ImageNet分类任务,GhostNet在相似计算量情况下Top-1正确率达75.7%,显著高于MobileNetV3的75.2%。

论文链接:
https://arxiv.org/abs/1911.11907
开源地址:
https://arxiv.org/abs/1911.11907
继续阅读
阅读原文