本文自研创新改进: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