【YOLOv10改进-卷积Conv】RFAConv:感受野注意力卷积,创新空间注意力

简介: 【YOLO目标检测专栏】探索空间注意力局限,提出感受野注意力(RFA)机制,解决卷积核参数共享问题。RFAConv增强大尺寸卷积核处理能力,不增加计算成本,提升网络性能。已在YOLOv8中实现,详情见YOLO目标检测创新改进与实战案例专栏。

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

专栏链接: YOLOv10 创新改进有效涨点

介绍

image-20240123091425551

摘要

空间注意力已被广泛用于提升卷积神经网络的性能。然而,它存在一定的局限性。在本文中,我们提出了一个关于空间注意力有效性的新视角,即空间注意力机制本质上是解决卷积核参数共享的问题。然而,由空间注意力生成的注意力图中包含的信息对于大尺寸卷积核来说并不充分。因此,我们提出了一种名为感受野注意力(Receptive-Field Attention,简称RFA)的新型注意力机制。现有的空间注意力,如卷积块注意力模块(Convolutional Block Attention Module,简称CBAM)和协调注意力(Coordinated Attention,简称CA)只关注空间特征,这并没有完全解决卷积核参数共享问题。相比之下,RFA不仅关注感受野空间特征,而且为大尺寸卷积核提供有效的注意力权重。RFA开发的感受野注意力卷积操作(Receptive-Field Attention convolutional operation,简称RFAConv)代表了一种替代标准卷积操作的新方法。它几乎不增加计算成本和参数,同时显著提升了网络性能。我们在ImageNet-1k、COCO和VOC数据集上进行了一系列实验,以证明我们方法的优越性。特别重要的是,我们认为现在是时候从空间特征转向感受野空间特征,以改进当前的空间注意力机制。通过这种方式,我们可以进一步提高网络性能,取得更好的结果。

创新点

感受野注意力卷积(Receptive-Field Attention Convolution,简称RFAConv)的主要创新在于将空间注意力机制与卷积操作相融合,旨在提升卷积神经网络(CNN)的性能。该方法通过以下关键策略,对卷积核的功能进行优化,特别强调处理感受野内部的空间特征:

  1. 对感受野空间特征的强化关注: RFAConv着重于感受野内的空间特征,超越了传统空间维度的限制。此方法使得网络能够更高效地识别和处理图像中的局部区域,进而提升特征提取的准确性。

  2. 解决卷积核参数共享的挑战: 在传统CNN结构中,卷积核在处理图像的不同区域时采用相同的参数,这可能会限制模型对复杂模式的识别能力。RFAConv通过整合注意力机制,实现了卷积核参数的灵活调整,为不同的图像区域提供了定制化的处理方案。

  3. 增强大尺寸卷积核的处理能力: 对于大尺寸的卷积核,单纯依赖传统空间注意力机制可能无法充分捕捉所有关键信息。RFAConv通过赋予有效的注意力权重,确保大尺寸卷积核能够更加精确地处理图像信息。

综上所述,感受野注意力卷积代表了对传统卷积操作的革新性改进,它不仅提升了网络对图像细节的处理能力,还为处理更复杂的视觉任务提供了强有力的支持。

yolov8 引入RFAConv

把代码加入:ultralytics/nn/modules/conv.py

class RFAConv(nn.Module):
    def __init__(self,in_channel,out_channel,kernel_size,stride=1):
        super().__init__()
        self.kernel_size = kernel_size

        self.get_weight = nn.Sequential(nn.AvgPool2d(kernel_size=kernel_size, padding=kernel_size // 2, stride=stride),
                                        nn.Conv2d(in_channel, in_channel * (kernel_size ** 2), kernel_size=1, groups=in_channel,bias=False))
        self.generate_feature = nn.Sequential(
            nn.Conv2d(in_channel, in_channel * (kernel_size ** 2), kernel_size=kernel_size,padding=kernel_size//2,stride=stride, groups=in_channel, bias=False),
            nn.BatchNorm2d(in_channel * (kernel_size ** 2)),
            nn.ReLU())

        self.conv = nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel_size=kernel_size, stride=kernel_size),
                                  nn.BatchNorm2d(out_channel),
                                  nn.ReLU())

    def forward(self,x):
        b,c = x.shape[0:2]
        weight =  self.get_weight(x)
        h,w = weight.shape[2:]
        weighted = weight.view(b, c, self.kernel_size ** 2, h, w).softmax(2)  # b c*kernel**2,h,w ->  b c k**2 h w 
        feature = self.generate_feature(x).view(b, c, self.kernel_size ** 2, h, w)  #b c*kernel**2,h,w ->  b c k**2 h w  
        weighted_data = feature * weighted
        conv_data = rearrange(weighted_data, 'b c (n1 n2) h w -> b c (h n1) (w n2)', n1=self.kernel_size, # b c k**2 h w ->  b c h*k w*k
                              n2=self.kernel_size)
        return self.conv(conv_data)



