YOLOv9从零到一:我的深度学习实战
🌟 前言
大家好,我是一名深度学习初学者。最近接到了一个任务:用YOLOv9训练一个“花朵检测”模型。本以为就是跑个代码的事,没想到这一路走来,简直是九九八十一难!从环境配置到数据准备,从本地CPU到云端GPU,从各种报错到最终跑通,我踩遍了所有的坑。
今天就把这段经历完整记录下来,希望能帮助到和我一样的初学者。如果你正在配置YOLOv9环境,或者被各种报错折磨,这篇文章就是为你准备的!
相关yolov9链接:https://docs.ultralytics.com/zh/models/yolov9/
https://github.com/WongKinYiu/yolov9
📚 目录
1. 任务目标
2. 环境配置篇:那些年我们一起踩过的坑](环境配置篇踩过的坑)
3. 数据准备篇:增广与整理(数据准备篇增广与整理)
4. 本地训练篇:从CPU到GPU的迁徙(本地训练篇从cpu到gpu的迁徙)
5. 云端实战篇:AutoDL上跑通YOLOv9(云端实战篇autodl上跑通yolov9)
6. 成果收割篇:训练完成后的工作(成果收割篇训练完成后的工作)
7. 总结与收获
一.🎯 任务目标
使用不同文件夹的花朵图片,先进行数据增广,然后用YOLOv9训练一个单类(flower)检测模型。
初始目录结构:
文件夹名称/
├── data/
│ └── 1220/
│ ├── images/ (包含不同子文件夹)
│ └── labels/segment/ (对应的标签)
├── augment_segment_yolo.py # 增广脚本
└── train.py # 训练脚本
🔧 环境配置篇:那些年我们一起踩过的坑
❌ 坑1:Conda版本过旧导致的SSL错误
错误现象:
CondaHTTPError: HTTP 000 CONNECTION FAILED
SSLError: bad handshake: certificate verify failed
原因分析:
我的Conda版本是4.3.30(2017年发布的!),SSL库太旧,无法验证现代网站的证书。
解决方案:
# 1. 卸载旧版Miniconda
rm -rf ~/miniconda3
# 2. 下载安装新版Miniconda(Python 3.9)
wget https://repo.anaconda.com/miniconda/Miniconda3-py39_24.1.2-0-Linux-x86_64.sh
bash Miniconda3-py39_24.1.2-0-Linux-x86_64.sh
# 3. 初始化
conda init bash
source ~/.bashrc
❌ 坑2:镜像源404错误
错误现象:
命令行输出错误如:
CondaHTTPError: HTTP 404 NOT FOUND for url <https://mirrors.tuna.tsinghua.edu.cn/...>
原因分析:
配置的镜像源中找不到特定版本的包(如`vc14_runtime`)。
解决方案:
# 清除镜像源配置,使用官方源
conda config --remove-key channels
conda clean -i -a -y
# 或者添加更全的频道
conda config --add channels conda-forge
❌ 坑3:PyTorch版本与YOLOv9不兼容
错误现象:
AttributeError: 'str' object has no attribute '__module__'
原因分析:
PyTorch 2.6+ 引入了 `weights_only` 安全机制,与YOLOv9的旧版权重不兼容。
终极解决方案:使用PyTorch 1.10.0
conda create -n yolov9-env python=3.9 pytorch==1.10.0 torchvision==0.11.0 cpuonly -c pytorch -c conda-forge -y
❌ 坑4:Windows DLL加载失败
错误现象:
OSError: [WinError 182] Error loading caffe2_detectron_ops.dll
原因分析:
缺少Visual C++ Redistributable运行库。
解决方案:
下载安装 [vc_redist.x64.exe](https://aka.ms/vs/17/release/vc_redist.x64.exe)
📊 数据准备篇:增广与整理
1. 数据增广
使用 augment_segment_yolo.py`对原始图片进行增广:
python augment_segment_yolo.py \
--input_images data/images/ \
--input_labels data/labels/segment \
--output_images data/augmented_images/segment \
--output_labels data/augmented_labels/segment \
--num_augs 5 \
--dataset_dir segment_dataset/ \
--nc 1 \
--class_names "flower" \
--train_ratio 0.8 \
--yolo_format segment
参数说明:
num_augs 5:每张原图生成5张增强图
train_ratio 0.8:80%训练,20%验证
-增广方式:旋转、翻转、亮度调整、缩放等
二. 数据集结构整理
增广后,需要整理成YOLO要求的格式:
datasets/
├── images/
│ ├── train/ # 训练图片(.jpg)
│ └── val/ # 验证图片(.jpg)
└── labels/
├── train/ # 训练标签(.txt)
└── val/ # 验证标签(.txt)
3. 配置文件 `flower.yaml`
数据集配置
path: /root/autodl-tmp/datasets # 数据集根目录
train: images/train # 训练图片路径
val: images/val # 验证图片路径
类别信息
nc: 1 # 只有花一类
names: ['flower']
💻 本地训练篇:从CPU到GPU的迁徙
本地CPU训练的痛点
在本地用CPU训练500轮,预计需要20-30小时
解决方案:迁移到云端GPU
选择了 AutoDL平台,租用 Tesla T4(16GB显存),每小时约0.78元。
☁️ 云端实战篇:AutoDL上跑通YOLOv9
1. 创建实例并选择镜像
在AutoDL控制台创建实例时,关键配置:
GPU型号:Tesla T4或者RTX 2080(性价比高)
镜像:PyTorch 1.10.0(和本地环境一致)
数据盘:50GB免费(够用了)
2. 克隆YOLOv9官方代码
cd /root/autodl-tmp
git clone https://github.com/WongKinYiu/yolov9.git
cd yolov9
3. 上传数据和配置文件
使用 Xftp连接服务器,上传三个核心部分:
- yolov9c.pt预训练权重 → /root/autodl-tmp/yolov9/weights/
- flower.yaml配置文件 → /root/autodl-tmp/yolov9/data/
- datasets数据集文件夹 → /root/autodl-tmp/
Xftp下载:https://softking.tw/31220/Xftp.html(注意是否下载错版本,建议官网下载)
4. 安装依赖
# 激活base环境(PyTorch已预装)
conda activate base
# 安装其他依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 降级pillow避免兼容性问题
pip uninstall pillow -y
pip install pillow==9.5.0
5. 解决显存不足问题
第一次尝试(失败):
python train_dual.py --data data/flower.yaml --weights weights/yolov9c.pt --cfg models/detect/yolov9-c.yaml --epochs 500 --batch-size 32 --img 640 --device 0
报错:`CUDA out of memory`
显存占用分析:
| batch-size | 显存占用 | 结果 |
| 32 | ~16GB | ❌ 超出 |
| 16 | ~14GB | ❌ 接近极限 |
| 8 | ~8GB | ✅ 安全 |
最终成功命令:
python train_dual.py \
--data data/flower.yaml \
--weights weights/yolov9c.pt \
--cfg models/detect/yolov9-c.yaml \
--epochs 500 \
--batch-size 8 \
--img 640 \
--device 0
6. 监控训练
新开一个终端,实时监控GPU状态:
watch -n 1 nvidia-smi
查看训练曲线:
tensorboard --logdir runs/train
然后在浏览器访问 http://localhost:6006
7. 断点续训
如果中途中断(比如用 `Ctrl+C` 停止),恢复训练:
python train_dual.py --resume
会自动从 runs/train/exp/weights/last.pt继续。
训练完成后的工作
1. 需要保存的核心文件
runs/train/exp/weights/
├── best.pt # 最佳模型(最重要的!)
└── last.pt # 最后一轮模型
data/flower.yaml # 数据集配置
runs/train/exp/opt.yaml # 训练参数记录
runs/train/exp/results.csv # 训练指标
2. 打包下载
(1)创建保存目录
mkdir -p ~/training_results
(2) 复制关键文件
cp runs/train/exp/weights/best.pt ~/training_results/
cp runs/train/exp/opt.yaml ~/training_results/
cp runs/train/exp/results.csv ~/training_results/
cp data/flower.yaml ~/training_results/
(3)打包
cd ~
tar -czf training_results.tar.gz training_results/
用Xftp下载到本地即可。
三.模型预测
(1) 单张图片预测
python detect_dual.py \
--source test.jpg \
--weights runs/train/exp/weights/best.pt \
--img 640 \
--conf 0.25 \
--device 0
(2)批量预测
python detect_dual.py \
--source /path/to/images/ \
--weights runs/train/exp/weights/best.pt \
--img 640 \
--conf 0.25 \
--device 0
四. 云服务器关机
重要:用完一定要关机!
- 在AutoDL控制台点击 关机,否则一直扣费
- 关机后数据保留15天,下次开机用 `--resume` 继续
五. 总结与收获
我学到了什么?
1. 环境配置能力
- 读懂各种报错信息(403、404、SSL、DLL缺失)
- 掌握Conda环境隔离和管理
- 学会用 conda init和 source ~/.bashrc解决环境激活问题
2. 数据准备技能
- 理解YOLO格式的数据集结构
- 掌握数据增广的原理和操作
- 学会编写数据集配置文件
3.训练调优经验
- 理解 batch-size对显存的影响
- 学会根据显存调整参数
- 掌握 --resume断点续训
- 学会用 nvidia-smi 监控GPU
4. 云服务器使用
- 熟练使用Xftp上传下载
- 理解云服务器的计费规则
- 学会数据备份和成果保存
踩坑清单
| 问题 | 解决方案 |
| Conda版本太旧 | 重装Miniconda |
| SSL证书错误 | 更新Conda或使用镜像源 |
| 镜像源404 | 换用conda-forge或官方源 |
| DLL加载失败 | 安装VC++运行库 |
| PyTorch版本冲突 | 使用YOLOv9官方推荐1.10.0 |
| CUDA out of memory | 降低batch-size或图片尺寸 |
| 文件找不到 | 检查路径是否正确 |
| 训练中断 | 用 --resume 恢复 |
下一步计划
既然YOLOv9已经跑通,接下来可以尝试:
1. YOLOv10:体验无NMS的端到端检测
2. 模型部署:用ONNX或TensorRT加速推理
3. 多类别检测:扩展到多个类别的数据集
尾语. 写在最后
这一路走来,从最开始连Conda是什么都不清楚,到现在能独立在云端训练YOLO模型,踩过的每一个坑都是成长的阶梯。
如果你也在跑YOLOv9,遇到了类似的问题,希望这篇文章能帮你少走一些弯路。记住:报错不可怕,可怕的是被报错吓倒。读懂错误信息,一步步排查,你也能成功!
最后,感谢耐心看到这里的你。如果有任何问题,欢迎在评论区交流~我们一起在深度学习的路上互相扶持!
如果这篇文章对你有帮助,请点赞、收藏、转发,让更多人看到!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)