轻量级模型解读——GhostNet系列

news2024/11/15 9:40:11

GhostNet由华为诺亚方舟实验室于2019年11月底提出,投稿于cvpr2020,后面2022年,2024年相继提出更新版本GhostNetv2和GhostNetv3。

它们参数量、复杂度及ImageNet的top1结果对比情况如下:
在这里插入图片描述


文章目录

  • 1、GhostNetv1
    • 1.1 Ghost Module
    • 1.2 实验
  • 2、GhostNetv2
    • 2.1 DFC注意力模块
  • 3、GhostNetv3


1、GhostNetv1

论文地址:https://arxiv.org/abs/1911.11907
代码:https://github.com/huawei-noah/ghostnet

由于内存和计算资源的限制,深度学习模型在嵌入式移动端部署是比较困难的,它要求模型既要计算量小又要精度高。以往的方式大多是通过减少模型的冗余特征来缩小模型,例如剪枝、模型压缩等,这些方式都会一定程度上损失精度。作者意识到特征图的冗余性是精度的必要保证,一定程度的特征冗余是对模型有利的。作者通过分析ResNet50某层生成的特征图看到,特征图之间的冗余,一个特征图可通过另一个特征图简单变换就可以得到,如下图:
在这里插入图片描述
所以作者想通过简单的操作替代常规卷积生成的冗余特征,这个简单的操作就是某种线性变换(其实卷积就是一直线性变换),而这种线性变换通过作者提供的代码可以看出就是depthwise卷积。 题外话,网上很多人说这个改进很“灌水”,但我认为能从特征图冗余性出发考虑改进的点很新颖,为了精简模型,大家默认做法都是尽量去掉冗余特征图,而作者却认为冗余特征图也需要保留,虽然作者提出的改进的方式没有太多创新性,但能发现从哪里改进,这才是论文最大的贡献。

1.1 Ghost Module

论文最大创新点就是提出了Ghost module,它和常规卷积的对比如下图所示:
在这里插入图片描述
对于相同的输入X∈Rcxhxw,输出Y∈Rnxh’x w’ ,上图(a)的常规卷积f可表示为f∈Rcxkxkxn,而图(b)的Ghost模块中卷积f’可表示为f’∈Rcxkxkxm,这里m≦n,代码中m等于n/2,后面的Ф操作是对前一层特征图结果的线性变换,最后两者再concat组合。看代码比较清晰,如下图:
在这里插入图片描述
在得到相同通道输出条件下,和常规卷积比较,Ghost确实可以减少参数量,也加深了网络深度,这可能就是网络能保持精度不下降的原因吧。

Ghost bottleneck的结构如下:
在这里插入图片描述
左图为stride=1,即输入输出特征图大小一致,右图为stride=2,即对输入特征图做两倍下采样。
整体GhostNet结构如下:
在这里插入图片描述

1.2 实验

GhostNet与其他轻量级模型在ImageNet数据集上的比较结果:
在这里插入图片描述
GhostNet与其他轻量级模型的TFLite版本在基于arm的手机端推理耗时情况如下,可以看出,GhostNet是比MobileNetv3又快又好的。
在这里插入图片描述


2、GhostNetv2

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

GhostNetv2发表于NeurIPS 2022,是GhostNet的改进版本,作者注意到卷积运算只能捕获窗口区域的局部信息,阻碍了性能的进一步提高,所以在卷积中引入自注意机制捕获全局信息,为了不增加耗时,作者提出了DFC attention模块,该方法基于全连接层,不仅可以在普通硬件上快速执行,而且可以捕获远程像素之间的依赖关系。通过引入DFC attention得到GhostNetv2,在ImageNet数据集上精度及推理耗时都得到了进一步改进,如下图:
在这里插入图片描述
基于注意力的方面最近被引入图像识别领域,比如ViT、MobileViT等,典型的注意力模块通常具有与特征大小相关的二次复杂度,这导致在下游任务如目标检测/分割等不能应用高分辨率去推导。作者为了验证加入注意力机制的影响,为GhostNet模型加入了MobileViT中使用的自注意力模块,并使用TFLite工具测量华为P30(麒麟980 CPU)上的延迟。结果表明加入的注意机制只增加20%的理论FLOPs,但在移动设备上却需要2倍的推理时间。理论复杂度与实际复杂度之间的巨大差异表明,有必要设计一种硬件友好的注意力机制,以便在移动设备上快速实现,所以作者后面提出了DFC注意力模块。
在这里插入图片描述

2.1 DFC注意力模块

作者在论文中给出了DFC注意力的示意图,如下图所示
在这里插入图片描述
操作流程和下面的框架流程图也一致;即特征图先经过一个下采样,然后经过1x1点卷积,然后用水平方面的全连接和垂直方向的全连接提取两个方向上的重要程度,最后经过sigmoid激活将数值变成0到1的范围,这个DFC attention的结果最后会作为权重同Ghost Module的结果相乘得到最终的结果。
在这里插入图片描述

