为了减少神经网络的计算消耗,论文提出Ghost模块来构建高效的网络结果。该模块将原始的卷积层分成两部分,先使用更少的卷积核来生成少量内在特征图,然后通过简单的线性变化操作来进一步高效地生成ghost特征图。从实验来看,对比其它模型,GhostNet的压缩效果最好,且准确率保持也很不错,论文思想十分值得参考与学习



来源:晓飞的算法工程笔记 公众号

论文: GhostNet: More Features from Cheap Operations

Introduction


  目前,神经网络的研究趋向于移动设备上的应用,一些研究着重于模型的压缩方法,比如剪枝,量化,知识蒸馏等,另外一些则着重于高效的网络设计,比如MobileNet,ShuffleNet等

  训练好的网络一般都有丰富甚至冗余的特征图信息来保证对输入的理解,如图1 ResNet-50的特征图,相似的特征图类似于对方的ghost。冗余的特征是网络的关键特性,论文认为与其避免冗余特征,不如以一种cost-efficient的方式接受,获得很不错的性能提升,论文主要有两个贡献:

  • 提出能用更少参数提取更多特征的Ghost模块,首先使用输出很少的原始卷积操作(非卷积层操作)进行输出,再对输出使用一系列简单的线性操作来生成更多的特征。这样,不用改变其输出的特征图,Ghost模块的整体的参数量和计算量就已经降低了
  • 基于Ghost模块提出GhostNet,将原始的卷积层替换为Ghost模块

Approach


Ghost Module for More Features

  对于输入数据$X\in \mathbb{R}^{c\times h\times w}$,卷积层操作如公式1,$Y\in \mathbb{R}{h{'}\times w^{'}\times n}$为输出的n维特征图,$f\in \mathbb{R}^{c\times k\times k\times n}$为该层的卷积核,可得该层的计算量为$n\cdot h^{'}\cdot w^{'}\cdot c\cdot k\cdot k$,这个数值通常成千上万,因为$n$和$c$一般都很大。公式1的参数量与输入和输出的特征图数息息相关,而从图1可以看出中间特征图存在大量冗余,且存在相似的特征(Ghost),所以完全没必要占用大量计算量来计算这些Ghost

  假设原输出的特征为某些内在特征进行简单的变换得到Ghost,通常这些内在特征数量都很少,并且能通过原始卷积操作公式2获得,$Y^{'}\in \mathbb{R}{h{'}\times w^{'}\times m}$为原始卷积输出,$f^{'}\in \mathbb{R}^{c\times k\times k\times m}$为使用的卷积核,$m\le n$,bias直接简化了

  为了获得原来的$n$维特征,对$Y{'}$的内在特征分别使用一系列简单线性操作来产生$s$维ghost特征,$\Phi_{i,j}$为生成$y_i{'}$的$j$-th ghost特征图的线性变换函数,最后的$\Phi_{i,s}$为保存内在特征的identity mapping,整体计算如图2b

  • Difference from Existing Methods

  与目前主流的卷积操作对比,Ghost模块有以下不同点:

  1. 对比Mobilenet、Squeezenet和Shufflenet中大量使用$1\times 1$ pointwise卷积,Ghost模块的原始卷积可以自定义卷积核数量
  2. 目前大多数方法都是先做pointwise卷积降维,再用depthwise卷积进行特征提取,而Ghost则是先做原始卷积,再用简单的线性变换来获取更多特征
  3. 目前的方法中处理每个特征图大都使用depthwise卷积或shift操作,而Ghost模块使用线性变换,可以有很大的多样性
  4. Ghost模块同时使用identity mapping来保持原有特征
  • Analysis on Complexities

  假设Ghost模块包含1个identity mapping和$m\cdot (s-1)=\frac{n}{s} \cdot (s-1)$个线性操作,每个线性操作的核大小为$d\times d$

  理论的加速比如公式4,而理论的压缩比如公式5,让$d\times d$与$k\times k$相似且$s\ll c$

