【保姆级教程|YOLOv8改进】【5】精度与速度双提升,使用FasterNet替换主干网络

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】

《------正文------》

前言

论文发表时间:2023.03.07

github地址:https://github.com/JierunChen/FasterNet
paper地址:https://export.arxiv.org/pdf/2303.03667v1.pdf

在这里插入图片描述

文章提出了一种新颖的局部卷积(PConv),它通过削减冗余计算和内存访问,更高效地提取空间特征,而且在作者测试的数据集上实现了精度与速度的双重提升。本文详细介绍了如何在yolov8中使用FasterNet替换其主干网络,并且使用修改后的yolov8进行目标检测训练与推理本文提供了所有源码免费供小伙伴们学习参考,需要的可以通过文末方式自行下载。

本文改进使用的ultralytics版本为:ultralytics == 8.0.227

目录

  • 前言
  • 1.FasterNet简介
    • 1.1 网络结构
    • 1.2 性能对比
  • 2.YOLOv8替换主干步骤
    • YOLOv8网络结构前后对比
    • 定义FasterNet相关类
    • 修改指定文件
  • 3.加载配置文件并训练
  • 4.模型推理
  • 【源码免费获取】
  • 结束语

1.FasterNet简介

在这里插入图片描述

摘要:为了设计快速的神经网络,许多研究工作一直专注于减少浮点运算(FLOPs)的数量。然而,我们观察到,FLOPs的这种减少,并不一定导致相似水平的延迟降低。这主要是由于低效的每秒浮点运算数(FLOPS)造成的。为了实现更快的网络,我们重审了流行的运算符,并演示了这种低FLOPS主要是由于运算符的频繁内存访问,特别是深度卷积。因此,我们提出了一种新颖的局部卷积(PConv),它通过削减冗余计算和内存访问,更高效地提取空间特征。在我们的PConv上,我们进一步提出了FasterNet,一个新的神经网络家族,它在广泛的设备上实现了比其他网络更高的运行速度,同时在各种视觉任务上的精度不打折扣。例如,在ImageNet-1k上,我们的小型FasterNet-T0在GPU、CPU和ARM处理器上分别比MobileViT-XXS快3.1倍、3.1倍和2.5倍,同时精度提高了2.9%。我们的大型FasterNet-L取得了令人印象深刻的83.5%的top-1精度,与新兴的Swin-B不相上下,同时在GPU上的推理吞吐量提高了49%,以及在CPU上节省了42%的计算时间。

论文主要亮点如下:

• 强调了为了实现更快的神经网络,提升每秒浮点运算数(FLOPS)的重要性,而不仅仅是减少FLOPs。
• 引入了一个简单但快速且有效的运算符,称为PConv,它具有很高的潜力来替代现有的首选选项,即深度卷积(DWConv)。
• 介绍了FasterNet,它在GPU、CPU和ARM处理器等各种设备上都能流畅且普遍地快速运行。
• 在各种任务上进行了广泛的实验,并验证了我们的PConv和FasterNet的高速度和有效性。

1.1 网络结构

在这里插入图片描述
在这里插入图片描述

1.2 性能对比

在这里插入图片描述
在这里插入图片描述

2.YOLOv8替换主干步骤

YOLOv8网络结构前后对比

在这里插入图片描述

定义FasterNet相关类

ultralytics/nn/modules/block.py中添加如下代码块,为FasterNet源码:
在这里插入图片描述
并在ultralytics/nn/modules/block.py中最上方添加如下代码:
在这里插入图片描述

修改指定文件

ultralytics/nn/modules/__init__.py文件中的添加如下代码:
在这里插入图片描述

ultralytics/nn/tasks.py 上方导入相应类名,并在parse_model解析函数中添加如下代码:
在这里插入图片描述

        elif m in [BasicStage]:args.pop(1)

在这里插入图片描述

ultralytics/nn/tasks.py 中搜索self.model.modules(),定位到如下代码,并且在下方添加如下方框中的代码内容:
在这里插入图片描述

