news 2026/6/19 1:33:00

YOLOv9输出格式解析:JSON/CSV导出可能性探讨

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv9输出格式解析:JSON/CSV导出可能性探讨

YOLOv9输出格式解析:JSON/CSV导出可能性探讨

1. 技术背景与问题提出

目标检测作为计算机视觉中的核心任务之一,其结果的可解释性与后续处理能力直接影响实际应用的效率。YOLOv9 作为 YOLO 系列的最新演进版本,在精度与速度之间实现了新的平衡,广泛应用于工业质检、智能安防、自动驾驶等领域。然而,尽管模型推理性能不断提升,原始输出格式的局限性逐渐显现——默认以图像标注和文本文件(如.txt)形式保存检测结果,难以直接对接数据分析、可视化或业务系统。

在工程实践中,用户往往需要将检测结果结构化存储,以便进行统计分析、生成报告或集成至后端服务。常见的需求包括:

  • 将每帧图像的检测框、类别、置信度导出为JSON 格式,便于 Web 服务调用;
  • 汇总多张图片的结果为CSV 文件,用于批量分析与可视化;
  • 实现自动化流水线中对检测结果的程序化读取与处理。

因此,本文聚焦于 YOLOv9 的输出机制,深入解析其默认输出结构,并探讨实现 JSON 与 CSV 格式导出的技术路径,结合官方镜像环境提供可落地的代码实践方案。

2. YOLOv9 默认输出结构解析

2.1 输出目录组织

当执行detect_dual.py进行推理时,YOLOv9 会自动生成一个带有时间戳或自定义名称的输出目录(如runs/detect/yolov9_s_640_detect),其内部结构如下:

runs/ └── detect/ └── yolov9_s_640_detect/ ├── horses.jpg # 原始输入图像 ├── labels/ # 每张图对应的检测结果(.txt格式) │ └── horses.txt └── result.json # (可选)若手动添加逻辑可生成