Building Efficient CNNs

  • Ghost Bottlenecks

  Ghost Bottleneck(G-bneck)与residual block类似,主要由两个Ghost模块堆叠二次,第一个模块用于增加特征维度,增大的比例称为expansion ration,而第二个模块则用于减少特征维度,使其与shortcut一致。G-bneck包含stride=1和stride=2版本,对于stride=2,shortcut路径使用下采样层,并在Ghost模块中间插入stride=2的depthwise卷积。为了加速,Ghost模块的原始卷积均采用pointwise卷积

  • GhostNet

  基于Ghost bottleneck,GhostNet的结构如图7所示,将MobileNetV3的bottleneck block替换成Ghost bottleneck,部分Ghost模块加入了SE模块

  • Width Multiplier

  尽管表7的结构已经很高效,但有些场景需要对模型进行调整,可以简单地使用$\alpha$对每层的维度进行扩缩,$\alpha$称为width multiplier,模型大小与计算量大约为$\alpha^2$倍

Experiments


Efficiency of Ghost Module

  • Toy Experiments

  论文对图1的ghost pair进行了不同核大小的线性变化测试,将左图作为输出右图作为输入训练depthwise卷积,然后使用训练的结果对左图进行变换,计算其变换后与右图的MSE。可以看到,不同的核大小下差值都很小,说明线性变换是有效的,而且核大小的影响不大,所以用核固定为d的depthwise卷积来进行公式3计算

  • CIFAR-10

  将VGG的卷积层替换成Ghost模块进行超参数测试,表3的$s=2$,表4的$d=3$

  可以看到使用Ghost模块不仅比其它压缩方法更能降低模型的体量,也最能保持模型准确率

  对Ghost模块产生的特征进行了可视化,尽管从内在特征线性变换而来,但还是有明显的差异,说明线性变换足够灵活

  • Large Models on ImageNet

  在大型网络上使用Ghost模块,压缩效果和准确率依然很不错

GhostNet on Visual Benchmarks

  • ImageNet Classification

  使用$k=1$, $s=2$, $d=3$的GhostNet,结果如表7,不同的模型大小使用不同的$\alpha$值进行调整,整体而言,GhostNet最轻量且准确率最高

  • Object Detection

  在one-stage和two-stage检测算法上,GhostNet能降低大部分计算量,而mAP与其它主干网络差不多

CONCLUSION


  为了减少神经网络的计算消耗,论文提出Ghost模块来构建高效的网络结果。该模块将原始的卷积层分成两部分,先使用更少的卷积核来生成少量内在特征图,然后通过简单的线性变化操作来进一步高效地生成ghost特征图。从实验来看,对比其它模型,GhostNet的压缩效果最好,且准确率保持也很不错,论文思想十分值得参考与学习





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

GhostNet: 使用简单的线性变换生成特征图,超越MobileNetV3的轻量级网络 | CVPR 2020的更多相关文章

  1. SaccadeNet:使用角点特征进行two-stage预测框精调 | CVPR 2020

    SaccadeNet基于中心点特征进行初步的目标定位,然后利用初步预测框的角点特征以及中心点特征进行预测框的精调,整体思想类似于two-stage目标检测算法,将第二阶段的预测框精调用的区域特征转化为 ...

  2. pytorch中网络特征图(feture map)、卷积核权重、卷积核最匹配样本、类别激活图(Class Activation Map/CAM)、网络结构的可视化方法

    目录 0,可视化的重要性: 1,特征图(feture map) 2,卷积核权重 3,卷积核最匹配样本 4,类别激活图(Class Activation Map/CAM) 5,网络结构的可视化 0,可视 ...

  3. 将Eclipse中现有的java类生成类图

    需求:将Eclipse中现有的java类生成类图 一:什么是ModelGoon? 它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图). 二:安装 下载Mod ...

  4. 用Enterprise Architect从源码自动生成类图

    http://blog.csdn.net/zhouyong0/article/details/8281192 /*references:感谢资源分享者.info:简单记录如何通过工具从源码生成类图,便 ...

  5. Qt生成灰度图(转载)

    Qt生成灰度图(转载)   项目中用到大量基础图像处理知识,其中灰度图的生成是很重要的一环. 先补充一些基础知识: ------------------------------------------ ...

  6. 练习: bs4 简单爬取 + matplotlib 折线图显示 (关键词,职位数量、起薪)

    要看一种技术在本地的流行程度,最简单的就是找招聘网站按关键词搜索. 比如今天查到的职位数量是vue 1296个,react 1204个,angular 721个.国际上比较流行的是react,本地市场 ...

  7. Locust 测试结果通过Matplotlib生成趋势图

    目的: 相信大家对于使用Loadrunner测试后的结果分析详细程度还是有比较深刻的感受的,每个请求,每个事务点等都会有各自的趋势指标,在同一张图标中展示.如下图: 而Locust自身提供的chart ...

  8. Asp.net mvc 实时生成缩率图到硬盘

    之前对于缩率图的处理是在图片上传到服务器之后,同步生成两张不同尺寸的缩率供前端调用,刚开始还能满足需求,慢慢的随着前端展示的多样化,缩率图已不能前端展示的需求,所以考虑做一个实时生成图片缩率图服务. ...

  9. 卷积网络中的通道(Channel)和特征图

    转载自:https://www.jianshu.com/p/bf8749e15566 今天介绍卷积网络中一个很重要的概念,通道(Channel),也有叫特征图(feature map)的. 首先,之前 ...

