news 2026/4/25 15:11:18

用YOLOv9做马匹检测,结果保存位置告诉你

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用YOLOv9做马匹检测,结果保存位置告诉你

用YOLOv9做马匹检测,结果保存位置告诉你

在牧场管理、赛马训练和野生动物监测等实际场景中,快速准确地识别马匹是基础但关键的一环。人工巡检效率低、易疲劳,而传统图像处理方法对姿态变化、遮挡和光照波动鲁棒性差。YOLOv9作为2024年发布的最新一代单阶段目标检测模型,在保持实时性的同时显著提升了小目标与遮挡目标的检测能力——尤其适合马匹这类体型修长、常以侧身或奔跑姿态出现的对象。

本镜像开箱即用,无需从零配置环境。你不需要懂CUDA版本兼容性,不用反复调试PyTorch与torchvision的匹配关系,更不必手动下载权重或修改路径。本文将聚焦一个最朴素却最常被问到的问题:运行完检测命令后,图片和标注结果到底存在哪?怎么快速找到、验证、复用?我会带你从命令执行开始,一层层揭开输出路径的结构逻辑,并给出可直接复制粘贴的定位方法。


1. 镜像启动后第一件事:确认环境与代码位置

镜像已预装完整开发栈,但默认进入的是baseconda环境。所有YOLOv9相关操作必须在专用环境中进行,否则会因依赖缺失报错。

1.1 激活YOLOv9专属环境

打开终端,执行以下命令:

conda activate yolov9

成功激活后,命令行前缀会显示(yolov9)。若提示Command 'conda' not found,说明镜像未正确加载,请重启容器并重试。

1.2 进入代码根目录

YOLOv9官方代码位于固定路径,这是所有操作的起点:

cd /root/yolov9

你可以用ls命令快速确认核心文件是否存在:

ls -l | grep -E "(detect|train|yolov9-s\.pt|data/)"

