GhostNet: More Features from Cheap Operations

论文地址:https://arxiv.org/abs/1911.11907
源码:huawei-noah/ghostnet

0. 摘要

基于大型卷积网络参数量巨大,无法有效应用在嵌入式设备上,本文提出一种叫做幻影模块(Ghost module)的结构,可以通过更少的运算量获得更多的特征参数。基于原始的输入特征图,通过一系列线性变换将初次卷积得到的特征图的层数扩大,从而以较少的计算量获得与常规方法相似信息的特征输出。该模块可以即插即用,堆叠该模块可以获得Ghost bottlenecks,进而得到轻量级的神经网络GhostNet。在ImageNet分类任务,GhostNet在相似计算量情况下Top-1正确率达75.7%,高于MobileNetV3的75.2%。

1. 引言

深度卷积神经网络已经在多种计算机视觉问题上取得了很好的表现。传统的神经网络通常包含巨大数量的参数和浮点运算量(FLOPs),例如,对于尺寸为224的输入图片,ResNet50包含25.6M参数和4.1B的FLOPs。因此,最近卷积神经网络的设计更倾向于分布式或更有效的网络结构,以便在移动设备上取得良好的表现

另外,作者发现传统神经网络通常会产生大量甚至冗余的特征数量。例如,图中展示了ResNet50的部分特征图,可以发现其中一些特征图极为相似:

图 1. ResNet-50 中第一个残差组生成的一些特征图的可视化,其中三个相似的特征图对示例用相同颜色的框进行注释。 这对中的一个特征图可以通过廉价操作(用扳手表示)转换另一个特征图来近似获得。

本文提出Ghost module,使用少量参数产生更多的特征。常规深度神经网络中的一个卷积层可以被分成两部分。首先是常规的卷积操作,但严格控制卷积的输出层数;第二步是一系列的简单线性操作,用第一步产生的特征图产生更多的特征图,相比通常的卷积,在产生相同特征数量的结果下,减少了相当多的计算量。

基于Ghost module,作者提出GhostNet,并且通过实验验证,GhostNet可以在减少计算量和复杂度的情况下取得和当前最先进的模型相似的精度,并且超越MobileNet v3在移动设备上进行快速运行。

2. 提出的方法

2.1 Ghost module

深度CNN通常引用由大量卷积组成,导致大量的计算成本。尽管最近的工作,例如MobileNet和ShuffleNet引入了深度卷积(Depth Conv)或混洗操作(Channel Shuffle),以使用较小的卷积核(浮点运算)来构建有效的CNN,但其余 1×1 卷积层仍将占用大量内存和FLOPs。

鉴于主流CNN计算出的中间特征图中存在大量的冗余(如图1所示),作者提出减少所需的资源,即用于生成它们的卷积核。实际上,给定输入数据 X∈Rc×h×wX \in \mathbb{R}^{c\times h \times w}X∈Rc×h×w ,用于生成 nnn 个特征图的任意卷积层的运算可表示为:

Y=X∗f+bY = X * f + b Y=X∗f+b

其中 ∗*∗ 是卷积运算, bbb 是偏差项, Y∈Rh′×w′×nY \in \mathbb{R}^{h' \times w' \times n}Y∈Rh′×w′×n 是具有 nnn个通道的输出特征图,f∈Rc×k×k×nf \in \mathbb{R}^{c \times k \times k \times n}f∈Rc×k×k×n是这一层中的卷积核。另外, h′h'h′ 和 w′w'w′ 分别是输出数据的高度和宽度,k×kk \times kk×k 分别是卷积核 fff 的内核大小。在此卷积过程中,由于卷积核数量 nnn 和通道数 ccc 通常非常大(例如256或512),所需的FLOPs数量达 n⋅h′⋅w′⋅c⋅k⋅kn \cdot h' \cdot w' \cdot c \cdot k \cdot kn⋅h′⋅w′⋅c⋅k⋅k 之多。

