一、安装环境
1.1 安装Python和Anaconda
首先,确保你的系统上安装了Python 3.8或更高版本。推荐使用Anaconda进行环境管理。
下载并安装Anaconda:访问Anaconda官网 ,根据你的操作系统选择合适的安装包进行安装。
1.2 创建虚拟环境
打开Anaconda Prompt或终端,输入以下命令创建一个新的虚拟环境:
conda create -n yolov5_env python=3.8
1.3 激活虚拟环境:
conda activate yolov5_env
1.4 安装依赖包
使用pip安装YOLOv5所需的依赖包。YOLOv5的依赖包列表通常包含在项目根目录的requirements.txt文件中。
输入以下命令安装依赖:
pip install -r requirements.txt
如果遇到安装问题,可以尝试升级pip:
python -m pip install --upgrade pip
1.5 安装PyTorch
YOLOv5基于PyTorch框架,因此需要安装PyTorch。根据你的GPU情况选择合适的版本:
如果有NVIDIA GPU并安装了CUDA驱动,安装带CUDA支持的PyTorch:
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
如果没有GPU,安装CPU版本:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
验证安装是否成功:
import torch
print(torch.__version__)
print(torch.cuda.is_available()) # 如果输出为True,则表示GPU可用
二、下载YOLOv5代码
2.1 克隆YOLOv5仓库
打开终端,进入你希望存放项目的目录,运行以下命令克隆YOLOv5的GitHub仓库:
git clone https://github.com/ultralytics/yolov5.git
进入项目目录:
cd yolov5
2.2 下载预训练权重
YOLOv5提供了多种预训练模型,可以直接使用这些权重进行迁移学习。例如,下载YOLOv5s的预训练权重:
wget https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt
三、在PyCharm中导入YOLOv5
3.1 安装PyCharm
如果你还没有安装PyCharm,可以从JetBrains官网下载并安装 。
3.2 导入项目
打开PyCharm,选择“File” > “Open”,然后导航到YOLOv5项目的根目录,选择yolov5文件夹,点击“OK”导入项目。
3.3 配置虚拟环境
在PyCharm中,点击右上角的“Python”图标,选择“Add Local”,然后导航到你之前创建的虚拟环境的解释器路径(例如:Anaconda3/envs/yolov5_env/python.exe)。
确保PyCharm使用的是你创建的虚拟环境。
3.4 安装依赖包
在PyCharm的终端中,运行以下命令安装项目依赖:
pip install -r requirements.txt
四、准备数据集
4.1 收集数据
收集与你任务相关的图片数据。例如,如果你要训练一个检测猫的模型,收集包含猫的图片。
建议使用至少1000张高质量的图片,并确保数据集中包含各种光照条件、角度和背景。
4.2 数据清洗
删除模糊、不相关的图片。确保所有图片的分辨率一致,或者在数据增强阶段进行统一处理。
4.3 数据标注
使用标注工具(如LabelImg、CVAT等)对图片进行标注。YOLOv5使用的是VOC格式的标注文件。
每个标注文件对应一张图片,文件名为图片名,后缀为.txt,内容为每行一个目标的类别ID和边界框坐标(归一化为0-1的范围)。
4.4 组织数据集
将数据集分为训练集、验证集和测试集。
数据集的组织结构如下:
yolov5/
├── datasets/
│ ├── train/
│ │ ├── images/
│ │ │ └── *.jpg
│ │ └── labels/
│ │ └── *.txt
│ ├── val/
│ │ ├── images/
│ │ │ └── *.jpg
│ │ └── labels/
│ │ └── *.txt
│ └── test/
│ ├── images/
│ │ └── *.jpg
│ └── labels/
│ └── *.txt
4.5 数据增强
YOLOv5内置了多种数据增强方法,可以在训练时自动应用。你可以在配置文件中启用或调整这些增强参数。
五、修改配置文件
5.1 配置文件位置
YOLOv5的配置文件位于yolov5/models/目录下,文件名以.yaml结尾(如yolov5s.yaml)。
修改配置文件
打开配置文件,修改以下参数:
- nc: 类别数量(例如,检测猫则设为1)。
- names: 类别名称列表(例如,[‘cat’])。
- train和val的路径:指向你的训练集和验证集的路径。
- weights: 预训练权重文件的路径(如yolov5s.pt)。
- batch_size: 根据你的GPU内存调整,通常为16或32。
- epochs: 训练的轮数,建议至少100轮。
- optimizer: 通常使用Adam,但也可以尝试SGD。
- lr0: 初始学习率,通常为0.001或0.0001。
示例配置文件
# 模型参数
nc: 1
names: ['cat']# 数据参数
train: ../datasets/train/images/
val: ../datasets/val/images/
names: ../datasets/train/labels/# 训练参数
batch_size: 32
epochs: 100
optimizer: Adam
lr0: 0.001
六、开始训练
6.1 运行训练脚本
在终端中,进入YOLOv5项目根目录,运行以下命令开始训练:
python train.py --data datasets/train.yaml --weights yolov5s.pt --cfg models/yolov5s.yaml --img 640 --batch 32 --epochs 100 --name cat_yolov5
- –data: 数据集配置文件的路径。
- –weights: 预训练权重文件的路径。
- –cfg: 模型配置文件的路径。
- –img: 输入图像的分辨率。
- –batch: 批量大小。
- –epochs: 训练的轮数。
- –name: 训练的名称,用于保存结果。
6.2 监控训练过程
YOLOv5会在训练过程中输出损失值、学习率等信息。你可以在runs/train/目录下查看训练日志和模型权重文件。
6.3 调整超参数
- 如果发现模型过拟合,可以尝试减少学习率、增加数据增强或使用正则化方法。
- 如果模型表现不佳,可以增加训练轮数或调整批量大小。
七、模型验证和评估
7.1 验证模型
训练完成后,运行以下命令使用验证集评估模型性能:
python val.py --weights runs/train/cat_yolov5/weights/best.pt --data datasets/val.yaml --img 640 --name val_cat
结果会保存在runs/val/目录下,包括mAP、mAR等指标。
7.2 查看评估结果
- 打开runs/val/val_cat/results.txt文件,查看模型的评估指标。
- 如果模型性能不理想,可以尝试调整超参数或增加数据集大小。
7.3 优化检测阈值
根据实际需求调整置信度阈值(–conf-thres)和IoU阈值(–iou-thres):
python detect.py --weights runs/train/cat_yolov5/weights/best.pt --source datasets/test/images/ --conf 0.5 --iou 0.5
八、模型导出和部署
8.1 导出模型
将训练好的模型导出为ONNX格式,以便在其他环境中使用:
python export.py --weights runs/train/cat_yolov5/weights/best.pt --include onnx
导出的ONNX模型位于runs/export/目录下。
8.2 部署模型
使用导出的ONNX模型进行推理。以下是一个使用Python和ONNX Runtime进行推理的示例代码:
import cv2
import numpy as np
import onnxruntime as ort# 加载模型
session = ort.InferenceSession('runs/export/onnx/best.onnx')
input_name = session.get_inputs()[0].name# 读取图片
image = cv2.imread('test.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.resize(image, (640, 640))
image = np.transpose(image, (2, 0, 1)).astype(np.float32)
image = image / 255.0
image = np.expand_dims(image, axis=0)# 执行推理
output = session.run(None, {input_name: image})[0]# 处理输出
# 根据模型输出格式进行后处理,例如解码边界框和类别
九、常见问题及解决方法
9.1 显存不足
减小批量大小(batch_size)或图像分辨率(–img)。
使用混合精度训练:
python train.py --data datasets/train.yaml --weights yolov5s.pt --cfg models/yolov5s.yaml --img 640 --batch 32 --epochs 100 --name cat_yolov5 --adam 0.001 --amp
9.2 数据加载错误
- 检查数据集路径是否正确。
- 确保标注文件格式正确,且每行的类别ID在0到nc-1之间。
9.3 模型性能不佳
- 增加训练数据集的大小。
- 调整学习率和优化器。
- 尝试不同的模型架构(如YOLOv5m或YOLOv5l)。
十、总结
通过本教程,你已经掌握了使用YOLOv5训练自己的数据集的完整流程,包括安装环境、下载代码、准备数据集、配置参数、训练模型、验证评估以及模型部署。希望这篇教程能帮助你顺利实现自己的目标检测任务!