【YOLO11系列】YOLO11的创新Get!!!

1.1 YOLO11简介

YOLO11 是 Ultralytics YOLO 系列实时对象检测器的最新版本,最新的YOLOv11模型在之前的YOLO版本引入了新功能和改进,以进一步提高性能和灵活性。YOLO11在快速、准确且易于使用,使其成为各种目标检测和跟踪、实例分割、图像分类和姿态估计任务的绝佳选择。

YOLOv11的变化相对于ultralytics公司的上一代作品YOLOv8变化不是很大的,主要改进主要有以下几点:

  • C2f变为C3K2
  • 在SPPF后面加了一层类似于注意力机制的C2PSA
  • 检测头内部替换了两个DWConv

官网YOLOv11在COCO数据集上的性能表现,如下图所示:在这里插入图片描述
官网源码:yolo11

1.2 与YOLO8的差异体现

下面两张图yolo11.yaml和yolo8.yaml的差异,左边为yolo8的yaml文件,右边为yolo11的yaml文件,从两者对比上主要体现在yolo8的c2f在yolo11替换为C3k2,且在yolo8的backbone的SPPF下一层加入C2PSA
在这里插入图片描述

1.3 YOLO11的网络结构

在这里插入图片描述

1.4 详解C3k2和C2PSA模块

1.4.1 C3k2模块

C3k2模块是基于C3完成的一个更快速的CSP模块,它是更高效的CSP瓶颈变体。它使用两个卷积代替一个大的卷积,从而加快了特征提取的速度。CSP模块结构如下:
在这里插入图片描述
在这里插入图片描述

C3K2代码详细解析:

class C3k2(C2f):
    def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):
        # 调用父类 C2f 的构造函数,初始化基础参数
        # c1: 输入通道数
        # c2: 输出通道数
        # n: 堆叠 Bottleneck 或 C3k 层的数量,默认值为1
        # c3k: 如果为 True,则使用 C3k 结构;如果为 False,则使用 Bottleneck 结构
        # e: 膨胀系数,默认为 0.5,控制 Bottleneck 内部卷积通道数
        # g: 分组卷积的组数,默认为 1
        # shortcut: 是否使用残差连接,默认为 True
        super().__init__(c1, c2, n, shortcut, g, e)

        # self.m: 使用 nn.ModuleList 来存储多层模块的列表
        # 根据传入的 c3k 参数决定使用 C3k 模块还是 Bottleneck 模块
        # 如果 c3k 为 True,则使用 C3k 模块;否则使用 Bottleneck 模块
        # self.c 是从父类 C2f 中继承的计算出的通道数
        # 这里会根据 n 的数量创建多个 Bottleneck 或 C3k 模块,组成一个列表
        self.m = nn.ModuleList(
            # 如果 c3k 为 True,则创建 C3k 模块,输入输出通道都为 self.c,shortcut 和 g 保持一致,卷积核大小为 2
            C3k(self.c, self.c, 2, shortcut, g) if c3k else 
            # 否则,创建 Bottleneck 模块,输入输出通道同样为 self.c,shortcut 和 g 也保持一致
            Bottleneck(self.c, self.c, shortcut, g) 
            for _ in range(n)  # 这里根据 n 来创建 n 个模块
        )

1.4.1 C2PSA模块

C2PSA机制是一个C2(C2f的前身)机制内部嵌入了一个多头注意力机制,下图为c2模块和C2PSA机制的原理图:
c2模块
在这里插入图片描述
C2PSA模块
在这里插入图片描述
C2PSA代码详细解析:

class C3k2(C2f):
    def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):
        # 调用父类 C2f 的构造函数,初始化基础参数
        # c1: 输入通道数
        # c2: 输出通道数
        # n: 堆叠 Bottleneck 或 C3k 层的数量,默认值为1
        # c3k: 如果为 True,则使用 C3k 结构;如果为 False,则使用 Bottleneck 结构
        # e: 膨胀系数,默认为 0.5,控制 Bottleneck 内部卷积通道数
        # g: 分组卷积的组数,默认为 1
        # shortcut: 是否使用残差连接,默认为 True
        super().__init__(c1, c2, n, shortcut, g, e)

        # self.m: 使用 nn.ModuleList 来存储多层模块的列表
        # 根据传入的 c3k 参数决定使用 C3k 模块还是 Bottleneck 模块
        # 如果 c3k 为 True,则使用 C3k 模块;否则使用 Bottleneck 模块
        # self.c 是从父类 C2f 中继承的计算出的通道数
        # 这里会根据 n 的数量创建多个 Bottleneck 或 C3k 模块,组成一个列表
        self.m = nn.ModuleList(
            # 如果 c3k 为 True,则创建 C3k 模块,输入输出通道都为 self.c,shortcut 和 g 保持一致,卷积核大小为 2
            C3k(self.c, self.c, 2, shortcut, g) if c3k else 
            # 否则,创建 Bottleneck 模块,输入输出通道同样为 self.c,shortcut 和 g 也保持一致
            Bottleneck(self.c, self.c, shortcut, g) 
            for _ in range(n)  # 这里根据 n 来创建 n 个模块
        )

1.5 Detect改进解析

YOLO11解耦头中的分类检测头增加了两个深度可分离卷积DWConv,其目的是为了减少参数量和计算量,具体的对比大家可以看下YOLOv8和YOLOv11的解耦头:
在这里插入图片描述
在这里插入图片描述

1.6 总结

该博客主要介绍了相较于YOLO8,YOLO11主要创新点,并对YOLO11的创新点做主要剖析,其他的YOLO11细节请读者自行研究!

1.7 其他

YOLO系列算法应用面十分广泛,可以结合一些可落地项目,在项目的基础上进行算法改进完成论文创新撰写,相应的落地应用链接可点击:链接

### YOLOv11 中 C2PSA 改进原理解释 #### 一、背景介绍 YOLO (You Only Look Once) 是一种广泛应用于实时目标检测的算法。随着版本不断迭代,YOLO 的性能得到了显著提升。在 YOLOv11 版本中引入了多种改进措施来提高模型精度和效率,其中一个重要改进就是加入了基于注意力机制的 C2PSA (Channel and Position Spatial Attention)[^1]。 #### 二、C2PSA 结构概述 C2PSA 主要由两部分组成:通道注意模块(Channel Attention Module, CAM) 和空间位置注意模块(Positional Spatial Attention Module, PSAM)。这两个组件共同作用于特征图上,通过自适应地调整不同通道以及空间区域的重要性权重,从而增强网络对于重要信息的关注度并抑制不相关的信息干扰[^2]。 #### 三、具体实现方式 - **通道注意模块(CAM)** 首先计算输入特征图各个通道之间的依赖关系,并据此生成一组用于调节各通道响应强度的比例系数向量。这一过程可以通过全局池化操作获取每层的感受野范围内的统计特性,再经过多层感知机(MLP)映射得到最终的权值分布。该方法能够有效地捕捉跨尺度上下文关联性,使得模型可以更好地理解图像中的语义结构。 - **空间位置注意模块(PSAM)** 对应于每个像素点的位置敏感型加权矩阵被构建出来,它反映了局部邻域内其他节点对该中心点的影响程度。为了进一步加强这种交互效应,还采用了混合局部通道注意力 MLCA 技术作为辅助手段,即在同一框架下同时考虑多个维度上的相互影响因素,进而形成更加鲁棒且精确的空间表示形式。 ```python import torch.nn as nn class ChannelAttention(nn.Module): def __init__(self, in_planes, ratio=16): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc1 = nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False) self.relu1 = nn.ReLU() self.fc2 = nn.Conv2d(in_planes // ratio, in_planes, 1, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x)))) max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x)))) out = avg_out + max_out return self.sigmoid(out) class SpatialAttention(nn.Module): def __init__(self, kernel_size=7): super(SpatialAttention, self).__init__() assert kernel_size in (3, 7), 'kernel size must be 3 or 7' padding = 3 if kernel_size == 7 else 1 self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) x = torch.cat([avg_out, max_out], dim=1) x = self.conv1(x) return self.sigmoid(x) ``` #### 四、应用效果分析 实验结果显示,在遥感影像数据集和其他公开测试集中加入 C2PSA 后,YOLOv11 模型不仅提高了小物体识别率,而且整体 mAP@0.5 提升明显。这表明所提出的双重注意力机制确实有助于改善现有架构中存在的某些局限性问题,特别是在处理复杂场景下的细粒度分类任务时表现出色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值