YOLOv8 实战:从训练到部署的全流程

FreeGuideOnline 最新 2026-06-20

YOLOv8 实战:从训练到部署的全流程

概述

本教程将带你从零开始,完成一个完整的 YOLOv8 目标检测项目。你将学会配置环境、准备数据、训练模型、评估效果,并最终将模型导出用于实际部署。整个过程使用 Ultralytics 官方库,简洁高效,适合初学者快速上手。

环境搭建

安装 Python 与虚拟环境

建议使用 Python 3.8 或以上版本,并创建独立的虚拟环境以避免依赖冲突。

# 创建虚拟环境
python -m venv yolov8_env
# 激活环境 (Windows: yolov8_env\Scripts\activate)
source yolov8_env/bin/activate

安装 YOLOv8

Ultralytics 提供了开箱即用的 ultralytics 包,一步安装即可。

pip install ultralytics

该命令会自动安装所有依赖,包括 torch, opencv-python, matplotlib 等。如需 GPU 支持,请确认已安装正确的 CUDA 版本对应的 PyTorch。

数据集准备

标准数据集格式

YOLOv8 使用 YOLO 格式标注。目录结构如下:

datasets/
└── my_data/
    ├── images/
    │   ├── train/
    │   └── val/
    ├── labels/
    │   ├── train/       # 每张图片对应一个 .txt 标注文件
    │   └── val/
    └── data.yaml        # 数据集配置文件

标注文件(labels/*.txt)中每一行对应一个目标,格式为:

<类别id> <中心点x> <中心点y> <宽> <高>

所有坐标均为归一化到 0~1 之间的浮点数。

data.yaml 示例

path: ../datasets/my_data  # 数据集根目录,相对路径或绝对路径
train: images/train         # 训练图片相对路径
val: images/val             # 验证图片相对路径

names:
  0: person
  1: car
  2: dog

使用公共数据集

如果没有自制数据集,可以先用公开数据集体验。Ultralytics 提供了自动下载 COCO128 等数据集的功能,训练时指定 model.train(data='coco128.yaml', ...) 即可自动下载。

训练模型

从预训练权重开始

YOLOv8 提供多种尺寸的预训练模型(n/s/m/l/x)。以 YOLOv8n(nano)为例,训练命令如下:

from ultralytics import YOLO

# 加载预训练模型(首次运行会自动下载)
model = YOLO('yolov8n.pt')

# 开始训练
results = model.train(
    data='path/to/your/data.yaml',  # 数据集配置文件
    epochs=50,                      # 训练轮数
    imgsz=640,                      # 输入图像大小
    batch=16,                       # 批量大小(根据显存调整)
    name='yolov8_custom',           # 保存结果的文件夹名称
)

训练过程中,终端会实时显示损失值及 mAP 指标。训练完成后,权重文件会保存在 runs/detect/yolov8_custom/weights/ 目录下。

常用训练参数说明

  • device:选择设备,0 表示第一块 GPU,cpu 表示使用 CPU,'0,1' 表示多 GPU。
  • workers:数据加载线程数,建议根据 CPU 核心数设置。
  • optimizer:优化器,可选 'SGD', 'Adam', 'AdamW'
  • cos_lr:是否使用余弦退火学习率。
  • patience:早停轮数,用于防止过拟合。

验证与测试

模型评估

metrics = model.val(data='data.yaml', split='val')
print(metrics.box.map)    # mAP50-95
print(metrics.box.map50)  # mAP50

在单张图片或视频上预测

# 图片推理
results = model('path/to/image.jpg', save=True, show=True)

# 视频推理
results = model('path/to/video.mp4', save=True, stream=True)

# 显示检测结果
for r in results:
    r.show()   # 显示带框图片
    r.save()   # 保存到 runs/detect/predict

模型导出与部署

导出为多种格式

YOLOv8 可以导出为 ONNX、TensorRT、CoreML 等多种格式,方便在不同平台部署。

model.export(format='onnx', imgsz=640)  # 导出 ONNX
# 支持格式:'onnx', 'engine' (TensorRT), 'coreml', 'tflite', 'pb' 等

导出后会在同目录下生成对应的文件,例如 yolov8n.onnx

ONNX 推理示例

使用 ONNX Runtime 加载导出模型进行推理:

import onnxruntime as ort
import numpy as np

session = ort.InferenceSession('yolov8n.onnx')
input_name = session.get_inputs()[0].name

# 假设已经将图片预处理成 (1,3,640,640) 的数组
input_blob = np.random.randn(1, 3, 640, 640).astype(np.float32)
outputs = session.run(None, {input_name: input_blob})
# outputs 即为检测结果,需后处理解析

TensorRT 加速(GPU 部署)

# 在支持 TensorRT 的环境中,可直接导出为 .engine 文件
model.export(format='engine', device=0)

然后使用 TensorRT 运行时加载,可获得极高的推理速度,适合边缘端 GPU 设备。

常见问题与技巧

  • 显存不足:减小 batch 大小或 imgsz,使用 device='cpu' 或混合精度训练(amp=False 关闭可选)。
  • 标注格式转换:如果不熟悉 YOLO 格式,可使用 Roboflow、LabelImg 等工具辅助标注和转换。
  • 自定义数据增强:在 data.yaml 中增加 augment 参数,或在训练时通过 hyp 参数传递超参数字典。
  • 训练中断恢复model.train(resume=True) 会自动加载最近的检查点继续训练。

总结

通过本教程,你已掌握 YOLOv8 从数据准备、模型训练、评估到导出部署的完整流程。YOLOv8 的简洁 API 大幅降低了目标检测的门槛,你可以快速在自定义场景中构建高性能检测系统。开始动手实践吧!