class SE(nn.Module):
    def __init__(self, in_channel, ratio=16):
        super(SE, self).__init__()
        self.gap = nn.AdaptiveAvgPool2d((1, 1))
        self.fc = nn.Sequential(
            nn.Linear(in_channel, ratio, bias=False),  # 从 c -> c/r
            nn.ReLU(),
            nn.Linear(ratio, in_channel, bias=False),  # 从 c/r -> c
            nn.Sigmoid()
        )

    def forward(self, x):
            b, c= x.shape[0:2]
            y = self.gap(x).view(b, c)
            y = self.fc(y).view(b, c,1, 1)
            return y

task.py使用与yaml配置

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

相关文章
|
机器学习/深度学习 计算机视觉 Python
【DRConv】动态区域感知卷积结构可提升卷积的表示能力 | 复现《Dynamic Region-Aware Convolution》
【DRConv】动态区域感知卷积结构可提升卷积的表示能力 | 复现《Dynamic Region-Aware Convolution》
581 1
【DRConv】动态区域感知卷积结构可提升卷积的表示能力 | 复现《Dynamic Region-Aware Convolution》
|
12月前
|
机器学习/深度学习 算法 计算机视觉
YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
1041 6
YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
|
11月前
|
数据采集 人工智能 文字识别
OmniAlign-V:20万高质量多模态数据集开源,让AI模型真正对齐人类偏好
OmniAlign-V 是由上海交通大学、上海AI Lab等机构联合推出的高质量多模态数据集,旨在提升多模态大语言模型与人类偏好的对齐能力。该数据集包含约20万个多模态训练样本,涵盖自然图像和信息图表,结合开放式问答对,支持知识问答、推理任务和创造性任务。
579 10
OmniAlign-V:20万高质量多模态数据集开源,让AI模型真正对齐人类偏好
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-卷积Conv】 SPD-Conv空间深度转换卷积,处理低分辨率图像和小对象问题
YOLO目标检测专栏探讨了CNN在低分辨率和小目标检测中的局限性,提出SPD-Conv新架构,替代步长卷积和池化层,通过空间到深度层和非步长卷积保持细粒度信息。创新点包括消除信息损失、通用设计和性能提升。YOLOv5和ResNet应用SPD-Conv后,在困难任务上表现优越。详情见YOLO有效改进系列及项目实战目录。
|
机器学习/深度学习
YOLOv10优改系列一:YOLOv10融合C2f_Ghost网络,让YoloV10实现性能的均衡
本文介绍了YOLOv10的性能优化,通过融合Ghost模块和C2f结构,实现了网络性能的均衡。GhostNet通过GhostModule和GhostBottleNeck减少参数量,适用于资源有限的场景。YOLOv10-C2f_Ghost在减少参数和计算量的同时,保持了与原始网络相当或更好的性能。文章还提供了详细的代码修改步骤和可能遇到的问题解决方案。
2015 1
YOLOv10优改系列一:YOLOv10融合C2f_Ghost网络,让YoloV10实现性能的均衡
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-卷积Conv】SCConv :即插即用的空间和通道重建卷积
YOLOv10专栏介绍了将Swin Transformer应用于目标检测的创新。Swin Transformer采用分层窗口结构,解决了视觉任务中的尺度变化问题,提供线性复杂度的效率提升。在图像分类、目标检测和语义分割任务中表现出色,超越先前最佳模型。YOLOv10结合Swin Transformer,利用其局部注意力机制和层次化设计,提升了检测性能。提供的代码片段展示了Swin Transformer模块,包括窗口划分、注意力计算和相对位置偏置。更多信息可在相关博客文章中找到。
|
计算机视觉
YOLOv11改进策略【卷积层】| SAConv 可切换的空洞卷积 二次创新C3k2
YOLOv11改进策略【卷积层】| SAConv 可切换的空洞卷积 二次创新C3k2
656 0
YOLOv11改进策略【卷积层】| SAConv 可切换的空洞卷积 二次创新C3k2
|
机器学习/深度学习 计算机视觉
【YOLOv8改进-论文笔记】RFAConv:感受野注意力卷积,创新空间注意力
【YOLO目标检测专栏】探索空间注意力局限,提出感受野注意力(RFA)机制,解决卷积核参数共享问题。RFAConv增强大尺寸卷积核处理能力,不增加计算成本,提升网络性能。已在YOLOv8中实现,详情见YOLO目标检测创新改进与实战案例专栏。
|
机器学习/深度学习 计算机视觉 异构计算
YOLOv8优改系列一:YOLOv8融合BiFPN网络,实现网络快速涨点
本文介绍了将BiFPN网络应用于YOLOv8以增强网络性能的方法。通过双向跨尺度连接和加权特征融合,BiFPN能有效捕获多尺度特征,提高目标检测效果。文章还提供了详细的代码修改步骤,包括修改配置文件、创建模块文件、修改训练代码等,以实现YOLOv8与BiFPN的融合。
2510 0
YOLOv8优改系列一:YOLOv8融合BiFPN网络,实现网络快速涨点
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-注意力机制】Polarized Self-Attention: 极化自注意力,双重注意力机制
YOLOv10引入了极化自注意(PSA)块,结合通道和空间注意力,降低信息损失。PSA通过极化过滤保持高分辨率,并用增强处理非线性分布。在2D姿态估计和分割任务上提升1-2点精度,相比基线提升2-4点。代码示例展示了PSA模块如何集成到模型中。更多配置详情见相关链接。