《------往期经典推荐------》
二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~
《------正文------》
1.引言
本文主要详细介绍如何用更高效的卷积模块替换YOLO11网络结构中的部分常规卷积模块
,从而达到改进性能的目的,供小伙伴们参考。
YOLO11原始网络结构图如下:
2.卷积介绍
关于GSConv混合标准卷积与深度可分离卷积
的源码与详细介绍
可以参考之前分享的文章《【即插即用涨点模块】GSConv混合标准卷积与深度可分离卷积:轻量化同时确保精度与速度提升【附源码】》,此处不再赘述。
3.源码修改步骤
使用的ultralytics版本号:ultralytics==8.3.127
在YOLO11源码中添加并修改相应的模块内容,用于后续网络结构配置文件的修改,详细步骤如下:
1. 新建文件
在YOLO11源码的ultralytics/nn
的目录下新建Convs
文件用于存放所有的卷积相关源码
,然后在Convs
目录下新建GSConv.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网络结构中的部分卷积进行替换,当然也可以替换C3k2
、SPPF
、C2PSA
等模块内部替换卷积。此处以替换主干网络结构中的卷积为例。
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 GFLOPs
s: [0.50, 0.50, 1024] # summary: 181 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPs
m: [0.50, 1.00, 512] # summary: 231 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPs
l: [1.00, 1.00, 512] # summary: 357 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPs
x: [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, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]]
- [-1, 1, GSConv, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]]
- [-1, 1, GSConv, [512, 3, 2]] # 5-P4/16
- [-1, 2, C3k2, [512, True]]
- [-1, 1, GSConv, [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