从零开始:使用YOLOv5训练自己的数据集

作者:半吊子全栈工匠2024.03.22 13:06浏览量:3

简介:本文将详细介绍如何使用YOLOv5训练自己的数据集,从环境搭建到目标识别,帮助读者理解并实践深度学习在实际问题中的应用。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

随着人工智能技术的不断发展,深度学习在目标识别领域的应用越来越广泛。其中,YOLOv5(You Only Look Once version 5)作为一种高效的实时目标识别算法,受到了广泛关注。本文将引导读者从零开始,通过详细的步骤和生动的实例,介绍如何使用YOLOv5训练自己的数据集,从而实现对目标的有效识别。

一、环境搭建

首先,我们需要配置一个适合YOLOv5训练的环境。这包括安装必要的软件和库,如Python、CUDA、cuDNN和PyTorch等。

  1. 安装Anaconda:Anaconda是一个流行的Python发行版,它包含了大量常用的科学计算库。我们可以从官网下载并安装对应版本的Anaconda。
  2. 配置环境:打开Anaconda Prompt,创建一个新的虚拟环境,并安装PyTorch和torchvision。注意,我们需要选择与CUDA和cuDNN版本相匹配的PyTorch版本。
  1. conda create -n yolov5 python=3.9
  2. conda activate yolov5
  3. conda install pytorch torchvision torchaudio cudatoolkit=<version> -c pytorch
  1. 克隆YOLOv5仓库:在GitHub上,YOLOv5项目提供了一个完整的实现。我们可以使用git命令克隆该项目到本地。
  1. git clone https://github.com/ultralytics/yolov5.git

二、数据准备

为了训练YOLOv5模型,我们需要准备自己的数据集。数据集应该包含目标物体的图像和对应的标签文件。

  1. 图像格式:YOLOv5支持多种图像格式,如JPEG、PNG等。我们需要将图像转换为这些格式,并确保它们的分辨率一致。
  2. 标签文件:标签文件通常以CSV或YAML格式存储。我们需要为每个图像创建一个标签文件,其中包含目标物体的类别和位置信息。
  1. # example.yaml
  2. train: images/train/ # 训练集图像路径
  3. val: images/val/ # 验证集图像路径
  4. nc: 1 # 类别数
  5. names: [ 'object' ] # 类别名称列表

三、模型训练

完成数据准备后,我们可以开始训练YOLOv5模型。

  1. 修改配置文件:在YOLOv5仓库中,有一个名为models/yolov5s.yaml的配置文件。我们可以根据需要修改该文件,以调整模型的参数,如输入大小、锚点等。
  2. 开始训练:使用以下命令开始训练模型。
  1. python train.py --img 640 --batch 16 --epochs 100 --data example.yaml --weights yolov5s.pt --name my_model

其中,--img指定输入图像的大小,--batch指定每个批次中的图像数量,--epochs指定训练的轮数,--data指定数据集的路径,--weights指定预训练权重的路径,--name指定模型保存的名称。

  1. 监控训练过程:在训练过程中,我们可以使用TensorBoard等工具监控模型的性能。这有助于我们了解模型的训练情况,并及时调整参数。
  1. tensorboard --logdir=runs/train/exp

四、目标识别

完成模型训练后,我们可以使用训练好的模型进行目标识别。

  1. 加载模型:使用以下代码加载训练好的模型。
  1. import torch
  2. model = torch.load('my_model.pt', map_location=torch.device('cpu'))
  3. model.eval()
  1. 进行预测:使用以下代码对图像进行目标识别。

```python
import cv2
img = cv2.imread(‘test.jpg’) # 加载待识别的图像
pred = model(img) # 进行预测
results = pred.xyxy[0] # 获取预测结果

在图像上绘制边界框和类别名称

for result in results:
x1, y1, x2, y2, conf, cls = result
cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
cv2.putText(img, f’{model.names[int(cls)]} {conf:.2f}’, (int(x1), int(y

article bottom image
图片