GhostNetV2 Enhance Cheap Operation with Long-Range Attention 论文学习

论文地址:https://arxiv.org/abs/2211.12905
代码地址:https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/ghostnetv2_pytorch

解决了什么问题?

在计算机视觉领域,深度神经网络在诸多任务上扮演着重要角色。为了将神经网络部署在边缘设备如手机和可穿戴设备,我们不只要考虑模型的表现,也要考虑其效率,尤其是实际的推理速度。矩阵乘法占据了算力消耗和参数量的主要部分。设计轻量级模型能显著降低推理延迟。

基于卷积的轻量级模型不擅长建模远距离的依赖关系,只能获取窗口区域内的局部信息,使性能无法进一步提升。在卷积中引入自注意力可以获得全局信息,但会制约实际的速度。常用的自注意力模块需要很高的复杂度,对低算力不友好。此外,需要对特征做大量的 split 和 reshape 操作,从而计算注意力图。尽管理论复杂度可忽略不计,但这些操作会增加内存占用和延迟。因此,在轻量级模型中使用原版的子注意力不适合移动设备。

提出了什么方法?

本文提出了一个硬件友好的注意力机制(叫 DFC 注意力),然后针对移动设备提出了一个新的 GhostNetV2 架构。DFC 注意力由全连接层组成,在常用的硬件上不只计算速度快,而且也可以获取远距离像素之间的关系。作者进一步分析了之前的 GhostNet,用带 DFC 注意力的低成本操作输出扩展特征,这样 GhostNetV2 能同时聚合局部和远距离的信息。在 ImageNet-1K 上,它取得了 75.3 % 75.3\% 75.3% 的准确率,FLOPs 为 167 M 167M 167M

为了简洁,只有全连接层参与注意力图的生成。一个全连接层被拆分成水平方向的全连接和垂直方向的全连接,聚合 2D 特征图的像素。这两个 FC 层会将各自方向上距离较远的像素都涵盖进来,把它们堆叠到一起,从而产生全局感受野。此外,作者回顾了 GhostNet 的表征瓶颈,通过 DFC 层来加强中间特征。然后作者构建了一个轻量级的视觉主干 GhostNetV2。

GhostNet 回顾

GhostNet 是针对移动设备设计的轻量级模型,能进行高效的推理。它主要的模块是 Ghost 模块,利用低成本操作生成出更多的特征图,从而替换原始的卷积。给定输入特征 X ∈ R H × W × C X\in \mathbb{R}^{H\times W\times C} XRH×W×C,Ghost 模块通过两步替换标准卷积。首先,用一个 1 × 1 1\times 1 1×1卷积来生成 intrinsic 特征,

Y ′ = X ∗ F 1 × 1 Y'=X \ast F_{1\times 1} Y=XF1×1

其中, ∗ \ast 表示卷积操作, F 1 × 1 F_{1\times 1} F1×1 表示 pointwise conv, Y ′ ∈ R H × W × C o u t ′ Y'\in\mathbb{R}^{H\times W\times C'_{out}} YRH×W×Cout 是 intrinsic 特征,该特征的尺寸要小于原始输出的特征 C o u t ′ < C o u t C'_{out}<C_{out} Cout<Cout。然后,使用低成本操作(如深度卷积)来计算 intrinsic 特征,从而生成更多的特征。然后沿着通道维度,将这两部分特征 concat 一起:

Y = Concat ( [ Y ′ , Y ′ ∗ F d p ] ) Y=\text{Concat}([Y', Y' \ast F_{dp}]) Y=Concat([Y,YFdp])

其中 F d p F_{dp} Fdp 是深度卷积滤波器, Y ∈ R H × W × C o u t Y\in\mathbb{R}^{H\times W\times C_{out}} YRH×W×Cout 是输出特征。尽管 Ghost 模块能够大幅度降低计算成本,但表征能力还是被弱化了。要想准确的识别,像素之间的关系至关重要。在 GhostNet 中,只用到了廉价的操作( 3 × 3 3\times 3 3×3 深度卷积)来获取空间信息,只占特征的一半。其余的特征是通过 1 × 1 1\times 1 1×1 pointwise 卷积产生的,没有和其他像素有任何交流。获取的空间信息不足会阻碍模型的表现进一步提升。

