在Ubuntu 20.04上从零构建YOLOv5 v6.2自定义训练环境的完整指南
当你想在本地工作站或云服务器上训练自己的目标检测模型时,YOLOv5无疑是最受欢迎的选择之一。但许多教程都假设你已经熟悉了Linux环境配置、数据集处理等前置知识,这让不少初学者在第一步就卡住了。本文将彻底解决这个问题——从Ubuntu系统的基础环境配置开始,到最终成功启动训练,每个步骤都会详细说明背后的原理和实际操作的细节。
1. 系统环境准备与依赖安装
在开始之前,确保你的Ubuntu 20.04系统已经更新到最新状态。打开终端并执行:
sudo apt update && sudo apt upgrade -y1.1 显卡驱动与CUDA安装
YOLOv5训练需要NVIDIA显卡和CUDA支持。首先检查你的显卡型号和驱动版本:
nvidia-smi如果未安装驱动,推荐使用官方PPA仓库安装:
sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt install nvidia-driver-510安装完成后重启系统。接下来安装CUDA 11.3(与PyTorch稳定版兼容):
wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run sudo sh cuda_11.3.1_465.19.01_linux.run注意:安装过程中不要勾选驱动安装选项,因为我们已单独安装驱动
1.2 Conda环境配置
为避免依赖冲突,我们使用Miniconda创建独立环境:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh创建并激活Python 3.8环境:
conda create -n yolov5 python=3.8 conda activate yolov52. COCO数据集的自定义路径管理
大多数教程直接使用默认路径,但在实际项目中,我们往往需要将数据放在特定位置。下面展示如何完全自定义数据存储结构。
2.1 数据集下载与重组
首先创建项目目录结构:
~/yolov5_project/ ├── datasets/ │ └── coco/ │ ├── images/ │ │ ├── train2017/ │ │ └── val2017/ │ └── labels/ │ ├── train2017/ │ └── val2017/ ├── yolov5/ └── weights/下载COCO数据集到指定位置:
mkdir -p ~/yolov5_project/datasets/coco cd ~/yolov5_project/datasets/coco wget http://images.cocodataset.org/zips/train2017.zip wget http://images.cocodataset.org/zips/val2017.zip unzip train2017.zip -d images/ unzip val2017.zip -d images/2.2 标签文件处理
YOLOv5需要特定格式的标签文件。使用以下脚本转换官方标注:
from pycocotools.coco import COCO import os def convert_coco_to_yolo(coco_json, output_dir): coco = COCO(coco_json) os.makedirs(output_dir, exist_ok=True) for img_id in coco.imgs: ann_ids = coco.getAnnIds(imgIds=img_id) anns = coco.loadAnns(ann_ids) img_info = coco.loadImgs(img_id)[0] img_w, img_h = img_info['width'], img_info['height'] with open(f"{output_dir}/{img_id:012d}.txt", "w") as f: for ann in anns: x, y, w, h = ann['bbox'] x_center = (x + w/2) / img_w y_center = (y + h/2) / img_h w_norm = w / img_w h_norm = h / img_h f.write(f"{ann['category_id']} {x_center} {y_center} {w_norm} {h_norm}\n")3. YOLOv5项目配置与自定义
克隆最新版YOLOv5仓库并安装依赖:
cd ~/yolov5_project git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt3.1 自定义数据配置文件
修改data/coco.yaml适配我们的路径结构:
# COCO 2017 dataset http://cocodataset.org # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: ~/yolov5_project/datasets/coco train: images/train2017 val: images/val2017 test: # Classes names: 0: person 1: bicycle # ...完整类别列表3.2 模型配置选择
YOLOv5提供多种预定义模型尺寸:
| 模型 | 参数量(M) | 推理时间(ms) | mAP@0.5 |
|---|---|---|---|
| YOLOv5n | 1.9 | 6.3 | 28.0 |
| YOLOv5s | 7.2 | 6.4 | 37.4 |
| YOLOv5m | 21.2 | 8.2 | 45.4 |
| YOLOv5l | 46.5 | 10.1 | 49.0 |
| YOLOv5x | 86.7 | 12.1 | 50.7 |
对于初次训练,建议从YOLOv5s开始:
python train.py --data coco.yaml --cfg yolov5s.yaml --weights '' --batch-size 32 --epochs 100 --img 6404. 训练优化与问题排查
4.1 多GPU训练配置
如果你有多个GPU,可以通过以下方式加速训练:
python train.py --data coco.yaml --cfg yolov5l.yaml --weights '' --batch-size 64 --device 0,1 --epochs 300 --img 640提示:batch-size需要根据GPU内存调整。RTX 3090(24GB)通常可以支持batch-size=64
4.2 常见错误解决方案
- CUDA内存不足:减小batch-size或使用更小的模型
- 标签文件缺失:检查路径是否正确,确保每个图像都有对应的.txt标签文件
- 训练指标不更新:检查学习率设置,尝试使用预训练权重
4.3 训练监控与可视化
YOLOv5会自动生成训练日志,可以通过TensorBoard查看:
tensorboard --logdir runs/train关键监控指标包括:
- 损失函数变化(box_loss, obj_loss, cls_loss)
- 验证集mAP
- 学习率变化曲线
5. 模型评估与导出
训练完成后,使用以下命令评估模型性能:
python val.py --data coco.yaml --weights runs/train/exp/weights/best.pt --img 640导出为ONNX格式以便部署:
python export.py --weights runs/train/exp/weights/best.pt --include onnx在实际项目中,我发现合理设置超参数可以显著提升模型性能。例如,调整学习率调度策略:
# yolov5s.yaml lr0: 0.01 # 初始学习率 lrf: 0.2 # 最终学习率 = lr0 * lrf momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3.0 warmup_momentum: 0.8 warmup_bias_lr: 0.1