ultralytics/cfg/models/v8文件夹下新建yolov8-FasterNet.yaml文件,内容如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, PatchEmbed_FasterNet, [40, 4, 4]]  # 0-P1/4- [-1, 1, BasicStage, [40, 1]]  # 1- [-1, 1, PatchMerging_FasterNet, [80, 2, 2]]  # 2-P2/8- [-1, 2, BasicStage, [80, 1]]  # 3-P3/16- [-1, 1, PatchMerging_FasterNet, [160, 2, 2]]  # 4- [-1, 8, BasicStage, [160, 1]]  # 5-P4/32- [-1, 1, PatchMerging_FasterNet, [320, 2, 2]] # 6- [-1, 2, BasicStage, [320, 1]] # 7- [-1, 1, SPPF, [320, 5]]  # 8# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 5], 1, Concat, [1]]  # cat backbone P4- [-1, 1, C2f, [512]]  # 11- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 3], 1, Concat, [1]]  # cat backbone P3- [-1, 1, C2f, [256]]  # 14 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 11], 1, Concat, [1]]  # cat head P4- [-1, 1, C2f, [512]]  # 17 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 8], 1, Concat, [1]]  # cat head P5- [-1, 1, C2f, [1024]]  # 20 (P5/32-large)- [[14, 17, 20], 1, Detect, [nc]]  # Detect(P3, P4, P5)

3.加载配置文件并训练

加载yolov8-BiLevelRoutingAttention.yaml配置文件,并运行train.py训练代码:

#coding:utf-8
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('ultralytics/cfg/models/v8/yolov8-FasterNet.yaml')model.load('yolov8n.pt') # loading pretrain weightsmodel.train(data='datasets/TomatoData/data.yaml', epochs=30, batch=4)

注意观察,打印出的网络结构是否正常修改,如下图所示:
在这里插入图片描述

4.模型推理

模型训练完成后,我们使用训练好的模型对图片进行检测:

#coding:utf-8
from ultralytics import YOLO
import cv2# 所需加载的模型目录
# path = 'models/best2.pt'
path = 'runs/detect/train/weights/best.pt'
# 需要检测的图片地址
img_path = "TestFiles/Riped tomato_8.jpeg"# 加载预训练模型
# conf	0.25	object confidence threshold for detection
# iou	0.7	intersection over union (IoU) threshold for NMS
model = YOLO(path, task='detect')# 检测图片
results = model(img_path)
res = results[0].plot()
# res = cv2.resize(res,dsize=None,fx=2,fy=2,interpolation=cv2.INTER_LINEAR)
cv2.imshow("YOLOv8 Detection", res)
cv2.waitKey(0)

在这里插入图片描述

【源码免费获取】

为了小伙伴们能够,更好的学习实践,本文已将所有代码、示例数据集、论文等相关内容打包上传,供小伙伴们学习。获取方式如下:

关注下方名片G-Z-H:【阿旭算法与机器学习】,发送【yolov8改进】即可免费获取

在这里插入图片描述


结束语

关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!

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

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

相关文章

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语,用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法,即 Do,该方法接收一个函数参数。在 Do 方法被调用后,该函数将被执行,而且只会执行一…

C语言第十九弹---指针(三)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 指针 1、数组名的理解 2、使用指针访问数组 3、⼀维数组传参的本质 4、冒泡排序 5、二级指针 6、指针数组 7、指针数组模拟二维数组 总结 1、数组名的理解…

flutter go_router 官方路由(一)基本使用

1 项目中添加最新的依赖 go_router: ^13.1.0如下图所示,我当前使用的flutter版本为3.16.0 然后修改应用的入口函数如下: import package:flutter/material.dart; import package:go_router/go_router.dart;void main() {runApp(const MyApp()); }cla…

好看的安全跳转单页html源码