GhostNet block 是用两个堆叠的 Ghost module 构成的,如下图 a 所示。与 MobileNetV2 类似,它也是一个 inverted bottleneck,第一个模块是扩展层,增加输出通道数,第二个模块降低通道数来匹配短路连接的输出。

回顾移动架构的注意力机制

注意力模型最近也引入到了计算机视觉任务。ViT 使用标准的 transformer 模型,它由自注意力模块和 MLP 模块组成。Wang 等人将自注意力操作插入到了卷积网络中,获取全局信息。注意力模块的复杂度通常是关于特征尺寸的二次方程,对于高分辨率图像(目标检测和语义分割任务)就比较困难了。

主流的降低注意力复杂度的策略是将图像切分成多个窗口,在每个窗口内和跨窗口进行注意力操作。例如,Swin-Transformer 将原始特征图切分为多个非重叠窗口,在局部窗口内计算自注意力。MobileViT 将特征展开为多个非重叠的区域,计算这些区域之间的注意力。对于 CNN 的 2D 特征图,做特征切分和注意力会增加一些 tensor reshape 和转置操作,其理论复杂度可忽略,但事实上并非如此。对于高复杂度的大模型中(Swin-B 的 FLOPS 有几十亿次),在每次推理时这些操作只占一小部分。对于轻量级模型,这些部署延迟可忽略不计。

本文中,作者将 MobileViT 中的自注意力加入到了 GhostNet 中,在 Huawei P30 上用 TFLite 工具评测其延迟性。作者使用了标准的 ImageNet 输入分辨率 224 × 224 224\times 224 224×224。理论上注意力机制只增加了 20 % 20\% 20% 的 FLOPs,但是在移动设备上增加了一倍的推理时间。理论和实际复杂度之间的巨大差异说明,针对移动设备设计一个硬件友好的注意力机制是非常必要的。

方法

DFC 注意力

作者介绍了如何为移动端 CNN 设计一个注意力模块,它应该具备以下特性:

  • 长距离:要想增强表征能力,获取长距离空间信息对注意力机制来说是非常关键的,小型 CNN 为了节省成本,通常只使用了小型的卷积核( 1 × 1 1\times 1 1×1卷积)。
  • 部署高效:注意力模块应该极其高效,以免降低推理速度。我们不希望出现高 FLOPs 的操作或硬件不友好的操作。
  • 概念简洁:为了保持模型的泛化能力,该注意力应该非常简洁。

尽管自注意力能够很好地建模长距离像素关系,但部署起来并不高效。权重固定的全连接层非常简单,且部署简单,可以用全局感受野产生注意力图。计算过程如下:

给定特征 Z ∈ R H × W × C Z\in\mathbb{R}^{H\times W\times C} ZRH×W×C,可以看作为 H W HW HW 个 tokens z i ∈ R C \mathcal{z}_i \in\mathbb{R}^C ziRC,即 Z = { z 11 , z 12 , . . . , z H W } Z=\{\mathcal{z}_{11}, \mathcal{z}_{12}, ..., \mathcal{z}_{HW}\} Z={z11,z12,...,zHW}。产生注意力图的 FC 层的具体实现如下:

a h w = ∑ h ′ , w ′ F h w , h ′ w ′ ⊙ z h ′ w ′ \mathcal{a}_{hw}=\sum_{h',w'}{F_{hw, h'w'}\odot \mathcal{z}_{h'w'}} ahw=h,wFhw,hwzhw

其中 ⊙ \odot 是逐元素相乘。 F F F是全连接层的权重, A = { a 11 , a 12 , . . . , a H W } A=\{\mathcal{a}_{11}, \mathcal{a}_{12},...,\mathcal{a}_{HW}\} A={a11,a12,...,aHW} 是生成的注意力图。上式能捕捉到全局信息,通过权重 F F F 聚合所有的 tokens,这要比自注意力简单多了。但是,该计算过程的复杂度关于特征大小仍然是二次方程,即 O ( H 2 W 2 ) \mathcal{O}(H^2W^2) O(H2W2),这在高分辨率输入图像场景中难以接受。比如,GhostNet 的第四层的特征图有 3156 ( 56 × 56 ) 3156(56\times 56) 3156(56×56)个 tokens,计算注意力图就复杂度太高了。实际上,CNN 的特征图通常是 low-rank 的,并不需要将不同空间位置的所有的输入和输出 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 \mathcal{a'}_{hw}=\sum_{h'=1}^H{F^H_{h,h'w} \odot \mathcal{z}_{h'w}}, h=1,2,...,H, w=1,2,...,W ahw=h=1HFh,hwHzhw,h=1,2,...,H,w=1,2,...,W
a h w = ∑ w ′ = 1 W F w , w ′ w W ⊙ a ′ h w ′ , h = 1 , 2 , . . . , H , w = 1 , 2 , . . . , W \mathcal{a}_{hw}=\sum_{w'=1}^W{F^W_{w,w'w} \odot \mathcal{a'}_{hw'}}, h=1,2,...,H, w=1,2,...,W ahw=w=1WFw,wwWahw,h=1,2,...,H,w=1,2,...,W

