通俗易懂理解GhostNetV2轻量级神经网络模型

一、参考资料

原始论文:[1]

NeurIPS22 Spotlight | 已开源 | 华为GhostNetV2:端侧小模型性能新SOTA

二、术语解析

廉价的线性变换/线性运算cheap linear operations

线性变换的线性内核linear kernels

深度可分离卷积Depthwise Separable ConvolutionDSConv

逐深度卷积Depthwise ConvolutionDWConv

逐点卷积Pointwise ConvolutionPWConv

Ghost特征图Ghost feature maps

注意力图attention maps

解耦全连接注意力decoupled fully connected attentionDFC attention

表征能力expressiveness

性能capacity

三、GhostNetV2相关介绍

PyTorch代码:ghostnetv2_pytorch

MindSpore 代码:ghostnetv2

1. 引言

关于 GhostNetV1 网络模型的详细介绍,请参考另一篇博客:通俗易懂理解GhostNetV1轻量级神经网络模型

智能手机等边缘设备计算资源有限,在设计模型时,不仅需要考虑模型的性能,更要考虑其实际的推理速度。最近计算机视觉领域爆火的Transformer模型在多个任务取得了很高精度,但在端侧设备上运行速度较慢,难以满足实时性的要求。经典的自注意力(self-attention)模块的计算复杂度较高,计算量随着输入分辨率的增加以二次方的速度增长。尽管目前主流的局部注意力模块(将图像切分为多个区域,在每个区域内分别部署注意力模块)降低了理论复杂度,但图像切分需要大量变换张量形状的操作(比如reshape、transpose等),在端侧设备上会产生很高的时延。比如,将局部注意力模块和轻量级模型GhostNet结合,理论复杂度只增加了20%,但是实际的推理时延却翻了2倍。因此,为轻量化小模型专门设计硬件友好的注意力机制非常有必要。

2. DFC attention

2.1 移动端CNN的注意力模块

一个适用于移动端CNN的注意力模块应当满足3个条件:

  • 对长距离空间信息的建模能力强。相比CNN,Transformer性能强大的一个重要原因是它能够建模全局空间信息,因此新的注意力模块也应当能捕捉空间长距离信息。
  • 部署高效。注意力模块应该硬件友好,计算高效,以免拖慢推理速度,特别是不应包含硬件不友好的操作。
  • 概念简单。为了保证注意力模块的泛化能力,这个模块的设计应当越简单越好。

2.2 DFC attention 原理

虽然自注意力操作可以很好地建模长距离依赖,但是部署效率低。相比自注意力机制,具有固定权重的FC层更简单,更容易实现,也可以用于生成具有全局感受野的 attention maps

给定特征图 Z ∈ R H × W × C \begin{array}{ccc}Z&\in&\mathbb{R}^{H\times W\times C}\end{array} ZRH×W×C,它可以看作 h w hw hwtokens,记作 z i ∈ R C z_i\in\mathbb{R}^C ziRC,也就是 Z = { z 11 , z 12 , ⋯ , z H W } Z=\{z_{11},z_{12},\cdots,z_{HW}\} Z={z11,z12,,zHW}。FC层生成 attention map 的公式表达如下:
a h w = ∑ h ′ , w ′ F h w , h ′ w ′ ⊙ z h ′ w ′ , ( 3 ) \boldsymbol{a}_{hw}=\sum_{h^{\prime},w^{\prime}}F_{hw,h^{\prime}w^{\prime}}\odot\boldsymbol{z}_{h^{\prime}w^{\prime}}, \quad (3) ahw=h,wFhw,hwzhw,(3)
其中, ⊙ \odot 表示 element-wise multiplication F F F 是FC层中可学习的权重, A = { a 11 , a 12 , ⋯ , a H W } A=\{a_{11},a_{12},\cdots,\boldsymbol{a}_{HW}\} A={a11,a12,,aHW}

