当前位置: 首页 > news >正文

YOLO实战:model.predict返回结果Results的10个关键属性解析(附代码示例)

YOLO实战:model.predict返回结果Results的10个关键属性解析(附代码示例)

当你第一次调用model.predict()并看到返回的Results对象时,可能会被其中复杂的属性结构所困惑。这篇文章将带你深入理解这个核心对象的每个组成部分,并通过实际代码演示如何提取和利用这些数据。

1. Results对象基础解析

Results对象是YOLO模型预测结果的容器,它包含了从原始图像到检测框的所有信息。我们先从一个简单的预测示例开始:

from ultralytics import YOLO # 加载预训练模型 model = YOLO('yolov8n.pt') # 使用nano版本 results = model.predict('bus.jpg') # 预测单张图片

这里需要注意,results实际上是一个列表,即使你只预测了一张图片。这是因为YOLO的设计支持批量预测,当处理多张图片时,列表中的每个元素对应一张图片的预测结果。

提示:访问单张图片的结果时,记得使用results[0],而不是直接使用results

2. 核心属性详解

2.1 检测框信息:boxes属性

boxesResults对象中最重要的属性之一,包含了所有检测到的边界框信息:

boxes = results[0].boxes print(boxes.xyxy) # 边界框坐标[x1,y1,x2,y2]格式 print(boxes.conf) # 每个框的置信度 print(boxes.cls) # 每个框的类别ID

boxes对象提供了多种坐标表示方式,适用于不同场景:

属性名格式说明适用场景
xyxy[x1,y1,x2,y2]像素坐标直接绘制到原图
xywh[x,y,width,height]中心点坐标计算物体中心位置
xyxyn归一化的xyxy坐标不同尺寸图像比较
xywhn归一化的xywh坐标模型输入标准化

2.2 类别映射:names属性

names是一个字典,将类别ID映射到可读的类别名称:

for box in results[0].boxes: class_id = int(box.cls) class_name = results[0].names[class_id] print(f"检测到 {class_name},置信度 {box.conf:.2f}")

2.3 原始图像信息

Results对象保留了原始图像的相关信息,方便后续处理:

orig_img = results[0].orig_img # 原始图像数组 orig_shape = results[0].orig_shape # 原始高宽(H,W) path = results[0].path # 图像路径

这些属性在需要将检测结果可视化或保存时特别有用。

3. 高级属性应用

3.1 关键点检测:keypoints

对于支持姿态估计的YOLO模型,keypoints属性包含了检测到的人体关键点:

if hasattr(results[0], 'keypoints'): keypoints = results[0].keypoints.xy # 关键点坐标 print(f"检测到 {len(keypoints)} 个人的关键点")

3.2 实例分割:masks

当使用分割模型时,masks属性提供了每个检测对象的掩码:

if hasattr(results[0], 'masks'): masks = results[0].masks print(f"检测到 {masks.shape[0]} 个分割掩码")

3.3 性能分析:speed属性

speed属性记录了预测过程中各阶段耗时(毫秒):

speed = results[0].speed print(f""" 预处理: {speed['preprocess']}ms 推理: {speed['inference']}ms 后处理: {speed['postprocess']}ms 总耗时: {sum(speed.values())}ms """)

4. 实战应用技巧

4.1 结果可视化

利用Results对象内置的方法可以快速可视化结果:

# 显示带标注的图像 results[0].show() # 保存可视化结果 results[0].save(filename='result.jpg')

4.2 结果过滤

基于置信度过滤低质量检测结果:

import torch conf_threshold = 0.5 boxes = results[0].boxes high_conf_boxes = boxes[boxes.conf > conf_threshold] print(f"过滤后保留 {len(high_conf_boxes)} 个高置信度检测")

4.3 结果转换为常用格式

将检测结果转换为Pandas DataFrame方便分析:

import pandas as pd def results_to_df(results): boxes = results[0].boxes data = { 'x1': boxes.xyxy[:, 0].tolist(), 'y1': boxes.xyxy[:, 1].tolist(), 'x2': boxes.xyxy[:, 2].tolist(), 'y2': boxes.xyxy[:, 3].tolist(), 'confidence': boxes.conf.tolist(), 'class': [results[0].names[int(c)] for c in boxes.cls] } return pd.DataFrame(data) df = results_to_df(results) print(df.head())

4.4 多模型结果比较

比较不同YOLO版本在同一图像上的表现:

models = { 'nano': YOLO('yolov8n.pt'), 'small': YOLO('yolov8s.pt'), 'medium': YOLO('yolov8m.pt') } comparison = {} for name, model in models.items(): results = model.predict('bus.jpg') boxes = results[0].boxes comparison[name] = { 'detections': len(boxes), 'avg_conf': torch.mean(boxes.conf).item() } print(pd.DataFrame(comparison).T)

在实际项目中,我发现boxes属性的多种坐标表示方式可以大大简化不同任务间的数据转换。特别是xywhn归一化坐标,在需要将检测结果作为另一个模型的输入时特别有用。

http://www.jsqmd.com/news/495615/

相关文章:

  • PHP 网站完整搬家教程(不报错、不断站)
  • Python机器学习空间模拟与时间预测:生态水文实战;地表参数空间模拟(土地利用分类/降尺度)与水文过程时间预测(径流/地下水位)
  • python-flask的家庭成员亲子相册图片照片管理系统的设计与实现_django pycharm vue
  • Vue2项目中如何通过开源组件优化局域网医疗影像大附件的浏览器端分片校验?
  • Sinkhorn算法实战:用Python实现最优传输问题的快速求解(附完整代码)
  • GLM-OCR快速部署:一键启动服务,支持文本、表格、公式识别
  • 本科论文高效通关:Paperxie AI 初稿写作,从选题到定稿的一站式学术助手
  • DeepSeek-R1-Distill-Qwen-1.5B部署指南:vLLM启动详解,小白也能快速搞定
  • 企业私域如何运营:从流量焦虑到资产沉淀的实战路径
  • 初始Skills
  • 如何用LLM提升自动驾驶的感知能力?实战案例与最新工具推荐
  • 小白程序员必看:手把手教你搭建RAG-SQL Router智能问答系统(收藏版)
  • MEMC插帧技术全解析:从原理到手机屏幕的实战应用
  • Code Connect:革新性设计开发协同工具全链路指南
  • 好写作AI:本科毕业生如何用AI克服写作拖延症——从“明天开始”到“现在动手”
  • 为什么你的MLCC总失效?5个工程师常忽略的机械应力陷阱
  • 开源项目管理与团队协作工具Plane深度解析
  • Mac新手必看:20个隐藏快捷键让你的工作效率翻倍(附实用场景)
  • 低成本改造双电源电路:用单电源运放OPA836实现±5V供电的3种方法
  • 效率倍增:用快马平台一键克隆和运行开源项目,告别环境配置烦恼
  • IPv4 和 IPv6 归属地查询有差异?运维必看的高效查询技巧
  • 从想法到画面:SPIRAN ART SUMMONER如何助力你的视觉创意快速落地
  • UniDexGrasp++实战:5分钟搞定ICCV 2023最新抓取算法环境配置与测试
  • 电脑风扇调速丨 FanControl v2.6.1 开源温控工具
  • 华人一天7篇Nature论文
  • 把钉钉打碎,阿里炼出了「悟空」,给企业配了一支龙虾军团
  • Phi-3-vision-128k-instruct Java开发实战:SpringBoot集成与图像分析API构建
  • 面向下一代GPU VPD架构的供电系统超低压大电流测试方案—— 费思N系列电子负载技术解析与应用实践
  • Seata 2.0 在 Linux 上的保姆级部署教程(含 Nacos 配置避坑指南)
  • RISC-V开发入门:5分钟搞定riscv32-glibc工具链下载与配置(Ubuntu 20.04版)