YOLO模型比赛实战--井盖隐患智能识别(四)

目录

前言

一、什么是注意力机制?

1、什么是注意力机制

2、为什么要添加注意力机制

二、给YOLOv8添加注意力机制

1.添加步骤

总结


前言

        上一章主要记录了从YOLOv5改成YOLOv8模型以后的训练效果,确实有了明显的提升,但还是不太够,因此又进行了调参调模型配置等等,效果也没太大变化,于是本章我将尝试在YOLOv8里面加入注意力机制能不能会有更好的效果。

 想看上一章的友友们可以点此链接:YOLO模型比赛实战--井盖隐患智能识别(三)


一、什么是注意力机制?

1、什么是注意力机制

注意力机制(Attention Mechanism)是一种模拟人类注意力机制的技术,在深度学习领域中得到了广泛的应用。它允许模型在处理序列数据或者其他类型的数据时,动态地给予不同位置或者特征不同的权重,从而使模型能够更加集中地关注重要的部分,达到更好的性能。

在深度学习中,注意力机制的基本思想是模拟人类的注意力机制。当我们处理信息时,我们通常会将注意力集中在一些重要的部分,而忽略一些次要的信息。类似地,注意力机制允许神经网络模型在处理输入时,动态地选择性地关注输入的不同部分。

注意力机制通常包含几个步骤:计算相关性、计算权重、加权求和。

2、为什么要添加注意力机制

        提高模型性能:通过引入注意力机制,模型可以更灵活地学习数据之间的复杂关系。特别是在处理长序列、大图像或复杂语言模型等任务时,注意力机制可以帮助模型更好地处理长距离依赖关系。

        提高模型可解释性:注意力机制可以使模型更具可解释性,因为它可以展示模型在做出预测或生成输出时所关注的输入部分。这对于了解模型的决策过程和调试模型非常有帮助。

        减少参数耗费:在一些情况下,注意力机制可以减少模型的参数数量,因为它允许模型在需要时动态地调整不同位置的权重,而不是固定地使用静态权重。

二、给YOLOv8添加注意力机制

1.添加步骤

第一步:将想要添加的注意力机制代码复制粘贴到ultralytics\nn\modules\conv.py中:

例:添加CBAM注意力机制:(源代码中可能有自带CBAM)

class CBAM(nn.Module):
    """Convolutional Block Attention Module."""

    def __init__(self, c1, kernel_size=7):
        """Initialize CBAM with given input channel (c1) and kernel size."""
        super().__init__()
        self.channel_attention = ChannelAttention(c1)
        self.spatial_attention = SpatialAttention(kernel_size)

    def forward(self, x):
        """Applies the forward pass through C1 module."""
        return self.spatial_attention(self.channel_attention(x))

第二步:
----在ultralytics/nn/modules/__init__.py 添加名字

----在ultralytics/nn/tasks.py添加名字

第三步:在ultralytics/nn/tasks.py添加配置

在代码大概九百多行左右的位置处增加代码:

代码如下:

        elif m in {CBAM}:
            c1, c2 = ch[f],args[0]
            if c2 != nc:
                c2 = make_divisible(min(c2,max_channels)*width, 8)
                args = [c1, *args[1:]]

第四步:在ultralytics\cfg\models\v8\里新建一个加了注意力机制的文件my_yolov8_CBAM.yaml,加入注意力机制CBAM。

底下记得改层数:(都加1,因为加了一层注意力机制)

总结步骤:

1、找到需要添加的注意力机制

2、在conv.py文件下放入代码
路径: ultralytics/nn/ modules/ conv.py

3、--在conv.py添加名字
----在ultralytics/nn/modules/__init__.py 添加名字
----在ultralytics/nn/tasks.py添加名字

4、在ultralytics/nn/tasks.py添加配置

elif m in {CBAM} :
		c1, c2 = ch[f],args[0]
		if c2 != nc :
			c2 = make_divisible(min(c2,max_channels)*width,8)
		args = [c1, *args[1:]]


#	elif m in {GatherExcite}:
#		args =[ch[f],*args]


5、新建一个yaml,将注意力机制加在模型的层中间。

6、test运行一下 报什么错 对应debug

        经过这些步骤就能在模型里添加好注意力机制啦,然后将新建的my_yolov8_CBAM.yaml文件代入模型训练,得到的结果就是添加了注意力机制后的模型跑出的结果。


总结

到此该项目实战创新就结束了,希望大家喜欢,点赞关注为我增加更多创作动力!!

  • 32
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值