YOLOv8 训练自己的数据集教程
标注完成后,将数据整理成 YOLOv8 所需的格式,即每个图像对应一个同名的 txt 标注文件,txt 文件中每一行代表一个目标,格式为:类别索引 x_center y_center width height。YOLOv8 提供了多种预训练模型,包括yolov8n(小模型,速度快)、yolov8s、yolov8m、yolov8l、yolov8x(大模型,精度高)等。将your_split_data
目录
一、环境配置
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 训练的核心步骤。若你在操作中遇到具体问题,比如数据格式转换困难、训练报错等,欢迎和我说说,我会进一步指导。

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