YOLO11模型推理 | 目标检测与跟踪 | 实例分割 | 关键点估计 | OBB旋转目标检测

在这篇博客中,我们将详细分析YOLO11的模型推理,检测任务包括物体分类、目标检测与跟踪、实例分割 、关键点估计、旋转目标检测等。

我们将从官方推荐的安装方法开始,帮助你快速搭建YOLO11环境,并提供直接调用源码的方式以便于开发者根据需求定制模型。

为了满足不同场景的需求,YOLO11提供了多个推理版本,包括简洁版、专业版以及返回更丰富检测结果的版本,使得大家可以根据实际需求选择最合适的解决方案。

目录

首先安装YOLO11

A、官方默认安装方式

 B、直接调用YOLO11源码方式

一、YOLO11模型推理——目标检测

1.1、模型推理(简洁版)

1.2、模型推理(专业版)

1.3、模型推理(丰富返回结果版本)

二、YOLO11模型推理——实例分割

三、YOLO11模型推理——关键点估计

四、YOLO11模型推理——旋转目标检测

五、YOLO11模型推理——物体分类


首先安装YOLO11

A、官方默认安装方式

通过运行 pip install ultralytics 来快速安装 Ultralytics 包

安装要求

  • Python 版本要求:Python 版本需为 3.8 及以上,支持 3.8、3.9、3.10、3.11、3.12 这些版本。
  • PyTorch 版本要求:需要 PyTorch 版本不低于 1.8。

然后使用清华源,进行加速安装

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple/

 B、直接调用YOLO11源码方式

这种方式无需安装ultralytics,而且能灵活修改源代码。

首先到YOLO11代码地址,下载源代码:https://github.com/ultralytics/ultralytics

  • 在 GitHub 仓库页面上,用户点击绿色的 "Code" 按钮后,会弹出一个选项框。
  • 选择通过 HTTPS 或 GitHub CLI 克隆仓库,也可以点击框中的 "Download ZIP" 按钮,将整个仓库下载为 ZIP 压缩包到本地。

解压ultralytics-main.zip文件,目录结构如下所示

然后在ultralytics同级目录中,添加需要训练的代码(train.py)

以及测试数据的文件夹:datasets,权重文件目录:weights

ultralytics-main/
    .github/
    datasets/
    docker/
    docs/
    examples/
    runs/
    tests/
    ultralytics/
    weights/
    .gitignore
    CITATION.cff
    CONTRIBUTING.md
    LICENSE
    mkdocs.yml
    print_dir.py
    pyproject.toml
    README.md
    README.zh-CN.md
    train.py

weights目录可以存放不同任务的权重,比如:yolo11m-cls.pt、yolo11m-obb.pt、yolo11m-pose.pt、yolo11m-seg.pt、yolo11m.pt、yolo11n.pt等。

train.py文件是和ultralytics文件夹同一级目录的

后面可以直接调用ultralytics源代码中的函数、类和依赖库等,如果有需要直接修改ultralytics中的代码,比较方便。

备注:本文的模型推理代码支持官方默认安装方式,同时支持直接调用YOLO11源码方式

一、YOLO11模型推理——目标检测

1.1、模型推理(简洁版)

YOLO11模型推理,整体思路流程:

  1. 加载模型:使用 YOLO 类指定模型的权重文件 yolo11m.pt
  2. 执行推理:调用 model.predict() 方法对指定输入的数据,可以设置图像大小、置信度阈值,并选择保存推理结果。
  3. 处理检测结果:遍历 results,提取每个结果中的边界框和分类概率。
  4. 显示结果:通过 result.show() 可视化检测到的图像及其标注信息。

示例代码,如下所示: 

from ultralytics import YOLO
 
# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m.pt")

# 对'bus.jpg'图像进行推理,并获取结果
results = model.predict(r"test_image/test1.jpg", save=True, imgsz=640, conf=0.5)
 
# 处理返回的结果
for result in results:
    boxes = result.boxes       # 获取边界框信息
    result.show()              # 显示结果