随机推荐

  1. python3.4.3 调用http接口 解析response xml后插入数据库

    工作中需要调用一个http的接口,等不及java组开发,就试着用python去调用.Python版本3.4.3 完整的流程包括:从sqlServer取待调用的合同列表 -> 循环调用http接口 ...

  2. Android平台接入OneNET

    1. OneNET简介 中国移动物联网开放平台是由中国移动打造的PaaS物联网开放平台. 平台能够帮助开发者轻松实现设备接入与设备连接,提供综合性的物联网解决方案,实现物联网设备的数据获取,数据存储, ...

  3. 升级到Chrome 80+的SameSite问题,及Asp.net站点修改

    缘起 有用户反映,之前正常使用的站点,出现无法登录情况. 调查 用户使用场景,使用iframe嵌套了我们的Web,跨在一个跨域 用户升级了最新的Chrome 80 根据浏览记录看到,Post请求没有发 ...

  4. ElasticSearch之映射常用操作

    本文案例操作,建议先阅读我之前的文章<ElasticSearch之安装及基本操作API> Mapping (映射)类似关系型数据库中的表的结构定义.我们将数据以 JSON 格式存入到 El ...

  5. (11)nc命令(每周一个linux命令)

    nc(netcat)实用程序几乎可用于所有涉及TCP或UDP的事情.它可以打开TCP连接,发送UDP数据包,监听任意TCP和UDP端口,进行端口扫描,处理IPv4和IPv6.与telnet不同,nc可 ...

  6. Natas7 Writeup(任意文件读取漏洞)

    Natas7: 页面出现了两个选项,点击后跳转,观察url发现了page参数,猜测可能存在任意文件读取漏洞. 且源码给了提示,密码在/etc/natas_webpass/natas8 中. 将/etc ...

  7. Drawing Simple Polygon(Create Simple Polygon from unordered points by angle sorting)

    Keywords: 极角排序, Simple Polygon Generation Given set of points in the plane, your task is to draw a p ...

  8. 从源码和doc揭秘——Java中的Char究竟几个字节,Java与Unicode的关系

    #编码与字符编码 (懂编码的建议直接跳过) 在计算机世界中,任何事物都是用二进制图片数字表示的,图片可以编码为JPG,PNG格式的字节流,音频,视频有MP3,MP4格式的字节流.这些JPG,MP3等都 ...

  9. shell编程之脚本参数$@,$*,$#,$$,$?的含义

    #首先按顺序解释各个参数的含义 1.$0  表示脚本的文件名, 具体的路径信息和执行命令时的相对位置有关,例如 sakura@mi-OptiPlex-7050:~/sh$ sh args.sh arg ...

  10. Spring05——Spring 如何实现事务管理

    在此之前,我们已经了解了 Spring 相关的基础知识,今天将为给位带来,有关 Spring 事务代理的相关知识.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java 相关知识 ...