2026/3/28 12:34:39
网站建设
项目流程
外贸公司的网站怎么做,网络建设解决方案,wordpress设计师,a963设计网作品YOLOv9推理结果保存路径解析#xff1a;runs/detect目录结构说明
你刚跑完YOLOv9的检测命令#xff0c;终端里跳出一行“Results saved to runs/detect/yolov9_s_640_detect”#xff0c;可打开文件管理器却找不到这个路径#xff1f;或者找到了#xff0c;但里面一堆子文…YOLOv9推理结果保存路径解析runs/detect目录结构说明你刚跑完YOLOv9的检测命令终端里跳出一行“Results saved to runs/detect/yolov9_s_640_detect”可打开文件管理器却找不到这个路径或者找到了但里面一堆子文件夹和文件根本分不清哪个是原图、哪个是标注框、哪个是置信度信息别急——这不是你操作错了而是YOLOv9默认的输出组织逻辑确实有点“藏得深”。这篇文章不讲训练原理、不堆参数配置就专注一件事把 runs/detect 这个目录彻底拆开、说透、理清楚。无论你是第一次运行 detect_dual.py 的新手还是想批量提取检测结果做后续分析的进阶用户看完就能立刻定位你要的图片、坐标、标签和统计信息。1. 为什么是 runs/detect从设计逻辑说起YOLO系列从v5开始就统一采用runs/作为顶层输出根目录它不是随意命名而是有明确分工的工程约定runs/train/只放训练过程中的权重weights、日志results.csv、可视化图results.png、验证集预测图val_batch*.jpgruns/val/存放模型在验证集上的详细评估报告confusion_matrix.png、F1_curve.png 等runs/detect/专用于推理inference输出所有你用detect_dual.py或detect.py处理过的图片、视频、文件夹结果都归这里管这个设计的好处是一次实验的所有产物自动归类不会混在一起。你不需要手动创建文件夹、重命名结果只要记住--name参数填什么就能精准定位到自己的那批结果。而detect这个子目录名也直白地告诉你它只负责“检测任务”的输出不掺杂训练、验证、导出ONNX等其他流程。这种清晰的职责划分对多人协作或长期维护项目特别友好。2. runs/detect 目录的完整结构图谱假设你执行了这行命令python detect_dual.py --source ./data/images/horses.jpg --img 640 --device 0 --weights ./yolov9-s.pt --name yolov9_s_640_detect那么系统会在/root/yolov9/runs/detect/下创建一个名为yolov9_s_640_detect的文件夹。它的内部结构不是扁平的而是按用途分层组织的。我们一层一层来看2.1 顶层文件夹yolov9_s_640_detect这是你通过--name指定的自定义名称也是整个结果集的“身份证”。建议起名时带上关键信息比如yolov9_s_640_horses模型尺寸数据名yolov9_m_1280_indoor_test模型尺寸场景用途这样后期翻记录时一眼就知道这批结果是谁、在哪、为什么跑。2.2 核心输出images 子目录进入yolov9_s_640_detect/后第一个看到的就是images/文件夹。它包含两类内容原始输入的副本如果你传入的是单张图片如horses.jpg这里会原样保留一份命名为horses.jpg带检测框的输出图同一张图叠加了边界框Bounding Box、类别标签和置信度分数命名为horses.jpg与原图同名但内容已更新小技巧YOLOv9 默认不覆盖原图。它会先读取原图再在内存中绘制检测结果最后保存为新文件。所以你永远能找回未加框的干净原图——它就在images/里和带框图并排躺着。如果输入是文件夹如--source ./data/images/images/下就会出现一整批处理后的图片命名与源文件完全一致方便你逐一对比。2.3 坐标与标签labels 子目录这才是真正“值钱”的部分——所有检测结果的结构化数据全在这里。labels/文件夹下每个.txt文件对应一张输入图片文件名与图片名严格一致只是后缀换成了.txt。比如horses.jpg对应horses.txt。打开horses.txt你会看到类似这样的内容0 0.523 0.487 0.312 0.245 0 0.765 0.321 0.289 0.198 1 0.234 0.678 0.187 0.223每行代表一个检测到的目标格式是标准的YOLO格式第1列类别索引0person, 1horse, 2car… 具体看你的data.yaml中的names顺序第2–3列边界框中心点的 x, y 坐标归一化到 0~1 范围第4–5列边界框的宽度 w 和高度 h同样归一化实用提醒这些坐标是“归一化”的不是像素值。如果你想转成实际像素坐标比如要裁剪目标区域只需乘以图片宽高img_w, img_h 1280, 720 # 假设原图尺寸 x_center_px x_norm * img_w y_center_px y_norm * img_h w_px w_norm * img_w h_px h_norm * img_h # 再算左上角坐标x1 x_center_px - w_px/2, y1 y_center_px - h_px/22.4 可视化增强visualize 子目录YOLOv9特有这是YOLOv9区别于v5/v8的一个重要新增项。visualize/文件夹里存放的是热力图heatmap和特征图feature map的可视化结果用于理解模型“为什么这么判断”。典型文件包括horses_heatmap.jpg显示模型关注图像哪些区域做出决策越亮的地方越关键horses_feature_layer3.jpg第3个主干网络层的特征响应图能看出模型提取了哪些纹理/边缘信息这些图对调试模型、分析误检漏检原因非常有用。比如一张图里马没被检出但heatmap.jpg显示马所在区域一片暗淡就说明模型根本没“看见”它——问题可能出在预处理或主干网络如果马区域很亮但labels/里没记录那大概率是NMS阈值设太高把结果过滤掉了。2.5 元信息与日志results.json 和 detect.logresults.json一个结构化的JSON文件汇总了本次推理的全局统计信息例如总处理图片数平均每张图检测到的目标数各类别检测总数person: 42, horse: 17...推理耗时预处理前向后处理总时间detect.log纯文本日志记录命令行参数、环境信息GPU型号、CUDA版本、警告如某张图尺寸不匹配被跳过、以及每张图的详细处理状态“Processing horses.jpg... Done in 0.12s”。工程建议如果你要做自动化流水线results.json是最友好的数据源——Python里几行代码就能读取统计结果无需解析日志文本。3. 三个高频问题一次讲清3.1 我想只保存坐标不保存图片怎么关掉 images 输出YOLOv9 的detect_dual.py默认同时输出图片和标签。如果你只需要.txt坐标文件比如用于后续算法输入可以加一个隐藏参数python detect_dual.py --source ./data/images/horses.jpg \ --img 640 --device 0 --weights ./yolov9-s.pt \ --name yolov9_s_640_detect \ --save-img False # 关键设为False执行后images/文件夹将完全不生成只有labels/、visualize/、results.json和detect.log会被创建。省空间、提速度特别适合大批量离线处理。3.2 labels/ 里的 txt 文件怎么快速转成 CSV 或 Excel 方便查看直接手写脚本太麻烦这里给你一个开箱即用的 Python 片段放在/root/yolov9/目录下运行即可# save_labels_to_csv.py import os import csv from pathlib import Path def convert_labels_to_csv(labels_dir, output_csv): with open(output_csv, w, newline) as f: writer csv.writer(f) # 表头 writer.writerow([image_name, class_id, x_center, y_center, width, height]) for txt_file in Path(labels_dir).glob(*.txt): img_name txt_file.stem .jpg # 假设原图是jpg with open(txt_file, r) as t: for line in t: parts line.strip().split() if len(parts) 5: cls, x, y, w, h parts writer.writerow([img_name, cls, x, y, w, h]) # 使用示例把 yolov9_s_640_detect 的 labels 转成 csv convert_labels_to_csv( labels_dir/root/yolov9/runs/detect/yolov9_s_640_detect/labels, output_csv/root/yolov9/runs/detect/yolov9_s_640_detect/labels_summary.csv ) print( CSV 已生成labels_summary.csv)运行后你会得到一个清晰的表格所有检测框按行排列Excel双击就能打开排序筛选。3.3 我的输入是视频结果保存在哪里结构一样吗完全一样。YOLOv9 对视频的处理逻辑是逐帧解码 → 每帧当作一张图片处理 → 每帧生成对应的 labels/.txt 和 images/.jpg。唯一区别是输入--source ./data/videos/test.mp4输出目录下images/里不再是test.jpg而是按帧编号的图片test_00001.jpg,test_00002.jpg, …labels/里对应test_00001.txt,test_00002.txt, …这意味着你可以用完全相同的脚本比如上面的CSV转换来处理视频帧结果。如果想还原成视频YOLOv9 还会额外在images/同级生成一个test.avi或mp4文件——那是所有带框帧拼接成的检测结果视频直接播放就能看效果。4. 实战建议如何高效管理你的 runs/detect光知道结构还不够日常使用中几个小习惯能帮你少踩80%的坑4.1 建立“结果命名规范”别再用--name test、--name run1这种名字。推荐三级命名法[模型缩写]_[输入类型]_[日期时间] # 示例 y9s_img640_horses_20240520_1430 y9m_vid1280_office_20240520_1515这样在/root/yolov9/runs/detect/里 ls 一下就能按时间、按场景、按模型快速筛选不用一个个点进去看。4.2 定期清理避免磁盘爆满runs/detect/不会自动清理旧结果。一个1080P视频处理完images/可能占几个GB。建议养成习惯# 查看最大的3个结果目录 du -sh /root/yolov9/runs/detect/* | sort -hr | head -3 # 删除某个旧结果比如yolov9_s_old rm -rf /root/yolov9/runs/detect/yolov9_s_old4.3 把 labels 当作“黄金数据”备份labels/里的.txt是轻量、标准、无损的检测结果。相比图片它体积小、易传输、易版本控制。建议每次重要推理后把整个labels/文件夹打包压缩tar -czf labels_y9s_horses.tgz labels/上传到你的私有NAS或对象存储作为可复现的“检测快照”5. 总结掌握 runs/detect就是掌握YOLOv9的输出主权YOLOv9 的runs/detect不是一个黑盒文件夹而是一套精心设计的“结果交付系统”。它把检测任务的全部产出——可视化结果images/、结构化数据labels/、决策依据visualize/、全局统计results.json和执行日志detect.log——分门别类、严丝合缝地组织起来。你不需要记住所有细节只要抓住三个核心--name是你的导航键它决定了结果存哪起好名一半工作完成labels/是你的数据金矿所有坐标、类别、置信度都在这里是后续分析、训练、部署的源头images/是你的效果看板直观验证模型是否work哪里准、哪里偏、哪里漏。下次再看到 “Results saved to runs/detect/xxx”别再犹豫点开——现在你知道每一层文件夹背后都是为你准备好的、即取即用的工程资产。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。