直接看代码更容易理解,代码中水平方向全连接以及垂直方向全连接用了(1,5)大小的卷积和(5,1)大小的卷积代替。
在这里插入图片描述
GhostNetv2和其他轻量化模型在ImageNet数据集上表现为:
在这里插入图片描述
可以看到GhostNetv2相较于v1版本是有提升,但不多。


3、GhostNetv3

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

轻量型模型主要是为了能在边缘设备上应用而设计的,然而目前轻量型模型的设计及训练方式还是沿用之前的传统神经网络经验,这忽略了它们之间模型容量的差异性,不同的模型容量可能具有不同的学习偏好,直接沿用训练传统模型经验可能阻碍轻量型模型的性能提升。
作者通过实验发现,重参数化、知识蒸馏对训练高性能轻量型模型非常重要,但是像训练传统模型那样的数据增强方法如:Mixup和CutMix会使得模型性能下降。具体如下:

重参数化设计
GhostNetv3通过在训练中增加多个分支,推理时通过重参数化将分支合并的策略,如下图所示,对于3x3的Depthwise卷积,训练时通过增加多个相同的分支,并且增加identity分支,推理时通过重参数化合并成单个3x3的Depthwise卷积;对于1x1的卷积也采用相同的做法。
在这里插入图片描述

通过增加分支,训练中可以学习到多样化的特征,提升模型的特征表达性,推理时重参数化为一个分支,不增加模型推理耗时,实验中作者发现直连(identity)分支对提升模型性能具有正面作用。下表是GhostNetv3不同规模模型不做重参数化和做重参数化的性能对比情况,可以看出,模型做了重参数化提升很大。
在这里插入图片描述

知识蒸馏
为进一步提升模型性能,GhostNetV3采用了知识蒸馏技术,通过模仿教师模型的输出分布,指导小型模型学习到更丰富的特征表示,提升了模型的性能。作者以ResNet-101(77.4%),DeiT-B(81.8%),BeiTV2-B(86.5%)分别作为教师模型,指导GhostNetV3学习,实验结果如下:
在这里插入图片描述
可以看到,GhostNetV3是上限性能取决于教师模型的性能。

学习策略
模型训练时的学习率是非常重要的,学习率下降策略通常有step下降和余弦下降策略,以及weight decay参数对模型正则化的影响,指数移动平均(EMA)最近成为一种有效的方法来提高验证精度和增加模型的鲁棒性。作者旨在这些训练策略上找到最优组合,提升模型性能。

数据增强
基于训练传统深度学习模型的经验,数据增强能提升模型性能,常见数据增强有AutoAug方案,RandomAug方案,Mixup,CutMix,RandomErasing等,作者评估了上述数据增强的各种组合,分析了几种常用的数据增强方法,用于训练传统模型如Mixup和CutMix的数据增强方式,不合适用于训练轻量型模型。
在这里插入图片描述

GhostNetV3及其他轻量级模型的FLOPs比较,以及其TFLite版本在windows CPU和华为手机Mate40Pro(麒麟9000CPU)的耗时情况如下图所示:
在这里插入图片描述

GhostNetv3和其他轻量级模型在ImageNet数据集上的比较情况如下:
在这里插入图片描述

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

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

相关文章

如何阅读李冬梅老师《数据结构》

根据《如何阅读一本书》第五章:主动阅读的基础:阅读者要提出的4个基本问题? 以第2章,线性表为例: (1)本章主要在谈些什么?例如第二章简介,读完这一章可以自己试着写个简…

基于STM32设计的18650锂电池电量(电压/电流)检测系统——采用电阻分压法、均值滤波及ADC测量—文末工程资料下载

基于STM32设计的锂电池电量(电压/电流)检测 前言:使用STM32F103C8T6的ADC,和电阻分压法及均值滤波来测量18650锂电池的电压,并在OLED显示屏上显示电池电压值,求出电池电压值即求出电池的电流值和电量值。本…

数据库系统概论笔记(持续更新)

一、概念 1、数据 数据库中存储的基本对象。 2、数据库 定义:长期存储在计算机内、有组织、可共享的大量数据的集合。 3、数据库管理系统 定义:是位于用户与操作系统之间的一层数据管理软件。 主要功能: 1) 数据定义功能 …