其中 F H F^H FH F W F^W FW 是权重。以原始特征 Z Z Z 作为输入,依次地输入上面式子,分别沿着高度和宽度两个方向计算得到长距离依赖关系。作者将这个操作命名为 decoupled fully connected(DFC) 注意力,如上图所示。将水平和垂直变换拆分后,注意力模块的计算复杂度降低到了 O ( H 2 W + H W 2 ) \mathcal{O}(H^2W+HW^2) O(H2W+HW2)。在全注意力中,方块中的所有区域都直接参与到了受关注区域的计算。在 DFC 注意力中,一个区域只和它水平和垂直方向的区域做直接的融合,而其它区域只参与受关注 token 的水平和垂直方向的区域的生成,它们与受关注 token 只有间接的关联。因此,方块中所有的区域都参与到了各区域的计算。

上面两个式子表示了 DFC 注意力,分别沿着水平和垂直方向聚合像素。通过共享部分的权重,它能很方便地用卷积实现,省去了推理耗时的 tensor reshape 和转置操作。为了处理不同分辨率的输入图像,滤波器大小可以解耦成特征图大小,即对输入特征图应用两个大小分别是 1 × K H 1\times K_H 1×KH K W × 1 K_W\times 1 KW×1 的深度卷积。用卷积实现时,DFC 注意力的理论复杂度就是 O ( K H H W + K W H W ) \mathcal{O}(K_HHW + K_WHW) O(KHHW+KWHW)。TFLite 和 ONNX 可以很好地支持这个策略,方便移动端部署。

GhostNet V2

本文,作者使用 DFC 注意力来提升轻量级模型的表征能力,然后提出了新的主干网络 GhostNetV2。

增强 Ghost 模块
如上所述,Ghost 模块只有一半的特征会和其它像素交互,这破坏了空间信息获取的能力。因此,作者使用 DFC 注意力来增强 Ghost 模块的输出特征 Y Y Y,获取不同的空间像素的长距离依赖关系。

将输入特征 X ∈ R H × W × C X\in \mathbb{R}^{H\times W\times C} XRH×W×C 输入两个分支,一个 Ghost 模块产生输出特征 Y Y Y,另一个输入 DFC 模块产生注意力图 A A A。在自注意力中,线性变换层用于将输入特征变换成 query 和 key 来计算注意力图。类似地,作者使用了 1 × 1 1\times 1 1×1 卷积将模块的输入 X X X 变换成 DFC 的输入 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 ) O = \text{Sigmoid}(A)\odot \mathcal{V}(X) O=Sigmoid(A)V(X)

其中 ⊙ \odot 是逐元素相乘, Sigmoid \text{Sigmoid} Sigmoid是缩放函数,将注意力图 A \mathcal{A} A归一化到 ( 0 , 1 ) (0,1) (0,1)之间。

该信息聚合的过程如下图所示。对于相同的输入,Ghost 模块和 DFC 注意力是两个平行的分支,从不同的角度提取信息。二者的乘积就是输出结果,包含了 Ghost 模块的特征和 DFC 注意力的信息。每个注意力值的计算都涉及了距离远的区域,输出特征就包含了这些区域的信息。

特征下采样
Ghost 模块直接和 DFC 注意力并行计算会增加一些计算量。因此,作者通过水平和垂直方向的下采样来降低特征图尺寸,这样 DFC 注意力的所有操作都可以在更小的特征上进行。宽度和高度都默认缩放为原来的一半,这降低了 DFC 注意力 75 % 75\% 75% 的 FLOPs。然后将输出特征图上采样到原来的尺寸,从而匹配上 Ghost 分支的特征尺寸。对于下采样作者使用了 average pool,对于上采样使用了双线性插值。直接使用 sigmoid 函数会增加延迟,作者因此也在下采样后的特征图上使用了 sigmoid 函数,从而降低推理时间。尽管注意力图的值可能不在 ( 0 , 1 ) (0,1) (0,1) 区间,作者发现其对模型的最终表现影响微乎其微。

