【YOLOv8改进 - 注意力机制】c2f结合CBAM:针对卷积神经网络(CNN)设计的新型注意力机制

简介: 【YOLOv8改进 - 注意力机制】c2f结合CBAM:针对卷积神经网络(CNN)设计的新型注意力机制

YOLOv8目标检测创新改进与实战案例专栏

专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLOv8基础解析+创新改进+实战案例

介绍

image-20240625091846754

摘要

我们提出了卷积块注意力模块(Convolutional Block Attention Module,CBAM),这是一种简单但有效的用于前馈卷积神经网络的注意力模块。给定一个中间特征图,我们的模块依次推断沿两个独立维度(通道和空间)的注意力图,然后将注意力图与输入特征图相乘以进行自适应特征优化。由于CBAM是一个轻量且通用的模块,可以无缝地集成到任何卷积神经网络(CNN)架构中,且开销可以忽略不计,并能够与基础CNN进行端到端训练。我们通过在ImageNet-1K、MS COCO检测和VOC 2007检测数据集上进行广泛的实验验证了CBAM。我们的实验表明,在各种模型中,分类和检测性能均有一致的提升,证明了CBAM的广泛适用性。代码和模型将公开可用。

文章链接

论文地址:论文地址

代码地址:代码地址

参考代码: yolov8源代码中的ultralytics.nn.modules.conv.CBAM

基本原理

Convolutional Block Attention Module(CBAM)是一种针对卷积神经网络(CNN)设计的新型注意力机制,旨在增强其在各种计算机视觉任务中的性能,如图像分类和目标检测。CBAM依次沿着通道和空间两个独立维度推断注意力图,然后将这些图结合起来,自适应地优化输入特征图。

  1. 通道注意力模块:CBAM中的通道注意力机制专注于建模特征图中不同通道之间的相互关系。它学习为每个通道分配不同的重要性权重,通过捕捉通道间的关系,有助于网络强调信息丰富的通道,同时抑制不太相关的通道,从而改善特征表示。

  2. 空间注意力模块:CBAM中的空间注意力机制旨在捕捉特征图中每个通道内的空间依赖关系。通过分析不同位置之间的空间关系,空间注意力模块学习突出重要的空间区域,同时抑制不相关的区域。这使网络能够专注于相关的空间位置,以更好地提取特征。

以下为 CBAM (Convolutional Block Attention Module) 的架构

image-20240625091938821

从架构来看,其实蛮像 BAM(Bottleneck Attention Module),一样有 Channel attention 和 Spatial attention 的模块在里面,而 CBAM (Convolutional Block Attention Module) 的流程如下:

  1. 输入特征 通过 Channel Attention 后得到 Mc(F),Mc(F) 与 F(input feature) 做 Element-wise Product 得到 F’
  2. F’ 通过空间注意力 后得到 Ms(F),Ms(F) 与 F’(input feature) 做 Element-wise Product 得到 F’’

最终的输出为 F’’ = Ms(F’) ⊗F’ , F’ = Mc(F) ⊗ F (Input feature) 可以用以下公式来表示

image-20240625092016311

核心代码


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:
        """Initializes the class and sets the basic configurations and instance variables required."""
        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:
        """Applies forward pass using activation on convolutions of the input, optionally using batch normalization."""
        return x * self.act(self.fc(self.pool(x)))


class SpatialAttention(nn.Module):
    """Spatial-attention module."""

    def __init__(self, kernel_size=7):
        """Initialize Spatial-attention module with kernel size argument."""
        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):
        """Apply channel and spatial attention on input for feature recalibration."""
        return x * self.act(self.cv1(torch.cat([torch.mean(x, 1, keepdim=True), torch.max(x, 1, keepdim=True)[0]], 1)))


