YOLOv5改进(一)改进的核心内容

YOLOv5改进(一)核心内容(如何添加自己的模块以及配置通道)



前言

要想改进YOLOv5,无非都是些缝合,一般就是加注意力,换模块,包括换主干,换池化,换头等,也有略微高级点的,就是改注意力,这个改注意力有点靠运气,可能不同的数据改进效果不同。甚至会掉点。再高级一点的就是自己设计一个模块,搭积木那种,然后多种数据实验,再放大描述。最高级的就是有数学推导以及卷积计算等公式,验证了自己的模块有优势,然后在这个模块上继续丰富形成一个网络,然后再实验,多个方向均测试,这样是最牛的,当然网络就需要全部自己建了。
我们普通人能做到再高级一点的就行,自己设计出一个模块,可以运行就基本可以了。以我的经历来说,这是建立在不断复现论文的过程上的,可能复现了一点点,也可能最后发现复现不了,都是有用的。
我这里就以记录我设计的模块进行调试介绍YOLOv5改进的一个核心内容。因为我发现很少人讲这个怎么推理以及通道配置。学会这样处理,基本上什么模型都能很快上手。


一、改进模型修改YOLOv5s.yaml文件

如果你要改模型,这个文件是必改的,这样写在一个文件里面的好处就是便于人机交互,但是缺点也严重,这个文件无法dubug,这样就无法知道每个模块之后的输出大小是多少,甚至通道数也不好看清楚。所以根据这个文件怎么看输出特征图的大小就显得很重要。
这个文件的参数的具体的介绍大家自己去查。我只介绍核心的几个参数。

1、depth_multiple: 0.33 # model depth multiple 是为了控制层的重复的次数。它会和number相乘后取整,代表该层的重复的数量,
2、width_multiple: 0.5 # layer channel multiple 是为了控制输出特征图的通道数,它会和出特征图的通道数相乘,代表该层的输出通道数。
3、[-1, 1, Conv, [64, 6, 2, 2] # [from, number, module, args],from是记录哪一层的输出通道数,-1是上一层,其他数是对应的层,YOLOv5对每个层都做了编号。number是该模块重复次数,module是这个模块的类名称,args就是这个模块的设置参数,根据这个模块的类进行定义,一般是输入通道,输出通道,步长等等,输入通道可省略。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、通道配置yolo.py

以C3模块为例介绍,我们以如下图找到C3通道配置,可以从yaml文件看出,C3模块的输入通道数是上一层(from=-1)的输出通道数,该模块重复3次,输出通道数是128。在yolo.py中可以看出,C3模块的c1输入通道数确实-1层的通道数,就是上一层的,c2也确实是args的第一个元素,当然也只有一个。后面的if判断,和args输出的是什么我也不太懂,但是这个很有用的,会用就行。

在这里插入图片描述
再以concat为例介绍,可以从yaml看出from来源于上一层和第四层的通道数,从yolo.py可以看出,通过遍历from列表找到每个的通道数进行求和作为输出通道数。
在这里插入图片描述

三、实战演示

1.创建自己的模块

代码如下(示例,讯飞星火语言模型生成):前向推导你要根据自己的设计来调,这里只是模块形式的一个示例,需要在common.py文件中添加。

class MyModel(nn.Module):
     def __init__(self, c1, c2):
         super(MyModel, self).__init__()
         # model layers
         self.layer1 = nn.Linear(c1, 64)
         self.layer2 = nn.ReLU()
         self.layer3 = nn.Linear(64, 10)
     
     def forward(self, x):
         x = self.layer1(x)
         x = self.layer2(x)
         x = self.layer3(x)
         return x

2.通道推导以及模块参数配置

按照自己的模块参数设置,你需要通道怎么变,就设置进去。以下面添加的模块为例。假如你的模块需要输入三个通道。如下所示,就是上一层和第四层以及第二层作为这个模块的输入通道数,我在args里面写出来了,实际上可以省略,只留下最后的128作为输出通道数,那么在yolo.py文件中怎么写呢。因此他是输入三个通道。所以跟之前的每个都不一样,所以分析就得到了第二张图,遍历每个输入通道作为输入,输出通道为args里面的第二个元素,当然你也可以省略输入,输出通道就修改为args里面的第一个元素。这样这个模块就 OK了。
在这里插入图片描述
在这里插入图片描述
当然还有别的模块不是这样的,如果加入就是正常的类似C3模块的形式,如下图,那么就简单了,直接在yolo.py中跟C3放在一起,第二张图就是,直接放在主的循环函数里面,那么下面要不要加入呢,这个要根据你的模型功能进行测试。我只是演示一下怎么改。
在这里插入图片描述
在这里插入图片描述

四、报错推理

上述改的差不多需要不断运行,看网络输出到哪里断掉了,断掉就说明这个模块的没有配置好。这就需要首先推导出你的输出通道以及各个尺度,判断是不是模块自己内部的问题,如果没问题,那就是配置通道的问题,需要按照上面方法尝试配置你的模块的通道,记住那个判断条件是很有用的,如果是类似上面第一种的单独写通道配置的话,依旧不行,可以尝试添加判断条件以及args的语句,这个我不太懂什么意思,有懂得可以一起评论区交流一下。我个人觉得dubug在这时候没啥用。

总结

本节介绍了改进YOLOv5中的较难部分:添加自己设计的模块的办法,需要设计自己的模块,并推导一些尺度和通道数,然后在yaml文件中配置模型参数,在yolo.py中配置输出通道数,如果自己推导了整个模型每层的尺寸和通道数,配置这些参数就相对容易。

  • 40
    点赞
  • 284
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
根据引用\[1\]中提到的改进YOLOv5的方法,可以通过添加注意力、更换模块、更换主干、更换池化、更换头等方式来改进模型。此外,还可以设计自己的模块,并进行多种数据实验和描述。最高级的改进方法是通过数学推导和卷积计算等公式验证自己的模块的优势,并在此基础上构建一个完整的网络进行实验。然而,对于普通人来说,设计一个模块并能够成功运行已经是相当高级的改进了。 根据引用\[2\]中提到的内容,可以通过修改YOLOv5s.yaml文件来改进模型。此外,还可以进行通道配置,通过yolo.py文件进行通道推导和模块参数配置。 根据引用\[3\]中提到的内容,这些改进方法适用于基于YOLOv5、YOLOv7和YOLOv7-tiny、YOLOv8的主流模型改进。 关于"yolov5改进softnums"的问题,根据提供的引用内容,没有明确提到"softnums"这个词,因此无法给出具体的回答。请提供更多相关的信息或引用内容,以便我能够更好地回答您的问题。 #### 引用[.reference_title] - *1* *2* [YOLOv5改进(一)改进核心内容](https://blog.csdn.net/qq_45874142/article/details/130555281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [CSDN芒果独家原创YOLOv5改进、YOLOv7改进(适用YOLOv8改进)专栏 | 《芒果YOLO改进系列进阶指南》来自人工...](https://blog.csdn.net/qq_38668236/article/details/127107736)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值