news 2026/1/29 1:56:29

YOLO-v5代码实例:提取检测框坐标与类别信息用于后续处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO-v5代码实例:提取检测框坐标与类别信息用于后续处理

YOLO-v5代码实例:提取检测框坐标与类别信息用于后续处理

1. 引言

1.1 业务场景描述

在实际的计算机视觉项目中,目标检测模型如YOLO-v5不仅需要完成图像中的物体识别,更重要的是将检测结果结构化输出,供下游系统进行进一步处理。例如,在智能监控、自动化分拣、交通流量分析等场景中,开发者往往需要从YOLO-v5的推理结果中精确提取每个检测框的坐标(x_min, y_min, x_max, y_max)、置信度分数和类别标签,并将其用于逻辑判断、数据存储或与其他模块集成。

然而,许多初学者在使用torch.hub.load加载预训练模型后,仅调用.print().show()查看结果,却不清楚如何访问底层检测数据。本文将基于CSDN提供的YOLO-v5镜像环境,手把手实现检测结果的解析,并提供可复用的代码模板。

1.2 痛点分析

常见的问题包括: - 不清楚results对象的数据结构; - 无法准确获取边界框坐标和对应类别; - 缺乏对批量检测结果的处理经验; - 输出格式不统一,难以对接后续业务逻辑。

1.3 方案预告

本文将以官方yolov5s模型为例,演示如何: 1. 加载模型并执行推理; 2. 解析检测结果张量; 3. 提取结构化的目标信息; 4. 将结果转换为Python字典列表,便于JSON序列化或数据库写入。


2. 技术方案选型

2.1 为什么选择YOLO-v5?

尽管YOLO系列已发展至v8及以后版本,但YOLO-v5因其以下优势仍被广泛应用于工业部署:

维度YOLO-v5优势
易用性基于PyTorch实现,API简洁,支持torch.hub一键加载
模型轻量提供n/s/m/l/x五种尺寸,适合边缘设备部署
社区生态GitHub超10万星,文档完善,第三方工具丰富
推理速度在GPU上可达140+ FPS(以yolov5s为例)

相比Faster R-CNN等两阶段检测器,YOLO-v5更适合实时性要求高的场景;相比SSD,其精度更高且多尺度检测能力更强。


3. 实现步骤详解

3.1 环境准备

本实验基于CSDN提供的YOLO-V5镜像环境,已预装以下组件: - Python 3.8+ - PyTorch 1.10+ - OpenCV - Ultralytics YOLOv5 库

无需额外安装依赖,可直接进入项目目录开始开发:

cd /root/yolov5/

3.2 模型加载与推理

首先加载预训练模型并输入一张测试图像:

import torch # Load YOLOv5 small model model = torch.hub.load("ultralytics/yolov5", "yolov5s") # Input source: URL, local path, or OpenCV frame img = "https://ultralytics.com/images/zidane.jpg" # Inference results = model(img)

注意torch.hub.load会自动下载模型权重(首次运行),缓存于~/.cache/torch/hub/

3.3 解析检测结果结构

results是一个yolov5.models.common.Detections对象,包含多个输出接口。我们重点关注其内部张量:

# 获取检测结果张量 (n x 6): [x_min, y_min, x_max, y_max, confidence, class] detections = results.xyxy[0] # 第一张图的结果(batch size=1) print(detections.shape) # 输出: [num_detections, 6]

每行代表一个检测框,六列分别为: 1.x_min- 左上角横坐标 2.y_min- 左上角纵坐标 3.x_max- 右下角横坐标 4.y_max- 右下角纵坐标 5.confidence- 检测置信度(0~1) 6.cls- 类别索引(整数)

3.4 提取类别名称映射

YOLO-v5在COCO数据集上训练,共80个类别。可通过以下方式获取类别名:

# 获取类别标签映射表 class_names = model.names # dict: {0: 'person', 1: 'bicycle', ...}

3.5 结构化输出构建

将原始张量转换为易处理的Python字典列表:

def parse_detections(results, class_names): """ 将YOLOv5检测结果解析为结构化列表 :param results: YOLOv5 inference results :param class_names: 类别名称字典 :return: list of dicts containing detection info """ detections = results.xyxy[0].cpu().numpy() # 转为NumPy数组便于操作 parsed_results = [] for *box, conf, cls_idx in detections: x_min, y_min, x_max, y_max = [round(float(coord), 2) for coord in box] confidence = round(float(conf), 4) class_id = int(cls_idx) class_name = class_names[class_id] parsed_results.append({ "bbox": [x_min, y_min, x_max, y_max], "confidence": confidence, "class_id": class_id, "class_name": class_name }) return parsed_results # 使用示例 structured_output = parse_detections(results, model.names)

3.6 完整可运行代码

整合上述步骤,形成完整脚本:

import torch import json def main(): # 1. 加载模型 model = torch.hub.load("ultralytics/yolov5", "yolov5s") # 2. 输入图像 img = "https://ultralytics.com/images/zidane.jpg" # 3. 推理 results = model(img) # 4. 解析结果 detections = results.xyxy[0].cpu().numpy() class_names = model.names output_list = [] for *box, conf, cls_idx in detections: x_min, y_min, x_max, y_max = [round(float(coord), 2) for coord in box] output_list.append({ "bbox": [x_min, y_min, x_max, y_max], "confidence": round(float(conf), 4), "class_id": int(cls_idx), "class_name": class_names[int(cls_idx)] }) # 5. 打印结构化结果 print(json.dumps(output_list, indent=2)) if __name__ == "__main__": main()
输出示例:
[ { "bbox": [110.23, 177.12, 308.45, 400.0], "confidence": 0.8921, "class_id": 0, "class_name": "person" }, { "bbox": [402.11, 201.33, 450.22, 250.44], "confidence": 0.7654, "class_id": 32, "class_name": "sports ball" } ]

4. 实践问题与优化

4.1 常见问题及解决方案

问题原因解决方法
AttributeError: 'Detections' object has no attribute 'xyxy'结果未正确解析确保调用了model(img)返回的是Results对象
坐标值异常(负数或超出图像范围)图像缩放策略影响检查模型是否自动resize,必要时手动校正
类别ID显示为浮点数数据类型未转换使用int(cls_idx)强制转整型
多张图片批量处理失败未遍历results.xyxy列表results.xyxy[i]逐个处理

4.2 性能优化建议

  1. 批量推理加速:传入图像列表而非单张图像,利用GPU并行计算:python imgs = ["img1.jpg", "img2.jpg"] results = model(imgs)
  2. 降低分辨率提升速度:通过size参数控制输入尺寸:python results = model(img, size=320) # 默认640
  3. 过滤低置信度结果:设置阈值减少噪声:python results = model(img, conf_thres=0.5, iou_thres=0.4)

5. 总结

5.1 实践经验总结

  • YOLO-v5的results.xyxy[0]是获取检测框的核心入口;
  • 所有数值需从Tensor转为Python原生类型才能序列化;
  • model.names提供了类别ID到语义名称的映射,不可或缺;
  • 输出结构应尽量标准化(如字典列表),便于前后端交互。

5.2 最佳实践建议

  1. 封装解析函数:将parse_detections独立成工具函数,提高复用性;
  2. 添加异常处理:检查图像是否存在、网络是否可达;
  3. 日志记录机制:对空检测结果或高延迟请求做监控。

本文提供的代码已在CSDN YOLO-v5镜像环境中验证通过,可直接用于生产级应用开发。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/22 18:36:46

fft npainting lama依赖库管理:requirements.txt维护指南

fft npainting lama依赖库管理:requirements.txt维护指南 1. 引言 1.1 技术背景与问题提出 在基于 fft npainting lama 的图像修复系统二次开发过程中,依赖库的版本兼容性与环境一致性是影响项目稳定运行的关键因素。该系统集成了深度学习推理、图像处…

作者头像 李华
网站建设 2026/1/27 14:38:45

中文表现弱?Llama3-8B微调实战教程:Alpaca格式快速上手

中文表现弱?Llama3-8B微调实战教程:Alpaca格式快速上手 1. 背景与问题提出 Meta-Llama-3-8B-Instruct 是 Meta 于 2024 年 4 月发布的中等规模指令微调语言模型,凭借其 80 亿参数、单卡可部署的轻量级特性以及强大的英语任务执行能力&#…

作者头像 李华
网站建设 2026/1/21 6:09:09

Qwen3-Embedding-4B微服务架构:gRPC接口调用性能优化实战

Qwen3-Embedding-4B微服务架构:gRPC接口调用性能优化实战 1. 引言:通义千问3-Embedding-4B——面向长文本的高效向量化引擎 随着大模型应用在知识库问答、语义检索、去重聚类等场景中的广泛落地,高质量文本向量成为系统性能的关键瓶颈。Qwe…

作者头像 李华
网站建设 2026/1/27 15:43:42

GLM-ASR-Nano-2512部署优化:如何提升识别准确率300%

GLM-ASR-Nano-2512部署优化:如何提升识别准确率300% 1. 背景与挑战 语音识别技术在智能客服、会议记录、语音助手等场景中扮演着关键角色。GLM-ASR-Nano-2512 是一个强大的开源自动语音识别(ASR)模型,拥有 15 亿参数&#xff0c…

作者头像 李华
网站建设 2026/1/24 0:16:55

腾讯优图Youtu-2B开箱体验:低显存环境下的全能对话AI

腾讯优图Youtu-2B开箱体验:低显存环境下的全能对话AI 1. 引言:轻量级大模型的现实需求 随着大语言模型(LLM)在各类应用场景中的广泛落地,算力成本与部署门槛成为制约其普及的关键因素。尤其是在边缘设备、个人工作站…

作者头像 李华
网站建设 2026/1/22 20:09:34

Z-Image-Turbo部署痛点:网络中断导致下载失败?镜像免下载解法

Z-Image-Turbo部署痛点:网络中断导致下载失败?镜像免下载解法 1. 背景与问题引入 在当前AI图像生成技术快速发展的背景下,Z-Image-Turbo作为阿里巴巴通义实验室开源的高效文生图模型,凭借其卓越性能迅速成为开发者和创作者关注的…

作者头像 李华