GhostV2 bottleneck
GhostNet 采用了包括了两个 Ghost 模块的倒转残差 bottleneck,第一个模块产生更多通道的扩展特征,第二个降低通道数来获取输出特征。这个倒转 bottleneck 天然地拆分了模型的 expressiveness 和 capacity。前者体现在扩展特征上,后者体现在模块的输入和输出上。原始的 Ghost 模块通过廉价操作生成部分特征,但损害了 expressiveness 和 capacity。通过比较将 DFC 注意力加在扩展特征还是输出特征上的表现,作者发现增强 expressiveness 更有效。因此,作者只将扩展特征和 DFC 注意力相乘。

图4b 展示了 GhostNetV2 的 bottleneck。DFC 注意力分支与第一个 Ghost 模块平行,增强扩展特征。然后该特征输入第二个 Ghost 模块来产生输出特征。它获取了不同空间位置的像素之间远距离依赖关系,增强模型的 expressiveness。

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

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

相关文章

机器学习实践:超市商品购买关联规则分析

第2关&#xff1a;动手实现Apriori算法 任务描述 本关任务&#xff1a;编写 Python 代码实现 Apriori 算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握 Apriori 算法流程。 Apriori 算法流程 Apriori 算法的两个输人参数分别是最小支持度和数据集。该算法首先会生成所…

【最大公约数 并集查找 调和级数】1998. 数组的最大公因数排序

本文涉及知识点 最大公约数 并集查找 调和级数 LeetCode1998. 数组的最大公因数排序 给你一个整数数组 nums &#xff0c;你可以在 nums 上执行下述操作 任意次 &#xff1a; 如果 gcd(nums[i], nums[j]) > 1 &#xff0c;交换 nums[i] 和 nums[j] 的位置。其中 gcd(nums…

面试经验分享 | 蓝队面试经验

关于蓝队面试经验 1.自我介绍能力 重要性 为什么将自我介绍能力放在第一位&#xff0c;实际上自我介绍才是面试中最重要的一点&#xff0c;因为护网面试并没有确定的题目&#xff0c;让面试官去提问 更多是的和面试官的一种 “交谈” &#xff0c;面试的难易程度也自然就取决…

三维点云处理-模型拟合

以直线拟合为例&#xff0c;模型拟合常用的方法有Least Square&#xff08;最小二乘&#xff09;、Hough Transform&#xff08;霍夫变换&#xff09;、Random Sample Consensus&#xff08;RANSAC&#xff09;等。那么该如何区分和使用这几种方法呢&#xff1f; 情况1&#x…

基于springboot实现夕阳红公寓管理系统项目【项目源码+论文说明】

基于springboot实现夕阳红公寓管理系统演示 摘要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是…

深入理解Java虚拟机(JVM)

引言&#xff1a; Java虚拟机&#xff08;JVM&#xff09;是Java平台的核心组件&#xff0c;它负责将Java字节码转换成平台特定的机器指令&#xff0c;并在相应的硬件和操作系统上执行。JVM的引入使得Java语言具有“一次编写&#xff0c;到处运行”的跨平台特性。本文将深入探…

W801学习笔记二十一:英语背单词学习应用——上

英语背单词是比较常见的学习APP&#xff0c;参考唐诗宋词应用&#xff0c;本章做一个类似的应用。 一、单词数据清洗及格式转换 诗词数据的获取渠道很多&#xff0c;一般可以按照年级来分文件。如一到九年级&#xff0c;四六级&#xff0c;雅思等等。 1、先从网上某某地方下载…

【计算机科学速成课】笔记一

文章目录 写在前面1.计算机的早期历史2.电子计算机3.布尔运算和逻辑门4.二进制5.算术逻辑单元-ALU6.寄存器和内存 写在前面 所有的一切源于这样一个网站——CS自学指南。 这是新手小白入门计算机科学必要了解的知识——【计算机科学速成课】[40集全/精校] - Crash Course Comp…

HTML_CSS学习:尚硅谷——尚品汇

