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-T | 38.3% | 2.0M | 7.7G |
| YOLOv9-S | 46.8% | 7.1M | 26.4G |
| YOLOv9-C | 53.0% | 25.3M | 102.1G |
| YOLOv9-E | 55.6% | 57.3M | 189.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: cola、1: juice、2: 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),仅供参考