【YOLOv8改进】Polarized Self-Attention: 极化自注意力 (论文笔记+引入代码)

简介: 该专栏专注于YOLO目标检测算法的创新改进和实战应用,包括卷积、主干网络、注意力机制和检测头的改进。作者提出了一种名为极化自注意(PSA)块,结合极化过滤和增强功能,提高像素级回归任务的性能,如关键点估计和分割。PSA通过保持高分辨率和利用通道及空间注意力,减少了信息损失并适应非线性输出分布。实验证明,PSA能提升标准基线和最新技术1-4个百分点。代码示例展示了如何在YOLOv8中实现PSA模块。更多详细信息和配置可在提供的链接中找到。

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

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

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

摘要

像素级回归可能是细粒度计算机视觉任务中最常见的问题,例如估计关键点热图和分割掩模。这些回归问题非常具有挑战性,特别是因为它们需要在低计算开销下对高分辨率输入/输出建模长距离依赖关系,以估计高度非线性的像素级语义。

尽管深度卷积神经网络(DCNNs)中的注意机制已经流行起来,用于增强长距离依赖关系,但是元素特定的注意力,例如非局部块,学习起来非常复杂且对噪声敏感,而大多数简化的注意力混合体试图在多种任务类型之间达到最佳折衷。

在本文中,我们提出了极化自注意(PSA)块,它融合了两个关键设计,以实现高质量的像素级回归:(1)极化过滤:在保持通道和空间注意力计算中的高内部分辨率的同时,完全折叠输入张量沿其相对应维度。(2)增强:构成非线性,直接适应典型细粒度回归的输出分布,例如2D高斯分布(关键点热图)或2D二项分布(二进制分割掩模)。PSA似乎已经充分利用了其仅通道和仅空间分支的表示能力,因此其顺序和并行布局之间只有边际度量差异。实验结果表明,PSA将标准基线提高了2至4个点,并将2D姿势估计和语义分割基准上的最新技术提高了1至2个点。

创新点

  • 极化滤波(Polarized filteringPolarized):在通道和空间维度保持比较高的分辨率(在通道上保持C/2的维度,在空间上保持[H,W]的维度 ),进一步减少低分辨率、低通道数和上采样造成的信息损失。

  • 增强(Enhancement):采用细粒度回归输出分布的非线性函数。

