【YOLOv8改进 - 注意力机制】NAM:基于归一化的注意力模块,将权重稀疏惩罚应用于注意力机制中,提高效率性能

简介: **NAM: 提升模型效率的新颖归一化注意力模块,抑制非显著权重,结合通道和空间注意力,通过批量归一化衡量重要性。在Resnet和Mobilenet上的实验显示优于其他三种机制。源码见[GitHub](https://github.com/Christian-lyc/NAM)。**

介绍

image-20240630171637321

摘要

识别较不显著的特征是模型压缩的关键。然而,这在革命性的注意力机制中尚未被研究。在这项工作中,我们提出了一种新颖的基于归一化的注意力模块(NAM),该模块抑制了较不显著的权重。它对注意力模块施加了权重稀疏惩罚,从而使其在保留相似性能的同时变得更具计算效率。在Resnet和Mobilenet上与其他三种注意力机制的比较表明,我们的方法可以带来更高的准确性。本文的代码可以在https://github.com/Christian-lyc/NAM公开获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

NAM (Normalization-based Attention Module)是一种新颖的注意力机制,旨在通过抑制不太显著的特征来提高模型的效率。NAM模块将权重稀疏惩罚应用于注意力机制中,以提高计算效率同时保持性能。NAM模块通过批量归一化(Batch Normalization)的缩放因子来衡量通道的重要性,避免了SE(Squeeze-and-Excitation)、BAM(Bottleneck Attention Module)和CBAM(Convolutional Block Attention Module)中使用的全连接和卷积层。这使得NAM成为一种高效的注意力机制。

NAM模块结合了通道注意力和空间注意力的子模块,利用批量归一化的缩放因子来衡量通道和像素的重要性,从而实现对特征的有效识别和利用。

  1. 通道注意力子模块:使用批量归一化的缩放因子来衡量通道的重要性,通过计算权重来获得输出特征。

image-20240630171918385

  1. 空间注意力子模块:应用像素归一化来衡量像素的重要性,得到输出特征。

    image-20240630171931703

  2. 权重稀疏惩罚:NAM模块通过添加正则化项到损失函数中,以抑制不太显著的权重,从而提高模型的泛化能力和效率。

数学公式:
NAM模块的损失函数如下所示:
$$ Loss = ∑(x,y) l(f(x, W), y) + p ∑ g(γ) + p ∑ g(λ) $$

其中:

  • x:输入
  • y:输出
  • W:网络权重
  • l(·):损失函数
  • g(·):l1范数惩罚函数
  • p:平衡g(γ)和g(λ)的惩罚参数

通道注意力子模块的输出特征:
$$ M_c = sigmoid(W_γ(BN(F_1))) $$

空间注意力子模块的输出特征(Equation 3):
$$ M_s = sigmoid(W_λ(BN_s(F_2))) $$

其中:

  • M_c:通道注意力子模块的输出特征
  • M_s:空间注意力子模块的输出特征
  • W_γ:通道注意力子模块的权重
  • W_λ:空间注意力子模块的权重
  • BN:批量归一化
  • F_1、F_2:输入特征

核心代码

import torch.nn as nn
import torch
from torch.nn import functional as F

# 定义通道注意力模块
class Channel_Att(nn.Module):
    def __init__(self, channels, t=16):
        super(Channel_Att, self).__init__()
        self.channels = channels  # 输入的通道数

        # 定义批量归一化层
        self.bn2 = nn.BatchNorm2d(self.channels, affine=True)

    def forward(self, x):
        residual = x  # 保存输入特征图以便后续相乘

        x = self.bn2(x)  # 对输入特征图进行批量归一化处理

        # 获取批量归一化层的权重,并进行绝对值处理和归一化
        weight_bn = self.bn2.weight.data.abs() / torch.sum(self.bn2.weight.data.abs())

        # 调整特征图的维度顺序,从[N, C, H, W]变为[N, H, W, C]
        x = x.permute(0, 2, 3, 1).contiguous()

        # 将归一化后的权重与调整维度后的特征图相乘
        x = torch.mul(weight_bn, x)

        # 再将特征图的维度顺序调整回[N, C, H, W]
        x = x.permute(0, 3, 1, 2).contiguous()

        # 对特征图进行Sigmoid激活,并与残差相乘
        x = torch.sigmoid(x) * residual

        return x  # 返回处理后的特征图

# 定义注意力模块
class Att(nn.Module):
    def __init__(self, channels, shape, out_channels=None, no_spatial=True):
        super(Att, self).__init__()
        # 实例化通道注意力模块
        self.Channel_Att = Channel_Att(channels)

    def forward(self, x):
        # 将输入特征图通过通道注意力模块
        x_out1 = self.Channel_Att(x)

        return x_out1  # 返回通道注意力处理后的特征图

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/140083725

相关文章
|
6月前
|
机器学习/深度学习
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
364 1
|
6月前
|
机器学习/深度学习 Ruby
YOLOv5改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
YOLOv5改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
343 0
|
6月前
|
机器学习/深度学习 Ruby
YOLOv8改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
YOLOv8改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
689 0
|
6月前
|
机器学习/深度学习
YOLOv5改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
YOLOv5改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
404 0
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络加上注意力机制,精度不升反降?
神经网络加上注意力机制,精度不升反降?
神经网络加上注意力机制,精度不升反降?
|
15天前
|
机器学习/深度学习 计算机视觉
【YOLOv11改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
【YOLOv11改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征本文提出了一种全局注意力机制,通过保留通道和空间信息,增强跨维度的交互,减少信息损失。该机制结合3D置换与多层感知器用于通道注意力,卷积空间注意力子模块用于空间注意力。实验结果表明,在CIFAR-100和ImageNet-1K数据集上,该方法在ResNet和MobileNet上优于多种最新注意力机制。
【YOLOv11改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
YOLO目标检测专栏探讨了模型创新,如注意力机制,聚焦通道和空间信息的全局注意力模组(GAM),提升DNN性能。GAM在ResNet和MobileNet上优于最新方法。论文及PyTorch代码可在给出的链接找到。核心代码展示了GAM的构建,包含线性层、卷积和Sigmoid激活,用于生成注意力图。更多配置详情参阅相关博客文章。
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
|
4月前
|
机器学习/深度学习 图计算 计算机视觉
【YOLOv8改进 - 注意力机制】 CascadedGroupAttention:级联组注意力,增强视觉Transformer中多头自注意力机制的效率和有效性
YOLO目标检测专栏探讨了Transformer在视觉任务中的效能与计算成本问题,提出EfficientViT,一种兼顾速度和准确性的模型。EfficientViT通过创新的Cascaded Group Attention(CGA)模块减少冗余,提高多样性,节省计算资源。在保持高精度的同时,与MobileNetV3-Large相比,EfficientViT在速度上有显著提升。论文和代码已公开。CGA通过特征分割和级联头部增加注意力多样性和模型容量,降低了计算负担。核心代码展示了CGA模块的实现。
|
4月前
|
机器学习/深度学习 算法 计算机视觉
【YOLOv8改进 - 注意力机制】RCS-OSA :减少通道的空间对象注意力,高效且涨点
YOLOv8专栏探讨了YOLO系列的创新改进,提出RCS-YOLO模型,它在脑肿瘤检测中超越YOLOv6/v7/v8,精度提升1%,速度增快60%(达到114.8 FPS)。RCS-OSA模块结合RepVGG/ShuffleNet优点,通过通道重参数化和混洗优化卷积,提升速度和准确性。代码和论文可在提供的链接获取。
|
4月前
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-注意力机制】 MSDA:多尺度空洞注意力 (论文笔记+引入代码)
YOLO目标检测专栏探讨了ViT的改进,提出DilateFormer,它结合多尺度扩张注意力(MSDA)来平衡计算效率和关注域大小。MSDA利用局部稀疏交互减少冗余,通过不同头部的扩张率捕获多尺度特征。DilateFormer在保持高性能的同时,计算成本降低70%,在ImageNet-1K、COCO和ADE20K任务上取得领先结果。YOLOv8引入了MultiDilatelocalAttention模块,用于实现膨胀注意力。更多详情及配置见相关链接。