执行后能看到检测的结果,如下图所示:

1.2、模型推理(专业版)

由于是直接调用model.predict() 方法进行推理,我们需要知道这个函数有哪些参数;

下面看看这个专业版,包括的完整参数示例,里面有所有model.predict() 函数的参数

results = model.predict(

    source="test.jpg",           # 数据来源,可以是文件夹、图片路径、视频、URL,或设备ID(如摄像头)

    conf=0.45,                      # 置信度阈值

    iou=0.6,                        # IoU 阈值

    imgsz=640,                      # 图像大小

    half=False,                     # 使用半精度推理

    device=None,                    # 使用设备,None 表示自动选择,比如'cpu','0'

    max_det=300,                    # 最大检测数量

    vid_stride=1,                   # 视频帧跳跃设置

    stream_buffer=False,            # 视频流缓冲

    visualize=False,                # 可视化模型特征

    augment=False,                  # 启用推理时增强

    agnostic_nms=False,             # 启用类无关的NMS

    classes=None,                   # 指定要检测的类别

    retina_masks=False,             # 使用高分辨率分割掩码

    embed=None,                     # 提取特征向量层

    show=False,                     # 是否显示推理图像

    save=True,                      # 保存推理结果

    save_frames=False,              # 保存视频的帧作为图像

    save_txt=True,                  # 保存检测结果到文本文件

    save_conf=False,                # 保存置信度到文本文件

    save_crop=False,                # 保存裁剪的检测对象图像

    show_labels=True,               # 显示检测的标签

    show_conf=True,                 # 显示检测置信度

    show_boxes=True,                # 显示检测框

    line_width=None                 # 设置边界框的线条宽度,比如2,4

)

示例代码,如下所示: 

from ultralytics import YOLO

# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m.pt")

# 对指定的图像文件夹进行推理,并设置各种参数
results = model.predict(
    source="test_image/test.jpg",   # 数据来源,可以是文件夹、图片路径、视频、URL,或设备ID(如摄像头)
    conf=0.45,                      # 置信度阈值
    iou=0.6,                        # IoU 阈值
    imgsz=640,                      # 图像大小
    half=False,                     # 使用半精度推理
    device=None,                    # 使用设备,None 表示自动选择,比如'cpu','0'
    max_det=300,                    # 最大检测数量
    vid_stride=1,                   # 视频帧跳跃设置
    stream_buffer=False,            # 视频流缓冲
    visualize=False,                # 可视化模型特征
    augment=False,                  # 启用推理时增强
    agnostic_nms=False,             # 启用类无关的NMS
    classes=None,                   # 指定要检测的类别
    retina_masks=False,             # 使用高分辨率分割掩码
    embed=None,                     # 提取特征向量层
    show=False,                     # 是否显示推理图像
    save=True,                      # 保存推理结果
    save_frames=False,              # 保存视频的帧作为图像
    save_txt=True,                  # 保存检测结果到文本文件
    save_conf=False,                # 保存置信度到文本文件
    save_crop=False,                # 保存裁剪的检测对象图像
    show_labels=True,               # 显示检测的标签
    show_conf=True,                 # 显示检测置信度
    show_boxes=True,                # 显示检测框
    line_width=None                 # 设置边界框的线条宽度,比如2,4
)

# 处理返回的结果
for result in results:
    boxes = result.boxes  # 获取边界框信息
    probs = result.probs  # 获取分类概率
    result.show()         # 显示推理结果

执行后能看到检测的结果,如下图所示:

1.3、模型推理(丰富返回结果版本)

模型推理后的返回信息:

  • 原始图像及其形状result.orig_imgresult.orig_shape 展示原始输入的图像及其形状。
  • 边界框、类别置信度及标签:通过 result.boxesresult.probs 获取边界框和分类的置信度信息,并打印类别名称。
  • 可选属性:如果模型检测了 maskskeypoints 或 OBB(定向边界框),将其打印出来。
  • 速度信息result.speed 用于显示每张图像的推理时间。
  • 结果展示与保存:使用 result.show() 显示图像,result.save() 保存图像
  • 结果转换:将检测结果转换为 numpy 数组和 JSON 格式并打印。

