YOLOv8 实战:从训练到部署的全流程
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 大幅降低了目标检测的门槛,你可以快速在自定义场景中构建高性能检测系统。开始动手实践吧!