C++ | Leetcode C++题解之第395题至少有K个重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestSubstring(string s, int k) {int ret 0;int n s.length();for (int t 1; t < 26; t) {int l 0, r 0;vector<int> cnt(26, 0);int tot 0;int less 0;while (r < n) {cnt[s[r] - a];…

QStackedWidget类的使用

本文介绍QStackedWidget类的使用。 StackedWidget控件在Qt应用程序开发过程中用的还是比较多的&#xff0c;配合按钮可以实现多个页面之间相互切换&#xff0c;方便了应用程序的开发&#xff0c;本文简要介绍QStackedWidget类实际使用过程中的常用方法&#xff0c;并给出一个简…

Matlab -- meshgrid和peaks的用法

最近在看到关于三维路径规划方面中&#xff0c;提到使用了样条插值的方法&#xff0c;其中提到了meshgrid和peaks。也查阅了相关资料&#xff0c;现将查阅的资料整理如下。 1 meshgrid函数 该函数是网格采样点的函数。 主要使用的函数为[X,Y]meshgrid(xgv,ygv); meshgrid函数…

华为OD机试真题 - 矩阵匹配 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

华为OD机试 - 跳房子I(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

高效驱动之选 ——KP85211ASGA 半桥栅极驱动器 内置互锁死区

KP85211A是一款 225V 耐压&#xff0c;具有 1A 拉电流和 1.5A 灌电流能力的半桥栅极驱动器&#xff0c;专用于驱动功率MOSFET或IGBT。采用高压器件工艺技术&#xff0c;具有良好的电流输出及出色的抗瞬态干扰能力。可保证开关节点 VS 瞬态 -7V 情况下系统正常工作。可支持开关节…

SpringBoot自定义启动器(自定义Starter)

一、如何理解 SpringBoot 的 starter 机制 Spring Boot 的 Starter 机制是其简化开发流程的关键特性之一。通过提供 预配置的依赖项 和 自动配置 支持&#xff0c;这一机制极大地简化了项目的依赖管理和配置工作&#xff0c;使得开发者可以更快地搭建应用程序框架&#xff0c;…

【系统分析师】计算机组成与体系架构

计算机硬件组成&#xff0c;运算器&#xff0c;控制器 计算机基本硬件系统五大组成部分&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;I/O设备 运算器的四个重要寄存器&#xff1a; 算术逻辑单元&#xff08;实时对数据的算术和逻辑运算&#xff0c;…

C语言 ——— 学习并使用 #if defined #ifdef #ifndef 条件编译指令

目录 学习 #if defined #ifdef #ifndef 条件编译指令 使用 #if defined 和 #ifdef 条件编译指令 使用 #ifndef 条件编译指令 学习 #if defined #ifdef #ifndef 条件编译指令 #if #ifndef 条件编译指令是用来判断某个符号是否被定义过&#xff0c;被定义过的话就为真&#x…

代码随想录冲冲冲 Day41 动态规划Part9

188. 买卖股票的最佳时机 IV 昨天题目是买卖两次&#xff0c;这里是设定好k次 2次的时候一共包含了5中情况 那么k次就包含了2 k 1种情况 初始化只有1 &#xff0c; 3 &#xff0c;5 也就是买入的状况是有值的&#xff0c;所以初始化时候只需要看这些情况知道2 k 之后只要把…

C++11(2)

目录 6。左值引用和右值引用 下面演示左值和左值引用&#xff1a; 下面演示右值和右值引用&#xff1a; 7。移动构造和移动赋值 VS2022的神级优化 List下的移动构造拷贝和深拷贝(实战) 证明&#xff1a;左值是由编译器决定的 附加&#xff1a;自己实现的List.h 6。左值引…

欺诈文本分类检测(十四):GPTQ量化模型

1. 引言 量化的本质&#xff1a;通过将模型参数从高精度&#xff08;例如32位&#xff09;降低到低精度&#xff08;例如8位&#xff09;&#xff0c;来缩小模型体积。 本文将采用一种训练后量化方法GPTQ&#xff0c;对前文已经训练并合并过的模型文件进行量化&#xff0c;通…

fuxa搭建与使用(web组态)

1. 安装Node.js -> npm安装 参考网址&#xff1a;https://blog.csdn.net/WHF__/article/details/129362462 一、安装运行 C:\WINDOWS\system32>node -v v20.17.0 C:\WINDOWS\system32>npm -v 10.8.2 二、环境配置 在安装路径&#xff08;D:\Program_Files\nodejs&a…

打开VSCod安装“PHP Intelephense”或“PHP Server”PHP扩展

安装PHP扩展&#xff1a; 打开VSCode&#xff0c;进入扩展视图&#xff08;或使用快捷键CtrlShiftX&#xff09;。搜索并安装“PHP Intelephense”或“PHP Server”等PHP相关扩展&#xff0c;这些扩展提供了PHP代码的智能感知、代码导航、调试等功能。 配置PHP路径&#xff1a;…

第2章 方法

本书作者起初以为仅靠研究命令行工具和指标就能提高性能。他认为这样不对。他从头到尾读了一遍手册&#xff0c;看懂了缺页故障、上下文切换和其他各种系统指标的定义&#xff0c;但不知道如何处理它们&#xff1a;如何从发现信号到找到解决方案。 他注意到&#xff0c;每当出…

第 8 章图像内容分类

本章介绍图像分类和图像内容分类算法。首先&#xff0c;我们介绍一些简单而有效的方法和目前一些性能最好的分类器&#xff0c;并运用它们解决两类和多类分类问题&#xff0c;最后展示两个用于手势识别和目标识别的应用实例。 8.1 K邻近分类法&#xff08;KNN&#xff09; 在…

2024最新精选文章!分享5款论文ai生成软件

在2024年&#xff0c;AI论文生成软件的出现极大地提升了学术写作的效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是五款值得推荐的AI论文生成软件&#xff0c;其中特别推荐千笔-AIPassPaper。 ### 千笔-AIPa…