一、index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>荣耀</title> <!-- 引入页签图标--><link rel"shortcut icon" href"./HONOR%20.ico" type&qu…

navicat premium16.3.9重置

软件下载 官网地址&#xff1a;https://navicat.com.cn/products/ # 准备脚本 1、建一个txt 2、复制以下代码 3、修改文件格式为bat 4、运行bat文件 5、重新打开navicat&#xff0c;试用期重置为14 经测试16.2.3以上版本均可用 echo off set dnInfo set dn2ShellFolder set r…

展开说说:Android线程池解析

何谓线程池&#xff1f;本人理解是存放和管理线程的一个容器。 线程池存在的意义是什么&#xff1f; 第一&#xff1a;前面博客提到过创建和销毁线程的操作本身是有性能开销的&#xff0c;如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本&a…

0基础学PHP有多难?

php作为web端最佳的开发语言&#xff0c;没有华而不实&#xff0c;而是经受住了时间考验&#xff0c;是一门非常值得学习的编程语言。 目前市场上各种网站、管理系统、小程序、APP等&#xff0c;基本都是使用PHP开发的&#xff0c;也侧面反映了PHP的需求以及学习的必要性&…

程序员的神器指南!揭秘软件开发必备工具

在软件开发的广袤海洋中&#xff0c;程序员们像是驾驶着帆船探索未知的航海者。他们面对的不仅仅是代码的挑战&#xff0c;还有项目管理、协作沟通和时间限制的压力。为了应对这些挑战&#xff0c;程序员们需要一系列强大的工具&#xff0c;就像是海中的指南针&#xff0c;帮助…

4.4网安学习第四阶段第四周回顾(个人学习记录使用)

本周重点 ①Linux系统提权 ②Linux权限维持 ③Windows 提权 ④Windows权限维持 ⑤SSRF利用 ⑥内网环境 ⑦内网扫描 ⑧漏洞利用 ⑨内网代理 ⑩获取主机控制权其他方案 ⑩①vuln靶场 ⑩②CS代理与ICMP隧道 本周主要内容 ①Linux系统提权 系统提权是成功入侵系统之…

PHPStudy 下载PHP提示“当前网络不稳定,下载失败”

错误信息 当前网络不稳定&#xff0c;下载失败 获取下载链接失败&#xff0c;请检查网络 假查网络 问题原因 xp.cn服务器的网络不稳定&#xff0c;不是你电脑的网络问题。 解决办法 第一步&#xff1a;下载现成的PHP文件 直接下载现成的文件&#xff0c;放到php目录。 将…

SparkSql介绍

概述 SparkSQL&#xff0c;顾名思义&#xff0c;就是Spark生态体系中的构建在SparkCore基础之上的一个基于SQL的计算模块。SparkSQL的前身不叫SparkSQL&#xff0c;而叫Shark&#xff0c;最开始的时候底层代码优化&#xff0c;sql的解析、执行引擎等等完全基于Hive&#xff0c…

避雷!这本7.7分毕业神刊,影响因子狂涨6.179,最新分区上升,却沦为风险期刊!

近日&#xff0c;科睿唯安又连续对多本期刊进行重新评估&#xff0c;多本「JCR Q1」沦为风险期刊。 值得注意的是&#xff0c;又一本中科院顶刊COMPUTERS IN BIOLOGY AND MEDICINE被打上“On Hold”标签&#xff0c;这是目前“黑名单”收入的第三本中科院TOP刊。 此前&#xff…

【Qt QML】ComboBox组件

ComboBox 是一个组合的按钮和弹出列表。它提供了一种以最小的屏幕空间呈现选项列表给用户的方式。ComboBox 使用数据模型填充。数据模型通常是一个 JavaScript 数组、一个 ListModel 或一个整数&#xff0c;但也支持其他类型的数据模型。 下面是一个简单的使用方式。 import …

【Three.js基础学习】15.scroll-based-animation

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 课程要点 结合html等场景 做滚动动画 1.遇到的问题&#xff0c; 在向下滚动时&#xff0c;下方会显白&#xff08;部分浏览器&#xff09; 解决&#xff1a;alpha:true …

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量&#xff0c;通过减少或消除背景噪声&#xff0c;使得语音更清晰&#xff0c;便于听者理解或进一步的语音处理任务&#xff0c;如语音识别和语音通讯。在许多实际应用中&#xff0c;如…