专栏首页YZh学习记录GhostNet: More Features from Cheap Operations论文解析
原创

GhostNet: More Features from Cheap Operations论文解析

Abstract

由于内存和计算资源有限,很难在嵌入式设备上部署卷积神经网络(CNN)。特征图中的冗余是那些成功的CNN的重要特点,但很少在神经体系结构设计中进行研究。本文提出了一种新颖的Ghost模块,可以通过简单的操作生成更多的特征图。基于一系列内在的特征图,我们应用了一系列简单的线性变换以生成许多ghost特征图,这些ghost特征图可以充分揭示内部特征的信息。提出的Ghost模块可以作为即插即用组件来升级现有的卷积神经网络。Ghost boottlenecks 旨在堆叠Ghost模块,然后可以轻松建立轻量级的GhostNet。实验表明:我们的GhostNet可以实现比MobileNetV3更高的识别性能(例如75.7%top-1精度)。

1. Introduction

CNN 在图像分类,目标检测,语义分割领域都展现卓越的性能。传统的CNN通常需要大量参数和浮点运算(FLOPs)才能获得令人满意的精度. 例如:ResNet-50 具有约25.6M参数量(parameters),需要4.1B FLOPs来处理尺寸为224×224的图像。因此,深度神经网络设计的最新趋势是探索对移动设备具有可接受性能的便携式高效网络体系结构(如智能手机,自动驾驶汽车).

多年来,提出了一系列方法来研究紧凑型深度神经网络。例如网络剪枝,低位量化,知识蒸馏。韩提出根据权重修剪神经网络的方法。文献[31]利用L1范数正则化来修剪有效CNN的filters. 文献[42]量化了权重和activations to 1-bit data,以实现较大的压缩率和加速比。文献[19]引入了知识蒸馏,以将知识从较大的模型转移到较小的模型。但是,这些方法的性能通常受到预训练的深度神经网络模型的限制。

除此之外,高效的神经体系结构设计在建立具有较少参数和计算量的高效深度网络方面具有很高的潜力,并且最近取得了巨大的成功。这种方法还可以为自动搜索方法提供新的搜索单元。如:mobileNet, shuffleNet.

训练好的深度神经网络的特征图中的大量甚至冗余信息通常可以确保对输入数据的全面了解。例如,图1给出了输入图像经过Resnet50之后的一些特征图,并且存在许多相似的特征映射对,彼此之间犹如幻影。神经网络的一个显著特点是特征冗余。

除了避免使用多余的特征图之外,我们倾向于以节省成本的方式包含它们。(Instead of avoiding the redundant feature maps, we tend to embrace them, but in a cost-efficient way.)

在本文中,我们介绍了一种新颖的Ghost模块,可以使用更少的参数来生成更多特征。具体来说,深度神经网络中的普通卷积层将分为两部分。

第一部分涉及普通卷积,但是将严格控制它们的总数。在第一部分的固有特征图基础上,经过一系列简单的线性运算,用于生成更多特征图。与普通卷积神经网络相比,在不更改输出特征图大小的情况下,该Ghost模块中所需的参数总数和计算复杂度均已降低。基于ghost模块,我们涉及一个高效的网络结构叫做GhostNet. 我们首先在benchmark神经体系结构中替换原始的卷积层,以证明Ghost模块的有效性,然后验证GhostNets在多个benchmark视觉数据集上的优越性。

实验结果表明,所提出的Ghost模块能够降低通用卷积层的计算成本,而保留类似的识别性能,GhostNets可以在各种任务上超越移动设备上的快速推断,从而超越最新的高效深度模型,例如MobileNetV3 。

本文的其余部分安排如下:第2节简要总结了该领域的相关工作,然后在第3节中提出了Ghost模块和GhostNet,在第4节中进行了实验和分析,最后在第5节中给出了结论。

2. Related Work

从以下两个方面展示:model compression and compact model design.

2.1. Model Compression

对于给定的神经网络,模型压缩旨在减少计算,资源和存储成本。Pruning connections可以消除神经元之间不重要的连接。通道修剪的进一步目标是删除无用的通道,以便在实践中更轻松地进行加速。模型量化表示具有离散值的神经网络中的权重或激活,以实现压缩和计算加速。具体来说,只有1位值的二值化方法可以通过有效的二进制运算极大地加速模型。张量分解通过利用权重的冗余和低秩属性来减少参数或计算。知识蒸馏利用较大的模型来教授较小的模型,从而提高了较小模型的性能。这些方法的性能通常取决于给定的预训练模型。 基本操作和体系结构的改进将使它们走得更远。

2.2. Compact Model Design

Xception、 MobileNets、MobileNetsV2、MobileNetsV3、ShuffleNet、ShuffleNetV2

尽管这些模型仅用很少的FLOPs即可获得出色的性能,但从未充分利用特征图之间的相关性和冗余性。

3. Approach

