由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络非常困难。本文提出了一种新颖的Ghost模块,可以从简便的操作中生成更多的特征图。基于一组内在特征图,我们以低廉的成本应用一系列线性变换来生成许多能够充分揭示内在特征背后信息的ghost特征图。所提出的Ghost模块可以作为即插即用组件来升级现有的卷积神经网络。Ghost瓶颈被设计成堆叠的Ghost模块,然后轻量级的GhostNet就可以轻松建立起来。

在训练有素的深层神经网络的特征图中,丰富甚至冗余的信息往往保证了对输入数据的全面理解。特征图中的冗余可能是成功的深层神经网络的一个重要特征。我们没有避免冗余的特征图,而是倾向于以一种经济高效的方式采用它们。

在本文中,我们引入一种新的Ghost模块,通过使用较少的参数来生成更多的特征。具体来说,深度神经网络中的一个普通卷积层将被划分为两部分。第一部分涉及普通卷积,但它们的总数会被严格控制。给定第一部分中的固定特征图,然后应用一系列简单的线性操作来生成更多的特征图。与普通卷积神经网络相比,在不改变输出特征图大小的情况下,该Ghost模块所需的参数总数和计算复杂度都有所降低。基于Ghost模块,我们建立了一个高效的神经网络结构GhostNet。我们首先替换基准卷积结构中的原始卷积层,以证明Ghost模块的有效性,然后在几个基准视觉数据集上验证我们的GhostNets的优越性。实验结果表明,Ghost模块能够降低通用卷积层的计算成本,同时保持相似的识别性能,并且GhostNets能够在移动设备上进行快速推理的各种任务上超越最先进的高效深度模型,如MobileNetv3.

Ghost module

深度卷积神经网络通常由大量卷积组成,导致大量计算成本。尽管最近的研究工作,如MobileNet和ShuffkeNet引入深度卷积和混洗操作,以使用较小的卷积滤波器构建高效的CNNs,但剩余的1*1卷积层仍占用大量内存和FLOPs。

考虑到主流CNNs计算的中间特征图中广泛存在冗余,我们建议减少用于生成它们的卷积滤波器。实际上,给定输入数据X(c*h*w),其中c是输入通道的数量,h和w分别是输入数据的高度和宽度。任意卷积层生成n个特征图的操作可表述为:Y=X*f+b,(1),其中*是卷积运算,b是偏置项,Y(h’*w’*n)是具有n个通道的输出特征图,f(c*k*k*n)是该层中的卷积滤波器。另外h’和w’是输出数据的高度和宽度,k*k是卷积滤波器f的卷积核大小。在这个卷积计算过程中,所需的FLOPs能被计算为n*h’*w’*c*k*k,通常高达数十万,因为滤波器的数量n和通道数c通常非常大(例如256或512)。

根据等式1,要优化的参数量由输入和输出特征图的尺寸明确确定。卷积层的输出特征图通常包含很多冗余,其中一些可能彼此相似。我们指出不需要用大量的FLOPs和参数逐个生成这些冗余的特征图。假设输出特征图是一些具有廉价转换的内在特征图的“ghosts”。这些内在特征图非常小,由普通卷积滤波器生成。具体来说,m内在特征图Y’(h’*w’*m)是使用一次卷积生成的:Y’=X*f’。其中f’(c*k*k*m)是使用的滤波器,m<=n,为简单起见省略了偏差项。超参数,例如滤波器大小、步长、填充与普通卷积中的相同,以保持输出特征图的空间大小的一致性。为了进一步获得所需要的n个特征图,我们建议对Y’中的每个内在特征应用一系列廉价的线性运算生成s个ghost特征:

其中,yi’是Y’中的第i个内在特征图,Φij是生成第j个ghost特征图yij的第j个线性运算,即yi’可以有一个或多个ghost特征图。最后一个Φis是用于保留内在特征图的身份映射,如图2b所示。利用公式(3),我们可以获得n=m*s特征图Y=[y11,y12,…,yms]作为Ghost模块的输出数据,如图2b所示。线性运算Φ对每个通道进行运算,其计算量远小于普通卷积。

Ghost Bottlenecks

如图3所示,Ghost bottlenecks与ResNet中的基本残差块,集成了几个卷积层和快捷方式。Ghost bottlenecks主要由两个堆叠的Ghost模块组成。第一个Ghost模块充当扩展层,增加通道数量。我们将输出通道数与输入通道数之比称为扩展比(expansion ration).第二个Ghost模块减少通道数量,以匹配快捷路径。然后在两个Ghost模块的输入和输出之间连接快捷方式。BN和ReLU非线性应用于每层之后,但根据MobileNetv2的建议,在第二个Ghost模块之后不使用ReLU.以上描述的Ghost bottleneck适用于stride=1。对于stride=2的情况,快捷路径由下采样层实现,并在两个Ghost模块之间插入步长等于2的深度卷积。实际上Ghost模块中的主要卷积是逐点卷积。

GhostNet