class CBAM(nn.Module):
    """Convolutional Block Attention Module."""

    def __init__(self, c1, kernel_size=7):
        """Initialize CBAM with given input channel (c1) and kernel size."""
        super().__init__()
        self.channel_attention = ChannelAttention(c1)
        self.spatial_attention = SpatialAttention(kernel_size)

    def forward(self, x):
        """Applies the forward pass through C1 module."""
        return self.spatial_attention(self.channel_attention(x))

task与yaml配置

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

相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
3天前
|
机器学习/深度学习 计算机视觉
深入浅出卷积神经网络(CNN)
【10月更文挑战第5天】本文将通过浅显易懂的语言和实际代码示例,带你了解卷积神经网络(CNN)的基础知识、工作原理以及如何应用。我们将一起探索这个强大的深度学习工具,看看它是如何在图像识别、语音处理等领域大放异彩的。无论你是初学者还是有一定基础的学习者,这篇文章都会为你提供有价值的信息和知识。让我们一起踏上这段深入浅出的CNN之旅吧!
|
3天前
|
机器学习/深度学习 编解码 自然语言处理
卷积神经网络(CNN)的发展历程
【10月更文挑战第1天】卷积神经网络(CNN)的发展历程
|
7天前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
5天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:守护数字世界的坚盾
本文旨在探讨网络安全与信息安全领域的关键要素,包括网络安全漏洞、加密技术以及安全意识的重要性。通过深入浅出的方式,帮助读者理解这些概念,并强调每个人都应具备基本的安全防范意识,共同维护数字世界的安全。
|
2天前
|
SQL 安全 算法
网络安全与信息安全的前沿探索
【10月更文挑战第5天】 在当今信息化社会,网络安全和信息安全已成为至关重要的话题。本文将深入探讨网络安全漏洞、加密技术及安全意识的重要性,旨在为读者提供技术性的见解和实用的建议。通过分析常见的网络攻击手段和防御策略,我们将揭示如何保护个人和企业的数据免受威胁,同时强调每个人都应具备的基本安全意识和最佳实践。
9 1
|
2天前
|
存储 安全 程序员
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第5天】 本文旨在探讨网络安全和信息安全领域的重要方面,包括网络漏洞、加密技术及安全意识。通过深入分析这些关键概念,我们希望提高读者对这些重要领域的理解,并强调在当今数字化世界中保护个人和组织数据的重要性。我们将从网络漏洞的定义及其成因开始,接着介绍常见的加密技术及其应用,最后讨论提升安全意识的方法,以帮助读者更好地保护自己的信息安全。
|
4天前
|
安全 算法 网络安全
网络安全与信息安全:守护数字世界的坚盾在这个高度数字化的时代,网络安全和信息安全已成为全球关注的焦点。无论是个人隐私还是企业数据,都面临着前所未有的风险和挑战。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供实用的知识,帮助构建更加安全的网络环境。
【10月更文挑战第4天】 在数字化浪潮中,网络安全与信息安全成为不可忽视的议题。本文通过分析网络安全漏洞的类型与成因,探讨加密技术的原理与应用,并强调提升安全意识的必要性,为读者提供一套全面的网络安全知识框架。旨在帮助个人和企业更好地应对网络威胁,保护数字资产安全。
|
2天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第6天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将探讨网络安全漏洞、加密技术和安全意识等方面的内容,以帮助读者更好地了解这些主题,并采取适当的措施保护自己的信息安全。我们将通过代码示例来演示一些常见的安全漏洞,并提供解决方案。最后,我们将强调培养良好的安全意识对于维护个人和组织的信息安全的重要性。
|
4天前
|
SQL 负载均衡 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第3天】本文将探讨网络安全与信息安全的重要性,包括网络安全漏洞、加密技术和安全意识等方面。我们将介绍一些常见的网络安全漏洞,并提供一些预防措施和解决方案。同时,我们还将讨论加密技术的作用和应用,以及如何提高个人和组织的安全意识。通过这些知识的分享,我们希望能够帮助读者更好地理解和应对网络安全挑战。

热门文章

最新文章