目录

一、环境配置

1.1. 安装 Python 和 PyTorch

1.2. 安装 Ultralytics

二、数据集准备

2.1. 数据标注

2.2. 数据集划分

2.3. 创建数据集配置文件

三、模型训练

3.1. 选择预训练模型

3.2. 执行训练命令

四、模型评估与预测

4.1. 模型评估

4.2. 模型预测


一、环境配置

1.1. 安装 Python 和 PyTorch

        确保你的系统中已经安装了 Python,推荐使用 Python 3.7 及以上版本。你可以通过以下命令检查 Python 版本:

python --version

        安装 PyTorch 时,需要根据你的 CUDA 版本选择对应的安装命令。如果你的电脑没有 NVIDIA 显卡或不使用 CUDA 加速,可以安装 CPU 版本。例如,安装 CUDA 11.8 对应的 PyTorch 命令如下:

pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

1.2. 安装 Ultralytics

        YOLOv8 是 Ultralytics 公司开源的项目,可以使用以下命令直接通过 pip 安装:

pip install ultralytics

        安装完成后,你可以通过以下命令验证是否安装成功:

yolo --help

        如果安装成功,会输出 YOLOv8 的相关命令帮助信息。

二、数据集准备

2.1. 数据标注

        使用标注工具(如 LabelImg、RectLabel 等)对自己的数据集进行标注。标注完成后,将数据整理成 YOLOv8 所需的格式,即每个图像对应一个同名的 txt 标注文件,txt 文件中每一行代表一个目标,格式为:类别索引 x_center y_center width height。其中,类别索引是从 0 开始的整数,代表目标的类别;x_center、y_center、width、height是目标框的中心坐标和宽高,数值均为归一化到 [0, 1] 之间的值。

2.2. 数据集划分

        将整理好的数据集划分为训练集、验证集和测试集。一般情况下,按照 8:1:1 的比例进行划分。可以使用 Python 脚本进行自动划分,以下是一个简单的示例:

import os

import random

import shutil

# 原始数据集路径

data_path = 'your_original_dataset_path'

# 划分后数据集保存路径

split_path = 'your_split_dataset_path'

# 创建划分后数据集的文件夹

os.makedirs(os.path.join(split_path, 'train/images'), exist_ok=True)

os.makedirs(os.path.join(split_path, 'train/labels'), exist_ok=True)

os.makedirs(os.path.join(split_path, 'val/images'), exist_ok=True)

os.makedirs(os.path.join(split_path, 'val/labels'), exist_ok=True)

os.makedirs(os.path.join(split_path, 'test/images'), exist_ok=True)

os.makedirs(os.path.join(split_path, 'test/labels'), exist_ok=True)

# 获取所有图像文件路径

image_files = [os.path.join(data_path, 'images', f) for f in os.listdir(os.path.join(data_path, 'images')) if f.endswith(('.jpg', '.png'))]

random.shuffle(image_files)

# 计算划分数量

num_train = int(len(image_files) * 0.8)

num_val = int(len(image_files) * 0.1)

# 划分数据集

for i, image_file in enumerate(image_files):

label_file = os.path.join(data_path, 'labels', os.path.basename(image_file).replace('.jpg', '.txt').replace('.png', '.txt'))

if i < num_train:

shutil.copy(image_file, os.path.join(split_path, 'train/images'))

shutil.copy(label_file, os.path.join(split_path, 'train/labels'))

elif i < num_train + num_val:

shutil.copy(image_file, os.path.join(split_path, 'val/images'))

shutil.copy(label_file, os.path.join(split_path, 'val/labels'))

else:

shutil.copy(image_file, os.path.join(split_path, 'test/images'))

shutil.copy(label_file, os.path.join(split_path, 'test/labels'))

2.3. 创建数据集配置文件

        在项目目录下创建一个.yaml格式的数据集配置文件,例如custom_data.yaml,内容如下:

path: your_split_dataset_path # 划分后数据集的根目录

train: train # 训练集相对路径

val: val # 验证集相对路径

test: test # 测试集相对路径

# 类别名称

names:

0: class1

1: class2

# 依次添加你的类别名称

        将your_split_dataset_path替换为实际的数据集划分后的根目录路径,class1、class2等替换为你自己的类别名称。

三、模型训练

3.1. 选择预训练模型

        YOLOv8 提供了多种预训练模型,包括yolov8n(小模型,速度快)、yolov8s、yolov8m、yolov8l、yolov8x(大模型,精度高)等。你可以根据自己的需求和硬件资源选择合适的预训练模型。

3.2. 执行训练命令

        使用以下命令进行训练:

yolo task=detect mode=train model=yolov8n.pt data=custom_data.yaml epochs=100 batch=16

        上述命令中:

  • task=detect表示任务类型为目标检测;

  • mode=train表示进行训练;

  • model=yolov8n.pt指定使用的预训练模型,你可以根据需要替换为其他模型;

  • data=custom_data.yaml指定数据集配置文件;

  • epochs=100表示训练的轮数,可根据实际情况调整;

  • batch=16表示每批次训练的图像数量,需要根据你的显卡显存大小进行调整。

        训练过程中,会在控制台输出训练的相关信息,包括损失值、精度等指标。训练完成后,模型文件会保存在runs/detect/train目录下。

四、模型评估与预测

4.1. 模型评估

        训练完成后,可以使用验证集对模型进行评估,命令如下:

yolo task=detect mode=val model=runs/detect/train/weights/best.pt data=custom_data.yaml

        该命令会计算模型在验证集上的精度、召回率、mAP(平均精度均值)等指标,帮助你了解模型的性能。

4.2. 模型预测

        使用训练好的模型对新图像进行预测,命令如下:

yolo task=detect mode=predict model=runs/detect/train/weights/best.pt source=your_image.jpg

        将your_image.jpg替换为实际要预测的图像路径,预测结果会保存在runs/detect/predict目录下。

        以上就是使用 YOLOv8 训练自己数据集的完整流程。在训练过程中,你可能会遇到各种问题,如数据标注错误、超参数设置不合理等,可以根据报错信息和训练结果进行调整优化。

        上述教程涵盖了 YOLOv8 训练的核心步骤。若你在操作中遇到具体问题,比如数据格式转换困难、训练报错等,欢迎和我说说,我会进一步指导。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