根据上述公式,将所有 tokens 与可学习的权重聚合在一起以提取全局信息,该过程比经典的自注意力简单的多。然而,该过程的计算复杂度仍然是二次方,特征图的大小为 O ( H 2 W 2 ) ) 2 \mathcal{O}({H^{2}W^{2}}))^{2} O(H2W2))2,这在实际情况下是不可接受的,特别是当输入的图像是高分辨率时。例如,对于4层的GhostNet网络的特征图具有 3136 ( 56 × 56 ) 3136 (56 \times 56) 3136(56×56)tokens,这使得计算变得 attention maps 异常复杂。实际上,CNN中的特征图通常是低秩的,不需要将不同空间位置的所有输入和输出的 tokens 密集地连接起来。特征的2D尺寸很自然地提供一个视角,以减少FC层的计算量,也就是根据上述公式分解为两个FC层,分别沿水平方向和垂直方向聚合特征,其公式表达如下:
a h w ′ = ∑ h ′ = 1 H F h , h ′ w H ⊙ z h ′ w , h = 1 , 2 , ⋯ , H , w = 1 , 2 , ⋯ , W , ( 4 ) \boldsymbol{a}'_{hw}=\sum\limits_{h'=1}^{H}F_{h,h'w}^{H}\odot\boldsymbol{z}_{h'w},h=1,2,\cdots,H,w=1,2,\cdots,W, \quad (4) ahw=h=1HFh,hwHzhw,h=1,2,,H,w=1,2,,W,(4)

