YOLOv8独家原创改进:自研独家创新MSAM注意力,通道注意力升级,魔改CBAM

2023-11-29 10:27:21 浏览数 (1)

本文自研创新改进MSAM(CBAM升级版),通道注意力具备多尺度性能,多分支深度卷积更好的提取多尺度特征,最后高效结合空间注意力

1)作为注意力MSAM使用;

推荐指数:五星

MSCA | 亲测在多个数据集能够实现涨点,对标CBAM。

在道路缺陷检测任务中,原始map为0.8,cbam为0.822 ,MSCA 为 0.855

1.计算机视觉中的注意力机制

一般来说,注意力机制通常被分为以下基本四大类:

通道注意力 Channel Attention

空间注意力机制 Spatial Attention

时间注意力机制 Temporal Attention

分支注意力机制 Branch Attention

2.CBAM:通道注意力和空间注意力的集成者

轻量级的卷积注意力模块,它结合了通道和空间的注意力机制模块

论文题目:《CBAM: Convolutional Block Attention Module》 论文地址: https://arxiv.org/pdf/1807.06521.pdf

上图可以看到,CBAM包含CAM(Channel Attention Module)和SAM(Spartial Attention Module)两个子模块,分别进行通道和空间上的Attention。这样不只能够节约参数和计算力,并且保证了其能够做为即插即用的模块集成到现有的网络架构中去。

3.自研MSAM

3.1 原理介绍

详见:https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482

3.2 自研MSAM注意力介绍

多尺度卷积注意模块具备多尺度性能

原理:CBMA原先的通道注意力替换为多尺度卷积,使通道注意力具备多尺度性能

3.3 MSAM引入到YOLOv8

3.4 MSAM加入ultralytics/nn/attention/MSAM.py

核心代码

代码语言:javascript复制
class ChannelAttention(nn.Module):
    # Channel-attention module https://github.com/open-mmlab/mmdetection/tree/v3.0.0rc1/configs/rtmdet
    def __init__(self, channels: int) -> None:
        super().__init__()
        self.pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Conv2d(channels, channels, 1, 1, 0, bias=True)
        self.act = nn.Sigmoid()

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        return x * self.act(self.fc(self.pool(x)))


class SpatialAttention(nn.Module):
    # Spatial-attention module
    def __init__(self, kernel_size=7):
        super().__init__()
        assert kernel_size in (3, 7), 'kernel size must be 3 or 7'
        padding = 3 if kernel_size == 7 else 1
        self.cv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)
        self.act = nn.Sigmoid()

    def forward(self, x):
        return x * self.act(self.cv1(torch.cat([torch.mean(x, 1, keepdim=True), torch.max(x, 1, keepdim=True)[0]], 1)))

3.5 yolov8_MSAM.yaml

代码语言:javascript复制
# Ultralytics YOLO 


	

0 人点赞