GhostNet如表1所示,我们基本遵循了MobileNetv3的体系结构,以获得其优越性,并用我们的Ghost bottleneck替换了MobileNetv3中的瓶颈块。Ghost主要由一堆由Ghost模块为构建块的Ghost bottleneck组成。第一层是16个滤波器的卷积层,然后是一系列通道逐渐增加的Ghost bottlenecks.根据特征图的大小,这些Ghost bottlenecks被分为不同的阶段。除了每个阶段的最后一个瓶颈是步长为2之外,所有的Ghost bottlenecks都是在步长为1时应用的。最后利用全局平均池化和卷积层将特征图转换为1280维特征向量进行最终分类。SE模块用于表1中的某些Ghost bottleneck中的残差层。与MobileNetv3相比,我们不使用hard-swish非线性函数,因为它有很大的延迟。

Width Multiplier

为了根据所需定制网络,我们可以简单的在每一层的通道数上乘以一个系数α。这个因子被称为宽度乘数,因为它可以改变整个网络的宽度。我们将具有宽度乘数α的的GhostNet表示为GhostNet-αX.通常较小的α会导致较低的延迟和较低的性能,反之亦然。

GhostNet: More Features from Cheap Operations相关推荐

  1. 【Paper】GhostNet: More Features from Cheap Operations

    论文下载:点击此处 论文年份:2019 论文被引:451(2022/03/26) 相关代码: MXNET:https://github.com/osmr/imgclsmob Tensorflow:ht ...

  2. 【GhostNet】《GhostNet:More Features from Cheap Operations》

    CVPR-2020 文章目录 1 Background and Motivation 2 Related Work 3 Advantages / Contributions 4 Method 4.1 ...

  3. GhostNets on Heterogeneous Devices via Cheap Operations

    论文链接: https://arxiv.org/pdf/2201.03297.pdf PyTorch: https://github.com/shanglianlm0525/CvPytorch PyT ...

  4. GhostNet 测试

    1070 640*480 batch 8可以 https://github.com/iamhankai/ghostnet.pytorch/blob/master/ghost_net.py pvanet ...

  5. 重读GhostNet:使用轻量操作代替部分传统卷积层生成冗余特征以减少计算量

    本文为CVPR 2020 录用论文,作者来自华为.北京大学.悉尼大学,截止目前已有36次引用,github 星标1.2K,是近年来值得关注的轻量级CNN模型. 使用轻量操作代替部分传统卷积层生成冗余特 ...

  6. 超越MobileNet v3!华为诺亚、北大提出GhostNet​,使用线性变换生成特征图

    点击我爱计算机视觉标星,更快获取CVML新技术 作者 | Kai Han, Yunhe Wang等 编译 | Conv 出品 | AI科技大本营(rgznai100) 受限于内存空间和计算资源,将卷积 ...

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

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

  8. 深度学习中的20种卷积

    1. 引言 卷积,是卷积神经网络中最重要的组件之一.不同的卷积结构有着不一样的功能,但本质上都是用于提取特征.比如,在传统图像处理中,人们通过设定不同的算子来提取诸如边缘.水平.垂直等固定的特征.而在 ...

  9. CVPR 2020 论文开源项目一页看尽,附代码论文

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,"中标率" ...

最新文章

  1. HiLink LiteOS IoT芯片 让IoT开发简单高效
  2. 数据结构----数组与广义表专题
  3. C++程序内存分配方式(堆与栈)
  4. c库函数-strtol()介绍
  5. 24、C++ Primer 4th 笔记,面向对象编程(2)
  6. 防止用户重复提交表单数据,session方式,js方式
  7. 1059. C语言竞赛(20)
  8. echart雷达图文字挤在一起_【数据可视化·图表篇】雷达图
  9. matplotlib显示图中标签
  10. 用python画简单的图案-如何用Python画各种著名数学图案 | 附图+代码
  11. python 怎么表示阶乘_python表示阶乘
  12. python批量下载文件只有1kb_我总结了这几点经验,使用python让网页提速几倍不止!...
  13. 物联网-云开发(Tlink云、机智云、百度云、阿里云等)
  14. C/C++ 动态检测内存错误利器 - ASan
  15. vue 使用 el-table 添加搜索框 实现简单搜索功能 ,同时判断输入是否为空
  16. 智慧园区数据可视化大屏的优势分析
  17. 提笔忘字低龄化 电脑难辞其咎
  18. 《江南百景图》为什么火了?和主创团队聊完之后,我跪了
  19. 网页编程软件:Coda 2 for Mac
  20. python随机抽取5张扑克牌,判断是否为顺子

热门文章

  1. Godaddy服务器 部署免费SSL证书
  2. 匿名管道和命名管道(代码剖析)
  3. IntelliJ IDEA更换代码字体为Consolas
  4. iOS二维码代码实现
  5. Mysql 8.0 --MGR多主+Atlas代理(提一下Mysql-router代理)
  6. 操作系统文件管理习题
  7. php 分别降低图片尺寸与质量的方法
  8. 开发、测试、测试开发
  9. android 隐私泄露 路径,一种Android应用隐私泄露漏洞检测方法与流程
  10. linux-centos8安装nginx