yolov8 引入


  class PolarizedSelfAttention(nn.Module):
    def __init__(self, channel=512):
        super().__init__()
        # 通道注意力权重计算层
        self.ch_wv = nn.Conv2d(channel, channel // 2, kernel_size=(1, 1))
        self.ch_wq = nn.Conv2d(channel, 1, kernel_size=(1, 1))
        # 通道和空间注意力的softmax
        self.softmax_channel = nn.Softmax(1)
        self.softmax_spatial = nn.Softmax(-1)
        # 通道注意力输出层
        self.ch_wz = nn.Conv2d(channel // 2, channel, kernel_size=(1, 1))
        # 用于通道注意力权重的层归一化和Sigmoid函数
        self.ln = nn.LayerNorm(channel)
        self.sigmoid = nn.Sigmoid()
        # 空间注意力权重计算层
        self.sp_wv = nn.Conv2d(channel, channel // 2, kernel_size=(1, 1))
        self.sp_wq = nn.Conv2d(channel, channel // 2, kernel_size=(1, 1))
        # 平均池化层,用于空间注意力计算
        self.agp = nn.AdaptiveAvgPool2d((1, 1))

    def forward(self, x):
        b, c, h, w = x.size()  # 输入x的尺寸

        # 通道注意力计算过程
        channel_wv = self.ch_wv(x)  # 对输入x进行卷积,得到中间特征
        channel_wq = self.ch_wq(x)  # 对输入x进行卷积,得到查询特征
        # 重塑特征,以便进行矩阵乘法
        channel_wv = channel_wv.reshape(b, c // 2, -1)  # 将特征图重塑为矩阵形式
        channel_wq = channel_wq.reshape(b, -1, 1)  # 将查询特征重塑为矩阵形式
        channel_wq = self.softmax_channel(channel_wq)  # 对查询特征应用softmax
        channel_wz = torch.matmul(channel_wv, channel_wq).unsqueeze(-1)  # 计算权重并增加一个维度
        # 应用层归一化、卷积和Sigmoid函数得到通道注意力权重
        channel_weight = (
            self.sigmoid(
                self.ln(self.ch_wz(channel_wz).reshape(b, c, 1).permute(0, 2, 1))
            )
            .permute(0, 2, 1)
            .reshape(b, c, 1, 1)
        )
        channel_out = channel_weight * x  # 将权重应用到输入x上

        # 空间注意力计算过程
        spatial_wv = self.sp_wv(x)  # 对输入x进行卷积,得到中间特征
        spatial_wq = self.sp_wq(x)  # 对输入x进行卷积,得到查询特征
        spatial_wq = self.agp(spatial_wq)  # 对查询特征进行平均池化
        spatial_wv = spatial_wv.reshape(b, c // 2, -1)  # 重塑特征
        spatial_wq = spatial_wq.permute(0, 2, 3, 1).reshape(b, 1, c // 2)  # 重塑查询特征并转置
        spatial_wq = self.softmax_spatial(spatial_wq)  # 对查询特征应用softmax
        spatial_wz = torch.matmul(spatial_wq, spatial_wv)  # 计算权重
        spatial_weight = self.sigmoid(spatial_wz.reshape(b, 1, h, w))  # 应用Sigmoid函数得到空间注意力权重
        spatial_out = spatial_weight * x  # 将权重应用到输入x上
        out = spatial_out + channel_out  # 合并通道和空间注意力结果
        # 返回最终的输出
        return out

# 主函数,用于测试极化自注意力模块
if __name__ == "__main__":
    x = torch.randn(1, 1024, 224, 224)  # 创建一个随机的输入张量,模拟一个批量大小为1,通道数为1024,尺寸为224x224的图像
    psa = PolarizedSelfAttention(channel=1024)  # 实例化一个极化自注意力模块,输入通道数设为1024
    x = psa(x)  # 通过极化自注意力模块处理输入张量
    print(x.shape)  # 打印处理后的张量的形状,以验证输出的维度是否正确

task与yaml配置

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

相关文章
|
29天前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进】D-LKA Attention:可变形大核注意力 (论文笔记+引入代码)
YOLO目标检测专栏探讨了Transformer在医学图像分割的进展,但计算需求限制了模型的深度和分辨率。为此,提出了可变形大核注意力(D-LKA Attention),它使用大卷积核捕捉上下文信息,通过可变形卷积适应数据模式变化。D-LKA Net结合2D和3D版本的D-LKA Attention,提升了医学分割性能。YOLOv8引入了可变形卷积层以增强目标检测的准确性。相关代码和任务配置可在作者博客找到。
|
29天前
|
机器学习/深度学习 计算机视觉 知识图谱
【YOLOv8改进】ACmix(Mixed Self-Attention and Convolution) (论文笔记+引入代码)
YOLO目标检测专栏探讨了YOLO的改进,包括卷积和自注意力机制的创新结合。研究发现两者在计算上存在关联,卷积可分解为1×1卷积,自注意力也可视为1×1卷积的变形。由此提出ACmix模型,它整合两种范式,降低计算开销,同时提升图像识别和下游任务的性能。ACmix优化了移位操作,采用模块化设计,实现两种技术优势的高效融合。代码和预训练模型可在相关GitHub和MindSpore模型库找到。 yolov8中引入了ACmix模块,详细配置参见指定链接。
|
29天前
|
机器学习/深度学习 测试技术 计算机视觉
【YOLOv8改进】DAT(Deformable Attention):可变性注意力 (论文笔记+引入代码)
YOLO目标检测创新改进与实战案例专栏探讨了YOLO的有效改进,包括卷积、主干、注意力和检测头等机制的创新,以及目标检测分割项目的实践。专栏介绍了Deformable Attention Transformer,它解决了Transformer全局感受野带来的问题,通过数据依赖的位置选择、灵活的偏移学习和全局键共享,聚焦相关区域并捕获更多特征。模型在多个基准测试中表现优秀,代码可在GitHub获取。此外,文章还展示了如何在YOLOv8中应用Deformable Attention。
|
29天前
|
机器学习/深度学习 编解码 PyTorch
【YOLOv8改进】HAT(Hybrid Attention Transformer,)混合注意力机制 (论文笔记+引入代码)
YOLO目标检测专栏介绍了YOLO系列的改进方法和实战应用,包括卷积、主干网络、注意力机制和检测头的创新。提出的Hybrid Attention Transformer (HAT)结合通道注意力和窗口自注意力,激活更多像素以提升图像超分辨率效果。通过交叉窗口信息聚合和同任务预训练策略,HAT优化了Transformer在低级视觉任务中的性能。实验显示,HAT在图像超分辨率任务上显著优于现有方法。模型结构包含浅层和深层特征提取以及图像重建阶段。此外,提供了HAT模型的PyTorch实现代码。更多详细配置和任务说明可参考相关链接。
|
30天前
|
计算机视觉
【YOLOv8改进】 MSDA:多尺度空洞注意力 (论文笔记+引入代码)
该文介绍了DilateFormer,一种新提出的视觉变换器,它在计算效率和关注接受域之间取得平衡。通过分析ViTs,发现浅层的局部性和稀疏性,提出了多尺度扩张注意力(MSDA),用于局部、稀疏的块交互。DilateFormer结合MSDA块和全局多头自注意力块,形成金字塔架构,实现各视觉任务的顶尖性能。与现有最佳模型相比,在ImageNet-1K分类任务上,DilateFormer性能相当但计算成本降低70%,同时在COCO检测/分割和ADE20K语义分割任务上表现优秀。文章还展示了MSDA的创新点,包括多尺度聚合、局部稀疏交互和减少自注意力冗余。此外,
|
1月前
|
机器学习/深度学习 自然语言处理 TensorFlow
使用Python实现深度学习模型:注意力机制(Attention)
使用Python实现深度学习模型:注意力机制(Attention)
35 0
使用Python实现深度学习模型:注意力机制(Attention)
|
30天前
|
机器学习/深度学习 测试技术 网络架构
【YOLOv8改进】MSCA: 多尺度卷积注意力 (论文笔记+引入代码).md
SegNeXt是提出的一种新的卷积网络架构,专注于语义分割任务,它证明了卷积注意力在编码上下文信息上优于自注意力机制。该模型通过结合深度卷积、多分支深度卷积和1x1逐点卷积实现高效性能提升。在多个基准测试中,SegNeXt超越了现有最佳方法,如在Pascal VOC 2012上达到90.6%的mIoU,参数量仅为EfficientNet-L2 w/ NAS-FPN的1/10。此外,它在ADE20K数据集上的mIoU平均提高了2.0%,同时保持相同的计算量。YOLOv8中引入了名为MSCAAttention的模块,以利用这种多尺度卷积注意力机制。更多详情和配置可参考相关链接。
|
28天前
|
计算机视觉 机器学习/深度学习 自然语言处理
【YOLOv8改进】CoTAttention:上下文转换器注意力(论文笔记+引入代码)
本文介绍了YOLO目标检测的创新改进,提出了一种名为Contextual Transformer (CoT)块的新型Transformer模块,用于增强视觉识别能力。CoT块通过3×3卷积编码上下文信息,并结合动态多头注意力矩阵,提高了视觉表示。此外,还提到了Large Separable Kernel Attention (LSKA)模块,它解决了大内核卷积的计算效率问题。CoTNet是基于CoT模块的Transformer风格骨干网络,可替代ResNet中的3×3卷积。CoTAttention类展示了如何在YOLOv8中集成此模块。文章还提供了源码链接和更多实战案例详情。
|
30天前
|
算法 文件存储 计算机视觉
【YOLOv8改进】MobileNetV3替换Backbone (论文笔记+引入代码)
YOLO目标检测专栏探讨了MobileNetV3的创新改进,该模型通过硬件感知的NAS和NetAdapt算法优化,适用于手机CPU。引入的新架构包括反转残差结构和线性瓶颈层,提出高效分割解码器LR-ASPP,提升了移动设备上的分类、检测和分割任务性能。MobileNetV3-Large在ImageNet上准确率提升3.2%,延迟降低20%,COCO检测速度增快25%。MobileNetV3-Small则在保持相近延迟下,准确率提高6.6%。此外,还展示了MobileNetV3_InvertedResidual模块的代码实现。
|
10月前
|
机器学习/深度学习 自然语言处理 并行计算
【Transformer系列(3)】 《Attention Is All You Need》论文超详细解读(翻译+精读)
【Transformer系列(3)】 《Attention Is All You Need》论文超详细解读(翻译+精读)
949 0
【Transformer系列(3)】 《Attention Is All You Need》论文超详细解读(翻译+精读)