YOLOv11 架构改进 & 常见指令

点击下方卡片,关注“小白玩转Python”公众号

今天我们介绍 YOLOv11,这个系列中的最新成员。YOLO 是一个在目标检测领域几乎无与伦比的算法,它产生了非常成功的结果。这个算法系列在 YOLOv5 之后由 Ultralytics 继续开发,并且每个新模型都带来了更好的性能。

dd9a3d6e0a4719df515a06d7d0c1f4d5.jpeg

YOLOv11 是 Ultralytics 开发的最新 YOLO 模型。这个模型在执行实时目标检测时,继续平衡准确性和效率。在之前的 YOLO 版本基础上,YOLO11 在架构和训练上提供了显著的改进。在保持速度的同时提高性能的最重要的架构变化是增加了 C3K2 块、SPFF 模块和 C2PSA 块。

  • C3K2 块:这是在以前版本中引入的 CSP(Cross Stage Partial)块的增强。该模块使用不同的核大小(例如 3x3 或 5x5)和通道分离策略来优化更复杂特征的提取。

  • SPFF(Spatial Pyramid Pooling Fusion)模块:它是 YOLO 版本中使用的 SPP(Spatial Pyramid Pooling)模块的优化版本。该模块允许模型通过捕获不同尺度的物体属性来更好地执行。

  • C2PSA 块:这个块通过结合通道和空间信息提供更有效的特征提取。它还与多头注意力机制一起工作,从而实现对物体更准确的感知。它优化了前一层的特征图,并用注意力机制丰富它们,以提高模型的性能。这种结构使得在复杂场景中更精确的检测成为可能,并提高了 YOLOv11 的准确性。

除了这些架构变化,YOLOv11 像 YOLOv8 一样具有多模型能力。得益于其多模型特性,YOLOv11 可以执行以下任务:

  • 目标检测:在图像中识别和定位物体。

  • 实例分割:检测物体并确定它们的边界。

  • 分类:将图像分类到预定义的类别中。

  • 姿态估计:检测和跟踪人体上的标志点。

  • 定向目标检测(OBB):检测旋转物体以提高灵敏度。

在我们开始使用之前,让我们谈谈新 YOLO 版本带来的特性。

  • 现有的主干结构已经被 C3K2 块替换,以提高特征提取能力。

  • 颈部结构已经用 SPFF 模块改进,以捕获不同大小的物体并更好地检测小物体。

  • 增加了 C2PSA 块,专注于更小或部分遮挡物体中的重要区域。

  • 通过多模型能力增加了任务数量。

  • 更容易适应各种环境,包括边缘设备。

  • 得益于其优化的架构和高效的处理能力,它可以部署在边缘设备、云平台和支持 NVIDIA GPU 的系统上。

