当前位置: 首页 > news >正文

保姆级教程|YOLO11改进】【卷积篇】【4】使用RFAConv感受野注意力卷积,重塑空间特征提取,助力高效提点

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

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

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于深度学习的行人跌倒检测系统】
9.【基于深度学习的PCB板缺陷检测系统】10.【基于深度学习的生活垃圾分类目标检测系统】
11.【基于深度学习的安全帽目标检测系统】12.【基于深度学习的120种犬类检测与识别系统】
13.【基于深度学习的路面坑洞检测系统】14.【基于深度学习的火焰烟雾检测系统】
15.【基于深度学习的钢材表面缺陷检测系统】16.【基于深度学习的舰船目标分类检测系统】
17.【基于深度学习的西红柿成熟度检测系统】18.【基于深度学习的血细胞检测与计数系统】
19.【基于深度学习的吸烟/抽烟行为检测系统】20.【基于深度学习的水稻害虫检测与识别系统】
21.【基于深度学习的高精度车辆行人检测与计数系统】22.【基于深度学习的路面标志线检测与识别系统】
23.【基于深度学习的智能小麦害虫检测识别系统】24.【基于深度学习的智能玉米害虫检测识别系统】
25.【基于深度学习的200种鸟类智能检测与识别系统】26.【基于深度学习的45种交通标志智能检测与识别系统】
27.【基于深度学习的人脸面部表情识别系统】28.【基于深度学习的苹果叶片病害智能诊断系统】
29.【基于深度学习的智能肺炎诊断系统】30.【基于深度学习的葡萄簇目标检测系统】
31.【基于深度学习的100种中草药智能识别系统】32.【基于深度学习的102种花卉智能识别系统】
33.【基于深度学习的100种蝴蝶智能识别系统】34.【基于深度学习的水稻叶片病害智能诊断系统】
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于深度学习的智能草莓病害检测与分割系统】
37.【基于深度学习的复杂场景下船舶目标检测系统】38.【基于深度学习的农作物幼苗与杂草检测系统】
39.【基于深度学习的智能道路裂缝检测与分析系统】40.【基于深度学习的葡萄病害智能诊断与防治系统】
41.【基于深度学习的遥感地理空间物体检测系统】42.【基于深度学习的无人机视角地面物体检测系统】
43.【基于深度学习的木薯病害智能诊断与防治系统】44.【基于深度学习的野外火焰烟雾检测系统】
45.【基于深度学习的脑肿瘤智能检测系统】46.【基于深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于深度学习的橙子病害智能诊断与防治系统】48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】74.【基于深度学习的水面垃圾智能检测识别系统】
75.【基于深度学习的遥感视角船只智能检测系统】76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统】
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】
79.【基于深度学习的果园苹果检测与计数系统】80.【基于深度学习的半导体芯片缺陷检测系统】
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统】82.【基于深度学习的运动鞋品牌检测与识别系统】
83.【基于深度学习的苹果叶片病害检测识别系统】84.【基于深度学习的医学X光骨折检测与语音提示系统】
85.【基于深度学习的遥感视角农田检测与分割系统】86.【基于深度学习的运动品牌LOGO检测与识别系统】
87.【基于深度学习的电瓶车进电梯检测与语音提示系统】88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统】
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统】90.【基于深度学习的舌苔舌象检测识别与诊断系统】
91.【基于深度学习的蛀牙智能检测与语音提示系统】92.【基于深度学习的皮肤癌智能检测与语音提示系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

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

目录

  • 1.引言
  • 2.注意力介绍
  • 3.源码修改步骤
    • 1. 新建文件
    • 2.修改task.py文件
  • 4.修改网络配置文件
    • 1. 在替换主干中的卷积
  • 5.模型训练
  • 6.免费获取源码

1.引言

本文主要详细介绍如何用更高效的卷积模块替换YOLO11网络结构中的部分常规卷积模块,从而达到改进性能的目的,供小伙伴们参考。
YOLO11原始网络结构图如下:
在这里插入图片描述

2.注意力介绍

关于RFAConv感受野注意力卷积源码与详细介绍可以参考之前分享的文章《【即插即用涨点模块】RFAConv感受野注意力卷积:突破卷积参数共享瓶颈,感受野注意力重塑空间特征提取【附源码】》,此处不再赘述。

3.源码修改步骤

使用的ultralytics版本号:ultralytics==8.3.127

在YOLO11源码中添加并修改相应的模块内容,用于后续网络结构配置文件的修改,详细步骤如下:

1. 新建文件

