GhostNetV3 论文学习

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

解决了什么问题?

对于边端设备,人们特别设计了一些精简的神经网络,这些网络推理速度更快、表现适中。MobileNetV1 提出了深度可分离卷积,降低了计算开支。MobileNetV2 使用了残差连接,MobileNetV3 通过神经结构搜索技术进一步优化了架构配置,提升了模型表现。GhostNet 利用特征的冗余性,通过一些低成本的操作复用部分特征通道。GhostNetV2 进一步融合了硬件友好的注意力模块,获取远距离像素之间的关系,效果优异。但是这些网络的训练策略仍借鉴于传统的模型,这就忽视了它们在模型性能上的差异,可能制约精简模型的表现。

除了模型架构,适当的训练策略也至关重要。Wightman 等人通过优化器和数据增强方法将 ResNet-50 在 ImageNet-1K 的准确率从 76.1 % 76.1\% 76.1%提升到了 80.4 % 80.4\% 80.4%。但是,人们提出的训练策略很多是针对传统模型的,很少有针对精简模型的。不同性能的模型有不同的学习偏好。直接将传统模型的训练策略照搬在精简模型上是不恰当的。

重参数化

因为深度卷积和 1 × 1 1\times 1 1×1卷积的内存占用和计算量很小,经常用在精简模型架构。受到传统模型训练的启发,作者对这两个模块使用了重参数化,实现更好的表现。当训练精简模型时,作者在深度卷积和 1 × 1 1\times 1 1×1卷积中引入了线性平行的分支。训练完成后,对这些额外的分支做重参数化,推理时不会增加任何的开销。为了平衡整体的训练开销和表现增益,作者比较了不同数量分支的影响。此外,发现 1 × 1 1\times 1 1×1 深度卷积分支对 3 × 3 3\times 3 3×3 深度卷积的重参数化有正向作用。

知识蒸馏

由于模型能力有限,精简模型要想取得和传统模型一样的效果就很困难。知识蒸馏让一个更大的网络作为教师,指导精简模型的学习,能够提升表现。作者研究了对精简模型做知识蒸馏训练的几个因素,如教师模型的选取、超参数设定。结果表明,适当的教师模型能够极大地提升精简模型的表现。

学习策略和数据增强

作者比较了多个精简模型的训练策略,包括学习率、weight decay、指数滑动平均(EMA) 和数据增强。不是所有的策略都适合精简模型。例如,一些常用的数据增强方法如 Mixup 和 CutMix 会损害模型的表现。于是作者提出了适合精简模型训练的策略。

提出了什么方法?

本文系统地研究了不同训练要素的影响,提出了一个适合精简模型的训练策略。作者在 ImageNet-1K 数据集上的实验证明,该策略适合用于不同的架构,包括 GhostNetV3、MobileNetV2 和 ShuffleNetV2。在移动设备上,GhostNetV3 1.3 × 1.3\times 1.3× 取得了 79.1 % 79.1\% 79.1% 的 top-1 准确率,计算量只有 269M FLOPs,延迟为 14.46 毫秒。

GhostNets 在移动设备上取得了 SOTA 表现,核心模块就是 Ghost 模块,通过低成本操作产生更多的特征图,从而替代原有的特征图。传统卷积的输出特征图 Y Y Y 是通过 Y = X ∗ W Y=X\ast W Y=XW 实现,其中 W ∈ R c o u t × c i n × k × k W\in \mathbb{R}^{c_{out}\times c_{in} \times k\times k} WRcout×cin×k×k 是卷积核, X X X 是输入特征图。 c i n c_{in} cin c o u t c_{out} cout 是输入和输出通道维度。 k k k 是卷积核大小, ∗ \ast 表示卷积操作。Ghost 模块通过两个步骤降低传统卷积的参数量和计算量。首先,输出 intrinsic 特征 Y ′ Y' Y,通道数低于原有特征 Y Y Y。然后对 Y ′ Y' Y 使用低成本操作(如深度卷积),输出 ghost 特征 Y ′ ′ Y'' Y′′。最后,沿着通道维度 concat Y ′ Y' Y 和 ghost 特征得到最终的输出。表述如下:

Y ′ = X ∗ W p Y'=X \ast W_p Y=XWp
Y = C a t ( Y ′ , X ∗ W c ) Y=Cat(Y', X \ast W_c) Y=Cat(Y,XWc)

其中 W p W_p Wp W c W_c Wc 表示原卷积和低成本卷积的参数。堆叠多个 Ghost 模块就得到了 GhostNet 模型。

GhostNetV2 通过一个高效的注意力模块(DFC 注意力)增强了精简模型。GhostNet 通常使用的小卷积核,如 1 × 1 1\times 1 1×1 3 × 3 3\times 3 3×3,从输入特征提取全局信息的能力比较弱。GhostNetV2 使用了一个全连接层来捕捉远距离空间信息,产生注意力图。为了计算效率,它将全局信息解耦为水平和垂直方向,沿着这两个方向融合像素。如下图所示,Ghost 模块和 DFC 注意力能高效地提取出全局和局部信息,很好地平衡了准确率和计算复杂度。

训练策略

目的在不改变推理时网络结构的前提下,研究如何保持模型的大小和速度的训练策略。作者研究了学习策略、数据增强、重参数化和知识蒸馏。

重参数化

重参数化在传统卷积上已经证明了其作用。作者在精简模型上增加重复的分支(带 BN 层),对精简模型做重参数化。GhostNetV3 重参数化设计请参考上图 b。作者在重参数 3 × 3 3\times 3 3×3 深度卷积中引入了一个 1 × 1 1\times 1 1×1 深度卷积分支。推理时,通过一个逆重参数化的过程,该重复分支可以被去掉。由于在推理时卷积和 BN 操作都是线性操作,它们可以组合成一个卷积层,权重矩阵记做 W ^ ∈ R c o u t × c i n × k × k \widehat{\bm{W}}\in \mathbb{R}^{c_{out}\times c_{in}\times k\times k} W Rcout×cin×k×k,bias 记做 b ^ ∈ R c o u t \widehat{\bm{b}}\in \mathbb{R}^{c_{out}} b Rcout。然后合在一起的权重和 biases 可以重参数化成 W ^ r e p = ∑ i W ^ i \widehat{\bm{W}}_{rep}=\sum_i \widehat{\bm{W}}_i W rep=iW i 和 bias b r e p = ∑ i b ^ i \bm{b}_{rep}=\sum_i \widehat{b}_i brep=ib i,其中 i i i表示第几个重复分支。

知识蒸馏

KD 是模型压缩的常用方法,大教师模型预测的结果作为小型学生模型的学习目标。给定一个样本 x x x和标签 y y y,用 Γ s ( x ) \Gamma_s(x) Γs(x) Γ t ( x ) \Gamma_t(x) Γt(x)分别表示学生和教师模型预测的 logits,KD 的整体损失表示如下:

L t o t a l = ( 1 − α ) L c e ( Γ s ( x ) , y ) + α L k d ( Γ s ( x ) , Γ t ( x ) ) \mathcal{L}_{total}=(1-\alpha)\mathcal{L}_{ce}(\Gamma_s(x),y) + \alpha \mathcal{L}_{kd}(\Gamma_s(x),\Gamma_t(x)) Ltotal=(1α)Lce(Γs(x),y)+αLkd(Γs(x),Γt(x))

其中 L c e \mathcal{L}_{ce} Lce L k d \mathcal{L}_{kd} Lkd分别是交叉熵损失和 KD 损失。 α \alpha α是平衡参数。

通常 KD 损失使用 KL 散度函数表示,

L k d = τ 2 ⋅ KL ( softmax ( Γ s ( x ) ) / τ , softmax ( Γ t ( x ) ) / τ ) \mathcal{L}_{kd}=\tau^2 \cdot \text{KL}(\text{softmax}(\Gamma_s(x))/\tau, \text{softmax}(\Gamma_t(x))/\tau) Lkd=τ2KL(softmax(Γs(x))/τ,softmax(Γt(x))/τ)

其中 τ \tau τ是 label smoothing 调节参数。

学习策略

学习率是模型优化的重要参数。通常有两种策略: s t e p step step c o s i n e cosine cosine s t e p step step 策略线性地降低学习率,而 c o s i n e cosine cosine 则在开始时缓慢地降低学习率,在中期则几乎是线性地降低,在后期又变得缓慢。

EMA 是一个有效的提升测试准确率的方法,提升模型的鲁棒性。训练时,它逐渐地取模型参数的平均。假设 t t t步时模型的参数为 W t \bm{W}_t Wt,EMA 计算如下:

W ‾ t = β ⋅ W ‾ t − 1 + ( 1 − β ) ⋅ W ‾ t \overline{\bm{W}}_t=\beta \cdot \overline{\bm{W}}_{t-1} + (1-\beta)\cdot \overline{\bm{W}}_t Wt=βWt1+(1β)Wt

W ‾ t \overline{\bm{W}}_t Wt表示第 t t t 步时 EMA 模型的参数, β \beta β 是个超参数。

数据增强

数据增强能够提升传统模型的表现。AutoAug 收入了 25 种增强子策略组合,每个都包含2个变换。对于每个输入图像,随机选择一个子策略组合。图像混叠方法如 Mixup 和 CutMix 融合两张图像,生成一个新图像。Mixup 将两张图像和标签组合,训练网络。CutMix 随机去除图像上的一块区域,然后替换为另一张图像的一个区域。RandomErasing 随机选择图像上的一个矩形区域,替换成随机像素值。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++并发编程

基本介绍 线程 C98标准没有直接提供原生的多线程支持 在C98中&#xff0c;并没有像后来的C11标准中那样的<thread>库或其他直接的多线程工具 然而&#xff0c;这并不意味着在C98中无法实现多线程。开发者通常会使用平台特定的API&#xff08;如Windows的线程API或POSI…

【C/C++】动态内存管理(C:malloc,realloc,calloc,free || C++:new,delete)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C | | C语言 目录 前言C/C内存分布C语言中的动态内存管理&#xff1a;malloc/realloc/realloc/freemallocrealloccallocfree C中的动态内存管理&#xff1a;new/deletenew和delete操作内…

微信小程序:9.小程序配置

全局配置文件 小程序根目录下的app.json文件是小程序的全局配置文件。 常用的配置文件如下: pages 记录当前小程序所有的页面存放路径信息 window 全局设置小程序窗口外观 tabBar 设置小程序底部的tabBar效果 style 是否启用新版style 小程序窗口的组成部分 了解windo节点常…

HTTP:强缓存优化实践

强缓存&#xff1a;浏览器不会向服务器发送任何请求&#xff0c;直接从本地缓存中读取文件 强缓存是指浏览器在向服务器请求资源时&#xff0c;判断本地是否存在该资源的缓存&#xff0c;并判断是否过期。 如果本地缓存未过期&#xff0c;浏览器就直接使用本地缓存&#xff0c…

element 分页切换时:current-page无效 页数不会跟着一起切换

问题回溯&#xff1a;使用el-pagination组件 选择切换当前分页 页数为2 问题结果&#xff1a;el-pagination组件 当前页切换失败 一直都是 1&#xff0c;接口传参分页数据是2&#xff0c;打印当前分页也是2 解决方案1&#xff1a;使用 current-page参数 .sync 修饰符 解决方案2…

微信小程序简单实现购物车功能

微信小程序简单实现购物车结算和购物车列表展示功能 实现在微信小程序中对每一个购物车界面的商品订单&#xff0c;进行勾选结算和取消结算的功能&#xff0c;相关界面截图如下&#xff1a; 具体实现示例代码为&#xff1a; 1、js代码&#xff1a; Page({/*** 页面的初始数…

清理电脑垃圾软件

清理电脑垃圾软件 1.geek.exe 强力卸载 2. 磁盘分析 直接删除 log 磁盘文件大小分析工具WizTree_v4.01

TCP相关问题总结

文章目录 TCP连接建立过程1. TCP三次握手2. TCP四次挥手3. TCP为什么是三次握手4. TCP为什么是四次挥手 TCP流量控制TCP拥塞控制1. 为什么需要拥塞控制2. 控制手段 TCP连接建立过程中出现丢包 TCP连接建立过程 1. TCP三次握手 首先client端发出连接请求&#xff0c;并且请求同…

paddle ocr模型量化实践

参考&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/blob/main/deploy/slim/quantization/README.md https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/FAQ.md 蒸馏 剪枝 量化 参考&#xff1a;https://blog.csdn.net/mddCSDN/article/de…

高扬程水泵,提升水源新选择!— 恒峰智慧科技

在炎炎夏日&#xff0c;阳光炙烤着大地&#xff0c;森林火灾的发生频率也随之上升。火势猛烈&#xff0c;烟雾弥漫&#xff0c;给森林带来了极大的破坏。为了保护森林资源&#xff0c;我们必须采取有效的措施来扑灭火灾。而在这其中&#xff0c;高扬程水泵成为了提升水源新选择…

一种基于YOLOv8改进的高精度红外小目标检测算法 (原创自研)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;一种基于YOLOv8改进的高精度小目标检测算法&#xff0c; 在红外小目标检测任务中实现暴力涨点&#xff1b; &#x1f4a1;&#x1f4a1;&#x1f4a1;创新点&#xff1a; 1&#xff09;SPD-Conv特别是在处理低分…

手持LED弹幕,超炫特效,让你的每一次出场都耀眼夺目!

在这个快节奏的数字时代&#xff0c;沟通不再局限于言语和文字&#xff0c;就连表白、追星、晚会互动&#xff0c;甚至日常的提词都需要一点科技的火花来点燃气氛。于是&#xff0c;手持LED弹幕滚动屏&#xff0c;这个集实用与趣味于一身的神器&#xff0c;悄然成为了社交场上的…

c++图论基础(2)

目录 图的存储方式&#xff1a; 邻接矩阵&#xff1a; 代码实现&#xff1a; 邻接表&#xff1a; 代码实现&#xff1a; 邻接矩阵邻接表对比&#xff1a; 带权图&#xff1a; 邻接矩阵存储&#xff1a; 邻接表存储(代码实现)&#xff1a; 图的存储方式&#xff1a; 邻…

Python数组类+AI插件

目录 规划实现初始化插入删除查找 AI插件单测注释调优建议 小结 规划 先想清楚都写哪些&#xff0c;然后再动手操作 用Python写了一个简单数组类&#xff0c;首先思考下都写哪些功能&#xff1a; 插入删除查找用插件做单元测试和写注释 目的只是实现一个简单的数组类&#x…

android studio 编译一直显示Download maven-metadata.xml

今天打开之前的项目的时候遇到这个问题:android studio 编译一直显示Download maven-metadata.xml, AI 查询 报错问题&#xff1a;"android studio 编译一直显示Download maven-metadata.xml" 解释&#xff1a; 这个错误通常表示Android Studio在尝试从Maven仓库…

stm32单片机开发一、中断之外部中断实验

stm32单片机的外部中断和定时器中断、ADC中断等都由stm32的内核中的NVIC模块控制&#xff0c;stm32的中断有很多中&#xff0c;比如供电不足中断&#xff0c;当供电不足时&#xff0c;会产生的一种中断&#xff0c;这么多中断如果都接在CPU上&#xff0c;或者说CPU去处理&#…

Druid高性能数据库连接池?SpringBoot整合MyBatis整合SpringMVC整合Druid

文章目录 Druid高性能数据库连接池&#xff1f;SpringBoot整合MyBatis整合SpringMVC整合Druid异常记录spring-boot-starter-parent作用Druid介绍什么是数据库连接池&#xff1f;为什么选择Druid数据库连接池整合SpringBoot,MyBatis,SpringMVC,Druid到Maven项目的真个流程pom文件…

Django-admin组件

Django-admin组件 admin是django中提供的一套可视化工具&#xff1a;用于对ORM中定义的表进行增删改查。 1 概览 在django项目启动时&#xff0c;自动找到注册到admin中的所有model中定义的类&#xff0c;然后为这些类生成一系列的URL和视图函数&#xff0c;实现基本增删改查…

Kafka 3.x.x 入门到精通(06)——Kafka进阶

Kafka 3.x.x 入门到精通&#xff08;06&#xff09;&#x1f449;&#x1f449;&#x1f449;&#x1f449; Kafka进阶 3. Kafka进阶3.1 Controller选举3.2 Broker上线下线3.3 数据偏移量定位3.4 Topic删除3.5 日志清理和压缩3.7 页缓存3.8 零拷贝3.9 顺写日志3.10 Linux集群部…

串口通信标准RS232 RS485 RS422的区别

很多工程师经常把RS-232、RS-422、RS-485称为通讯协议&#xff0c;其实这是不对的&#xff0c;它们仅仅是关于串口通讯的一个机械和电气接口标准&#xff08;顶多是网络协议中的物理层&#xff09;&#xff0c;不是通讯协议&#xff0c;那它们又有哪些区别呢&#xff1a; 第一…