由于这些优化和创新,YOLOv11 在实时应用中提供了性能提升。模型运行更快、更准确,提高了目标检测、样本分割和姿态估计等任务的效率。此外,兼容性得到了改善,使模型可以轻松地在不同的平台和硬件上运行(例如云或边缘设备)。在 Ultralytics (详见官网:https://docs.ultralytics.com/models/yolo11/)页面上,当他们评估 YOLOv11 与以前版本相比的性能时,他们发表了以下评论。

随着模型设计的改进,YOLO11m 在使用比 YOLOv8m 少 22% 参数的情况下,在 COCO 数据集上实现了更高的平均精度均值(mAP),使其在不牺牲准确性的情况下具有计算效率。

然而,尽管 YOLOv11 模型的性能很好并且提供了广泛的范围,但在目标检测方面,它并不像 YOLOv10 那样成功。尽管 YOLOv10 有更多的参数,YOLOv11 只实现了微小的差异(+0.1-0.5)的更好性能。在这种情况下,YOLOv10 可能仍然是我们的偏好,因为参数的过剩导致速度损失和成本。

e8ab1e2af44d16fa86babf3db1fd4261.png

使用 YOLOv11

使用 PyTorch 构建 YOLOv11 模型及其与其他模式的使用简要如下。

步骤 1:首先,我们需要下载 Ultralytics 库。有了这个库,我们可以运行从 YOLOv3 到 YOLOv11 的所有模型。

pip install ultralytics

步骤 2:如果你只想在一个训练好的模型中进行预测。以下代码就足够了。否则你可以跳过它。

yolo predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'py

步骤 3:如果你说不,我想训练我的模型,你可以选择你想要的模型并下载 .pt 文件。

from ultralytics import YOLO


# Load a COCO-pretrained YOLO11n model
model = YOLO("yolo11n.pt")

步骤 4:然后你需要选择训练数据、训练epoch、图像大小和你的设备。

train_results = model.train(
    data="coco8.yaml",  # path to dataset YAML
    epochs=100,  # number of training epochs
    imgsz=640,  # training image size
    device="cpu",  # device to run on, i.e. device=0 or device=0,1,2,3 or device=cpu
)

步骤 5:你需要用验证数据评估和测试模型。它将验证数据从训练数据本身中分离出来,对于测试,你只需要提供你想要测试的图像的路径。

metrics = model.val()


results = model("path/to/image.jpg")
results[0].show()

步骤 6:在最后一步,我们可以导出你的模型,以便以后再次使用。如果你想用你自己的模型进行预测,只需使用步骤-2。

path = model.export(format="onnx")

YOLOv11 常用操作指令

用你自己的数据训练你的目标检测模型,具有特定的学习率和epoch:

yolo train data=coco8.yaml model=yolo11n.pt epochs=10 lr0=0.01

对于模型验证:

yolo val model=yolo11n.pt data=coco8.yaml batch=1 imgsz=640

在 YouTube 视频上测试模型的结果,图像大小为 320:

yolo predict model=yolo11n.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320

使用预训练的分割模型在 YouTube 视频上预测,图像大小为 320:

yolo segment predict model=yolo11n-seg.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320

将你特别训练的模型导出为 .pt 扩展名:

yolo export model=path/to/best.pt format=onnx

·  END  ·

🌟 想要变身计算机视觉小能手?快来「小白玩转Python」公众号!

回复Python视觉实战项目,解锁31个超有趣的视觉项目大礼包!🎁

7dd5c8ef406262caa04972335a3f4c45.png

本文仅供学习交流使用,如有侵权请联系作者删除

### YOLO11obb 技术细节与实现 YOLO11obb 是基于 YOLOv11 的一种扩展版本,专门用于旋转目标检测任务。它继承了 YOLOv11 的高效性和精确性,并针对旋转框(oriented bounding box, obb)进行了优化设计[^2]。 #### 1. 数据预处理 为了适配旋转目标检测的任务需求,在数据预处理阶段通常会对输入图像进行特定的操作。这些操作可能包括但不限于 `reshape` 和 `transpose`,目的是调整张量的形状以便于后续网络层的计算[^3]。例如: ```python import numpy as np def preprocess_image(image): # 调整尺寸到固定大小 resized_image = cv2.resize(image, (input_width, input_height)) # 将HWC转换为CHW并标准化 transposed_image = np.transpose(resized_image, (2, 0, 1)).astype(np.float32) normalized_image = (transposed_image / 255.0) - mean return normalized_image ``` 上述代码展示了如何通过 `cv2.resize` 改变图片分辨率以及通过 `np.transpose` 更改通道顺序来完成预处理工作。 #### 2. 模型结构 YOLO11obb 的核心在于其对传统边界框预测机制的改进。相比普通的水平矩形框,该方法能够估计出带有角度信息的目标包围盒。这主要依赖以下几个方面: - **特征提取模块**:采用先进的骨干网如CSPDarknet70等提取丰富的多尺度特征。 - **回归头设计**:引入额外的角度参数作为输出的一部分,从而支持任意方向上的物体定位。 以下是简化版的模型定义片段: ```python class YOLO11OBBDetector(nn.Module): def __init__(self, backbone='cspdarknet', num_classes=80): super(YOLO11OBBDetector, self).__init__() # 定义主干网络和其他组件... pass def forward(self, x): features = self.backbone(x) predictions = self.head(features) return predictions ``` #### 3. 训练策略 训练过程中需要注意一些特殊设置以充分利用旋转标注的数据集特性。比如损失函数的设计需考虑角度误差的影响;同时还可以运用混合精度训练加速收敛过程。 #### 4. 推理流程 推理时除了常规的非极大抑制(NMS),还需要加入角度约束条件筛选最终候选区域。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值