在YOLO11源码的ultralytics/nn的目录下新建Convs文件用于存放所有的卷积相关源码,然后在Convs目录下新建RFAConv.py文件,并将卷积源码【见第2节】复制到该文件中。
在这里插入图片描述

ultralytics/nn/Convs目录下新建__init__.py文件,并导入模块。如下:
在这里插入图片描述

2.修改task.py文件

首先在ultralytics/nn/tasks.py中导入已经创建好的卷积模块。
在这里插入图片描述

然后,在ultralytics/nn/tasks.py中搜索parse_model网络结构解析函数。
在这里插入图片描述
parse_model函数中的base_modules集合里加上模块名称即可,用于解析我们新建的模块内容,如下:
在这里插入图片描述

到此,所有的源码修改部分到此结束。下面我们就可以在我们的网络结构中,进行相应的模块配置。

4.修改网络配置文件

下面我们对YOLO11网络结构中的部分卷积进行替换,当然也可以替换C3k2SPPFC2PSA等模块内部替换卷积。此处以替换主干网络结构中的卷积为例。

1. 在替换主干中的卷积

我们在ultralytics/cfg/models/11下新建一个网络结构配置文件yolo11-RFAConv.yaml。然后写入如下内容:
在这里插入图片描述

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 181 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss: [0.50, 0.50, 1024] # summary: 181 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm: [0.50, 1.00, 512] # summary: 231 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl: [1.00, 1.00, 512] # summary: 357 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx: [1.00, 1.50, 512] # summary: 357 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, RFAConv, [128, 3, 2]] # 1-P2/4- [-1, 2, C3k2, [256, False, 0.25]]- [-1, 1, RFAConv, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2, [512, False, 0.25]]- [-1, 1, RFAConv, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2, [512, True]]- [-1, 1, RFAConv, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

修改前后网络结构对比如下:
在这里插入图片描述

5.模型训练

使用修改后的模型网络结构进行模型训练,只需修改一下网络结构配置文件路径model_yaml_path即可。

#coding:utf-8
from ultralytics import YOLO
import matplotlib
matplotlib.use('TkAgg')# 模型配置文件
model_yaml_path = "ultralytics/cfg/models/11/yolo11-RFAConv.yaml"
#数据集配置文件
data_yaml_path = 'datasets/GrapeData/data.yaml'if __name__ == '__main__':#加载预训练模型model = YOLO(model_yaml_path)#训练模型results = model.train(data=data_yaml_path,epochs=150,      # 训练轮数batch=4,         # batch大小name='train_v11', # 保存结果的文件夹名称optimizer='SGD')  # 优化器

运行后网络结构打印如下:
在这里插入图片描述
可以发现,网络结构已经按照我们的修改方式正常执行。

6.免费获取源码

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

在这里插入图片描述
后续还会更新更多关于网络结构修改相关内容,感谢点赞关注

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

相关文章:

  • 《AI大模型应知应会100篇》第58篇:Semantic Kernel:微软的大模型应用框架
  • 【Bootstrap V4系列】学习入门教程之 组件-媒体对象(Media object)
  • Java 原生异步编程与Spring 异步编程 详解
  • 生产级 Flink CDC 应用开发与部署:MySQL 到 Kafka 同步示例
  • C++编程实战--实用代码篇
  • Vue 跨域解决方案及其原理剖析
  • opencascade.js stp vite 调试笔记
  • mac环境配置(homebrew版)
  • JAVA笔记6——异常
  • tokenizer.encode_plus,BERT类模型 和 Sentence-BERT 他们之间的区别与联系
  • spark:map 和 flatMap 的区别(Scala)
  • RDD 两类操作详解(Scala):转换与行动
  • 【PDF】使用Adobe Acrobat dc添加水印和加密
  • 深度解析:可视化如何重塑销售策略制定与执行
  • c++实现分数操作
  • 基于Dockers的Bitwarden的私有本地部署
  • 深度剖析多模态大模型中的视频编码器算法
  • 《大模型微调实战:Llama 3.0全参数优化指南》
  • c++面向对象:接口设计
  • MYSQL数据库集群高可用和数据监控平台
  • 筑牢安全防线、提升应急避难能力水平,5项国家标准发布
  • 真人秀《幸存者》百万美元奖金,25年间“缩水”近一半
  • 夜读丨取稿费的乐趣
  • 深一度|在亚马尔的天才面前,姆巴佩戴上“帽子”又如何
  • 体验中国传统文化、采购非遗文创,波兰游客走进上海市群艺馆
  • 欧洲史上最严重停电事故敲响警钟:能源转型如何保证电网稳定?