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

news2024/12/22 19:46:55

前言

本文分享YOLO11的模型推理,检测任务包括物体分类、目标检测与跟踪、实例分割 、关键点估计、旋转目标检测等。

首先安装YOLO11

官方默认安装方式

通过运行 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/

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

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       # 获取边界框信息
    probs = result.probs       # 获取分类概率
    result.show()              # 显示结果

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

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()         # 显示推理结果

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

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博客

分享完成~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2200922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode125:验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则&#…

赋能新时代,智象未来(HiDream.ai)推动智能服务深度融入生活

在人工智能领域的最新发展中,智象未来科技有限公司(简称“智象未来(HiDream.ai)”以其卓越的技术创新和深厚的行业积累脱颖而出,一跃成为多模态生成式人工智能技术的领军者。该公司致力于开发和优化视觉多模态基础模型…

天海一体,遨游双卫星智能终端扬帆5G智慧海洋

海洋面积占地球表面的70%以上,世界贸易的90%左右由国际海运行业承运。但是,信号覆盖不均、通信延迟高、定位精度不足等问题,严重制约了海洋作业的效率与安全。智慧海洋,通信先行,AORO M5-5G双卫星智能终端应时代需求而…

MySQL从0到1基础语法笔记(下)

博客主页:誓则盟约系列专栏:Java Web关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 多表问题分析: 部门数据可以直接删除,然后还有部分员工…

为了加速上市,独角兽SHEIN的神秘创始人终于要露脸了?

神秘独角兽SHEIN在假期中迎来一个特殊新闻,《华尔街日报》、英国《金融时报》等媒体都报道称,SHEIN创始人许仰天最近先后前往美国和伦敦会见投资者,为其伦敦上市做准备。 (图源:英国《金融时报》官网) 这条…

使用fastjson解析json格式数据

在java里面无法直接解析JSON格式的字符串或文本&#xff0c;这时候我们就需要一个解析json格式的库&#xff0c;我们这里用fastjson,接下来的代码操作如下&#xff1a; 1、导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson&…

【阿克曼odom里程计解算】:从下位机到上位机,从原理到代码实现

前言 本文将从阿克曼的里程计计算原理出发&#xff0c;讲解下位机STM32如何对电机编码器数据进行整合计算&#xff0c;再通过串口进行上下位机进行数据转发&#xff0c;最终在Linux板端对下位机发送来的数据进行积分计算并最终通过ROS的odometry数据进行全局广播。本文使用到的…

JavaScript 数组简单学习

目录 1. 数组 1.1 介绍 1.2 基本使用 1.2.1 声明语法 1.2.2 取值语法 1.2.3 术语 1.3 案例 1. 数组 1.1 介绍 1.2 基本使用 1.2.1 声明语法 1.2.2 取值语法 1.2.3 术语 1.3 案例

自动化测试selenium篇(四)

1.定位一组元素 1.0 小问题 当运行测试代码程序需要跳转到页面&#xff0c;由于没有授权&#xff0c;导致页面不能成功跳转&#xff0c;且出现下面的情况&#xff1a; 步骤一&#xff1a;进入到idea&#xff0c;点击设置&#xff0c;如下所示&#xff1a; 进行上图操作之后&am…

图为大模型一体机的优秀落地案例:图为语伴

随着客户对即时、准确信息和解决方案的期望不断提升&#xff0c;企业面临着处理大量客户咨询、减少人力成本、提高服务效率等多重挑战。 而图为大模型一体机的诞生&#xff0c;就是为了应对传统的人工客服在处理客户咨询时&#xff0c;其产生的数据如聊天记录、通话记录等&…

中科院认可SCI期刊精选合集:5本国人友好刊,涵盖各领域!

本期&#xff0c;科检易学术将为大家精心推荐一系列既享有盛誉又相对容易发表的期刊。这些期刊不仅在各自的学术领域内具有较高的认可度和影响力&#xff0c;同时也以对国内研究者的友好态度而闻名。 无论是初出茅庐的研究新手还是经验丰富的学者&#xff0c;都能在这份涵盖多…

当今SNARKs全景

1. 引言 前序博客有&#xff1a; ZKP历史总览SNARK原理示例SNARK性能及安全——Prover篇SNARK性能及安全——Verifier篇Transparent 且 Post-quantum zkSNARKsSNARK DesignRollup项目的SNARK景观 SNARKs因&#xff1a; proof size证明时长验证时长密码学信任假设是否需要tr…

Chatgpt 原理解构

一、背景知识 1. 自然语言处理的发展历程 自然语言处理在不同时期呈现出不同的特点和发展态势。萌芽期&#xff0c;艾伦・图灵在 1936 年提出 “图灵机” 概念&#xff0c;为计算机诞生奠定基础&#xff0c;1950 年他提出著名的 “图灵测试”&#xff0c;预见了计算机处理自然…

linux 配置nfs

服务器端 sudo apt update sudo apt-get install nfs-kernel-server配置NFS服务器 mkdir /home/aa/workspace/nfsdir chmod 777 /home/aa/workspace/nfsdir sudo vim /etc/exports添加这个语句 /home/aa/workspace/nfsdir *(rw,sync,no_root_squash,insecure)sudo systemctl …

【音频生成】mac安装ffmpeg

前言 ffmpeg是一个开放源代码的自由软件&#xff0c;可以执行音频和视频多种格式的录影、转换、串流功能。算的上是进行音频处理的基本软件了&#xff0c;也是python包pydub的依赖。如果没有安装ffmpeg&#xff0c;就会报这个错。 FileNotFoundError: [Errno 2] No such file…

灯塔:JavaWeb笔记

什么是HTML、CSS? HTML (HypeText Markup Lanage):超文本标记语言。 超文本&#xff1a;超过了文本的限制&#xff0c;比普通的文本更强大。除了文字信息&#xff0c;还可以定义图片、音频、视频等内容。 标记语言&#xff1a;由表签构成的语言 HTML 标签都是提前预定义好的…

IT监控可视化:运维团队的智慧之眼

在当今这个数字化时代&#xff0c;IT系统已成为企业运营的核心支柱。随着业务的不断扩展和IT架构的日益复杂&#xff0c;运维团队面临着前所未有的挑战。如何高效、准确地监控和管理IT资源&#xff0c;确保系统的稳定性和可用性&#xff0c;成为了运维工作的重中之重。而IT监控…

利用可解释性技术增强制造质量预测模型

概述 论文地址&#xff1a;https://arxiv.org/abs/2403.18731 本研究提出了一种利用可解释性技术提高机器学习&#xff08;ML&#xff09;模型性能的方法。该方法已用于铣削质量预测&#xff0c;这一过程首先训练 ML 模型&#xff0c;然后使用可解释性技术识别不需要的特征并去…

库函数相关(上一篇补充)

一、创建自己的头文件 在当前目录下创建一个my_head.h将这个文件移动到/usr/include目录 #ifndef __MY_HEAD_H__ #define __MY_HEAD_H__#include <stdio.h> #include <errno.h> #include <string.h>#define PRINT_ERR(s) do{\printf("%s %s %d\n&quo…

MongoDB初学者入门教学:与MySQL的对比理解

&#x1f3dd;️ 博主介绍 大家好&#xff0c;我是一个搬砖的农民工&#xff0c;很高兴认识大家 &#x1f60a; ~ &#x1f468;‍&#x1f393; 个人介绍&#xff1a;本人是一名后端Java开发工程师&#xff0c;坐标北京 ~ &#x1f389; 感谢关注 &#x1f4d6; 一起学习 &…