一、本文介绍
作为入门性篇章,这里介绍了SimAM注意力在YOLOv8中的使用。包含SimAM原理分析,SimAM的代码、SimAM的使用方法、以及添加以后的yaml文件及运行记录。
二、SimAM原理分析
SimAM官方论文地址:SimAM文章
SimAM官方代码地址:SimAM源代码
SimAM注意力机制:是一种轻量级的自注意力机制,计算注意力权重时使用的是线性层而不是点积。其过程为:
输入张量 x (B, C, H, W) -> 均值计算 -> 差异平方 -> 归一化 -> 生成注意力图 -> Sigmoid -> 输出(B, C, H, W)
相关代码:
SimAM注意力的代码,如下。
class SimAM(torch.nn.Module):
def __init__(self, e_lambda=1e-4):
super(SimAM, self).__init__()
self.activaton = nn.Sigmoid()
self.e_lambda = e_lambda
def __repr__(self):
s = self.__class__.__name__ + '('
s += ('lambda=%f)' % self.e_lambda)
return s
@staticmethod
def get_module_name():
return "simam"
def forward(self, x):
b, c, h, w = x.size()
n = w * h - 1
x_minus_mu_square = (x - x.mean(dim=[2, 3], keepdim=True)).pow(2)
y = x_minus_mu_square / (4 * (x_minus_mu_square.sum(dim=[2, 3], keepdim=True) / n + self.e_lambda)) + 0.5
return x * self.activaton(y)
四、YOLOv8中SimAM使用方法
1.YOLOv8中添加SimAM模块:
首先在ultralytics/nn/modules/conv.py最后添加SimAM模块的代码。
2.在conv.py的开头__all__ = 内添加SimAM模块的类别名:
3.在同级文件夹下的__init__.py内添加SimAM的相关内容:(分别是from .conv import SimAM ;以及在__all__内添加SimAM)
4.在ultralytics/nn/tasks.py进行SimAM注意力机制的注册,以及在YOLOv8的yaml配置文件中添加SimAM即可。
首先打开task.py文件,按住Ctrl+F,输入parse_model进行搜索。找到parse_model函数。在其最后一个else前面添加以下注册代码:
elif m in {SimAM}:
c2 = ch[f]
然后,就是新建一个名为YOLOv8_SimAM.yaml的配置文件:(路径:ultralytics/cfg/models/v8/YOLOv8_SimAM.yaml)
# Ultralytics YOLO
标签:__,SimAM,self,yaml,C2f,YOLOv8,注意力
From: https://blog.csdn.net/2301_79619145/article/details/142767105