🚀 YOLOv8 的训练配置和全流程命令教程!(Python API 版本)
在准备工作中中,我们已经用脚本将 Kaggle 交通标志 YOLO 数据集整理为标准结构并裁剪为标准输入大小:
traffic/
images/train/
images/val/
labels/train/
labels/val/
现在,我们将使用 YOLOv8 的 Python API 完成模型训练任务。相比命令行方式,Python 接口更适合:
- 写脚本自动批量测试参数
- 与其他 Python 工程集成
- 灵活控制训练过程、模型导出
✅ 本文主要内容
✅ YOLOv8 Python API 安装与使用
✅ 编写 data.yaml 文件
✅ 编写 Python 训练脚本
✅ 关键参数说明与调优
✅ 保存和评估结果说明
📦 1️⃣ YOLOv8 安装
推荐使用官方 Ultralytics 包:
pip install ultralytics
测试版本:
import ultralytics
print(ultralytics.__version__) # 推荐 ≥8.x
📝 2️⃣ data.yaml 文件编写
我们需要一个 data.yaml
文件放在 traffic_crop/
目录下:
traffic_crop/
data.yaml
images/train/*.jpg
labels/train/*.txt
内容如下 👇
path: ./traffic_crop
train: images/train
val: images/val
names:
0: prohibitory
1: danger
2: mandatory
3: other
🧠 3️⃣ Python 训练脚本(最小可用)
from ultralytics import YOLO
# 1. 加载模型(可选 nano, small, medium 等)
model = YOLO("yolov8n.pt") # 也可换 yolov8s.pt 等
# 2. 开始训练
model.train(
data="traffic_crop/data.yaml",
epochs=100,
imgsz=640,
batch=16,
project="traffic-yolov8",
name="exp",
device=0 # GPU 0,或 "cpu"
)
🔧 4️⃣ 参数说明
参数 | 说明 |
---|---|
data | 指向 data.yaml 路径 |
epochs | 训练轮数 |
imgsz | 输入图像尺寸(建议 416~640) |
batch | 批大小(受限于显存) |
project | 保存输出的目录 |
name | 本次实验的名字 |
device | 训练设备编号或 “cpu” |
🚀 5️⃣ 训练结果目录结构
训练完成后,你会在 traffic-yolov8/exp/
目录下看到:
traffic-yolov8/
exp/
weights/
best.pt ← 验证集效果最好的模型
last.pt ← 最后一轮模型
results.png ← Loss/Precision/mAP 曲线
confusion_matrix.png
...
很好,我们把上面第二篇博客里的「✅ 6️⃣ 模型评估」部分重新写得更完整、详细,并确保是适合CSDN 博客里的标准小节格式,能直接复制到你的文章里用。
✅ 6️⃣ 模型评估(完整 Python API 示例)
当训练完成后,Ultralytics YOLO 会自动在你的项目目录下生成模型权重、训练日志、可视化图表等。
最重要的输出是:
traffic-yolov8/
exp/
weights/
best.pt ← 验证集指标最好的模型
last.pt ← 最后一轮的模型
如何在 Python 里加载并评估它们?
📌 6.1 验证(验证集评估)
使用 .val()
方法可以在验证集上评估 mAP、Recall、Precision 等指标。
from ultralytics import YOLO
# 加载训练好的模型权重
model = YOLO("traffic-yolov8/exp/weights/best.pt")
# 在验证集上评估
metrics = model.val(data="traffic/data.yaml")
调用完后,会在控制台输出类似:
metrics/precision 0.89
metrics/recall 0.85
metrics/mAP_0.5 0.92
metrics/mAP_0.5:0.95 0.76
✅ 你也可以在 Python 里访问这些结果:
print(f"Precision: {metrics.box.precision:.3f}")
print(f"Recall: {metrics.box.recall:.3f}")
print(f"mAP@0.5: {metrics.box.map50:.3f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.3f}")
📌 6.2 可视化评估结果
.val()
调用后会自动生成一个目录,比如:
runs/detect/val/
里面会包含:
labels.jpg
→ 标签分布可视化confusion_matrix.png
→ 混淆矩阵results.png
→ Loss 曲线、mAP 曲线F1_curve.png
→ F1 分数
✅ 这些图片可以直接用于写论文或报告!
📌 6.3 自定义验证命令
如果想用不同数据或参数评估,也可以在 Python 中指定更多参数:
metrics = model.val(
data="traffic/data.yaml",
imgsz=640,
batch=16,
conf=0.001,
iou=0.6,
save_json=True # 生成 COCO 格式结果
)
📌 6.4 批量评估多个模型
如果你想比较多个版本的模型,也可以写个简单的循环:
for ckpt in ["best.pt", "last.pt"]:
model = YOLO(f"traffic-yolov8/exp/weights/{ckpt}")
metrics = model.val(data="traffic/data.yaml")
print(f"{ckpt} -> mAP@0.5: {metrics.box.map50:.3f}")
✅ 总结
.val()
是 YOLOv8 的官方验证入口- 可以自动在验证集跑评估指标
- 同时生成可视化图表
- 方便在 Python 脚本里批量跑实验、记录结果
🎯 7️⃣ 自定义增强和高级配置(可选)
你可以用 cfg=
加载 YAML 超参数文件,或者传递关键字参数:
model.train(
data="traffic/data.yaml",
epochs=150,
imgsz=512,
lr0=0.001,
optimizer="AdamW",
augment=True,
hsv_h=0.015, # 色调增强
flipud=0.5,
fliplr=0.5,
)
完整超参数参考文档:
📚 https://docs.ultralytics.com/modes/train/
❤️ 总结
在本篇中,你学会了如何使用 Ultralytics YOLOv8 的 Python API 来训练模型:
✅ 加载预训练模型
✅ 编写 data.yaml
✅ 启动训练并查看结果
✅ 进行模型评估和调参
相比命令行,Python API 更适合与你的项目或 UI 集成,也方便部署到嵌入式设备。
🔜 下一篇预告
✨ 第四篇:YOLOv8 模型导出与香橙派部署指南