【目标检测】C-GhostNet

news2025/7/9 1:47:02

1、论文

论文题名:《GhostNet: More Features from Cheap Operations》
arxiv:https://arxiv.org/abs/1911.11907
github:https://github.com/huawei-noah/ghostnet
作者翻译:https://zhuanlan.zhihu.com/p/109325275

2、摘要

本篇论文是华为诺亚方舟实验室在CVPR2020上提出的一种轻量级网络GhostNet。
在优秀CNN模型中,特征图存在冗余是非常重要的,但是很少有人在模型结构设计上考虑特征图冗余问题(The redundancy in feature maps)。而本文就从特征图冗余问题出发,提出一个仅通过少量计算(cheap operations)就能生成大量特征图的结构——Ghost Module。
Ghost Module通过一系列线性操作/廉价操作(a series of linear transformations/cheap operations)生成冗余的特征图,其中,经过线性操作生成的特征图称为ghost feature maps,而被操作的特征图称为intrinsic feature maps。
Ghost Module的优点:
(1)即插即用:Ghost Module是一个即插即用模块,可以无缝衔接在现有的CNN中。
(2)采用Ghost Module组成的Ghost bottlenecks,设计出GhostNet,在ILSVRC-2012上top1超过Mobilenet V3,并且参数更少。

3、引言

3.1 什么是特征图冗余?

在这里插入图片描述
如图,这个是对ResNet-50第一个残差块特征图进行可视化的结果,当我们向一个神经网络输入一张图片时,我们可以得到许多的特征图,一对相似的特征图用同一种颜色注释,上图有三对相似的特征图。
利用小扳手连接起来的两幅特征图,它们的相似性很高,这就是神经网络中存在的特征图冗杂的情况。作者认为在一对相似的特征图中,一个特征图可以通过廉价操作(扳手)将另一个特征图变换而获得。将相似的特征图认为是彼此的Ghost。

3.2 什么是Ghost feature maps和Intrinsic feature maps?

经过线性操作生成的特征图称为ghost feature maps,而被操作的特征图称为intrinsic feature maps,即intrinsic feature maps执行linear operations得到ghost feature maps。
下图表示,假设一组特征图中,一部分是Intrinic,而另外一部分是可以由intrinsic通过cheap operations来生成的,cheap operations反复出现多次。
在这里插入图片描述

3.3 什么是linear transformations和cheap operations?

linear transformations = cheap operations
一个intrinsic特征图可以具有一个或多个ghost特征图。
线性运算是在通道上运行,对每一个通道单独做运算,其计算量比普通卷积少得多。实际上,Ghost Module中可能有几种不同的线性运算,例如3×3和5×5线性内核。

4、Ghost Module

如上图2的a、b图所示,Ghost Module的功能是代替普通卷积,分两步操作来生成和普通卷积层相同数量的特征图。
首先Ghost Module采用1×1卷积降维,得到channel较少的特征图(少量卷积),这个1x1卷积的作用类似于特征整合,生成输入特征层的特征浓缩(比如正常用32个卷积核,这里就用16个,从而减少一半的计算量);然后再利用深度可分离卷积(3×3或5×5的DW深度卷积),也就是上述说的cheap operation生成Ghost特征图;最后将两次卷积的输出特征图再维度上堆叠concat,组合成新的output输出特征图。
步骤:
(1)利用1x1卷积Conv生成一些intrinsic feature maps
(2)对(1)生成的intrinsic feature maps进行DW深度可分离卷积(廉价操作)生成冗余特征图(特征浓缩的相似特征图ghost feature maps)
(3)最后将(1)(2)所生成的intrinsic feature maps和ghost feature maps进行concat拼接
注意:ratio表示Ghost Module中第一个1×1卷积下降通道数的倍数, 一般为2。

4.1 Ghost Module的计算量

如图2所示,假设输入图像大小是:h×w×c,卷积核的大小是:k×k,第一步生成的intrinsic特征图的大小是:h’×w’×m,s是第二步对intrinsic特征图中的每个特征(intrinsic特征图的m个通道)进行廉价操作的总映射,Ghost Module最终输出的特征图大小是:h’×w’×n,其中m << n。

可以得出:n = m * s

由于Ghost Module的第二步廉价操作中有1个identity恒等映射和s-1个ghost特征图,所以第二步Ghost Module具有m(s-1)个线性运算,即m(s-1) = n/s(s-1)个线性运算,并且每个线性运算的平均内核大小是d×d(d×d和k×k大小相似)。

在这里插入图片描述
图2(a)普通卷积的复杂度为:n * h’ * w’ * c * k * k