好看的安全跳转单页html源码,效果如下 代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <!--[if IE 8]><style>.ie8 .alert-circle,.ie8 .alert-footer{display:none}.ie8 .alert-box{padding-top:…

使用easyExcel 定义表头 字体 格式 颜色等,定义表内容,合计

HeadStyle 表头样式注解 HeadFontStyle 表头字体样式 HeadStyle(fillPatternType FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor 22) HeadFontStyle(fontHeightInPoints 12) 以下为实现效果

轻型民用无人机驾驶航空器安全操控——理论考试多旋翼部分笔记

今天已经可以在线考取轻型民用无人机驾驶航空器执照了&#xff0c;所以我也在在线观看完视频之后整理了如下的知识点&#xff0c;所有知识点全部来自UOM平台。 目录 航空器知识 &#xff08;1&#xff09;多旋翼民用无人驾驶航空器螺旋桨的作用 &#xff08;2&#x…

Kuberntes权威指南

一、目录 二、Kubernetes入门 三、Kubernetes核心原理 四、Kubernetes开发指南 五、Kubernetes运维指南 六、Kubernetes高级案例进阶 七、Kubernetes源码导读

学习Spring的第十六天

AOP底层两种生成Proxy的方式 我来解释这两种方式 1 目标类有接口 , 调用JDK的动态代理实现 2 目标类没有接口 , 用Cglib实现 , 即生成目标类的子类 , 来实现动态代理 , 所以要求目标类不能时final修饰的 . (若有接口 , 也可用Cglib方式实现 , 需要手动配置<aop: config pr…

Linux自有服务与软件包管理

这次来学习一下Linux自有服务与软件包管理相关内容&#xff0c;如下。 一、systemctl管理系统服务 什么是Linux自有服务&#xff1f; 服务是一些特定的进程&#xff0c;自有服务就是系统开机后就自动运行的一些进程&#xff0c;一旦客户发出请求&#xff0c;这些进程就自动为…

[基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}

文章目录 1. 再识重定向2.浅谈perror()3.初始文件系统4.软硬链接 1. 再识重定向 图解./sf > file.txt 2>&1 1中内容拷贝给2 使得2指向file 再学一个 把file的内容传给cat cat拿到后再给file2 2.浅谈perror() open()接口调用失败返回-1,并且错误码errno被适当的设置,…

SSL协议是什么?关于SSL和TLS的常见问题解答

SSL&#xff08;安全套接字层&#xff09;及其后继者TLS&#xff08;传输层安全&#xff09;是用于在联网计算机之间建立经过身份验证和加密的链接的协议。尽管SSL协议在 1999年已经随着TLS 1.0的发布而被弃用&#xff0c;但我们仍将这些相关技术称为“SSL”或“SSL/TLS”。那么…

python flask 魔术方法

魔术方法作用_init_对象的初始化方法_class_返回对象所属的类_module_返回类所在的模块_mro_返回类的调用顺序&#xff0c;可以找到其父类&#xff08;用于找父类&#xff09;_base_获取类的直接父类&#xff08;用于找父类&#xff09;_bases_获取父类的元组&#xff0c;按它们…

springboot集成easypoi导出多sheet页

pom文件 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version> </dependency> 导出模板&#xff1a; 后端代码示例&#xff1a; /*** 导出加油卡进便利店大额审批列…

JRT监听程序

本次设计避免以往设计缺陷&#xff0c;老的主要为了保持兼容性&#xff0c;在用的设计就不好调了。 首先&#xff0c;接口抽象时候就不在给参数放仪器ID和处理类了&#xff0c;直接放仪器配置实体&#xff0c;接口实现想用什么属性就用什么属性&#xff0c;避免老方式要扩参数时…

5-4、S加减单片机程序【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍实现步进电机S曲线运动的代码 一、目标功能 实现步进电机转动总角度720&#xff0c;其中加减速各90 加速段&#xff1a;加速类型&#xff1a;S曲线  加速角度&#xff1a;角度为90  起步速度…

微软Windows生态是怎么打造成功的?

&#xff08;1&#xff09;2015年Windows10&#xff1a;兼容性 我不得不再次佩服一下微软&#xff0c;Windows10是2015年出品的&#xff0c;但是仍然能正常运行绝大多数的Windows95软件&#xff0c;不用做任何的适配修改&#xff0c;连重新编译都不用&#xff0c;运行照样正常。…

视觉SLAM十四讲学习笔记(一)初识SLAM

目录 前言 一、传感器 1 传感器分类 2 相机 二、经典视觉 SLAM 框架 1 视觉里程计 2 后端优化 3 回环检测 4 建图 5 SLAM系统 三、SLAM 问题的数学表述 四、Ubuntu20.04配置SLAM十四讲 前言 SLAM: Simultaneous Localization and Mapping 同时定位与地图构建&#…

SSRF漏洞给云服务元数据带来的安全威胁

文章目录 前言元数据服务威胁1.1 Metadata元数据1.2 RAM资源管理角色1.3 STS 临时凭据利用1.4 CF云环境利用框架1.5 元数据安全性增强 TerraformGoat2.1 永久性AccessKey2.2 SSRF靶场环境搭建2.3 腾讯云CVM配角色2.4 接管腾讯云控制台 SSRF组合拳案例3.1 上传图片功能SSRF3.2 文…

DataX详解和架构介绍

系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录DataX是什么&#xff1f…

外包干了10个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…