修改后的 YOLOv5 从零开始教程

本文将从零开始,一步步带你完成 YOLOv5 的环境配置、数据集准备、模型训练、验证与预测,让你快速上手 YOLOv5。在配置过程中,需注意代码安全性和潜在风险,以下内容已对关键部分进行润色,并针对不同场景提出多种情况分析。


1. 环境准备

1.1 硬件要求

  • GPU(推荐):NVIDIA 显卡,显存至少 4GB(训练较小模型如 YOLOv5s)
  • CPU:可用,但训练速度慢
  • 内存:建议 16GB 以上

1.2 软件要求

  • 操作系统:Windows 10/11 或 Ubuntu 22.04
  • Python:3.8 或 3.9(推荐 3.8)
  • CUDA:10.2 或 11.3 以上(需与 PyTorch 版本匹配)
  • PyTorch:1.7 以上

1.3 安装 Python 与 PyTorch
Windows 下安装 Anaconda(推荐):

  1. 下载 Anaconda 并安装(建议从官网获取安装包)。

  放哪个盘看自己,尽量不要有中文路径

                              1. 打开 Anaconda Prompt,创建虚拟环境:

conda create -n yolov5 python=3.8  
conda activate yolov5  

2.安装cuda

建议不要安装最新的,与自己的显卡相适应,其次和pytorch版本对应

    

nvidia-smi
 

输出结果顶部会显示cuda版本。

安装 PyTorch:(如果用vscode编译,这一步可以先跳过)
访问 PyTorch 官网,根据 CUDA 版本选择命令(优先使用官方源)。例如 CUDA 11.3:

pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html  

如果仅用 CPU:

pip install torch torchvision torchaudio  

验证安装:

import torch  
print(torch.__version__)  
print(torch.cuda.is_available())  # 输出 True 表示 GPU 可用  

风险提示与多种情况分析

  • 情况1:依赖源风险
    使用 -i 参数指定镜像源时,需确保来源可信(如清华大学镜像源)。建议优先使用官方 PyPI 源,仅在网络不佳时切换镜像。
  • 情况2:环境冲突
    在多项目环境中,未使用虚拟环境可能导致包冲突。务必创建独立环境(如 conda create -n yolov5)。
  • 情况3:CUDA 版本不匹配
    如果安装后 torch.cuda.is_available() 返回 False,检查 CUDA 与 PyTorch 版本兼容性。

2. 克隆 YOLOv5 仓库

打开终端,进入工作目录,执行:

git clone https://github.com/ultralytics/yolov5  
cd yolov5  

具体指令有报错的话,可以问ai工具。