图2(b)Ghost Module的第一步普通卷积的复杂度为:m * h’ * w’ * c * k * k = n/s * h’ * w’ * c * k * k,第二步廉价操作(恒等映射和线性运算)的复杂度为:m(s-1) * h’ * w’ * d * d = n/s(s-1) * h’ * w’ * d * d(DW操作,分别对每一个通道做运算)

则,使用Ghost Module替换普通卷积的理论加速比为:
在这里插入图片描述

5、Ghost bottlenecks

Ghost bottlenecks是由Ghost Module组成的瓶颈结构,其实本质就是用Ghost Module,来代替瓶颈结构里面的普通卷积。
在这里插入图片描述
如图所示,Ghost bottleneck类似于ResNet中的基本残差块(Basic Residual Block),不同的是先升维再降维。

stride = 1的Ghost bottleneck:
主干部分由两个Ghost Module串联而成。第一个Ghost Module上升通道数,第二个Ghost Module降低通道数,以与shortcut路径匹配。然后,如果此时两个特征图的shape相同,就使用shortcut连接这两个Ghost Module的输入和输出。

stride = 2的Ghost bottleneck:
主干部分由两个 Ghost Module和一个DW深度卷积组成。第一个Ghost Module上升通道数;在高维空间下使用一个s=2的DW深度卷积下采样,来压缩特征图的高宽;第二个Ghost Module降低通道数。在shortcut路径部分,对输入特征图先使用s=2的DW深度卷积来压缩高宽,再使用1×1卷积调整通道数,使得输入和输出的特征图的shape相同。

注意:
(1)出于效率考虑,Ghost Module中的初始卷积是PW逐点卷积。
(2)第二个Ghost Module之后不使用ReLU,其他层在每层之后都应用了BN和ReLU非线性激活。

6、GhostNet网络结构

在这里插入图片描述

  • exp:Ghost bottleneck中第一个Ghost Module上升的维度,即上升的通道数
  • out:一个Ghost bottleneck的输出通道数
  • SE:Ghost bottleneck中是否使用注意力机制,和MobileNet v3中的SE一样。若在s=1的Ghost bottleneck中使用,SE在第一个Ghost Module后使用;若在s=2的Ghost bottleneck中使用,SE在主干部分的DW深度卷积下采样层后使用,即两个Ghost Module之间的DW层的后面使用。

注意:
表格中stride=2表示,在s=2情况下的Ghost bottleneck中,其主干部分的两个Ghost Module之间的DW层的步距为2,其shortcut部分的DW层步距也为2;
无论是s=1还是s=2情况下的Ghost bottleneck中,其主干部分的Ghost Module里的第二步深度可分离卷积的步距一直是1,不受表格中stride的影响。

7、实验和结果

见原论文:https://zhuanlan.zhihu.com/p/109325275

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023/1/6 Vue学习笔记-2

1 收集表单数据 收集表单数据&#xff1a; 若&#xff1a;<input type"text">&#xff0c;则v-model收集的是value的值&#xff0c;用户输入的就是value值。 若&#xff1a;<input type"radio">&#xff0c;则v-modle收集的是value的值&…

String、StringBuffer和StringBuilder

String 类是不可变类&#xff0c;即一旦一个 String 对象被创建以后&#xff0c;包含在这个对象中的字符序列是不可改变的&#xff0c;直至这个对象被销毁。 Java 提供了两个可变字符串类 StringBuffer 和 StringBuilder&#xff0c;中文翻译为“字符串缓冲区”。 StringBuil…

Python和MySQL对比(3):用Pandas 实现MySQL的子查询、like_regexp、case when_if语法效果

文章目录一、前言二、语法对比数据表子查询like/regexpcase when/ifin三、小结一、前言 环境&#xff1a; windows11 64位 Python3.9 MySQL8 pandas1.4.2 本文主要介绍 MySQL 中的子查询、like/regexp、case when/if 如何使用pandas实现&#xff0c;同时二者又有什么区别。 注…

FPGA中二进制数的运算

一、B比特的二进制数可以表示的范围 无符号整数&#xff1a;0~2B-1 有符号整数&#xff1a;-2B-1~2B-1-1 二、有符号数&#xff08;补码&#xff09;与十进制数之间的转换 D&#xff1a;十进制数 B&#xff1a;二进制数aB-1aB-2a1a0的位数 aB-1:符号位 三、符号位拓展 在使…

Android 12 蓝牙适配 Java版

Android 12.0蓝牙适配前言正文一、Android版本中蓝牙简介二、新建项目① 配置build.gradle② 配置AndroidManifest.xml三、打开蓝牙① 打开蓝牙意图② 请求BLUETOOTH_CONNECT权限意图四、蓝牙扫描① 扫描者② 扫描回调③ 扫描方法④ 执行扫描⑤ 应用不推导物理位置五、页面显示…

基于Java+Springboot+vue体育用品销售商城平台设计和实现

基于JavaSpringbootvue体育用品销售商城平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