示例代码,如下所示: 

from ultralytics import YOLO

# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m.pt")

# 对'bus.jpg'图像进行推理,并获取结果
results = model.predict(r"test_image/test1.jpg", save=True, imgsz=640, conf=0.5)

# 处理返回的结果
for result in results:
    # 打印原始图像和形状
    print(f"Original Image: {result.orig_img}")
    print(f"Original Shape: {result.orig_shape}")

    # 打印边界框、置信度、类别标签
    print(f"Bounding Boxes: {result.boxes}")
    print(f"Class Probabilities: {result.probs}")
    print(f"Class Names: {result.names}")

    # 如果有 mask、关键点或 OBB(定向边界框),也将其打印出来
    if hasattr(result, 'masks'):
        print(f"Masks: {result.masks}")
    if hasattr(result, 'keypoints'):
        print(f"Keypoints: {result.keypoints}")
    if hasattr(result, 'obb'):
        print(f"Oriented Bounding Boxes (OBB): {result.obb}")

    # 打印推理速度信息
    print(f"Speed: {result.speed} ms per image")

    # 显示结果图像
    result.show()

    # 保存检测结果
    result.save()

    # 打印详细的日志字符串
    print(result.verbose())

    # 转换结果为 numpy 格式
    numpy_result = result.numpy()
    print(f"Results as Numpy Arrays: {numpy_result}")

    # 将结果转换为 JSON 格式
    json_result = result.tojson()
    print(f"Results as JSON: {json_result}")

会打印丰富的返回信息

