前言

当你满怀期待地打开一个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 

第三步:观察首次运行的自动下载

首次运行时,程序会自动下载所需资源,通常会看到两次下载提示:

  1. 下载coco8数据集:如果本地没有找到coco8数据集,程序会自动从官网下载。
  2. 下载字体文件:用于在生成的图片上绘制标签文字。
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 可以直观显示模型的学习情况。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