news 2026/5/3 7:24:37

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/5/3 4:42:13

小白也能玩转大模型:Qwen3-4B-Instruct-2507保姆级教程

小白也能玩转大模型&#xff1a;Qwen3-4B-Instruct-2507保姆级教程 1. 引言&#xff1a;为什么你需要关注 Qwen3-4B-Instruct-2507&#xff1f; 在人工智能快速普及的今天&#xff0c;越来越多的企业和个人开发者希望借助大模型提升工作效率、优化业务流程。然而&#xff0c;…

作者头像 李华
网站建设 2026/5/3 3:39:56

SmartDock桌面启动器:重新定义Android设备的生产力边界

SmartDock桌面启动器&#xff1a;重新定义Android设备的生产力边界 【免费下载链接】smartdock A user-friendly desktop mode launcher that offers a modern and customizable user interface 项目地址: https://gitcode.com/gh_mirrors/smar/smartdock 还在为Android…

作者头像 李华
网站建设 2026/5/3 8:46:13

Qwen2.5-7B-Instruct零基础教程:云端GPU免配置,1小时1块快速上手

Qwen2.5-7B-Instruct零基础教程&#xff1a;云端GPU免配置&#xff0c;1小时1块快速上手 你是不是也和我一样&#xff0c;是个普通大学生&#xff1f;最近在社交媒体刷到别人用Qwen2.5做多语言翻译、写论文摘要、甚至自动解数学题&#xff0c;看得心痒痒。你也想拿它来做课程项…

作者头像 李华
网站建设 2026/5/3 5:08:38

CefFlashBrowser:让经典Flash内容重获新生的智能解决方案

CefFlashBrowser&#xff1a;让经典Flash内容重获新生的智能解决方案 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还在为那些珍贵的Flash内容无法正常访问而烦恼吗&#xff1f;现代浏览…

作者头像 李华
网站建设 2026/5/1 16:15:41

Windows Cleaner终极指南:免费开源工具彻底告别C盘空间焦虑

Windows Cleaner终极指南&#xff1a;免费开源工具彻底告别C盘空间焦虑 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为Windows系统C盘空间不足而困扰吗&am…

作者头像 李华
网站建设 2026/5/2 13:16:47

揭秘Fiji:5个让科研图像分析效率翻倍的隐藏功能

揭秘Fiji&#xff1a;5个让科研图像分析效率翻倍的隐藏功能 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji 在实验室的深夜&#xff0c;面对堆积如山的显微镜图像&#x…

作者头像 李华