在本节中,我们将首先介绍Ghost模块,以利用一些小的filter从原始卷积层生成更多特征图,然后开发具有高效架构和高性能的GhostNet网络。

3.1. Ghost Module for More Features

深度卷积神经网络通常由大量卷积组成,从而导致大量的计算成本。尽管MobileNet和ShuffleNet等最近的工作引入了深度可分离卷积或混洗操作,以使用较小的卷积filter来构建有效的CNN,但是剩下的1×1卷积层仍然占用大量内存和FLOPs。

如图1所示,鉴于主流CNN计算出的中间特征图中存在广泛的冗余,我们建议减少所需的资源,即用于生成它们的卷积滤波器。

然而对于通常情况下 n , c = 256 , 512 ,计算消耗会非常大;

作者提出,可以通过控制卷积核中 n 的大小来减小计算量,并通过一个简单的线性变换起到升维的作用;

根据图1可以看出,卷积神经网络的特征图包含大量的冗余特征信息,很多特征图之间比较相似。我们指出没有必要占用大量资源逐个生成特征图。假设输出特征图是少数具有某些简单变换的特征图的“幻影”。

这些固有特征图通常较小,并由普通的卷积filter生成。

过程解析:

解析1
解析2

Difference from Existing Methods

Analysis on Complexities

总的来说,可以理解为:

因为原本通过一次卷积运算得到的输出有着很多相似的特征映射对,那么使用Ghost方法就是将其变为两个步骤来得到同样的有着很多相似特征映射对的输出。

首先一开始进行的小的卷积映射得到的Y'是m个没有重复的特征映射结果哦,之后再进行的每个特征映射的线形操作就是为每个特征映射生成(s-1)个相似的特征映射。这样就能够以一个更快、FLOPs更少的方法得到和原来的卷积运算相同的有着相似特征映射对的最终的n个channels的特征映射输出

3.2. Building Efficient CNNs

Ghost Bottlenecks

利用Ghost模块的优点,我们介绍了专门为小型CNNs设计的Ghost bottleneck(G-bneck)。如图3所示:

Ghost bottlenck看起来类似于resnet中基本的residual块,其中集成了几个卷积和shortcut

(1)stride = 1 的情况:

提出的ghost bottleneck主要由两个堆叠的ghost模块组成。第一个Ghost模块作为扩展层,增加通道的数量。

我们把输出通道数与输入通道数之比称为扩展比(expansion ratio)。

第二个Ghost模块减少通道的数量以匹配shortcut。然后将这两个Ghost模块的输入和输出连接起来。

除了根据MobileNetV2的建议在第二个Ghost模块之后不使用ReLU外,每一层之后都使用batch归一化(BN)[25]和ReLU非线性函数。

(2)stride = 2 的情况:

通过向下采样层实现shortcut路径,并在两个Ghost模块之间插入stride=2的depthwise卷积。在实际应用中,Ghost模块中主要的卷积是pointwise卷积,以提高其效率。

区别:

stride=1的情况是不改变输出的宽高,只改变channels数,先升维再降维;

stride=2的情况是不改变channels数,只下采样一倍宽高。

GhostNet.

基于ghost bottleneck,我们建议使用如表1所示的GhostNet:

我们基本上遵循了MobileNetV3架构的优势,用我们的Ghost bottleneck代替了MobileNetV3中的bottleneck块。GhostNet主要由一组Ghost bottleneck组成,Ghost模块作为构建块。第一层是标准的卷积层,有16个filter,然后是一系列的Ghost bottleneck,通道逐渐增加。这些Ghost bottleneck根据其输入特征图的大小被分组到不同的阶段。所有的Ghost bottleneck都使用stride=1,除了最后一个阶段使用stride=2。最后利用全局平均池化层和卷积层将特征映射转化为一个1280维的特征向量进行最终分类。squeeze and excite(SE)模块[22]也适用于某些ghost bottleneck的残层,如表1所示。与MobileNetV3相比,我们没有使用hard-swish非线性函数,因为它有很大的延迟。所提出的体系结构提供了一个基本的设计参考,但进一步的超参数调整或基于ghost模块的自动体系结构搜索将进一步提高系统的性能。

Width Multiplier

4. Experiments

4.1. Efficiency of Ghost Module

4.1.1 Toy Experiments.

我们在图1中展示了一个图表,指出存在一些类似的特征映射对,它们可以使用一些有效的线性操作来有效地生成。

这里,我们首先进行一个toy实验来观察原始特征图和生成的Ghost特征图之间的重构误差。以图1中的三对(即红色、绿色和蓝色)为例,使用ResNet-50[16]的第一个residual块提取特征。在左边的特征作为输入,另一个作为输出,我们利用一个小depthwise卷积过滤器学习映射,即它们之间的线性操作Φ。卷积滤波器d的大小范围为1 ~ 7,不同d对的MSE(均方误差)值如表2所示:

从表2可以看出,所有的MSE值都非常小,这说明在深度神经网络中,特征映射之间存在很强的相关性,这些冗余特征可以由多个固有的特征生成。除了上述实验中用到的卷积,我们还可以探索其他一些低成本的线性操作来构造Ghost模块,如仿射变换(affine)和小波变换(wavelet)。然而,卷积是一种高效的运算,已经得到了当前硬件的良好支持,它可以涵盖许多广泛使用的线性运算,如平滑、模糊、运动等。此外,虽然我们也可以学习关于Φ线性操作中每个过滤器的大小 ,不规则的模块将降低计算单元的效率(例如CPU和GPU)。因此,在接下来的实验中,我们建议让Ghost模块中的d为一个固定值,利用深度卷积实现等式3,构建高效的深度神经网络。

4.1.2 CIFAR-10.

Analysis on Hyper-parameters 分析超参:s d

如等式3所述,为高效的深度神经网络提出的Ghost模块有两个超参数,即s和d,s用于生成m = n / s个内在特征映射,d即用于计算ghost特征图的线性操作的内核大小d×d(即depthwise卷积过滤器的大小)。在VGG-16架构上测试了这两个参数的影响。

首先,我们固定s = 2并调节d为{1,3,5,7}中之一,并在表3中列出了CIFAR-10验证集的结果:

我们可以看到,提出的d = 3的Ghost模块比d值较小或较大的Ghost模块性能更好。这是因为尺寸为1×1的kernel不能在特征映射上引入空间信息,而尺寸较大的kernel如d = 5或d = 7会导致过拟合和增加计算量。因此,我们在接下来的实验中采用d = 3来进行有效性和效率的检验。

在研究了所提议的Ghost模块中使用的内核大小之后,我们保持d = 3,并在{2,3,4,5}范围内调优其他超参数s。事实上,s与得到的网络的计算代价直接相关,即如等式5和等式4所分析的,s越大,压缩比和加速比越大。从表4的结果可以看出,当我们增加s的时候,FLOPs明显减小,准确率逐渐降低,这是可以预料到的。特别是当s = 2时,也就是将VGG-16压缩2倍,我们的方法比原模型的性能稍好一些,说明了所提出的Ghost模块的优越性。

Comparison with State-of-the-arts.

参考链接:

作者解读:https://zhuanlan.zhihu.com/p/109325275

https://www.bilibili.com/read/cv5655222/

https://github.com/TingsongYu/ghostnet_cifar10

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • squeezenet 论文阅读

    最近对深卷积神经网络 (CNNs) 的研究主要集中在提高计算机视觉数据集的精确度上。对于给定的精度级别, 通常可以用不同的 CNN 体系结构来实现了该精度级别。...

    yzh
  • valgrind使用介绍

    -O0 、-O1 、-O2 、-O3 编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高。

    yzh
  • MobileNetV2 论文阅读

    MobileNetv2架构是基于倒置残差结构(inverted residual structure),原本的残差结构的主分支是有三个卷积,两个逐点卷积通道数较...

    yzh
  • 使用腾讯云 GPU 学习深度学习系列之三:搭建深度神经网络

    本文进一步详细介绍了 Tensorflow 中 Keras 工具包提供的几种深度神经网络模块,包括其功能以及用途。

    集智
  • 【漏洞通告】微软Exchange远程代码执行漏洞(CVE-2020-0688)通告

    北京时间2月12日,微软发布2月安全更新补丁,修复了100个安全问题,涉及Internet Explorer、Microsoft Edge、Microsoft ...

    绿盟科技安全情报
  • 一文带你读懂 DeconvNet 上采样层(语义分割)

    在本文中,我们简要回顾了DeconvNet,反卷积网络(DeconvNet)由反卷积deconvolution 和上池化unpooling层组成。

    AI研习社
  • [享学Netflix] 五十三、Ribbon的LoadBalancer五大组件之:IRule(三)随机和重试,所有IRule实现总结

    代码下载地址:https://github.com/f641385712/netflix-learning

    YourBatman
  • DB、DW、DM、ODS、OLAP、OLTP和BI的概念理解

    今天特地查了一些官方解释和很多优秀的博客文章,将关于数仓方面的一些名词理解记了下来,先将这些简称做一个解释:

    大数据技术与架构
  • 谷歌开放GNMT教程:如何使用TensorFlow构建自己的神经机器翻译系统

    选自谷歌 机器之心编译 参与:机器之心编辑部 近日,谷歌官方在 Github 开放了一份神经机器翻译教程,该教程从基本概念实现开始,首先搭建了一个简单的NMT模...

    机器之心
  • 微信小程序之支付密码输入demo

      在小程序中实现支付密码的输入,要解决几个问题:   1、小程序要想唤起键盘,必须要借助input控件。通过input控件和其属性focus来唤起和隐藏输入键...

    tandaxia

扫码关注云+社区

领取腾讯云代金券