YOLOv9 目标检测快速上手指南:从一张图片推理到训练货架巡检模型
2026/9/18 3:42:41 网站建设 项目流程

YOLOv9 目标检测快速上手指南:从一张图片推理到训练货架巡检模型

【免费下载链接】yolov9Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information项目地址: https://gitcode.com/GitHub_Trending/yo/yolov9

YOLOv9 是 YOLOv9 实时目标检测算法的官方实现代码,它用可编程梯度信息(Programmable Gradient Information,一种改善深层网络训练质量的技巧)来提升收敛与精度。仓库里同时提供了检测、实例分割、全景分割的训练入口和模型导出脚本,模型结构、数据集、超参数配置全都现成,一条命令就能从跑通示例走到训练自己的专属模型。本文以"超市货架商品巡检"(识别哪些商品缺货、哪些摆错位置)为场景,把整条动线走一遍。

🚀 先跑起来:5 分钟出第一张检测结果

环境只需 Python + PyTorch。克隆仓库后安装依赖即可,核心包是 PyTorch、OpenCV、NumPy,完整清单见 requirements.txt;README 推荐直接用官方 Docker 容器保证环境一致。

git clone https://gitcode.com/GitHub_Trending/yo/yolov9 cd yolov9 pip install -r requirements.txt

从 README 的 Evaluation 一节找到官方权重(如 yolov9-c-converted.pt)下载后,对仓库自带的示例图跑推理:

python detect.py --weights yolov9-c-converted.pt --source data/images/horses.jpg --img 640 --device 0

运行结束后,detect.py 会把画好框、带类别和置信度的结果图存到 runs/detect/ 下。

--source这个参数很灵活:图片、图片目录、视频文件、摄像头(填 0)、RTSP 地址、甚至screen截屏都可以,从单张图切到视频流不用改模型,只换输入。

🧩 项目能做什么:四个任务、两条训练路线

这个仓库不只是检测,按任务分了三组入口:

  • 目标检测:train.py / train_dual.py,模型结构见 models/detect/
  • 实例分割(画出每个目标的轮廓,而非方框):segment/train.py + models/segment/
  • 全景分割(把背景如墙面、货架面也一起分割):panoptic/train.py + models/panoptic/

两条训练路线值得留意:train_dual.py对应论文中的双分支结构,训练时走两个分支、互相补充梯度,训完做重参数化(re-parameterization,把等效的多个分支合并成一个标准网络)后推理结构不变、部署方式不变,说明笔记在 tools/reparameterization.ipynb;train.py则用于 GELAN 这类单分支结构。新手用train.py起步完全够用。

MS COCO 基准性能

README 公布的 MS COCO 评测数据(640 输入,测试精度 AP 越高越好):

模型AP参数量FLOPs
YOLOv9-T38.3%2.0M7.7G
YOLOv9-S46.8%7.1M26.4G
YOLOv9-C53.0%25.3M102.1G
YOLOv9-E55.6%57.3M189.0G

选型的思路很直接:边缘设备(树莓派、店里的工控盒)用 T/S 档,服务器或工作站用 C/E 档换更高精度。

📁 准备自己的数据集:标注格式与配置文件

货架巡检模型需要一个自己的数据集。标注用任意支持 YOLO 格式的工具(README 的 Useful Links 里列了 AnyLabeling 等),每张图配一个同名.txt,每行写一个目标:类别号 + 归一化的中心点坐标和宽高;如果后面要做分割,就改成多边形点序列。

数据集配置参考 data/coco.yaml 自己写一份,比如data/shelf.yaml,要点只有三个:

  • path:数据集根目录
  • train/val:训练、验证图片列表(比例自己定,常见 7:2:1 或 8:2)
  • names:类别列表,例如0: cola1: juice2: water

类别不需要很多,货架场景通常十几类就能覆盖主要 SKU。

⚙️ 最小训练配置:一条命令训出巡检模型

数据就位后,训练就是改参数的一条命令:

python train.py --workers 8 --device 0 --batch 16 --data data/shelf.yaml --img 640 \ --cfg models/detect/yolov9-s.yaml --weights '' --name shelf-inspect \ --hyp data/hyps/hyp.scratch-high.yaml --epochs 300 --close-mosaic 15

几个关键参数的作用:

  • --cfg选模型骨架,yaml 里的depth_multiple/width_multiple可调深浅;换成 models/detect/yolov9-t.yaml 就是更轻的档位
  • --weights ''表示从头训练;填入已下载的预训练权重就变成迁移学习,数据少时通常更稳
  • --close-mosaic 15表示最后 15 轮关掉 mosaic 增强(把四张图随机拼成一张来训练的技巧),让模型在收尾阶段学真实画面
  • --hyp指向超参数文件,控制学习率、数据增强等,data/hyps/hyp.scratch-high.yaml 是适合从零训练的高精度配方

产物在runs/train/shelf-inspect/weights/下的best.pt,用 val.py 配同一份 yaml 跑验证即可拿到 AP。多卡训练在 README 的 Training 一节有现成命令(torch.distributed.launch+--sync-bn);训练日志默认接 TensorBoard,utils/loggers/ 里还内置了 Comet、WandB 等上报通道。

📦 从权重文件到边缘设备:导出与部署

训好的best.pt想搬到没有 Python 环境的设备(如店里的 ARM 盒子),用 export.py 加--include onnx --simplify导出 ONNX 格式(一种跨平台模型文件),simplify 会顺手做一层图简化。

推理端不用另写代码:detect.py的加载器本身就是多后端(DetectMultiBackend),ONNX 权重可以直接喂给它;--dnn走 OpenCV DNN、--half开半精度推理。README 的 Useful Links 一节还整理了 TensorRT、OpenVINO、TFLite 等部署路线的社区实践,可以按硬件对号入座。

落到货架巡检场景,你可以这样搭配:巡检机或店内摄像头出 RTSP 流,detect.py--source接上,--save-txt输出 YOLO 格式结果,再由自己的业务逻辑统计"某个货架位连续 N 帧没检出对应 SKU"作为缺货信号——模型只负责识别,报警规则留给你自己的代码。

🧪 进阶玩法:从检测框到分割轮廓

检测框回答"哪里有",分割回答"边界在哪"。同一份货架数据(多边形标注),换入口就能升级任务:

  • 实例分割:segment/train.py + models/segment/yolov9-c-seg.yaml,输出每个商品的精确轮廓,适合做单件商品的计量或破损区域观察
  • 全景分割:panoptic/train.py + models/panoptic/gelan-c-pan.yaml,把货架面、空隙这类背景也作为分割目标,可以统计"货架空置面积"

上图来自仓库 Teaser 部分:它同时发布了 YOLOR 多任务学习的代码,一个网络可以同时输出检测、实例分割、语义分割、全景分割甚至图像描述,各任务入口和评测脚本都已放在仓库里,需要时直接挑任务用。

YOLOv9 这套仓库的价值在于动线完整:一条命令出推理结果、一条命令训出自己的模型、一条命令导出可部署的 ONNX,每个环节都是现成脚本加可改的参数,而不是要你自己搭框架。完整参数列表、权重下载与多任务示例,详见 README.md。

【免费下载链接】yolov9Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information项目地址: https://gitcode.com/GitHub_Trending/yo/yolov9

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询