Docker部署JAVA项目

一、 Docker安装 1、yum 包更新到最新 yum update 2、安装需要的软件包&#xff0c; yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 yum install yum-utils device-mapper-persistent-data lvm2 -y 3、 设置yum源 yum-config-manage…

等级保护----1、网络安全等级保护一级安全测评要求

文章目录一、安全测评通用要求1、安全物理环境1.1 物理访问控制1.2 防盗窃和防破坏1.3 防雷击1.4 防火1.5 防水和防潮1.6 温湿度控制1.7 电力供应2、安全通信网络2.1 通信传输2.2 可信验证3、安全区域边界3.1 边界防护3.2 访问控制3.3 可信验证4、安全计算环境4.1 身份鉴别4.2 …

使用关键字like进行模糊查询

【模糊查询】&#xff1a;使用关键字like [支持%或者下划线匹配&#xff0c;%匹配任意多个字符&#xff0c;一个下划线只匹配任意一个字符。] 实例&#xff1a; 查询名字中带有字母o的员工&#xff1a; select * from emp where ename like %o%; 找出名字以T结…

2000-2021.3月土地交易高频数据库(含爬取代码和数据)

2000-2021.3月土地交易高频数据库&#xff08;含爬取代码和数据&#xff09; 1、时间跨度&#xff1a;2000-2021年3月1日 2、指标&#xff1a;年份、电子监管号、所在省份、所在城市、所在区县、经度、纬度、项目名称、项目位置、面积、土地来源、土地用途、供地方式、土地使…

Python CV 实现风格化图片转换

前几天遇到一个风格化图片转换的需求&#xff0c;效果像这样&#xff1a; 像这样&#xff0c;需要用纯色圆形填充图像&#xff0c;形成风格化的图片样式。 实现原理 整体原理还是比较简单的&#xff0c;有点类似与马赛克的处理方式。 假设图片宽 w 像素&#xff0c;高 h 像素…

FLStudio21中文版下载及水果软件2023功能介绍

如今&#xff0c;越来越多的音乐人选择使用音乐制作软件来进行音乐的创作&#xff0c;一台电脑、一款软件以及一个外接MIDI就是一个小型的音乐工作站&#xff0c;而如今非常流行的FL Studio&#xff08;在国内被称为“水果”&#xff09;成了音乐界无论萌新还是大佬们的首选&am…

二阶微分算子与反锐化屏蔽

二阶微分算子 任意二阶微分必须满足&#xff1a;灰度不变的区域微分值为0&#xff1b;灰度台阶或斜坡的起点处微分值非0&#xff1b;沿着斜坡的微分值为0。由于处理离散值&#xff0c;因此微分用差分近似&#xff1a; 二维图像f(x,y),沿着两个空间坐标轴求解二阶微分&#xff1…

逆向-还原代码之little-or-big (Arm 64)

// 源代码 #include <stdio.h> /* * 2016/9/29 yu liang. */ int test_one(void) { int i1; char *p(char *)&i; if(*p1) printf("Little_endian\n"); // Little_endian else printf("B…

一文弄清楚Vue中的computed与watch的区别

1.实现业务当我们点击按钮&#xff0c;就会切换h1标签的语句内容&#xff0c;再次点击按钮&#xff0c;h1标签的语句内容就会恢复&#xff0c;每次点击按钮&#xff0c;浏览器都会输出一个语句来表达监视到了h1的内容改变2.Vue中的computed计算属性2.1利用Vue中的computed计算属…

Windows server——部署DHCP服务

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 本章重点 一.DHCP概述 1.DHCP服务的好处 二.DHCP的工作原理 1.DHCP的分配方…

【云原生 | 50】Docker三剑客之Docker Compose第一节

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

pinia和vuex的区别

pinia和vuex的区别 什么是“状态管理模式”&#xff1f; const Counter {// 状态data () {return {count: 0}},// 视图template: <div>{{ count }}</div>,// 操作methods: {increment () { this.count}} }createApp(Counter).mount(#app)这个状态自管理应用包含…

字符串题记

经典字符串leetcode题 文章目录经典字符串leetcode题反转字符串第一种方法&#xff1a;使用string里的库函数reverse第二种方法&#xff1a;使用自己写的swap函数第一种swap函数第二种swap函数151.翻转字符串里的单词28. 实现 strStr()KMP算法459.重复的子字符串第一种&#xf…

UE4 后期材质节点学习

以下对应的效果&#xff1a; 材质后期在这里进行设置&#xff1a; 在这里调整场景的整体的饱和度 场景的对比度 灰度系数的调整 高光度/图像增益 灰阶偏移的设置 想了解这些专业名词可以看&#xff1a;相机gain lift gamma offset参数意义_baobei0112的博客-CSDN博客_相机gai…