目录
前言
上一章主要记录了从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文件代入模型训练,得到的结果就是添加了注意力机制后的模型跑出的结果。
总结
到此该项目实战创新就结束了,希望大家喜欢,点赞关注为我增加更多创作动力!!