如果网络较慢,可尝试国内镜像(替换为 https://hub.fastgit.xyz/ultralytics/yolov5),但需验证链接可靠性。

风险提示

  • 克隆第三方镜像时,确认其与官方仓库同步,避免代码篡改风险。

3. 安装依赖

YOLOv5 项目自带 requirements.txt,建议优先从官方源安装:

pip install -r requirements.txt  

国内用户若需加速,可使用可信镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple  

安装后验证:

python detect.py --source data/images/bus.jpg --weights yolov5s.pt  

若成功运行并显示检测结果,则环境配置完成。

多种情况分析

  • 情况1:依赖版本冲突
    若安装失败,尝试指定包版本(如 pip install numpy==1.21.0)或使用 --no-cache-dir 避免缓存问题。
  • 情况2:权限不足
    在 Linux 系统中,若提示权限错误,可添加 --user 参数或使用 sudo(需谨慎)。

4. 准备数据集

YOLOv5 要求数据集为 YOLO 格式,即每张图片对应一个 .txt 标注文件,内容为:

class_id x_center y_center width height  

所有坐标均为归一化值(0~1)。

4.1 数据集结构
推荐组织如下:

dataset/  
├── images/  
│   ├── train/  
│   ├── val/  
│   └── test/      # 可选  
└── labels/  
    ├── train/  
    ├── val/  
    └── test/  

4.2 标注文件生成
若已有 VOC(XML)或 COCO(JSON)格式标注,可使用脚本转换。建议使用官方工具(如 utils/general.py 中的函数)或开源工具 labelImg。

我个人用labelimg,直接命令行下载,(在yolo的虚拟环境中

pip install pyqt5 lxml
 

opendir选择自己的images/train

changesave dir选择labels/train

具体打标签的细节可以问ai,记住拖框的时候不要松手

4.3 配置文件 data.yaml
yolov5/data 目录下新建 mydata.yaml,内容如下:

train: ../dataset/images/train  # 训练集图片路径  
val: ../dataset/images/val      # 验证集图片路径  
test: ../dataset/images/test    # 测试集图片路径(可选)  

nc: 2  # 类别数量  
names: ['cat', 'dog']  # 类别名称列表  

风险提示与多种情况分析

  • 情况1:路径错误
    相对路径可能导致文件找不到。建议使用绝对路径或验证路径存在性(如 ls ../dataset/images/train)。
  • 情况2:标注文件异常
    坐标超出 [0,1] 范围会引发训练错误。使用脚本批量检查标注文件(如 Python 脚本遍历 .txt 文件验证数值)。
  • 情况3:数据集泄露
    训练集与验证集重叠时,模型评估结果虚高。确保数据集严格划分。

我个人使用vscode(将yolov5拖动到vscode打开)

红色的地方要换成自己的数据集等,具体的细节我的建议还是问ai,一步步配置也不算麻烦(一次配置,以后只修改路径就行)

后续具体内容会更新(细节和模型训练的细节,以及部分不出框的问题)

5. 修改模型配置文件

YOLOv5 提供预定义模型(如 yolov5s.yaml),按需复制并修改类别数:

cp models/yolov5s.yaml models/yolov5s_custom.yaml  

编辑 yolov5s_custom.yaml,将 nc 改为你的类别数:

nc: 2  # number of classes  

风险提示

  • 修改配置文件时,避免误删其他参数(如锚点配置)。

6. 训练模型

6.1 单 GPU 训练

python train.py --img 640 --batch 16 --epochs 100 --data data/mydata.yaml --cfg models/yolov5s_custom.yaml --weights yolov5s.pt  

6.2 多 GPU 训练(DataParallel)

python train.py --img 640 --batch 64 --epochs 100 --data data/mydata.yaml --cfg models/yolov5s_custom.yaml --weights yolov5s.pt --device 0,1  

6.3 关键参数说明

参数 含义 常用值
--img 输入图像尺寸 640
--batch 批次大小 根据显存调整
--epochs 训练轮数 100-300
--data 数据集配置文件 data/mydata.yaml
--cfg 模型配置文件 models/yolov5s_custom.yaml
--weights 预训练权重 yolov5s.pt
--device GPU 编号 0,1
--cache 缓存图像 ramdisk

训练过程中,日志、权重和结果图保存在 runs/train/exp 目录。

多种情况分析

  • 情况1:显存不足
    --batch 过大导致 OOM 错误,逐步减小批次(如从 16 降至 8)或降低图像尺寸(--img 416)。
  • 情况2:训练不稳定
    学习率过高可能引发 NaN 损失。尝试减小 --lr0(默认 0.01)或启用自动学习率调整(如 --adam)。
  • 情况3:多 GPU 同步问题
    使用多 GPU 时,确保驱动和 CUDA 版本一致,避免进程通信错误。

7. 模型评估

在验证集上评估模型:

python val.py --data data/mydata.yaml --weights runs/train/exp/weights/best.pt --img 640  

输出指标包括 mAP@0.5、mAP@0.5:0.95 等。

风险提示

  • 权重文件路径错误会导致评估失败。验证路径存在性(如 ls runs/train/exp/weights/)。

8. 模型预测

8.1 单张图片预测

python detect.py --weights runs/train/exp/weights/best.pt --source path/to/image.jpg --img 640 --conf 0.25  

8.2 文件夹预测

python detect.py --weights runs/train/exp/weights/best.pt --source path/to/images/ --img 640 --conf 0.25  

8.3 视频或摄像头预测

# 视频文件  
python detect.py --weights runs/train/exp/weights/best.pt --source path/to/video.mp4  

# 摄像头(0 表示第一个摄像头)  
python detect.py --weights runs/train/exp/weights/best.pt --source 0  

预测结果默认保存在 runs/detect/exp

多种情况分析

  • 情况1:输入源无效
    --source 指向损坏文件或无效设备,预测失败。提前测试输入源(如用 ffmpeg 检查视频文件)。
  • 情况2:低置信度结果
    --conf 阈值过低可能输出大量误检。根据场景调整阈值(如 0.5 用于高精度需求)。

9. 常见问题与解决方法

9.1 ModuleNotFoundError: No module named 'torch'

  • 确保已正确安装 PyTorch,检查虚拟环境是否激活。

9.2 CUDA out of memory

  • 减小 --batch-size 或使用 --img 416 降低分辨率。
  • 启用 --cache 加速数据加载,但显存不足时慎用。

9.3 AttributeError: 'NoneType' object has no attribute 'shape'

  • 图片路径错误或图片损坏,检查 --source 路径并验证文件完整性。

9.4 训练时 NaN 损失值

  • 学习率过高,尝试减小 --lr0(默认 0.01)。
  • 数据集中存在异常标注(坐标超出 0~1),检查标签文件。

9.5 验证集 mAP 很低

  • 检查数据集划分是否合理,类别是否均衡。
  • 增加训练轮数,或使用更大模型(如 yolov5m)。
  • 数据增强过于激进,可调整 --augment 参数。

9.6 模型转换问题
导出模型为 ONNX 格式:

python export.py --weights runs/train/exp/weights/best.pt --include onnx  

更多格式见 export.py--include 参数。

新增多种情况分析

  • 情况1:模型导出失败
    权重文件损坏或版本不兼容(如 PyTorch 版本过低)。尝试重新训练或升级 PyTorch。
  • 情况2:部署环境差异
    转换后的 ONNX 模型在目标设备(如 TensorRT)可能不兼容。测试转换后模型在目标环境中的推理。
  • 情况3:安全风险
    模型权重文件(.pt)可能包含敏感数据。部署时限制访问权限,避免未授权使用。较少见
Logo

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

更多推荐