从零部署YOLOv9:手把手搞定环境与自定义数据训练
1. 环境准备:从零搭建YOLOv9开发环境
第一次接触YOLOv9时,我最头疼的就是环境配置。记得当时为了搞定CUDA和PyTorch的版本兼容问题,整整折腾了两天。现在把这些经验整理出来,帮你避开我踩过的那些坑。
1.1 创建Python虚拟环境
我强烈建议使用Anaconda来管理环境,这能避免把系统环境搞得一团糟。打开终端执行以下命令:
conda create -n yolov9 python=3.9.17
conda activate yolov9
这里选择Python 3.9.17是因为它和PyTorch的兼容性最好。实际测试中发现,用Python 3.10会遇到一些奇怪的依赖冲突。激活环境后,你会看到命令行提示符前面显示(yolov9),这表示环境已经切换成功。
1.2 安装PyTorch与CUDA
YOLOv9对PyTorch版本有严格要求,官方推荐使用2.0.1版本。根据显卡型号不同,CUDA版本也要对应选择:
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
这里有个关键点:30系及以上显卡必须使用CUDA 11+版本,20系显卡可以用10.2版本。安装完成后,用这段代码验证是否成功:
import torch
print(torch.__version__)
print(torch.cuda.is_available())
如果输出True,说明GPU加速已经启用。我遇到过因为驱动版本不匹配导致CUDA不可用的情况,这时候需要去NVIDIA官网更新显卡驱动。
1.3 安装其他依赖包
克隆官方仓库后,进入项目目录安装剩余依赖:
git clone https://github.com/WongKinYiu/yolov9
cd yolov9
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
国内用户建议加上清华源加速下载。有个常见错误是Pillow版本冲突,如果遇到字体相关报错,可以单独安装指定版本:
pip install Pillow==9.5.0
2. 数据集准备:打造自己的训练数据
去年做安防项目时,我需要训练一个检测危险物品的模型,当时在数据准备上花了大量时间。下面分享如何规范地准备自定义数据集。
2.1 数据标注与格式转换
YOLOv9支持两种标注格式:
- YOLO格式:每个图像对应一个.txt文件,内容为"类别ID x_center y_center width height"
- COCO格式:单个JSON文件包含所有标注信息
我推荐使用LabelImg进行标注,保存为YOLO格式。目录结构应该这样组织:
dataset/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
2.2 配置文件调整
创建data.yaml文件,内容示例:
train: /path/to/dataset/images/train
val: /path/to/dataset/images/val
names:
0: person
1: car
2: traffic_light
关键点:类别名称必须按0开始的顺序排列。然后在models/detect/yolov9.yaml中修改nc参数为你的类别数量:
nc: 3 # 类别数量
depth_multiple: 1.0
width_multiple: 1.0
3. 模型训练:参数调优实战技巧
第一次训练YOLOv9时,我看到显存爆满的提示直接懵了。后来才发现batch size需要根据显卡调整。
3.1 启动训练命令
使用train_dual.py而不是train.py,这是YOLOv9的特殊之处:
python train_dual.py \
--batch 16 \
--epochs 100 \
--data data.yaml \
--cfg models/detect/yolov9.yaml \
--weights '' \
--device 0
参数说明:
- batch:根据显存调整,24G显存可用16,12G建议用8
- imgsz:默认640,检测小物体可增大到1280
- hyp:超参数文件,新手先用hyp.scratch-high.yaml
3.2 训练监控与问题排查
训练开始后,终端会显示如下信息:
Epoch gpu_mem box obj cls labels img_size
0/99 12.3G 0.1234 0.2345 0.0678 32 640
常见问题解决方案:
- 显存不足:减小batch size或imgsz
- 损失不下降:检查数据标注质量
- 训练波动大:调小学习率
建议用TensorBoard监控训练过程:
tensorboard --logdir runs/train
4. 模型验证与部署
训练完成后,在runs/train/exp/weights/下会生成best.pt和last.pt两个模型文件。
4.1 性能验证
使用val_dual.py评估模型:
python val_dual.py \
--data data.yaml \
--weights runs/train/exp/weights/best.pt \
--batch 16 \
--imgsz 640 \
--device 0
重点关注这些指标:
- mAP@0.5:IoU阈值为0.5时的平均精度
- mAP@0.5:0.95:不同IoU阈值下的平均精度
- 推理速度:每张图的处理时间
4.2 实际检测演示
用detect_dual.py测试实际效果:
python detect_dual.py \
--weights runs/train/exp/weights/best.pt \
--source test.jpg \
--conf 0.25 \
--device 0
参数说明:
- conf:置信度阈值,值越大检测越严格
- save-txt:保存检测结果为YOLO格式
- save-conf:在结果中保存置信度
我在工业质检项目中发现,对于小物体检测,把imgsz调到1280能提升约15%的召回率,但推理速度会下降40%。这需要根据实际需求权衡。
更多推荐




所有评论(0)