【yolov系列:yolov7改进添加SIAM注意力机制】

yolo系列文章目录


文章目录

  • yolo系列文章目录
  • 一、SimAM注意力机制是什么?
  • 二、YOLOv7使用SimAM注意力机制
    • 1.在yolov7的models下面新建SimAM.py文件
    • 2.在common里面导入
    • 在这里插入图片描述
  • 总结


一、SimAM注意力机制是什么?

论文题目:SimAM: A Simple, Parameter-Free Attention Module for Convolutional Neural Networks
论文地址:http://proceedings.mlr.press/v139/yang21o/yang21o.pdf
源代码:https://github.com/ZjjConan/SimAM
不同于现有的通道/空域注意力模块,该模块无需额外参数为特征图推导出3D注意力权值。具体来说,基于著名的神经科学理论提出优化能量函数以挖掘神经元的重要性。进一步针对该能量函数推导出一种快速解析解并表明:该解析解仅需不超过10行代码即可实现。该模块的另一个优势在于:大部分操作均基于所定义的能量函数选择,避免了过多的结构调整。最后在不同的任务上对所提注意力模块的有效性、灵活性进行验证。
【yolov系列:yolov7改进添加SIAM注意力机制】_第1张图片

二、YOLOv7使用SimAM注意力机制

1.在yolov7的models下面新建SimAM.py文件

粘贴如下:

import torch
import torch.nn as nn

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)

2.在common里面导入

from models.SimAM import SimAM

然后去修改con_att
【yolov系列:yolov7改进添加SIAM注意力机制】_第2张图片
修改最后一行:

        self.att =SimAM()

【yolov系列:yolov7改进添加SIAM注意力机制】_第3张图片
SPCC也一样
【yolov系列:yolov7改进添加SIAM注意力机制】_第4张图片
最后一行换到siam即可。

self.att =SimAM()

然后运行yaml即可。

在concat部分加注意力机制也一样。
进入models/common.py里面
【yolov系列:yolov7改进添加SIAM注意力机制】_第5张图片
复制加上concat_att


class Concat_ATT(nn.Module):
    def __init__(self,channel, dimension=1):
        super(Concat_ATT,self).__init__()
        self.d = dimension
        self.att = SimAM(channel)

    def forward(self, x):
        return self.att(torch.cat(x, self.d))

在yolo里面加上

        elif m is Concat_ATT:
            c2 = sum([ch[x] for x in f])
            args = [c2]

【yolov系列:yolov7改进添加SIAM注意力机制】_第6张图片

总结

siam注意力机制的添加和se注意力机制是一样的添加方法,可以根据自己的实际需求进行添加可以参考如下。
yolov7改进添加SE注意力机制

你可能感兴趣的:(#,学习笔记,python深度学习,yolo系列,YOLO,bash,c++,pygame,linux)