Appearance
模型训练
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_exp3. 常用训练参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| model | 模型文件:.pt 加载预训练权重,.yaml 从头构建 | |
| data | 数据集 yaml 配置文件路径 | |
| epochs | 100 | 训练总轮数 |
| imgsz | 640 | 输入图像尺寸(建议 640) |
| batch | 16 | 批次大小。设为 -1 可自动适配 60% 显存 |
| device | auto | 设备:0(GPU)、cpu、mps(Mac)、0,1(多 GPU) |
| optimizer | auto | 优化器:auto 会根据数据量自动选择 MuSGD 或 AdamW |
| lr | 0.01 | 初始学习率 |
| patience | 100 | 早停耐心值(验证指标多少轮不提升就停止) |
| save_period | -1 | 每隔多少轮保存一次模型(-1 仅保存 best 和 last) |
| cache | False | 缓存图片到内存 True 或磁盘 disk,加速训练 |
| workers | 8 | 数据加载线程数 |
| pretrained | True | 是否使用预训练权重 |
| resume | False | 是否从断点继续训练 |
| amp | True | 混合精度训练,减少显存占用 |
| cos_lr | False | 余弦学习率衰减 |
| close_mosaic | 10 | 最后 N 轮关闭 Mosaic 增强 |
| freeze | None | 冻结前 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:交并比,用于评估检测框与真实框的重叠程度。
| 指标 | 含义 | 理想值 |
|---|---|---|
| mAP50 | IoU=0.5 时的平均精度 | > 0.8 |
| mAP50-95 | IoU=0.5~0.95 的平均精度 | > 0.5 |
| Precision | 精确率(预测为正的正确比例) | > 0.8 |
| Recall | 召回率(实际为正被检测到的比例) | > 0.8 |