YOLO11采用改进的骨干和颈部架构,增强了特征提取能力,提高了物体检测的精确度和复杂任务的表现。YOLO11引入精炼的架构设计和优化的训练流程,实现更快的处理速度,同时保持精度和性能之间的最佳平衡。通过模型设计的进步,YOLO11m在COCO数据集上实现了更高的均值平均精度(mAP),同时使用比YOLOv8m少22%的参数,使其在不妥协准确性的情况下更加计算高效。YOLO11可以无缝部署在各种环境中,包括边缘设备、云平台以及支持NVIDIA GPU的系统,确保最大灵活性。无论是物体检测、实例分割、图像分类、姿态估计,还是定向物体检测(OBB),YOLO11都旨在应对多样的计算机视觉挑战。

921ce05452174acfb8c1cefc1b02cd7f.jpeg

1.Ultralytics YOLO11相比于之前版本的主要改进有哪些?

Ultralytics YOLO11在其前身基础上引入了几项重要进步。主要改进包括:

  1. 增强的特征提取:YOLO11采用改进的骨干和颈部架构,增强了特征提取能力,提高了物体检测的精确度。
  2. 优化的效率和速度:精炼的架构设计和优化的训练流程实现了更快的处理速度,同时保持了准确性和性能之间的平衡。
  3. 更高的准确性与更少的参数:YOLO11m在COCO数据集上实现了更高的均值平均精度(mAP),同时使用比YOLOv8m少22%的参数,使其在不妥协准确性的情况下更加计算高效。
  4. 环境适应性强:YOLO11可以在多种环境中部署,包括边缘设备、云平台以及支持NVIDIA GPU的系统。
  5. 支持广泛的任务:YOLO11支持多种计算机视觉任务,如物体检测、实例分割、图像分类、姿态估计和定向物体检测(OBB)。

        我们先来看一下其网络结构有什么变化,可以看出,相比较于YOLOv8模型,其将CF2模块改成C3K2,同时在SPPF模块后面添加了一个C2PSA模块,且将YOLOv10的head思想引入到YOLO11的head中,使用深度可分离的方法,减少冗余计算,提高效率。下面我们来详细看一下这两个模块的结构是怎么构成的,以及它们为什么要这样设计

2.  C3K2的网络结构

      从下面图中我们可以看到,C3K2模块其实就是C2F模块转变出来的,它代码中有一个设置,就是当c3k这个参数为FALSE的时候,C3K2模块就是C2F模块,也就是说它的Bottleneck是普通的Bottleneck;反之当它为true的时候,将Bottleneck模块替换成C3模块。

   a5fac4fcfe90452487fee5d02fecb75d.png

 3.  C2PSA的网络结构

  C2PSA是对 C2f 模块的扩展,它结合了PSA(Pointwise Spatial Attention)块,用于增强特征提取和注意力机制。通过在标准 C2f 模块中引入 PSA 块,C2PSA实现了更强大的注意力机制,从而提高了模型对重要特征的捕捉能力。

                 

3.1. C2f 模块回顾:

        C2f模块是一个更快的 CSP(Cross Stage Partial)瓶颈实现,它通过两个卷积层和多个 Bottleneck 块进行特征提取。相比传统的 CSPNet,C2f 优化了瓶颈层的结构,使得计算速度更快。在 C2f中,cv1 是第一个 1x1 卷积,用于减少通道数;cv2 是另一个 1x1 卷积,用于恢复输出通道数。而 n 是一个包含 Bottleneck 块的数量,用于提取特征。

3.2. C2PSA 模块的增强

        C2PSA 扩展了 C2f,通过引入PSA( Position-Sensitive Attention),旨在通过多头注意力机制和前馈神经网络来增强特征提取能力。它可以选择性地添加残差结构(shortcut)以优化梯度传播和网络训练效果。同时,使用FFN 可以将输入特征映射到更高维的空间,捕获输入特征的复杂非线性关系,允许模型学习更丰富的特征表示。

4. head部分 

YOLO11在head部分的cls分支上使用深度可分离卷积 ,具体代码如下,cv2边界框回归分支,cv3分类分支。

 self.cv2 = nn.ModuleList(
            nn.Sequential(Conv(x, c2, 3), Conv(c2, c2, 3), nn.Conv2d(c2, 4 * self.reg_max, 1)) for x in ch
        )
        self.cv3 = nn.ModuleList(
            nn.Sequential(
                nn.Sequential(DWConv(x, x, 3), Conv(x, c3, 1)),
                nn.Sequential(DWConv(c3, c3, 3), Conv(c3, c3, 1)),
                nn.Conv2d(c3, self.nc, 1),
            )
            for x in ch
        )

 


这个是我在哔哩哔哩上的讲解:YOLOv11 原理+代码 详细剖析_哔哩哔哩_bilibili

Logo

为开发者提供按需使用的算力基础设施。

更多推荐