🌟 前言

大家好,我是一名深度学习初学者。最近接到了一个任务:用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元。

链接:https://autodl.com/

☁️ 云端实战篇: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,遇到了类似的问题,希望这篇文章能帮你少走一些弯路。记住:报错不可怕,可怕的是被报错吓倒。读懂错误信息,一步步排查,你也能成功!

最后,感谢耐心看到这里的你。如果有任何问题,欢迎在评论区交流~我们一起在深度学习的路上互相扶持!

如果这篇文章对你有帮助,请点赞、收藏、转发,让更多人看到!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