根据上述公式,要优化的参数数量(fff 和 bbb 中的参数)由输入和输出特征图的尺寸确定。如图1中所观察到的,卷积层的输出特征图通常包含很多冗余,并且其中一些可能彼此相似。作者指出,没有必要使用大量的FLOP和参数一一生成这些冗余特征图,而是说,输出特征图是少数原始特征图通过一些廉价转换的“幻影”。这些原始特征图通常具有较小的大小,并由普通的卷积核生成。具体来说, mmm 个原始特征图 Y′∈Rh′×w′×mY' \in \mathbb{R}^{h' \times w' \times m}Y′∈Rh′×w′×m 是使用一次卷积生成的:

Y′=X∗f′Y' = X * f' Y′=X∗f′

其中 f′∈Rc×k×k×mf' \in \mathbb{R}^{c \times k \times k \times m}f′∈Rc×k×k×m 是使用的卷积核,m≤nm \le nm≤n,为简单起见,这里省略了偏差项。超参数(例如卷积核大小,stride,padding)与普通卷积中的超参数相同,以保持输出特征图的空间大小(即 h′h'h′ 和 w′w'w′ )保持一致。为了进一步获得所需的 nnn 个特征图,作者提出对Y′Y'Y′ 中的每个原始特征应用一系列廉价的线性运算,以生成 sss 个幻影特征图:

yij=Φij(yi′)y_{ij} = \Phi_{ij}(y'_i) \\ yij​=Φij​(yi′​)
i=1,2,...,mj=1,2,...,si = 1, 2, ..., m \\ j = 1, 2, ..., s i=1,2,...,mj=1,2,...,s

其中 y′y'y′ 是 Y′Y'Y′ 中第 iii 个原始特征图,上述函数中的 Φij\Phi_{ij}Φij​ 是第 jjj 个线性运算,用于生成第 jjj 个幻影特征图 yijy_{ij}yij​,也就是说, y′y'y′ 可以具有一个或多个幻影特征图 {yij}j=1s\{y_{ij}\}^s_{j=1}{yij​}j=1s​ 。最后的 Φis\Phi_{is}Φis​ 是用于保留原始特征图的恒等映射,如图2(b)所示。

通过使用廉价操作,我们可以获得 n=m×sn=m\times sn=m×s 个特征图 Y=[y11,y12,...,yms]Y = [y_{11}, y_{12}, ..., y_{ms}]Y=[y11​,y12​,...,yms​] 作为Ghost module的输出数据。

注意,线性运算 Φ\PhiΦ 在每个通道上运行,其计算量比普通卷积少得多。实际上,Ghost module中可能有几种不同的线性运算,例如3×33\times 33×3 和 5×55 \times 55×5 线性内核,将在实验部分进行分析。

2.2 复杂度分析

Ghost module具有一个恒等映射和 m×(s−1)=ns×(s−1)m \times (s - 1) = \frac{n}{s} \times (s - 1)m×(s−1)=sn​×(s−1) 个线性运算,并且每个线性运算的平均内核大小为 d×dd\times dd×d。理想情况下,n×(s−1)n \times (s-1)n×(s−1) 个线性运算可以具有不同的形状和参数,但是特别是考虑到CPU或GPU的实用性,在线推理会受到阻碍。因此,作者建议在一个Ghost模块中采用相同大小的线性运算(例如全 3×33 \times 33×3 或全 5×55 \times 55×5 )以高效实现Ghost module。使用Ghost module升级普通卷积的理论加速比为:

rs=n×h′×w′×c×k×kns×h′×w′×c×k×k+(s−1)×ns×h′×w′×d×d=c×k×k1s×c×k×k+s−1s×d×d≈s×cs+c−1≈s\begin{aligned} r_s & = \frac{n \times h' \times w' \times c \times k \times k}{\frac{n}{s} \times h' \times w' \times c \times k \times k + (s - 1) \times \frac{n}{s} \times h' \times w' \times d \times d} \\ & = \frac{c \times k \times k}{\frac{1}{s} \times c \times k \times k + \frac{s-1}{s} \times d \times d} \\ & \approx \frac{s \times c}{s + c-1}\\ & \approx s \end{aligned} rs​​=sn​×h′×w′×c×k×k+(s−1)×sn​×h′×w′×d×dn×h′×w′×c×k×k​=s1​×c×k×k+ss−1​×d×dc×k×k​≈s+c−1s×c​≈s​

其中 d×dd \times dd×d 的幅度与 k×kk \times kk×k 相似,并且 s<<cs << cs<<c。

同样,参数压缩比可以计算为:

rs=n×c×k×kns×c×k×k+(s−1)×ns×d×d≈s×cs+c−1≈s\begin{aligned} r_s & = \frac{n \times c \times k \times k}{\frac{n}{s} \times c \times k \times k + (s - 1) \times \frac{n}{s} \times d \times d}\\ & \approx \frac{s \times c}{s + c-1}\\ & \approx s \end{aligned} rs​​=sn​×c×k×k+(s−1)×sn​×d×dn×c×k×k​≈s+c−1s×c​≈s​

它大约等于加速比。

2.3 构建Ghost Net

2.3.1 Ghost Bottleneck

作者利用Ghost module制作了专门为小型CNN设计的Ghost bottleneck(G-bneck),如下图所示。

图 3. Ghost 瓶颈。 左:stride=1 的幽灵瓶颈; 右图:stride=2 的幽灵瓶颈。

Ghost bottleneck类似于ResNet中的基本残差块(Basic Residual Block),其中集成了多个卷积层和shortcut。Ghost bottleneck主要由两个堆叠的Ghost module组成。第一个Ghost module用作扩展层,增加了通道数。这里将输出通道数与输入通道数之比称为expansion ratio。第二个Ghost模块减少通道数,与shortcut路径匹配。然后,使用shortcut连接这两个Ghost module的输入和输出。这里借鉴了MobileNet-v2,第二个Ghost module之后不使用ReLU,其他层在每层之后都应用了批量归一化(BN)和ReLU非线性激活。上述Ghost bottleneck适用于stride= 1,对于stride = 2的情况,shortcut路径由下采样层和stride = 2的深度卷积(Depthwise Convolution)来实现。出于效率考虑,Ghost module中的初始卷积是点卷积(Pointwise Convolution)。

2.3.2 GhostNet

基于Ghost bottleneck,作者提出GhostNet,如下表所示。作者遵循MobileNet-v3的基本体系结构,然后使用Ghost bottleneck替换MobileNet-v3中的bottleneck。GhostNet主要由一系列Ghost bottleneck组成,其中Ghost bottleneck以Ghost module为构建基础。第一层是具有16个卷积核的标准卷积层,然后是一系列Ghost bottleneck,通道逐渐增加。这些Ghost bottleneck根据其输入特征图的大小分为不同的阶段。除了每个阶段的最后一个Ghost bottleneck是stride = 2,其他所有Ghost bottleneck都是stride = 1。最后,利用全局平均池化和卷积层将特征图转换为1280维特征向量以进行最终分类。SE模块也用在了某些Ghost bottleneck中的残留层,如下表所示。

表 1. GhostNet 的整体架构。 G-bneck 表示 Ghost 瓶颈。 #exp 表示扩展大小。 #out 表示输出通道的数量。 SE 表示是否使用 SE 模块。

与MobileNet-v3不同的是,这里用ReLU换掉了Hard-swish激活函数。尽管进一步的超参数调整等方法将进一步GhostNet的性能,但上表所提供的架构提供了一个基本设计参考。

3. 实验

3.1 超参数分析

Ghost module中含有两个超参数 sss 和 ddd,其中 sss 用于生成 m=nsm = \frac{n}{s}m=sn​ 个内在特征图,ddd 用于生成幻影特征图的卷积核大小(使用 ddd 深度卷积)。作者测试了这两个超参数的影响。

首先,作者固定 s=2s=2s=2 在 d∈{1,3,5,7}d\in\{1, 3, 5, 7\}d∈{1,3,5,7} 范围中调整 ddd,并在下表中列出CIFAR-10验证集上的结果。可以看到,当 d=3d=3d=3 时的Ghost module的性能优于其他的Ghost module。这是因为大小为 1×11 \times 11×1 的内核无法在特征图上引入空间信息,而较大的内核(例如 d=5→5×5d=5 \rightarrow 5 \times 5d=5→5×5 或 d=7→7×7d=7 \rightarrow 7 \times 7d=7→7×7)会导致过拟合和更多计算量。因此,在以下实验中作者采用 d=3d=3d=3 来提高有效性和效率。

在研究了内核大小的影响之后,作者固定 d=3d=3d=3 并在 s∈{2,3,4,5}s \in \{2, 3, 4, 5 \}s∈{2,3,4,5} 的范围内调整超参数 sss。实际上,sss 与所得网络的计算成本直接相关,即较大的 sss 导致较大的压缩率和加速比。结果如下表所示。

从表中的结果可以看出,当作者增加 sss 时,FLOP显着减少,并且准确性逐渐降低,这是在预期之内的。特别地,当 s=2s=2s=2,也就是将VGG-16压缩 2×2\times2× 时,Ghost module的性能甚至比原始模型稍好,表明了本文所提出的Ghost module的优越性。


作者将Ghost module用在VGG-16和ResNet-56框架上,然后和几个代表性的最新模型进行了比较。如下表所示。

表 5. 在 CIFAR-10 上压缩 VGG-16 和 ResNet-56 的最先进方法的比较。 - 表示没有可用的报告结果。

Ghost-VGG-16 (s=2s=2s=2)以最高的性能(93.7%)胜过竞争对手,但FLOPs明显减少。 对于已经比VGG-16小得多的ResNet-56,基于Ghost模块的模型可以将计算量降低一半时获得可比的精度,还可以看到,其他具有相似或更大计算成本的最新压缩模型方法所获得的准确性低于Ghost模型。

3.2 特征图可视化

作者还可视化了Ghost模块的特征图,如下图所示。

图 4. Ghost-VGG-16 第 2 层的特征图。 左上图是输入,左边红框中的特征图来自初级卷积,右边绿框中的特征图是深度变换后的。

上图展示了Ghost-VGG-16的第二层特征,左上方的图像是输入,左红色框中的特征图来自初始卷积,而右绿色框中的特征图是经过深度卷积后的幻影特征图。尽管生成的特征图来自原始特征图,但它们之间确实存在显着差异,这意味着生成的特征足够灵活,可以满足特定任务的需求。

与之对比的还有原始VGG-16第二层卷积生成的特征图如下:

3.3 大型模型实验

作者在ImageNet数据集上对Ghost module的性能进行了实验,并和目前最先进的模型进行了比较。


可以看到,对比ResNet-50,Ghost-ResNet-50 (s=2s=2s=2)相比s=4s=4s=4效果要好,Top-1准确率高达75.0%,但二者的FLOPs和Weights不在一个数量级。

  • Ghost-ResNet-50 (s=2s=2s=2)上方即为同一数量级,对比其他对ResNet-50压缩的策略,Ghost-ResNet-50 (s=2s=2s=2)有最低的FLOPs和最高的准确率。
  • Ghost-ResNet-50 (s=4s=4s=4)上方即为同一数量级,对比其他对ResNet-50压缩的策略,Ghost-ResNet-50 (s=4s=4s=4)在持有最高准确率的同时,模型的参数和FLOPs也是比较低的。

4. GhostNet性能

4.1 ImageNet分类数据集

为了验证所提出的 GhostNet 的优越性,我们对 ImageNet 分类任务进行了实验。 我们遵循 ShuffleNet 中使用的大部分训练设置,除了在 8 个 GPU 上批量大小为 1,024 时初始学习率设置为 0.4。 所有结果均在 ImageNet 验证集上以单crop top-1 性能报告。 对于 GhostNet,为简单起见,我们在主卷积中设置内核大小 k=1k = 1k=1,在所有 Ghost 模块中设置 s=2s = 2s=2 和 d=3d = 3d=3。

选择了几个现代小型网络架构作为竞争对手,包括 MobileNet 系列,ShuffleNet 系列,ProxylessNAS,FBNet,MnasNet 等。结果总结在表 7 中。模型分为通常用于移动应用程序的三个计算复杂度级别,即 ~ 50、~ 150 和 200-300 MFLOPs。 从结果中,我们可以看到,通常较大的 FLOP 会导致这些小型网络的准确性更高,这表明了它们的有效性。 我们的 GhostNet 在各种计算复杂度级别上始终优于其他竞争对手,因为 GhostNet 在利用计算资源生成特征图方面更有效

启发:

  • 通过拉宽网络进而提升其准确率(这样在类似准确率的情况下,对比网络的其他参数就有可比较性了)

实际推理速度。 由于所提出的 GhostNet 是为移动应用程序设计的,我们使用 TFLite 工具进一步测量了 GhostNet 在基于 ARM 的手机上的实际推理速度。 按照 [21, 44] 中的常见设置,我们使用批量大小为 1 的单线程模式。从图 7 的结果中,我们可以看到 GhostNet 在相同延迟的情况下比 MobileNetV3 获得了大约 0.5% 的 top-1 准确率, 和 GhostNet 需要更少的运行时间来实现类似的性能。 例如,准确度为 75.0% 的 GhostNet 只有 40 毫秒的延迟,而准确度相近的 MobileNetV3 处理一张图像需要大约 45 毫秒。 总体而言,我们的模型通常优于著名的最先进模型,即 MobileNet 系列、ProxylessNAS、FBNet和 MnasNet。

4.2 COCO目标检测数据集

为了进一步评估 GhostNet 的泛化能力,我们在 MS COCO 数据集上进行了对象检测实验。 我们使用 trainval35k 分割作为训练数据,并在 [32, 33] 之后以 minival 分割的平均平均精度 (mAP) 报告结果。 具有特征金字塔网络 (FPN) [43, 32] 的两阶段 Faster R-CNN 和单阶段 RetinaNet [33] 都用作我们的框架,GhostNet 作为主干特征提取器 (backbone) 的替代品。 我们使用 SGD 对 ImageNet 预训练权重的 12 个 epoch 训练所有模型,并使用 [32, 33] 中建议的超参数。 输入图像的大小调整为短边为 800,长边不超过 1333。表 8 显示了检测结果,其中通常使用 224 × 224 图像计算 FLOP。 由于计算成本显着降低,GhostNet 在单阶段 RetinaNet 和两阶段 Faster R-CNN 框架上实现了与 MobileNetV2 和 MobileNetV3 类似的 mAP。

5. 总结

为了减少最新的深度神经网络的计算成本,本文提出了一种用于构建高效的神经网络结构的新型Ghost module。Ghost module将原始卷积层分为两部分,首先使用较少的卷积核来生成原始特征图,然后,进一步使用廉价的线性变换操作以高效生产更多幻影特征图。在基准模型和数据集上进行的实验表明,该方法是一个即插即用的模块,能够将原始模型转换为更紧凑的模型,同时保持可比的性能。此外,在效率和准确性方面,使用提出的新模块构建的GhostNet均优于最新的轻量神经网络,如MobileNet-v3。

GhostNet论文相关推荐

  1. MobileNet、GhostNet理解及测试

      MobileNet由谷歌于2017年提出,它是一种能够用在端侧设备上的轻量级网络.GhostNet是华为诺亚实验室开发的一款轻量级网络,论文发表在CVPR2020.我认为学习论文还是要实际跑一跑代 ...

  2. GhostNet 解读及代码实验(附代码、超参、日志和预训练模型)

    文章首发于 极市平台 文章目录 一.前言 二.论文阅读 摘要 问题1: 何为特征图冗余? 问题2: Ghost feature maps 和 Intrinsic feature maps 是什么? 问 ...

  3. GHostNet网络最通俗易懂的解读【不接受反驳】

    文章目录 前沿知识 分组卷积 深度可分离卷积 GHostNet网络 代码 GHost Module比普通卷积的优点 GHost Module模块 参数量对比 GHostNet网络结构 前沿知识 在介绍 ...

  4. 【魔改YOLOv5-6.x(上)】结合轻量化网络Shufflenetv2、Mobilenetv3和Ghostnet

    文章目录 前言 一.Shufflenetv2 论文简介 模型概述 加入YOLOv5 二.Mobilenetv3 论文简介 模型概述 深度可分离卷积 逆残差结构 SE通道注意力 h-swish激活函数 ...

  5. 视觉Transformer快速入门指南!

    [栏目:前沿进展]Transformer 网络推动了诸多自然语言处理任务的进步,而近期 Transformer 开始在计算机视觉领域崭露头角,比如ViT和DETR等. 近日,华为诺亚方舟实验室高级研究 ...

  6. 青源 LIVE 预告 | 华为诺亚韩凯:视觉 Transformer 综述

    Transformer 在视觉领域逐渐发力,并形成一股新的趋势.今年 ICCV 最佳论文奖(马尔奖)即颁给了 Transformer 的研究工作. 在ViT(Vision Transformer)方面 ...

  7. 简记MobileNet系列

    <简记MobileNet系列>   ImageNet竞赛至今,为了追求精度,模型深度越来越深,参数量也越来越大,这导致移动端场景的算力是无法支撑的.所以轻量级模型应运而生,Google提出 ...

  8. 快速制作自己的VOC语义分割数据集

    语义分割数据集制作与转换方法 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第一章 基于PS的语义分割标注 第二章 构建VOC语义分割数据集 文章目录 语义分割数据集制作与转换方法 ...

  9. PS才是真科研利器,助力快速分割标注工作

    提示:本文针对语义分割任务打点标注工作太繁琐.边缘位置不精确等问题提出基于PS的快速语义分割标注方法,后续会推出语义分割系列数据集构建与转换方法. 文章目录 前言 什么是语义分割? 常见分割标注方法有 ...

  10. 超越GhostNet!吊打MobileNetV3!MicroNet通过极低FLOPs实现图像识别(文末获取论文)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文提出Micro-Factorized卷积,将点和深度卷积分解为低秩矩阵,并提出新的激活函数,称为D ...

最新文章

  1. npm安装less报错 rollbackFailedOptional: verb npm-session
  2. 白嫖一时爽!一直白嫖一直爽!程序员必备神器!
  3. python进程线程处理模块_python程序中的线程操作 concurrent模块使用详解
  4. VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装
  5. Java File类详解
  6. oracle创建视图类型为日期,oracle创建视图包含clob字段,报错:数据类型不一致:应为-,但却获得CLOB...
  7. spring boot区分生产环境和开发环境
  8. 得力考勤机excel密码_可以修改原始考勤记录数据的是哪种人脸指纹考勤机?
  9. CCC中国强制性产品认证目录已公布 共17大类103种产品
  10. 2020年最值得推荐的10款数据可视化工具,看完我收藏了
  11. vue-d2admin前端axio异步请求详情
  12. 阿里P9:程序员的“青春饭”,从什么时候开始结束?
  13. HTML5期末大作业:京东网站设计——仿京东(7页) 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  14. C语言中各种格式字符说明
  15. java 拒绝访问_JAVA编译中拒绝访问的问题及解决方案
  16. 栈的输出_程序设计做题笔记:计算表达式(一):栈
  17. 国内设计师经常逛的5个素材网站
  18. linux的swap与memory,【Linux】Linux中Swap与Memory内存简单介绍
  19. 智能营销文本生成项目知识点总结
  20. python写情书_Python程序员用文字加密的方式,给女程序员写情书,一周后牵手回家_TONOW...

热门文章

  1. iptables指南
  2. IDEA插件系列(84):MultiHighlight插件——高亮代码中的标识符
  3. windows安装tomcat8
  4. 手眼标定原理(眼在手上和眼在手外)
  5. 纸质办公电子化——iWebOffice中间件
  6. 推荐好用在线画图网站
  7. SNMP(Simple Network Management Protocol)——简单网络管理协议
  8. kettle Windows下载
  9. QT 5.9.0下载安装及配置教程
  10. (附源码)springboot电子阅览室app 毕业设计 016514