【10】yolov8目标检测模型改进之添加注意力机制

0.前言

一段时间的折腾之后,终于对添加注意力机制的代码操作了解了不少,写个笔记,以免忘记,也和大家一起分享。但仅仅对如何修改代码以能够添加相应模块进行说明。
首先,将注意力机制模块分为三类:无参数注意力机制、一个通道数(一个参数)注意力机制以及两个通道数(两个参数)注意力机制。

通用步骤

1_. 找代码,下载代码
2_. 在tasks.py文件下导入代码模块,并对修改部分代码
3_. 重新创建yaml文件,在其中添加注意力机制模块
4_. 测试文件是否可行,参数是否错误
5_. 在训练中调用添加了注意力机制的yaml文件,进行训练使用

1.添加无参数注意力机制SimAM

  • 论文:http://proceedings.mlr.press/v139/yang21o/yang21o.pdf
  • 代码:https://github.com/ZjjConan/SimAM

1_. \ultralytics-main\ultralytics\nn 在该路径下创建SimAM.py文件(也可以是任意路径,习惯了这个路径),并将代码路径mmdetection/mmdet/models/backbones/attentions/simam_module.py下的simam_module复制到该文件中。
在这里插入图片描述
2_. 在.\ultralytics-main\ultralytics\nn\tasks.py文件中导入SimAM模块。
tips: simam_module是文件下的类名,可以更改,但同时要记得在super中的名称一起改。

	from ultralytics.nn.SimAM import simam_module

在这里插入图片描述

3_. 因为是无参数,所以就不需要在tasks文件再修改内容了。(这里的无参数是指类simam_module除去具有默认值的参数外,没有一定需要指定值的参数了) 修改yaml文件,可以复制一份yolov8.yaml文件出来,以免改错;加入simam_module模块。
在这里插入图片描述
tips:该文件夹下的各个数据的含义可以参考下面博主写的内容,清晰易懂。https://blog.csdn.net/qq_40835644/article/details/130085632
其中,几个数字被圈出来是因为这些数字代表行数,加入一行内容,对应的行数就会发生变化,所以需要做相应的调整。此外在27行的1e-4数值是类simam_module下e_lambda参数的默认值。

4_. 测试yaml文件是否可行。在目录.\ultralytics-main下创建文件test-model.py,在变量CFG中指定刚刚yaml文件的绝对路径或相对路径,执行python文件,若为pass,则表明添加成功;否则,需要查看报错做出对应的修改。
在这里插入图片描述
5_. 调用。我使用的是python代码的调用方式。具体如下。其中,mytrain-original.py文件是在.\ultralytics-main目录下创建的,不过,也可以在任意路径创建,只需要注意yaml文件的路径正确即可。在这里插入图片描述

2.添加一个通道数注意力机制EMA

  • 论文:https://arxiv.org/abs/2305.13563v2
  • 代码:https://github.com/yoloonme/ema-attention-module

1_. 在.\ultralytics-main\ultralytics\nn路径下创建EMA.py文件,并将代码复制粘贴到文件。
在这里插入图片描述
2_. 在同一路径下的tasks.py文件中导入EMA模块,并对添加部分代码。

from ultralytics.nn.EMA import EMA
 elif m in {EMA}:
            args = [ch[f]]

在这里插入图片描述

3_. 在.\ultralytics-main\ultralytics\models\v8路径下创建yolov8-ema.yaml文件,将yolov8.yaml的代码复制粘贴到yolov8-ema.yaml文件中并在其中添加注意力机制模块代码。
在这里插入图片描述
其中,27行的【1024,8】数值分别对应EMA类中参数channels和 factor的值;其中1024是channels通道数,8是factor的默认值。

4_. 测试文件是否可行,参数是否错误。在目录.\ultralytics-main下创建文件test-model.py,在变量CFG中指定刚刚yaml文件的绝对路径或相对路径,执行python文件,若为pass,则表明添加成功;否则,需要查看报错做出对应的修改。
在这里插入图片描述

5_. 在训练中调用添加了注意力机制的yaml文件,进行训练使用。具体同注意力机制SimAM。

3.添加两个通道数注意力机制GAM

  • 论文:https://arxiv.org/abs/2112.05561
  • 代码:

1_. 在.\ultralytics-main\ultralytics\nn路径下创建GAM.py文件,并将代码复制粘贴到文件。
在这里插入图片描述
2_. 在同一路径下的tasks.py文件中导入GAM模块,并对添加部分代码。

from ultralytics.nn.GAM import GAM_Attention
        elif m in {GAM_Attention}:
            args = [ch[f], *args]

在这里插入图片描述

3_. 在.\ultralytics-main\ultralytics\models\v8路径下创建yolov8-ema.yaml文件,将yolov8.yaml的代码复制粘贴到yolov8-ema.yaml文件中并在其中添加注意力机制模块代码。第三步是注意力机制区分开的关键。
在这里插入图片描述
在这里插入图片描述
这里对加入了三次注意力机制中的32、64和128的数值设置进行说明;首先,这三个数分别对应传入GAM中in_channels和out_channels,前面截图也说了两者的数值一致所以就只需要传入一个就行;他们接收是上一层的输出和下一层的输入,我们使用test_model.py查看原始yolov8的yaml文件的具体通道数就可以得出32、64和128。如下图。
在这里插入图片描述
4_. 测试文件是否可行,参数是否错误。在目录.\ultralytics-main下创建文件test-model.py,在变量CFG中指定刚刚yaml文件的绝对路径或相对路径,执行python文件,若为pass,则表明添加成功;否则,需要查看报错做出对应的修改。
在这里插入图片描述
5_. 在训练中调用添加了注意力机制的yaml文件,进行训练使用。具体同注意力机制SimAM。

参考
  • https://blog.csdn.net/qq_40835644/article/details/130085632

如果你觉得这篇文章对你有所启发的话,期待你的点赞、收藏和打赏,对我创作的支持!!!

  • 9
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_x_w

你的肯定是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值