Skip to content

模型训练

1. 基础训练(python)

python
from ultralytics import YOLO

# 加载预训练模型(推荐,迁移学习收敛更快)
model = YOLO("yolo26n.pt")

# 开始训练
results = model.train(
    data="path/to/data.yaml",   # 数据集配置文件路径
    epochs=100,                  # 训练轮数
    imgsz=640,                   # 输入图片尺寸
    batch=16,                    # 批次大小
    device=0,                    # GPU 设备(0 表示第一块 GPU)
    project="runs/train",       # 输出目录
    name="my_yolo26_exp",       # 实验名称
)

2. 基础训练(命令行CLI)

bash
yolo detect train \
    data=path/to/data.yaml \
    model=yolo26n.pt \
    epochs=100 \
    imgsz=640 \
    batch=16 \
    device=0 \
    project=runs/train \
    name=my_yolo26_exp

3. 常用训练参数

参数默认值说明
model模型文件:.pt 加载预训练权重,.yaml 从头构建
data数据集 yaml 配置文件路径
epochs100训练总轮数
imgsz640输入图像尺寸(建议 640)
batch16批次大小。设为 -1 可自动适配 60% 显存
deviceauto设备:0(GPU)、cpu、mps(Mac)、0,1(多 GPU)
optimizerauto优化器:auto 会根据数据量自动选择 MuSGD 或 AdamW
lr0.01初始学习率
patience100早停耐心值(验证指标多少轮不提升就停止)
save_period-1每隔多少轮保存一次模型(-1 仅保存 best 和 last)
cacheFalse缓存图片到内存 True 或磁盘 disk,加速训练
workers8数据加载线程数
pretrainedTrue是否使用预训练权重
resumeFalse是否从断点继续训练
ampTrue混合精度训练,减少显存占用
cos_lrFalse余弦学习率衰减
close_mosaic10最后 N 轮关闭 Mosaic 增强
freezeNone冻结前 N 层(微调时常用)

4. 进阶训练配置

4.1. 从0开始训练(不使用预训练权重)

python
model = YOLO("yolo26n.yaml")  # 从 YAML 配置构建模型
results = model.train(data="data.yaml", epochs=300, imgsz=640)

4.2. 使用预训练权重 + 自定义 YAML

python
model = YOLO("yolo26n.yaml").load("yolo26n.pt")
results = model.train(data="data.yaml", epochs=100, imgsz=640)

4.3. 冻结骨干网络微调

python
model = YOLO("yolo26n.pt")
results = model.train(
    data="data.yaml",
    epochs=50,
    freeze=10,      # 冻结前 10 层
    lr0=0.001,      # 微调时用较小学习率
)

4.4. 多 GPU 训练

python
model = YOLO("yolo26n.pt")
results = model.train(
    data="data.yaml",
    epochs=100,
    device=[0, 1],  # 使用 GPU 0 和 GPU 1
)

4.5. 断点续训

python
model = YOLO("runs/train/my_yolo26_exp/weights/last.pt")
results = model.train(resume=True)

4.6. macOS Apple Silicon 训练

python
model = YOLO("yolo26n.pt")
results = model.train(data="data.yaml", epochs=100, device="mps")

5. 训练输出目录

训练完成后,结果保存在 runs/train/my_yolo26_exp/ 目录下:

bash
runs/train/my_yolo26_exp/
├── weights/
   ├── best.pt             # 最佳模型权重(验证 mAP 最高时保存)
   └── last.pt             # 最后一轮的模型权重
├── results.csv             # 每轮训练指标数据
├── results.png             # 训练曲线图
├── confusion_matrix.png    # 混淆矩阵
├── F1_curve.png            # F1 曲线
├── P_curve.png             # 精确率曲线
├── R_curve.png             # 召回率曲线
├── PR_curve.png            # PR 曲线
├── labels.jpg              # 数据集标签分布
├── train_batch*.jpg        # 训练批次可视化
├── val_batch*_pred.jpg     # 验证预测可视化
└── args.yaml               # 训练参数记录

6. 训练技巧

  • 先用小模型验证流程:用 yolo26n+ 少量 epoch 跑通整个流程后,再用大模型正式训练
  • batch 大小调整:显存不足时减小 batch,或设为 -1 自动适配
  • 图片缓存加速:数据集不大时用 cache=True 将图片缓存到内存
  • 数据增强:Ultralytics 默认开启 Mosaic、翻转等增强,通常无需额外配置
  • 早停机制:patience=100 表示验证指标 100 轮不提升就停止,避免过拟合
  • 学习率:使用预训练权重时建议 lr0=0.01;微调时可降到 0.001
  • 训练轮数:小数据集 100-200 轮,大数据集 300+ 轮

7. 训练结果验证

使用训练好的模型验证

python
from ultralytics import YOLO

model = YOLO("runs/train/my_yolo26_exp/weights/best.pt")

metrics = model.val(data="path/to/data.yaml")
print(f"mAP50:    {metrics.box.map50:.4f}")
print(f"mAP50-95: {metrics.box.map:.4f}")
print(f"精确率:    {metrics.box.mp:.4f}")
print(f"召回率:    {metrics.box.mr:.4f}")

命令行方式:

bash
yolo detect val model=runs/train/my_yolo26_exp/weights/best.pt data=path/to/data.yaml

关键指标说明

IoU:交并比,用于评估检测框与真实框的重叠程度。

指标含义理想值
mAP50IoU=0.5 时的平均精度> 0.8
mAP50-95IoU=0.5~0.95 的平均精度> 0.5
Precision精确率(预测为正的正确比例)> 0.8
Recall召回率(实际为正被检测到的比例)> 0.8

京ICP备2024093538号-1