其中,labels/*.txt是核心检测结果文件,采用 YOLO 标注格式,每一行代表一个检测框:

<class_id> <center_x> <center_y> <width> <height> <confidence>

所有坐标均为归一化值(0~1 范围),confidence表示该预测的置信度。

2.2 数据结构本质分析

从数据角度看,每个.txt文件对应一张图像的所有检测实例,本质上是一个二维表格数据,包含字段:

  • 图像名(隐含于文件名)
  • 检测对象类别 ID 与名称
  • 边界框参数(归一化或像素级)
  • 置信度分数

这种扁平化的文本格式适合训练阶段的数据加载,但不利于跨图像聚合分析或系统集成。例如,无法直接使用 Pandas 加载多个.txt文件进行整体统计,也无法被前端框架轻松解析。


3. JSON/CSV 导出的技术实现路径

3.1 扩展 detect_dual.py 实现结构化输出

为了支持 JSON 和 CSV 导出,我们需要修改 YOLOv9 的推理脚本detect_dual.py,在检测完成后收集所有结果并统一写入结构化文件。

修改思路:
  1. 在推理循环中捕获每张图像的检测结果(pred张量);
  2. 将张量解码为 Python 字典列表,包含类别、坐标、置信度等信息;
  3. 汇总所有图像结果,分别导出为 JSON 和 CSV。
核心代码实现:
# 新增:导入依赖库 import json import pandas as pd import os from pathlib import Path # === 在 detect_dual.py 中找到推理主循环附近插入以下逻辑 === # 初始化结果容器 all_results = [] # 假设在 run() 函数内,img, path, im 等变量已定义 for i, (path, img, im, vid_cap, s) in enumerate(dataset): # ...原有前向推理代码... pred = model(im) pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms) for det in pred: # detections per image if len(det): # 获取图像尺寸 h, w = im.shape[2:] result_item = { "image_path": str(Path(path).name), "detections": [] } for *xyxy, conf, cls in det: # 转换为 xywh 归一化格式 xywh = (torch.tensor(xyxy).view(1, 4)).xyxy2xywh / torch.tensor([w, h, w, h]) xywh = [round(x.item(), 4) for x in xywh[0]] detection = { "class_id": int(cls.item()), "class_name": names[int(cls)], "confidence": round(conf.item(), 4), "bbox": { "x_center": xywh[0], "y_center": xywh[1], "width": xywh[2], "height": xywh[3] } } result_item["detections"].append(detection) all_results.append(result_item)
导出为 JSON 与 CSV:
# 推理结束后导出 save_dir = Path('runs/detect/yolov9_s_640_detect') # 导出 JSON json_path = save_dir / 'detection_results.json' with open(json_path, 'w', encoding='utf-8') as f: json.dump(all_results, f, indent=2, ensure_ascii=False) print(f"✅ JSON 结果已保存至: {json_path}") # 导出 CSV(展平为表格) rows = [] for res in all_results: img_name = res["image_path"] for det in res["detections"]: row = { "image": img_name, "class_id": det["class_id"], "class_name": det["class_name"], "confidence": det["confidence"], "x_center": det["bbox"]["x_center"], "y_center": det["bbox"]["y_center"], "width": det["bbox"]["width"], "height": det["bbox"]["height"] } rows.append(row) df = pd.DataFrame(rows) csv_path = save_dir / 'detection_results.csv' df.to_csv(csv_path, index=False) print(f"✅ CSV 结果已保存至: {csv_path}")

3.2 使用建议与注意事项

  • 性能影响:对于大规模图像集,建议限制单次推理数量或启用分批导出。
  • 路径兼容性:确保save_dir存在,可通过save_dir.mkdir(parents=True, exist_ok=True)创建。
  • 编码问题:中文类名需设置ensure_ascii=False避免乱码。
  • 字段扩展:可根据需求增加timestampmodel_version等元信息。

4. 工程优化与最佳实践

4.1 封装为独立模块

为提升复用性,可将导出功能封装为独立模块export_utils.py

# export_utils.py import json import pandas as pd from pathlib import Path def save_detection_results(results, save_dir): save_dir = Path(save_dir) save_dir.mkdir(parents=True, exist_ok=True) # JSON 导出 with open(save_dir / 'results.json', 'w') as f: json.dump(results, f, indent=2, ensure_ascii=False) # CSV 导出 rows = [] for res in results: for det in res.get("detections", []): row = { "image": res["image_path"], "class_id": det["class_id"], "class_name": det["class_name"], "confidence": det["confidence"], **det["bbox"] } rows.append(row) pd.DataFrame(rows).to_csv(save_dir / 'results.csv', index=False)

detect_dual.py中只需导入并调用:

from export_utils import save_detection_results # ... save_detection_results(all_results, save_dir)

4.2 支持命令行参数控制导出行为

通过argparse添加开关参数,实现灵活控制:

parser.add_argument('--export-json', action='store_true', help='export results to JSON') parser.add_argument('--export-csv', action='store_true', help='export results to CSV') # 使用方式 if opt.export_json or opt.export_csv: save_detection_results(all_results, save_dir)

调用命令示例:

python detect_dual.py \ --source './data/images/' \ --weights './yolov9-s.pt' \ --name test_output \ --export-json \ --export-csv

5. 总结

5.1 技术价值总结

YOLOv9 虽未原生支持 JSON/CSV 输出,但其开放的代码架构允许开发者轻松扩展输出能力。通过对detect_dual.py的合理改造,我们实现了:

  • 结构化数据导出:将分散的.txt检测结果整合为统一的 JSON 与 CSV 文件;
  • 工程可用性强:支持批量处理、命令行控制、错误容错;
  • 无缝集成现有生态:CSV 可供 Excel/Pandas 分析,JSON 可被 REST API 直接返回。

5.2 实践建议

  1. 优先使用模块化设计:将导出逻辑抽离,避免污染主推理流程;
  2. 按需启用导出功能:大型部署场景下应通过参数控制是否生成结构化文件;
  3. 结合日志系统记录元数据:如模型版本、输入源、运行时间等,增强可追溯性。

通过上述方法,YOLOv9 不仅可用于高效推理,还能成为智能系统中数据驱动闭环的关键一环。


获取更多AI镜像

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

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

Qwen3-4B-Instruct-2507企业级方案:智能知识图谱构建

Qwen3-4B-Instruct-2507企业级方案&#xff1a;智能知识图谱构建 1. 引言 在当前企业智能化转型的浪潮中&#xff0c;构建高效、精准的智能知识图谱系统已成为提升信息管理与决策能力的核心路径。传统知识图谱依赖人工规则和结构化数据提取&#xff0c;成本高、扩展性差。而随…

作者头像 李华
网站建设 2026/6/15 13:54:29

NHSE:动森存档编辑的终极神器,免费解锁无限可能

NHSE&#xff1a;动森存档编辑的终极神器&#xff0c;免费解锁无限可能 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦&#xff01;动物森友会》的资源收集而烦恼&#xff1f;NHSE…

作者头像 李华
网站建设 2026/6/15 13:55:58

开源重排序模型崛起:BGE-Reranker-v2-m3行业落地前景分析

开源重排序模型崛起&#xff1a;BGE-Reranker-v2-m3行业落地前景分析 1. 技术背景与行业痛点 在当前检索增强生成&#xff08;RAG&#xff09;系统广泛应用于智能客服、知识库问答和企业搜索的背景下&#xff0c;向量数据库的“近似匹配”机制逐渐暴露出其局限性。尽管基于Em…

作者头像 李华
网站建设 2026/6/16 23:50:22

性能翻倍:通义千问2.5+vLLM推理速度优化秘籍

性能翻倍&#xff1a;通义千问2.5vLLM推理速度优化秘籍 1. 引言 随着大语言模型在实际业务场景中的广泛应用&#xff0c;推理效率成为决定用户体验和部署成本的关键因素。通义千问2.5系列作为阿里云推出的高性能开源模型&#xff0c;在语言理解、代码生成、数学推理等方面表现…

作者头像 李华
网站建设 2026/6/15 16:36:48

OpenSpeedy游戏加速完全指南:3步实现帧率突破与性能优化

OpenSpeedy游戏加速完全指南&#xff1a;3步实现帧率突破与性能优化 【免费下载链接】OpenSpeedy 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy &#x1f3ae; 还在为游戏卡顿、帧率限制而烦恼吗&#xff1f;OpenSpeedy作为一款专业的游戏加速工具&#xf…

作者头像 李华
网站建设 2026/6/15 15:00:26

FakeLocation:安卓应用级位置模拟的精准控制方案

FakeLocation&#xff1a;安卓应用级位置模拟的精准控制方案 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 在数字时代&#xff0c;地理位置信息已成为移动应用获取用户隐私数据…

作者头像 李华