opencv dnn模块 示例(27) 目标检测 object_detection 之 yolov11

1、YOLO v11 介绍

YOLO11是Ultralytics实时目标探测器系列中最新的迭代版本,重新定义尖端的精度、速度和效率。在以往具有令人印象深刻进步的yolo版本基础上,YOLO11对架构和训练方法进行了重大改进,使其成为各种计算机视觉任务的多功能选择。

1.1、改进点特性

YOLO11 相比之前版本,带来了五大关键改进:

  • 增强特征提取:YOLO11 通过重新设计主干网络和颈部网络(Backbone 和 Neck),新增了C3k2和C2PSA等组件,提高了从图像中提取特征的能力。这个改进使得 YOLO11 在复杂任务(如多目标检测、遮挡处理等)中表现得更为出色。特征提取的效率直接影响目标的精确定位和分类,新的架构优化提升了检测的敏感度和准确度。

  • 优化速度与效率:YOLO11 采用了更高效的架构和训练流程,保持高精度的同时提升了处理速度。

  • 更高精度与更少参数:YOLO11 的一个亮点在于它在减少了模型参数的情况下,依然能实现较高的精度。相较于 YOLOv8m,YOLO11m 在 COCO 数据集上的 mAP 提升了,且参数减少了 22%。 即:YOLO11 在减少计算资源消耗的同时,依然能够保持或提高检测性能。特别是在资源受限的设备上,如边缘计算设备或低功耗的嵌入式系统,这种高效性显得尤为重要。

  • 多环境适应性强:YOLO11 支持多种环境,包括边缘设备、云平台,甚至是移动端。结合 NVIDIA GPU 的支持,它能够在不同的硬件环境中无缝运行。

  • 广泛支持多种任务:除了传统的目标检测外,YOLO11 还支持目标跟踪、实例分割、关键点姿态估计、OBB定向物体检测(旋转目标检测)、物体分类等视觉任务。

1.2、性能对比

官网描述相比之前版本,它在架构和训练方法上有显著改进,提升了整体性能。实际感觉提升不太大。下图中,展示了 YOLO11 与其他 YOLO 版本(如 YOLOv10、YOLOv9 等)在延迟与检测精度(mAP)上的对比。
在这里插入图片描述

1.3、多任务支持

yolo11支持多种视觉任务,包括目标检测、实例分割、关键点姿态估计、OBB旋转目标检测和物体分类。

下表提供了YOLO11模型变体的概述,展示了它们在特定任务中的适用性以及与推理、验证、训练和导出等操作模式的兼容性。这种灵活性使YOLO11适用于计算机视觉中的广泛应用,从实时检测到复杂的分割任务。

ModelFilenamesTaskInferenceValidationTrainingExport
YOLO11yolo11n.pt yolo11s.pt yolo11m.pt yolo11l.pt yolo11x.ptDetection
YOLO11-segyolo11n-seg.p yolo11s-seg.pt yolo11m-seg.pt yolo11l-seg.pt yolo11x-seg.ptInstance Segmentation
YOLO11-poseyolo11n-pose.pt yolo11s-pose.pt yolo11m-pose.pt yolo11l-pose.pt yolo11x-pose.ptPose/Keypoints
YOLO11-obbyolo11n-obb.pt yolo11s-obb.pt yolo11m-obb.pt yolo11l-obb.pt yolo11x-obb.ptOriented Detection
YOLO11-clsyolo11n-cls.pt yolo11s-cls.pt yolo11m-cls.pt yolo11l-cls.pt yolo11x-cls.ptClassification

每种任务都有专门的模型文件(如yolo11n.pt、yolo11m-seg.pt 等),支持推理、验证、训练和导出功能。可以根据具体的任务需求,在不同场景中灵活部署 YOLO11。

模型太多,卷不动了,具体代码层面的改进优化就不说明,有兴趣直接看源码…

2、测试

官方默认的安装方式是:通过运行 pip install ultralytics 来快速安装 Ultralytics 包。 安装有问题时,建议使用国内镜像源加速 pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.1、官方Python测试

YOLOv1 可以在命令行界面(CLI)中直接使用,只需输入 yolo 命令:

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

以 coco数据集训练的 yolov8m.pt 进行测试为例,执行脚本为 yolo predict model=yolo11m.pt source=bus.jpg device=0,运行输出如下

(yolo_pytorch) E:\yolov8-ultralytics>yolo predict model=yolov8m.pt source='https://ultralytics.com/images/bus.jpg' device=0
Ultralytics YOLOv8.0.154  Python-3.9.16 torch-1.13.1+cu117 CUDA:0 (NVIDIA GeForce GTX 1080 Ti, 11264MiB)
YOLOv8m summary (fused): 218 layers, 25886080 parameters, 0 gradients, 78.9 GFLOPs