Class Probabilities: None
Class Names: {0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus', 6: 'train', 7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant', 11: 'stop sign', 12: 'parking meter', 13: 'bench', 14: 'bird', 15: 'cat', 16: 'dog', 17: 'horse', 18: 'sheep', 19: 'cow', 20: 'elephant', 21: 'bear', 22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 'umbrella', 26: 'handbag', 27: 'tie', 28: 'suitcase', 29: 
'frisbee', 30: 'skis', 31: 'snowboard', 32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove', 36: 'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle', 40: 'wine glass', 41: 'cup', 
42: 'fork', 43: 'knife', 44: 'spoon', 45: 'bowl', 46: 'banana', 47: 'apple', 48: 'sandwich', 49: 'orange', 50: 'broccoli', 51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 'donut', 55: 'cake', 56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed', 60: 'dining table', 61: 'toilet', 62: 'tv', 63: 'laptop', 64: 'mouse', 65: 'remote', 66: 'keyboard', 67: 'cell phone', 68: 'microwave', 69: 'oven', 70: 'toaster', 71: 'sink', 72: 'refrigerator', 73: 'book', 74: 'clock', 75: 'vase', 76: 'scissors', 77: 'teddy bear', 78: 'hair drier', 79: 'toothbrush'}
Masks: None
Keypoints: None
Oriented Bounding Boxes (OBB): None
Speed: {'preprocess': 1.9345283508300781, 'inference': 493.81542205810547, 'postprocess': 0.0} ms per image
1 person, 1 car, 1 motorcycle, 1 bus, 6 traffic lights, 
Results as Numpy Arrays: ultralytics.engine.results.Results object with attributes:

boxes: ultralytics.engine.results.Boxes object
keypoints: None
masks: None
orig_shape: (897, 1381)
path: 'C:\\Users\\liguopu\\Downloads\\ultralytics-main\\test_image\\test1.jpg'
probs: None
save_dir: None
speed: {'preprocess': 1.9345283508300781, 'inference': 493.81542205810547, 'postprocess': 0.0}

二、YOLO11模型推理——实例分割

其实和上面检测的代码,基本是一样的,只需改变模型权重就可以了。

实例分割模型推理的简洁版,示例代码,如下所示: 

from ultralytics import YOLO
 
# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m-seg.pt")

# 对'bus.jpg'图像进行推理,并获取结果
results = model.predict(r"test_image/test2.jpg", save=True, imgsz=640, conf=0.5)
 
# 处理返回的结果
for result in results:
    masks = result.masks       # 获取分割信息
    # print("masks:", masks)
    result.show()              # 显示结果

打印信息:

image 1/1 C:\Users\liguopu\Downloads\ultralytics-main\test_image\test2.jpg: 288x640 1 car, 1 truck, 426.0ms
Speed: 0.0ms preprocess, 426.0ms inference, 0.0ms postprocess per image at shape (1, 3, 288, 640)
Results saved to runs\segment\predict4 

可视化实例分割的结果,如下图所示:

在coco8-seg/images/val/数据集中,看一下分割的效果

示例代码,如下所示:

from ultralytics import YOLO
 
# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m-seg.pt")

# 对'bus.jpg'图像进行推理,并获取结果
results = model.predict(r"test_image/coco8-seg/images/val/", save=True, imgsz=640, conf=0.5)
 
# 处理返回的结果
for result in results:
    masks = result.masks       # 获取分割信息
    # print("masks:", masks)
    result.show()              # 显示结果

打印信息:

image 1/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\coco8-seg\images\val\000000000036.jpg: 640x512 1 person, 1 umbrella, 772.3ms
image 2/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\coco8-seg\images\val\000000000042.jpg: 480x640 (no detections), 656.2ms
image 3/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\coco8-seg\images\val\000000000049.jpg: 640x512 4 persons, 2 horses, 1 potted plant, 718.2ms
image 4/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\coco8-seg\images\val\000000000061.jpg: 512x640 1 elephant, 695.1ms
Speed: 0.5ms preprocess, 710.4ms inference, 13.9ms postprocess per image at shape (1, 3, 512, 640)
Results saved to runs\segment\predict6

可视化实例分割的结果,如下图所示:

三、YOLO11模型推理——关键点估计

其实和上面检测的代码,基本是一样的,只需改变模型权重就可以了。

关键点估计模型推理的简洁版,示例代码,如下所示: 

from ultralytics import YOLO
 
# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m-pose.pt")

# 对'bus.jpg'图像进行推理,并获取结果
results = model.predict(r"test_image/test.jpg", save=True, imgsz=640, conf=0.5)
 
# 处理返回的结果
for result in results:
    keypoints = result.keypoints       # 获取关键点估计信息
    result.show()                      # 显示结果

打印信息

image 1/1 C:\Users\liguopu\Downloads\ultralytics-main\test_image\test.jpg: 384x640 8 persons, 426.2ms
Speed: 0.0ms preprocess, 426.2ms inference, 2.1ms postprocess per image at shape (1, 3, 384, 640)
Results saved to runs\pose\predict9

可视化关键点估计的结果,如下图所示:

四、YOLO11模型推理——旋转目标检测

其实和上面检测的代码,基本是一样的,只需改变模型权重就可以了。

旋转目标检测模型推理的简洁版,示例代码,如下所示: 

from ultralytics import YOLO
 
# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m-obb.pt")

# 对'bus.jpg'图像进行推理,并获取结果
results = model.predict(r"test_image/dota8/images/train/", save=True, imgsz=640, conf=0.5)
 
# 处理返回的结果
for result in results:
    obb = result.obb           # 获取旋转框信息
    result.show()              # 显示结果

打印信息

image 1/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\dota8\images\train\P0861__1024__0___1648.jpg: 640x640 708.0ms
image 2/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\dota8\images\train\P1053__1024__0___90.jpg: 640x640 662.0ms
image 3/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\dota8\images\train\P1142__1024__0___824.jpg: 640x640 640.9ms
image 4/4 C:\Users\liguopu\Downloads\ultralytics-main\test_image\dota8\images\train\P1161__1024__3296___1648.jpg: 640x640 691.2ms
Speed: 4.8ms preprocess, 675.5ms inference, 10.9ms postprocess per image at shape (1, 3, 640, 640)
Results saved to runs\obb\predict3

可视化旋转目标检测的结果,如下图所示:

五、YOLO11模型推理——物体分类

其实和上面检测的代码,基本是一样的,只需改变模型权重就可以了。

物体分类模型推理的简洁版,示例代码,如下所示: 

from ultralytics import YOLO
 
# 加载预训练的YOLOv11n模型
model = YOLO(r"weights_yolo/yolo11m-cls.pt")

# 对'bus.jpg'图像进行推理,并获取结果
results = model.predict(r"test_image/test.jpg", save=True, conf=0.5)
 
# 处理返回的结果
for result in results:
    probs = result.probs       # 获取分类概率
    result.show()              # 显示结果

打印信息

image 1/1 C:\Users\liguopu\Downloads\ultralytics-main\test_image\test.jpg: 224x224 basketball 1.00, ballplayer 0.00, volleyball 0.00, stage 0.00, barbell 0.00, 104.3ms
Speed: 4.7ms preprocess, 104.3ms inference, 0.0ms postprocess per image at shape (1, 3, 224, 224)
Results saved to runs\classify\predict3

可视化分类的结果,如下图所示,识别出来这是篮球(运动)

下面图像中,识别出来是斑马

下面图像中,识别出来多种物体类别

详细模型推理可以参考:https://docs.ultralytics.com/modes/predict/

相关文章推荐:一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理-CSDN博客

  YOLO11相关文章推荐:

一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理-CSDN博客

一篇文章快速认识 YOLO11 | 实例分割 | 模型训练 | 自定义数据集-CSDN博客

YOLO11模型推理 | 目标检测与跟踪 | 实例分割 | 关键点估计 | OBB旋转目标检测-CSDN博客

YOLO11模型训练 | 目标检测与跟踪 | 实例分割 | 关键点姿态估计-CSDN博客

YOLO11 实例分割 | 自动标注 | 预标注 | 标签格式转换 | 手动校正标签-CSDN博客

分享完成~

### 使用 YOLOv11n 进行推理的操作方法 YOLOv11 是 Ultralytics 公司开发的一系列目标检测模型中的最新版本之一,其性能和效率得到了显著提升[^1]。为了使用 YOLOv11n 模型进行推理操作,可以按照以下方式实现。 #### 安装依赖库 首先需要安装 ultralytics 库以及相关依赖项。可以通过 pip 工具完成安装: ```bash pip install ultralytics ``` 此命令会自动下载并配置所需的全部依赖环境。 #### 加载预训练模型 Ultralytics 提供了一系列预定义的模型权重文件,其中包括 YOLOv11n 的小型网络结构。加载该模型的方法如下所示: ```python from ultralytics import YOLO model = YOLO('yolov11n.pt') # 加载官方发布的 yolov11n 预训练权重 ``` 上述代码片段通过指定路径 `'yolov11n.pt'` 来初始化一个基于 YOLOv11n 架构的目标检测实例。 #### 执行推理过程 一旦模型被成功加载,就可以利用它来处理输入数据(图像或视频)。以下是执行单张图片推理的一个简单例子: ```python results = model('example.jpg') # 对名为 example.jpg 的图片运行预测 ``` 这里 `results` 变量保存了所有的检测结果,包括边界框坐标、类别标签及其对应的置信度分数等信息。 如果希望进一步自定义参数设置,则可以在调用时传递额外选项给函数,比如调整置信阈值或者启用增强测试模式等等。 --- ### 注意事项 - 确保本地已存在对应版本的 `.pt` 文件;如果没有的话,程序会在首次启动期间尝试从远程服务器上拉取最新的可用副本。 - 输入源既可以是个别静态帧也可以是一段连续动态影像流,在这种情况下需循环读入每一帧再逐帧送入到神经网络当中去分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一颗小树x

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

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

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

打赏作者

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

抵扣说明:

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

余额充值