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 # 训练脚本 环境配置篇那些年我们一起踩过的坑❌ 坑1Conda版本过旧导致的SSL错误错误现象CondaHTTPError: HTTP 000 CONNECTION FAILEDSSLError: bad handshake: certificate verify failed原因分析我的Conda版本是4.3.302017年发布的SSL库太旧无法验证现代网站的证书。解决方案# 1. 卸载旧版Miniconda rm -rf ~/miniconda3 # 2. 下载安装新版MinicondaPython 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❌ 坑3PyTorch版本与YOLOv9不兼容错误现象AttributeError: str object has no attribute __module__原因分析PyTorch 2.6 引入了 weights_only 安全机制与YOLOv9的旧版权重不兼容。终极解决方案使用PyTorch 1.10.0conda create -n yolov9-env python3.9 pytorch1.10.0 torchvision0.11.0 cpuonly -c pytorch -c conda-forge -y❌ 坑4Windows 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.880%训练20%验证-增广方式旋转、翻转、亮度调整、缩放等二. 数据集结构整理增广后需要整理成YOLO要求的格式datasets/├── images/│ ├── train/ # 训练图片.jpg│ └── val/ # 验证图片.jpg└── labels/├── train/ # 训练标签.txt└── val/ # 验证标签.txt3. 配置文件 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 T416GB显存每小时约0.78元。链接https://autodl.com/☁️ 云端实战篇AutoDL上跑通YOLOv91. 创建实例并选择镜像在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 yolov93. 上传数据和配置文件使用 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 pillow9.5.05. 解决显存不足问题第一次尝试失败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 06. 监控训练新开一个终端实时监控GPU状态watch -n 1 nvidia-smi查看训练曲线tensorboard --logdir runs/train然后在浏览器访问 http://localhost:60067. 断点续训如果中途中断比如用 CtrlC 停止恢复训练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 监控GPU4. 云服务器使用- 熟练使用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遇到了类似的问题希望这篇文章能帮你少走一些弯路。记住报错不可怕可怕的是被报错吓倒。读懂错误信息一步步排查你也能成功最后感谢耐心看到这里的你。如果有任何问题欢迎在评论区交流我们一起在深度学习的路上互相扶持如果这篇文章对你有帮助请点赞、收藏、转发让更多人看到