Found https://ultralytics.com/images/bus.jpg locally at bus.jpg
image 1/1 E:\DeepLearning\yolov8-ultralytics\bus.jpg: 640x480 4 persons, 1 bus, 19.0ms
Speed: 3.0ms preprocess, 19.0ms inference, 4.0ms postprocess per image at shape (1, 3, 640, 480)
Results saved to runs\detect\predict1

首次运行时,会自动下载最新的模型文件。
cpu 和 gpu的时间
CPU 3.9ms preprocess, 579.7ms inference, 21.2ms postprocess
GPU 2.3ms preprocess, 17.5ms inference, 1.5ms postprocess

2.2、Opencv dnn测试

按照惯例将pt转换为onnx模型
yolo detect export model=yolo11m.pt format=onnx imgsz=640,640
输出如下:

(yolo_pytorch) E:\DeepLearning\yolov8-ultralytics>yolo detect export model=yolo11m.pt format=onnx imgsz=640,640
Ultralytics 8.3.8 🚀 Python-3.9.16 torch-1.13.1+cu117 CPU (Intel Core(TM) i7-7700K 4.20GHz)
YOLO11m summary (fused): 303 layers, 20,091,712 parameters, 0 gradients, 68.0 GFLOPs

PyTorch: starting from 'yolo11m.pt' with input shape (1, 3, 640, 640) BCHW and output shape(s) (1, 84, 8400) (38.8 MB)

ONNX: starting export with onnx 1.14.0 opset 16...
ONNX: slimming with onnxslim 0.1.34...
ONNX: export success ✅ 5.4s, saved as 'yolo11m.onnx' (76.9 MB)

Export complete (7.5s)
Results saved to E:\DeepLearning\yolov8-ultralytics
Predict:         yolo predict task=detect model=yolo11m.onnx imgsz=640
Validate:        yolo val task=detect model=yolo11m.onnx imgsz=640 data=/ultralytics/ultralytics/cfg/datasets/coco.yaml
Visualize:       https://netron.app
💡 Learn more at https://docs.ultralytics.com/modes/export

使用netron查看网络结构,依然和yolov8一致,输入 (640,640),输出(84, 8400)。 因此直接使用yolov8的测试代码,仅修改模型文件即可。参考代码见链接 opencv dnn模块 示例(23) 目标检测 object_detection 之 yolov8

2.3、测试统计

python (CPU):579ms
python (GPU):17ms

opencv dnn(CPU): 110ms.
opencv dnn(GPU): 报错

OpenCV(4.10.0) Error: Assertion failed
(biasLayerData->outputBlobsWrappers.size() == 1) in
cv::dnn::dnn4_v20240521::Net::Impl::fuseLayers, file
D:\opencv\opencv4.10.0\sources\modules\dnn\src\net_impl_fuse.cpp, line
608

以下包含 预处理+推理+后处理:
openvino(CPU):325ms
onnxruntime(GPU):28ms
onnxruntime(GPU):393ms
TensorRT:19ms

3、训练

训练部分,也完全同 opencv dnn模块 示例(23) 目标检测 object_detection 之 yolov8 中一致。

4、使用gradio创建一个简单的web demo

这里为了快速出原型,我们给出完整的脚本命令

conda create -n ultralytics python==3.12

conda activate ultralytics

pip install torch torchvision torchaudio --index-url https://mirrors.nju.edu.cn/pytorch/whl/cu118

pip install ultralytics gradio opencv-python

python gra_web_demo.py

首先使用创建一个虚拟环境,使用pip安装 pytorch gpu版本(使用了国内镜像加速),之后安装 ultralytics、gradio、opencv-python包。

最后的 gra_web_demo.py 即为demo 代码,模型使用 yolov11-m.pt。

import gradio as gr
import cv2
from ultralytics import YOLO
import numpy as np

# 加载YOLOv11模型(确保你已安装ultralytics库并支持YOLOv11)
model = YOLO("yolo11m.pt")  # 或者使用自己的权重文件: YOLO("path/to/your_model.pt")

def detect_objects(image):
    # 运行检测
    results = model(image)

    # 获取预测结果
    annotated_frame = results[0].plot()  # 可视化叠加框图

    return annotated_frame

# 创建 Gradio 接口
demo = gr.Interface(
    fn=detect_objects,
    inputs=gr.Image(type="numpy", label="上传图片"),
    outputs=gr.Image(type="numpy", label="检测结果"),
    title="YOLOv11目标检测演示",
    description="上传图片,模型将使用YOLOv11进行目标检测并显示检测结果。"
)

# 启动 Gradio 服务
if __name__ == "__main__":
    demo.launch()

运行后使用网页打开 http://127.0.0.1:7860,如下图

在这里插入图片描述
上传 bud.jps 测试截图
在这里插入图片描述
运行cmd窗口截图为
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aworkholic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值