深度学习YOLO实战:14、快速上手:运行一次完整的YOLO训练
我到底该从何入手?网络上充斥着大量的代码和教程,它们告诉你“这样跑就能出结果”。但作为一个开发者,我们真正渴望的不仅仅是让代码运行起来,更是要理解其内在的逻辑,掌握从数据准备到模型交付的完整工作流。只有这样,当项目需求变化或出现报错时,我们才能游刃有余地应对,而不是陷入无休止的复制粘贴和求助。这,正是我们编写这份指南的初衷。数据集是模型的“知识源泉”:我们将探讨如何准备和构建高质量的数据,这是所有
前言
当你满怀期待地打开一个YOLO模型,准备让它识别你感兴趣的特定物体时,是否会感到一丝困惑:我到底该从何入手?
网络上充斥着大量的代码和教程,它们告诉你“这样跑就能出结果”。但作为一个开发者,我们真正渴望的不仅仅是让代码运行起来,更是要理解其内在的逻辑,掌握从数据准备到模型交付的完整工作流。只有这样,当项目需求变化或出现报错时,我们才能游刃有余地应对,而不是陷入无休止的复制粘贴和求助。
这,正是我们编写这份指南的初衷。
- 数据集是模型的“知识源泉”:我们将探讨如何准备和构建高质量的数据,这是所有智能的根基。
- 模型是封装知识的“智能函数”:我们将理解不同模型的选择及其原理,它决定了学习的上限。
- 训练选项是精细调控的“成才计划”:我们将学习如何调整关键参数,像教练一样引导模型达到最佳状态。
更重要的是,本文将通过一个简单且完整的训练示例,带你亲手打通从零到一的整个过程。这个“最小可行实验”不仅能帮你提前排除环境配置、路径依赖等常见陷阱,更能让你直观地感受理论是如何转化为实践的。
快速上手:运行一次完整的YOLO训练
为了演示完整的训练流程,我们选择使用coco8这个微型数据集和yolo11n这个轻量级模型。这个组合训练速度极快,非常适合用于验证环境和代码的正确性。
为什么选择简单的模型和数据集?
在开始复杂项目前,先用一个简单的配置“跑通”整个流程,是一个非常好的开发习惯。这能帮助我们提前发现并解决环境配置、依赖版本、文件路径等常见问题,为后续更严肃的训练任务扫清障碍。
第一步:准备训练脚本
创建一个名为 01_easy_train.py 的Python文件,其核心代码如下:
from ultralytics import YOLO
if __name__ == "__main__":
# 加载一个预定义的模型结构
model = YOLO("yolo11n.pt")
# 启动训练,并配置关键参数
model.train(
data="coco8.yaml", # 数据集配置文件
epochs=10, # 训练10个轮次
imgsz=640, # 输入图像尺寸
batch=2, # 每个批次的样本数
cache=False, # 不缓存数据,节省内存
workers=0, # 数据加载进程数,设为0可避免某些环境下的报错
)
代码参数说明:
- 这里使用
yolo11n.pt是随意选择的,您完全可以将其替换为任何你想测试的YOLO模型(如yolov8n.pt)。 - 我们计划在 coco8 数据集上训练 10 个轮次。
第二步:执行训练命令
在终端中运行以下命令,启动训练过程:
python 01_easy_train.py
第三步:观察首次运行的自动下载
首次运行时,程序会自动下载所需资源,通常会看到两次下载提示:
- 下载coco8数据集:如果本地没有找到coco8数据集,程序会自动从官网下载。
- 下载字体文件:用于在生成的图片上绘制标签文字。
WARNING ⚠️ Dataset 'coco8.yaml' images not found, missing path '/media/becase/common/yolo/ultralytics-8.3.163/datasets/coco8/images/val'
Downloading https://ultralytics.com/assets/coco8.zip to '/media/becase/common/yolo/ultralytics-8.3.163/datasets/coco8.zip': 100% ━━━━━━━━━━━━ 432.8KB 1.4MB/s 0.3s
Unzipping /media/becase/common/yolo/ultralytics-8.3.163/datasets/coco8.zip to /media/becase/common/yolo/ultralytics-8.3.163/datasets/coco8...: 100% ━━━━━━━━━━━━ 25/25 2.9Kfiles/s 0.0s
Dataset download success ✅ (1.1s), saved to /media/becase/common/yolo/ultralytics-8.3.163/datasets
Downloading https://ultralytics.com/assets/Arial.ttf to '/home/becase/.config/Ultralytics/Arial.ttf': 100% ━━━━━━━━━━━━ 755.1KB 265.8KB/s 2.8s
第四步:解读训练过程日志
如果下载顺利,训练将正式开始。您会看到进度条和一系列评估指标:
Using 0 dataloader workers
Logging results to /runs/detect/train # 训练日志和结果的保存路径
Starting training for 10 epochs...
Closing dataloader mosaic
# 训练进度条和关键指标(每轮都会显示)
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
1/10 0G 1.022 3.023 1.493 3 640: 100% ━━━━━━━━━━━━ 2/2 1.7it/s 1.2s
# 在验证集上的评估结果
Class Images Instances Box(P R mAP50 mAP50-95): 100% ━━━━━━━━━━━━ 1/1 2.2it/s 0.5s
all 4 17 0.575 0.85 0.852 0.634
... (中间轮次日志) ...
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
10/10 0G 1.354 3.315 1.458 9 640: 100% ━━━━━━━━━━━━ 2/2 1.7it/s 1.2s
Class Images Instances Box(P R mAP50 mAP50-95): 100% ━━━━━━━━━━━━ 1/1 2.3it/s 0.4s
all 4 17 0.564 0.85 0.823 0.623
# 训练完成总结
10 epochs completed in 0.005 hours.
Optimizer stripped from /media/becase/common/yolo/Learning/02_train/runs/detect/train/weights/last.pt, 5.5MB
Optimizer stripped from /media/becase/common/yolo/Learning/02_train/runs/detect/train/weights/best.pt, 5.5MB
xxxxxxxxxxxxxxx
Results saved to /media/becase/common/yolo/Learning/02_train/runs/detect/train
日志关键信息解读:
- Epoch x/10: 显示当前训练轮次。
- box_loss, cls_loss: 损失值,越低越好,表示模型预测越准确。
- mAP50: 一个核心评估指标,数值越高代表模型检测精度越好。
- 最后一行
Results saved to ...是训练成功的标志。
第五步:查看训练输出结果
训练完成后,所有输出都会保存在指定目录中。我们可以用 tree 命令查看生成的文件结构:
tree /media/becase/common/yolo/Learning/02_train/runs/detect/train
典型的输出文件结构如下:
/media/becase/common/yolo/Learning/02_train/runs/detect/train
├── args.yaml # 本次训练的所有参数配置
├── results.csv # 详细的训练指标数据(CSV格式)
├── results.png # 关键指标随训练轮次的变化曲线图
├── confusion_matrix.png # 混淆矩阵,可视化模型分类性能
├── labels.jpg # 训练集标签可视化
├── train_batch0.jpg # 第一个训练批次的图片示例
├── val_batch0_pred.jpg # 验证集预测结果示例
└── weights # 模型权重目录
├── best.pt # 训练过程中在验证集上表现最好的模型
└── last.pt # 训练结束时的最后一个模型
结果文件说明:
weights/best.pt是本次训练得到的最终可用模型,可在后续直接用于预测。- 其他图片和文件都是训练评估报告,用来帮助您分析和理解模型的性能表现。例如,
results.png可以直观显示模型的学习情况。
更多推荐
所有评论(0)