你应该看到:

  • detect_dual.py(主推理脚本)
  • train_dual.py(主训练脚本)
  • yolov9-s.pt(已预下载的轻量级权重)
  • data/目录(含示例图片horses.jpg

注意:不要跳过这一步。很多用户卡在“找不到文件”或“ModuleNotFoundError”,根源就是没进对目录或没激活环境。


2. 推理命令详解:参数含义与结果生成逻辑

我们以官方提供的马匹检测示例为切入点,逐项拆解命令背后的执行流程:

python detect_dual.py --source './data/images/horses.jpg' --img 640 --device 0 --weights './yolov9-s.pt' --name yolov9_s_640_detect

2.1 各参数作用一目了然

参数说明
--source'./data/images/horses.jpg'输入源:支持单图、多图目录、视频、摄像头流。此处是镜像自带的马匹测试图
--img640推理时图像缩放尺寸(像素)。YOLOv9对输入尺寸敏感,640是s模型推荐值
--device0使用第0块GPU(如无GPU则自动回退到CPU)
--weights'./yolov9-s.pt'模型权重路径。镜像已预置,无需额外下载
--nameyolov9_s_640_detect结果保存目录的名称,这是你找结果的关键!

2.2 结果不是“弹出来”,而是“存进去”

YOLOv9不会在终端直接显示带框图片,它把处理后的结果系统化写入磁盘。整个过程分三步:

  1. 读取原图→ 2.模型前向推理→ 3.生成带标注图 + 标签文件 + 日志
    所有产物都按统一规则组织在runs/detect/子目录下。

记住这个路径模板:runs/detect/{--name参数值}
本例中,--name yolov9_s_640_detect→ 结果就在runs/detect/yolov9_s_640_detect


3. 结果目录结构全解析:每个文件都是什么?

执行完推理命令后,立即进入结果目录查看内容:

ls -R runs/detect/yolov9_s_640_detect/

你会看到清晰的三层结构:

runs/detect/yolov9_s_640_detect/ ├── horses.jpg # 带检测框和标签的输出图(核心可视化结果) ├── labels/ │ └── horses.txt # 文本格式标注文件(YOLO标准格式) └── results.csv # 检测统计汇总(每张图的检测数、置信度均值等)

3.1horses.jpg:直观验证效果

这是你最关心的文件——原始马匹图上已叠加绿色矩形框和类别标签(horse),以及置信度分数(如horse 0.87)。
如何快速查看?在镜像中直接运行:

eog runs/detect/yolov9_s_640_detect/horses.jpg # Ubuntu图形界面查看器 # 或转换为base64在Jupyter中显示(如需Web访问)

3.2labels/horses.txt:机器可读的标注数据

打开该文件,内容类似:

0 0.523 0.412 0.315 0.489 0 0.218 0.634 0.201 0.356

每行代表一个检测框,格式为:
class_id center_x center_y width height(归一化到0~1范围)

为什么需要这个?

  • 用于后续批量分析(如统计马匹数量、计算平均置信度)
  • 导入标注工具做人工校验或修正
  • 作为新数据集的一部分,参与模型再训练

3.3results.csv:量化评估依据

该CSV包含字段:image,detections,avg_confidence,inference_time_ms。例如:

imagedetectionsavg_confidenceinference_time_ms
horses.jpg20.8247.3

实用价值

  • 快速判断模型是否漏检(detections=0?)
  • 对比不同参数下的置信度变化(调conf阈值后重跑)
  • 评估硬件性能(inference_time_ms越小越好)

4. 批量检测时的结果路径规律

单图检测路径明确,但当你处理几十张马匹照片时,路径规则依然严格一致:

# 假设你的马匹图片放在 ./my_horse_photos/ 目录下 python detect_dual.py --source './my_horse_photos/' --img 640 --device 0 --weights './yolov9-s.pt' --name my_horse_batch

输出路径自动变为:
runs/detect/my_horse_batch/
其中:

  • 每张输入图(如photo_001.jpg)生成对应带框图photo_001.jpg
  • 每张图对应一个标签文件photo_001.txt(存于labels/子目录)
  • results.csv汇总全部图片的统计信息

提示:--name参数名建议体现任务特征(如horse_field_v1),避免与他人命名冲突,也方便后期归档。


5. 自定义保存路径:不局限于默认位置

虽然默认路径设计合理,但有时你需要将结果存到指定位置(如挂载的NAS、项目专属目录)。YOLOv9支持通过--project参数覆盖根目录:

# 将结果存入 /workspace/horse_results/ 而非默认的 runs/ python detect_dual.py \ --source './data/images/horses.jpg' \ --img 640 \ --device 0 \ --weights './yolov9-s.pt' \ --name horse_demo \ --project '/workspace/horse_results'

实际输出路径变为:
/workspace/horse_results/detect/horse_demo/

注意事项:

  • --project后路径必须已存在且有写入权限(可用mkdir -p /workspace/horse_results创建)
  • --name仍控制二级目录名,不可省略
  • 此方式特别适合CI/CD流水线或团队协作中统一结果存放规范

6. 常见问题直击:为什么找不到结果?

根据真实用户反馈,以下问题高频出现,附带一键解决命令:

6.1 问题:执行命令后runs/目录不存在

原因:未成功运行推理(如环境未激活、路径错误、GPU不可用)
检查命令

# 确认当前环境 conda info --envs | grep '*' # 确认当前路径 pwd # 查看最近报错(通常在最后一行) python detect_dual.py --source './data/images/horses.jpg' --weights './yolov9-s.pt' 2>&1 | tail -n 5

6.2 问题:runs/detect/xxx/有目录但里面空空如也

原因:输入图片路径错误(如./data/images/horses.jpg文件实际不存在)
验证命令

ls -l './data/images/horses.jpg' # 应返回文件详情 # 若报错“No such file”,请先确认镜像内示例图位置: find /root/yolov9 -name "horses.jpg" 2>/dev/null

6.3 问题:结果图里没有框,全是原图

原因:置信度过低被过滤(默认conf=0.25),或模型未检测到马匹
解决方法

# 降低置信度阈值,强制显示所有预测 python detect_dual.py --source './data/images/horses.jpg' --weights './yolov9-s.pt' --conf 0.1

7. 下一步:从检测结果走向业务闭环

拿到带框图片和标签文件只是第一步。在真实业务中,你需要让这些结果“动起来”:

7.1 快速导出为JSON供前端调用

YOLOv9原生不输出JSON,但可用几行Python转换:

# save_as_json.py import json import cv2 from pathlib import Path img_path = "runs/detect/yolov9_s_640_detect/horses.jpg" label_path = "runs/detect/yolov9_s_640_detect/labels/horses.txt" # 读取标签 boxes = [] with open(label_path) as f: for line in f: cls, cx, cy, w, h = map(float, line.strip().split()) boxes.append({ "class": "horse", "confidence": round(cls * 100, 1), # 此处简化,实际需从模型输出获取 "bbox": [int((cx-w/2)*640), int((cy-h/2)*640), int(w*640), int(h*640)] }) # 生成JSON output = { "image": str(Path(img_path).resolve()), "detections": boxes, "timestamp": "2024-06-15T10:30:00Z" } with open("horse_detections.json", "w") as f: json.dump(output, f, indent=2) print(" JSON已生成:horse_detections.json")

7.2 批量统计马匹数量并告警

结合results.csv,用pandas快速分析:

import pandas as pd df = pd.read_csv("runs/detect/my_horse_batch/results.csv") if df['detections'].sum() == 0: print(" 警告:本次扫描未发现马匹,请检查摄像头或环境!") else: print(f" 共检测到 {df['detections'].sum()} 匹马,平均置信度 {df['avg_confidence'].mean():.2f}")

总结

用YOLOv9做马匹检测,技术门槛其实很低——镜像已为你铺平所有环境与依赖的路。真正影响落地效率的,往往是一个看似微小却至关重要的细节:结果存在哪?怎么快速定位、验证、提取?

本文从命令执行的第一步开始,层层拆解了--name参数如何决定结果目录名、runs/detect/为何是唯一可信路径、labels/子目录里文本文件的结构意义,以及如何用--project自定义存储位置。你不再需要翻文档、猜路径、试错排查,而是能精准直达目标文件。

记住这三个关键点:

  1. 路径公式runs/detect/{--name值}是结果的绝对入口;
  2. 核心文件horses.jpg(可视化)、labels/horses.txt(结构化数据)、results.csv(量化统计);
  3. 故障快查:用ls -l验证输入路径、用conda info确认环境、用2>&1 | tail捕获报错。

当检测结果不再是“黑盒输出”,而成为可编程、可分析、可集成的数据资产时,马匹监测就真正从技术Demo迈入了业务系统。


获取更多AI镜像

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

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

计算机毕业设计springboot高校疫情管理系统的设计与实现 基于SpringBoot的校园疫情防控信息平台的设计与实现 高校突发公共卫生事件在线管控系统

计算机毕业设计springboot高校疫情管理系统的设计与实现_z49hc(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 新冠让“封校、核酸、疫苗、健康日报”成了高校日常关键词&#…

作者头像 李华
网站建设 2026/4/16 21:12:46

使用Streamlit搭建Excel批处理应用,100个表格秒级拼接

Excel是工作中最常用的数据处理工具,没有之一。从技术大厂资深程序员到生产车间业务员,每天都在处理大量的Excel表格,可是很少有人真的精通Excel,连vlookup、多表拼接、格式转化这样的批处理任务都很难搞定,只能手工一…

作者头像 李华
网站建设 2026/4/16 12:32:52

ChatGLM3-6B效果展示:学术论文润色+查重规避+期刊格式转换

ChatGLM3-6B效果展示:学术论文润色查重规避期刊格式转换 1. 这不是普通AI助手,而是一位懂学术的“隐形合作者” 你有没有过这样的经历: 写完一篇论文初稿,反复读了三遍,还是觉得句子拗口、逻辑断层、术语不统一&…

作者头像 李华
网站建设 2026/4/23 11:10:34

用GPEN镜像修复爷爷奶奶的老照片,家人感动哭了

用GPEN镜像修复爷爷奶奶的老照片,家人感动哭了 那天整理老相册时,我翻出一叠泛黄卷边的黑白照片:爷爷穿着中山装站在单位门口,奶奶扎着两条麻花辫在校园梧桐树下微笑。照片上布满划痕、噪点和模糊的轮廓,连他们眼角的…

作者头像 李华
网站建设 2026/4/20 8:23:26

RetinaFace在工业质检中的延伸:PCB板上人脸形变检测辅助定位算法

RetinaFace在工业质检中的延伸:PCB板上人脸形变检测辅助定位算法 你可能第一眼会疑惑:人脸检测模型,怎么用在电路板质检上?这听起来像把咖啡机拿来修汽车——风马牛不相及。但事实是,RetinaFace 不只是“找人脸”的工…

作者头像 李华
网站建设 2026/4/24 8:09:51

ms-swift云端部署教程:阿里云ECS实例操作指南

ms-swift云端部署教程:阿里云ECS实例操作指南 1. 为什么选择ms-swift进行云端大模型微调? 在实际工程落地中,很多团队面临一个共同难题:本地GPU资源有限,但又需要快速验证大模型微调效果、构建定制化AI能力。这时&am…

作者头像 李华