在计算机视觉领域,目标检测是一项核心任务,而 YOLO(You Only Look Once)系列算法凭借其高效性和准确性备受关注。YOLOv8 作为该系列的最新成员,在性能和功能上都有显著提升。本文将详细介绍如何使用 YOLOv8,并重点讲解如何利用它训练自己的数据集,让你能够针对特定目标实现精准检测。

一、YOLOv8 简介

YOLOv8 由 Ultralytics 开发,是一款集目标检测、实例分割和图像分类于一体的强大工具。它具备快速、准确且易于使用的特点,为开发者提供了友好的命令行界面(CLI)和 Python API,极大地简化了模型训练、推理和部署的流程。

二、安装 YOLOv8

(一)环境准备

推荐使用 Anaconda 来管理 Python 环境,创建一个新的虚拟环境,以避免依赖冲突。在终端中运行以下命令创建名为YOLOv8的环境,并指定 Python 版本为 3.8:

conda create -n YOLOv8 python=3.8

创建完成后,激活该环境:

conda activate YOLOv8

(二)安装 PyTorch

根据你的电脑 GPU 情况选择合适的 PyTorch 版本安装。如果你的 GPU 支持 CUDA 11.3,可使用以下命令安装:

pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113 -i https://pypi.tuna.tsinghua.edu.cn/simple

若你的电脑没有 GPU 或不需要使用 GPU 加速,也可安装 CPU 版本的 PyTorch:

pip install torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple

(三)安装 Ultralytics 库

YOLOv8 高度集成在 Ultralytics 库中,只需安装该库即可使用 YOLOv8 的全部功能。在激活的YOLOv8环境中运行:

pip install ultralytics

至此,YOLOv8 的安装就完成了。

三、准备自己的数据集

(一)数据集格式

YOLO 系列算法使用特定格式的数据集,其标注文件为文本格式(.txt),每个标注文件对应一张图像。标注文件中每行代表一个目标,格式为class_id x_center y_center width height,其中class_id是目标类别编号(从 0 开始),x_center、y_center是目标框中心点的归一化坐标(取值范围 0 - 1),width和height是目标框的归一化宽度和高度。
例如,对于一张 640x480 像素的图像,若有一个目标框左上角坐标为 (100, 150),宽为 200,高为 100,则其在标注文件中的一行内容可能为:

0 0.234 0.396 0.312 0.208

(二)标注工具

你可以使用 Labelme、MakeSense.ai 等标注工具对图像进行标注。以 Labelme 为例,安装并打开 Labelme 后,通过 “Open Dir” 选择包含图像的文件夹,然后对每张图像进行目标框标注,完成后保存标注文件,Labelme 会自动生成对应的.json格式标注文件,你可以通过脚本将其转换为 YOLO 所需的.txt格式。

(三)数据集结构

将准备好的数据集按照以下结构组织:

your_dataset/
├── images/
│   ├── train/
│   │   ├── image1.jpg
│   │   ├── image2.jpg
│   │   └──...
│   ├── val/
│   │   ├── image3.jpg
│   │   ├── image4.jpg
│   │   └──...
│   └── test/
│       ├── image5.jpg
│       ├── image6.jpg
│       └──...
└── labels/
    ├── train/
    │   ├── image1.txt
    │   ├── image2.txt
    │   └──...
    ├── val/
    │   ├── image3.txt
    │   ├── image4.txt
    │   └──...
    └── test/
        ├── image5.txt
        ├── image6.txt
        └──...

images文件夹存放图像,labels文件夹存放对应的标注文件,并且train、val、test文件夹分别用于存放训练集、验证集和测试集的数据。

(四)创建数据集配置文件(.yaml)

在数据集根目录下创建一个.yaml文件,例如your_dataset.yaml,用于描述数据集的相关信息。文件内容如下:

path: /path/to/your_dataset  # 数据集根目录路径
train: images/train  # 训练集图像文件夹相对路径
val: images/val  # 验证集图像文件夹相对路径
test: images/test  # 测试集图像文件夹相对路径(可选)

nc: 2  # 类别数量
names: ['class1', 'class2']  # 类别名称列表,顺序与class_id对应

请根据实际情况修改path、nc和names字段。

四、训练 YOLOv8 模型

(一)使用命令行界面(CLI)训练

打开终端,确保当前处于YOLOv8环境中,然后使用以下命令进行训练:

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

task:指定任务类型,这里是detect(目标检测),也可以是segment(实例分割)或classify(图像分类)。
mode:指定模式,train表示训练模式。
model:选择预训练模型,yolov8n.pt是 YOLOv8 的 nano 版本,模型较小,训练速度快,也可以根据需求选择其他版本,如yolov8s.pt、yolov8m.pt等。
data:指定数据集配置文件路径。
epochs:设置训练轮数,这里设置为 100 轮,可根据实际情况调整。
batch:指定每批次训练的样本数量,根据 GPU 显存大小调整,一般越大训练越稳定,但可能会超出显存。
imgsz:指定输入图像的大小,默认 640x640 像素。

(二)使用 Python API 训练

在 Python 脚本中,你也可以使用 Ultralytics 的 Python API 进行训练,示例代码如下:

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n.pt')

# 开始训练
results = model.train(
    data='your_dataset.yaml',
    epochs=100,
    batch=16,
    imgsz=640
)

训练过程中,模型会在每一轮训练后输出训练损失、验证损失、mAP(平均精度均值)等指标,你可以根据这些指标来监控训练进度和模型性能。

五、评估训练好的模型

训练完成后,需要对模型进行评估,以了解其在未知数据上的表现。使用以下命令进行评估:

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

mode:设置为val表示验证模式。
model:指定训练好的模型权重文件路径,一般在runs/detect/train/weights/目录下,best.pt是训练过程中验证集上表现最好的模型权重。
data:数据集配置文件路径。
评估结果会输出模型在验证集上的 mAP、召回率、精确率等指标,通过这些指标可以判断模型的性能是否满足需求。

六、使用训练好的模型进行预测

当你对模型性能满意后,就可以使用它对新的图像或视频进行目标检测预测了。使用命令行:

yolo task=detect mode=predict model=runs/detect/train/weights/best.pt source=path/to/your/image.jpg show=true

mode:设置为predict表示预测模式。
source:指定要预测的图像或视频路径,也可以是摄像头设备(如0表示默认摄像头)。
show:设置为true表示在预测时显示检测结果图像。
若使用 Python API:

from ultralytics import YOLO

# 加载训练好的模型
model = YOLO('runs/detect/train/weights/best.pt')

# 对图像进行预测
results = model.predict('path/to/your/image.jpg')

# 处理预测结果
for result in results:
    boxes = result.boxes  # 检测框信息
    classes = result.boxes.cls  # 类别信息
    scores = result.boxes.conf  # 置信度分数

END


Logo

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

更多推荐