a h w = ∑ w ′ = 1 W F w , h w ′ W ⊙ a h w ′ ′ , h = 1 , 2 , ⋯ , H , w = 1 , 2 , ⋯ , W , ( 5 ) \boldsymbol{a}_{hw}=\sum_{w'=1}^{W}F_{w,hw'}^{W}\odot\boldsymbol{a}_{hw'}^{\prime},h=1,2,\cdots,H,w=1,2,\cdots,W, \quad (5) ahw=w=1WFw,hwWahw,h=1,2,,H,w=1,2,,W,(5)

其中, F H F^H FH F W F^W FW是变换的权重。输入原始特征 Z Z Z,并依次应用公式(4)和公式(5),分别提取沿两个方向的长距离依赖关系。 作者将此操作称为解耦全连接注意力(decoupled fully connected attentionDFC attention),其信息流如下图所示:

在这里插入图片描述

由于水平和垂直方向变换的解耦,注意力模块的计算复杂度可以降低到 O ( H 2 W + H W 2 ) \mathcal{O}(H^{2}W+HW^{2}) O(H2W+HW2)。对于 full attention (公式3),正方形区域内的所有 patches 直接参与被聚合 patch 的计算。在 DFC attention 中,一个 patch 直接由其垂直方向和水平方向的 patch 进行聚合,而其他 patch 参与垂直线/水平线上的 patch 的生成,与被聚合的 token 有间接关系。因此,一个 patch 的计算也涉及到正方形区域的所有 patchs

公式(4)和公式(5)是 DFC attention 的一般表示,分别沿着水平和垂直方向聚合像素。通过共享部分变换权重,可以方便地使用卷积操作实现,省去了影响实际推理速度的耗时张量的reshape操作和transpose操作。为了处理不同分辨率的输入图像,卷积核的大小可以与特征图的大小进行解耦,也就是在输入特征上依次进行两个大小为 1 × K H 1 \times K_H 1×KH K W × 1 K_W \times 1 KW×1DWConv操作。当用卷积操作时,DFC attention 理论上的计算复杂度为 O ( K H H W + K W H W ) \mathcal{O}(K_{H}HW+K_{W}HW) O(KHHW+KWHW)。这种策略得到了TFLite和ONNX等工具的良好支持,可以在移动设备上进行快速推理。

3. GhostNetV2

DFC attention 插入到轻量化网络GhostNetV1中可以提升表征能力,从而构建出新型视觉骨干网络 GhostNetV2

3.1 Enhancing Ghost Module

Ghost Module 中只有m个特征与其他像素交互,这影响了Ghost Module 提取空间信息(spatial information)的能力。因此,作者使用 DFC attention 来增强 Ghost Module 的输出特征 Y Y Y,从而来捕获不同空间像素之间的长距离依赖关系。

输入特征 X ∈ R h × w × c X\in\mathbb{R}^{h\times w \times c} XRh×w×c 被送入两个分支,一个是 Ghost Module 分支,用于输出特征 Y Y Y,另一个是 DFC module 分支,用于生成 attention map,记作 A A A(公式(4)和公式(5)。 回想一下,在经典的自注意力中,线性变换层将输入特征图转换为计算 attention mapsquerykey。类似的,作者实现一个 1 × 1 1 \times 1 1×1 的卷积操作,将 Ghost Module 分支的输入 X X X 转换为 DFC module 分支的输入 Z Z Z。两个分支输出的乘积,即为最终输出 O ∈ R H × W × C O\in\mathbb{R}^{{H}\times W\times C} ORH×W×C,可以表示为:
O = Sigmoid ⁡ ( A ) ⊙ V ( X ) , ( 6 ) O=\operatorname{Sigmoid}(A)\odot\mathcal{V}(X), \quad (6) O=Sigmoid(A)V(X),(6)
其中, ⊙ \odot 表示element-wise multiplication A A Aattention map Sigmoid ⁡ \operatorname {Sigmoid} Sigmoid 是归一化函数以缩放到 ( 0 , 1 ) (0, 1) (0,1) 范围。 V ( ) \mathcal{V}() V() 表示 Ghost Module X X X 为输入特征。则信息聚合过程如下图所示:

在这里插入图片描述

使用相同的输入特征,Ghost ModuleDFC attention 是两个从不同角度提取信息的并行分支。输出特征是它们逐元素的信息,其中包含来自 Ghost Module 的特性和 DFC attention 的信息。每个 attention value 涉及到大范围的 patches,以便输出的特征可以包含这些 patches的信息。

3.2 GhostNetV2 bottleneck

GhostNetV1采用包含两个Ghost Module 的反向残差bottlenet(inverted residual bottleneck)。其中第一个 Ghost Module ,用于增加通道数,产生更多的扩展功能;第二个 Ghost Module 用于减少输出的通道数。这个 inverted residual bottleneck 解耦了模型的表征能力(expressiveness)和性能(capacity)。原版的GhostNetV1通过廉价的线性变换生成一部分特征,这影响了 expressiveness capacity。实验证明 DFC attentionexpressiveness 更有效。因此,作者将需要扩展的特征与 DFC attention 相乘。GhostNetV2 bottleneck 的结构如下图所示:

在这里插入图片描述

DFC attention 分支与第一个Ghost Module并行,以增强扩展的功能。然后将增强的特征传递到第二个Ghost Module,以生成输出特征图。它捕获了不同空间位置像素之间的长距离依赖关系,增强了模型的 expressiveness

4. 实验结果

本文在ImageNet图像分类、COCO目标检测、ADE语义分割等数据集上进行了实验。相比其他架构,GhostNetV2取得了更快的推理速度和更高的模型精度

在这里插入图片描述

GhostNetV2也可以作为骨干模型,用于目标检测、语义分割等下游任务。在MS COCO数据集中进行目标检测任务,结果如下:

在这里插入图片描述

在ADE20K数据集中进行语义分割任务,结果如下:

在这里插入图片描述

四、参考文献

[1] Tang Y, Han K, Guo J, et al. GhostNetv2: enhance cheap operation with long-range attention[J]. Advances in Neural Information Processing Systems, 2022, 35: 9969-9982.

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

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

相关文章

[极客挑战2019]HTTP

这道题考察的是http请求头字段的含义和使用; 具体如下 Referer:来源地址 User-Agent:客户端配置信息:浏览器类型、版本、系统类型等 X-Forwarded-For:代理地址,即数据发出的地址 开始解题:(对我这初学者真的烧脑&a…

基于DPU和HADOS-RACE加速Spark 3.x

背景简介 Apache Spark(下文简称Spark)是一种开源集群计算引擎,支持批/流计算、SQL分析、机器学习、图计算等计算范式,以其强大的容错能力、可扩展性、函数式API、多语言支持(SQL、Python、Java、Scala、R&#xff09…

使用向量数据库pinecone构建应用04:混合搜索 Hybrid Search

Building Applications with Vector Databases 下面是这门课的学习笔记:https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

番外篇 | YOLOv5+DeepSort实现行人目标跟踪检测

前言:Hello大家好,我是小哥谈。DeepSort是一种用于目标跟踪的深度学习算法。它结合了目标检测和目标跟踪的技术,能够在视频中准确地跟踪多个目标,并为每个目标分配一个唯一的ID。DeepSort的核心思想是将目标检测和目标跟踪两个任务进行联合训练,以提高跟踪的准确性和稳定性…

基于SVM的功率分类,基于支持向量机SVM的功率分类识别,Libsvm工具箱详解

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接:基于SVM的功率分类,基于支持向量机SVM的功率分类识别资源-CSDN文库 https://download.csdn.net/download/abc991835105/88862836 SVM应用实例, 基于…

自动化超级英雄:码垛机器人在智能生产线中的角色与挑战

在当代工业生产中,自动化技术的进步促使了一系列智能化设备的发展和应用,其中码垛机器人便是一个典型的代表。码垛机器人主要指用于实现物品自动堆叠、搬运和整理的工业机器人,其集成了机械工程、电子技术和计算机编程等多学科领域的最新研究…

制造执行系统(MOM):生产过程大屏联动、一目了然。

大家好,我是大美B端工场,本期继续分享常见的制作执行系统,欢迎大家关注,如有B端写系统界面的设计和前端需求,可以联络我们。 一、什么是MOM MOM系统是制造执行系统(Manufacturing Operations Management S…

应急响应实战笔记03权限维持篇(3)

0x00 前言 攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和后门文件,本文介绍Linux下的几种隐藏技术。 0x01 隐藏文件 Linux 下创建一个隐藏文件:touch .test.txt touch 命令可以创建一个文件,文件名前面加一个 点…

C# If与Switch的区别

在 switch 语句中使用表达式比较时,编译器会生成一个查找表,其中包含所有表达式的值和对应的 case 标签。因此,与使用常量或字面量比较相比,使用表达式比较可能会略微降低性能。 只有当 switch 语句中的所有 case 标签都使用常量或…

SIP 会话发起协议

目录 会话发起协议 SIP SIP 系统的构件 SIP 的地址 SIP 特点 一个简单的 SIP 会话 会话描述协议 SDP 会话发起协议 SIP H.323 过于复杂,不便于发展基于 IP 的新业务。 会话发起协议 SIP (Session Initiation Protocol) 是一套较为简单且实用的标准&#xff0…

Redis篇之缓存雪崩、击穿、穿透详解

学习材料:https://xiaolincoding.com/redis/cluster/cache_problem.html 缓存雪崩 什么是缓存雪崩 在面对业务量较大的查询场景时,会把数据库中的数据缓存至redis中,避免大量的读写请求同时访问mysql客户端导致系统崩溃。这种情况下&#x…

单片机51 输入和输出

一、IO口基本概念介绍 单片机的IO口(Input/Output口)是连接单片机与外部电路或设备的接口。单片机的IO口可以分为输入口和输出口两种,用于控制和监测外部设备的状态。 1. 输入口:单片机的输入口用于接收外部电路或设备的信号。输…

有趣且重要的JS知识合集(19)前端实现图片的本地上传/截取/导出

input[file]太丑了,又不想去改button样式,那就自己实现一个上传按钮的div,然后点击此按钮时,去触发file上传的事件, 以下就是 原生js实现图片前端上传 并且按照最佳宽高比例展示图片,然后可以自定义截取图片&#xff0…

全面解析企业财务报表系列之二:财务状况等式

全面解析企业财务报表系列之二:财务状况等式 一、财务状况等式二、会计恒等式三、复试记账法四、经营成果等式五、第三会计等式 一、财务状况等式 会计恒等式复试记账法权责发生制 二、会计恒等式 资产负债所有者权益 三、复试记账法 每笔交易至少在两个账户中记…

Kafka:kafka的技术架构? ①

一、Kafka的优势 Apache Kafka是一个开放源代码的分布式事件流平台,成千上万的公司使用它来实现高性 能数据管道,流分析,数据集成和关键任务等相关的应用程序。 二、技术架构 0)partition分区可以设置备份数,也可以设…

关于电脑功耗与电费消耗的问题,你了解多少?

一台电脑24小时运行需要多少电量? 大家好,我是一名拥有多年维修经验的上门维修师傅。 今天我就来回答大家关于电脑24小时运行需要多少电量的问题。 电脑功耗及用电量 首先我们来看看电脑的功耗情况。 普通台式电脑的功耗通常在300瓦左右,即…

Jenkins使用遇到的一些问题

一:插件依赖报错 比如遇到一堆插件报错,不是提示版本对不上,就是启用不了 这样直接把Jenkins升级就行了,比如我这个是命令行启动的,直接把他替换就好了 如果是遇到插件依赖报错,比如A插件异常 则点击这个插…

Python爬虫技术详解:从基础到高级应用,实战与应对反爬虫策略【第93篇—Python爬虫】

前言 随着互联网的快速发展,网络上的信息爆炸式增长,而爬虫技术成为了获取和处理大量数据的重要手段之一。在Python中,requests模块是一个强大而灵活的工具,用于发送HTTP请求,获取网页内容。本文将介绍requests模块的…

力扣hot100题解(python版7-9题)

7、接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,…

JSON(javaScript Object Notation,Js对象标记)—我耀学IT

Json是一种轻量级的数据交换格式,目前使用非常广泛,是一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换 。同时也易于机器解析和生成 1.1json的值: 值可以是对象、数组、数字、字符串或者三个字面值(false、nul…