yolo_v8 从如坑到入土(二)

32次阅读
没有评论

共计 3997 个字符,预计需要花费 10 分钟才能阅读完成。

1) 训练流程速写(心智模型)

  1. 确定数据口径:第 1 课的数据体检通过;data.yaml、类别顺序稳定。
  2. 基线训练yolov8n.pt 小模型先跑 50–100 epoch,锁住随机种子,保留曲线与样例可视化。
  3. 单因子实验:一次只改一个变量(LR、imgsz、增强开关等),记录变化。
  4. 对照验证:固定评估集与评估脚本,报告 mAP、Precision/Recall 与速度。
  5. 上线友好:更少花哨增强、更稳定的推理时延、可复现日志。

2) 学习率与优化器(性能的方向盘)

2.1 基本参数

  • lr0:初始学习率(warmup 之前的起点)。
  • lrf:最终学习率相对 lr0 的比例(Cosine 时常见 0.01~0.2)。
  • momentum / weight_decay:动量与权重衰减(正则)。
  • optimizerSGD / Adam / AdamW(小数据或迁移学习常选 AdamW)。
  • cos_lr=True:使用余弦退火;warmup_epochs 控制预热。

2.2 常用组合

# A) 基线:SGD + Cosine + 适中衰减
yolo train model=yolov8n.pt data=data.yaml epochs=100 imgsz=640 batch=auto \
  optimizer=SGD lr0=0.01 lrf=0.01 momentum=0.937 weight_decay=0.0005 \
  cos_lr=True warmup_epochs=3 patience=20

# B) 小数据 / 迁移:AdamW + 稍大衰减
yolo train model=yolov8s.pt data=data.yaml epochs=100 imgsz=640 batch=auto \
  optimizer=AdamW lr0=0.001 lrf=0.01 weight_decay=0.01 cos_lr=True patience=30

诊断

  • 早期 loss 高速下降→震荡→发散:lr0 太大;
  • 始终缓慢下降、长期不收敛:lr0 太小或模型容量不足;
  • 验证指标先升后跌:过拟合,考虑早停 / 正则 / 增强。

3) 批大小、图像尺寸与训练时长

  • batch:越大估计越稳,但显存压力大;显存吃紧时降 imgsz 比硬怼 batch 更稳。
  • imgsz:常见 640;目标很小或高分辨率场景尝试 768/896;移动端倾向 512/416。
  • epochs & patience:总轮次与早停容忍度;小数据适度拉长 patience,避免错过缓慢提升。
yolo train model=yolov8n.pt data=data.yaml epochs=150 imgsz=512 batch=32 patience=50

经验曲线:优先调 imgsz→lr→增强→epochs。指标无感时再换模型大小(n/s/m/l/x)。


4) 迁移学习与冻结(把预训练当“外骨骼”)

  • model=yolov8n.pt:加载 预训练权重
  • model=yolov8n.yaml pretrained=yolov8n.pt:从结构 YAML 初始化,再加载预训练;
  • freeze:冻结前若干层(降低小数据过拟合与显存占用)。
# 冻结 backbone 前 10 层,先训练头部
yolo train model=yolov8n.pt data=data.yaml epochs=30 freeze=10
# 然后解冻微调
yolo train model=runs/detect/train/weights/last.pt data=data.yaml epochs=70 freeze=0

何时冻结:数据很少(<2k 图)、域差异不大;若域差异大(如可见光→红外),直接全量微调或只冻结开头几层。


5) 数据增强策略(稳健优先)

上线友好(建议起步)

yolo train model=yolov8n.pt data=data.yaml epochs=100 imgsz=640 \
  hsv_h=0.015 hsv_s=0.7 hsv_v=0.4 fliplr=0.5 degrees=0.0 translate=0.1 scale=0.5 shear=0.0 \
  mosaic=0.0 mixup=0.0

更激进(竞赛风格)

yolo train model=yolov8m.pt data=data.yaml epochs=300 imgsz=640 \
  mosaic=0.5 mixup=0.2 perspective=0.0005 degrees=5.0 translate=0.2 scale=0.9 \
  fliplr=0.5 flipud=0.2

规律:增强增强的是 鲁棒性与召回 ,可能损失一点精度与可解释性;验证集必须 不含合成痕迹


6) 类别不平衡与小目标

  • 类权重:样本极不均衡时可在训练配置里设置 class_weights(或在数据采样阶段做分层 / 重采样);
  • 小目标:减小 imgsz 会放大目标相对尺寸;或选更密集的输入金字塔(多尺度训练)。
  • 采样均衡:构建“少数类 oversample 列表”,训练前复制或增广该类样本。

如无现成类权重参数,可从数据侧入手:过采样 + 针对性增强(随机裁剪、缩放)。


7) 稳定性与效率(强心针)

  • AMP(混合精度):默认开启,显存降 30%+,速度更快;报 nan 可尝试关闭 amp=False
  • EMA(指数滑动平均):默认启用能提升泛化;可通过设置关闭 / 开启(不同版本参数名稍异)。
  • 梯度裁剪:防爆梯度;若版本提供 grad/clip 参数,可设如 clip=1.0
  • 确定性 & 种子seed=42;需要完全可复现实验时加 deterministic=True(训练会慢)。
  • 梯度累积:当显存不足又想要“大 batch”时开启(具体参数名视版本,可在帮助中查看)。
yolo train model=yolov8s.pt data=data.yaml epochs=100 imgsz=640 batch=auto \
  amp=True seed=42 deterministic=False

8) 多 GPU 与分布式

  • 单机多卡device=0,1,2,3workers 适度增加(一般 4~8)。
  • 监控吞吐:关注 img/s、每 step 耗时;I/O 成瓶颈时提高 workers 或将数据存 SSD。
yolo train model=yolov8m.pt data=data.yaml epochs=100 imgsz=640 batch=auto \
  device=0,1 workers=8

9) 可视化与日志

  • 训练后在 runs/detect/train* 下查看:loss 曲线、mAP、PR 曲线、混淆矩阵、示例可视化;
  • tensorboard --logdir runs/ 打开曲线面板;
  • 记录配置(超参数、数据版本、commit hash)到 README/MLflow/W&B,保证可复现。

10) 常见症状→处理

  • loss 变 nan:降低 lr0;关闭 AMP;检查标签是否合法(坐标在 0~1)。
  • mAP 不涨:验证集泄漏 / 脏;学习率过小;增强与真实分布差异过大;
  • 训练很慢workers 太小;I/O 瓶颈;imgsz 过大;
  • 验证快但线上差:验证集与线上分布不一致;开启过激增强;未做 TTA 与推理阈值调优;
  • 召回低:调高 conf/iou 阈值的策略不当;尝试更强增强、更大模型或更高分辨率;
  • Precision 低(假阳多):适当提高推理 conf;降低 mixup/mosaic;清理脏标注。

11) 实验设计模板(最小可行)

基线

yolo train model=yolov8n.pt data=data.yaml epochs=100 imgsz=640 batch=auto \
  optimizer=SGD lr0=0.01 lrf=0.01 cos_lr=True seed=42 name=baseline

实验 A:imgsz 768

yolo train model=yolov8n.pt data=data.yaml epochs=100 imgsz=768 batch=auto \
  optimizer=SGD lr0=0.01 lrf=0.01 cos_lr=True seed=42 name=img768

实验 B:AdamW + 冻结 10 层(小数据)

yolo train model=yolov8s.pt data=data.yaml epochs=120 imgsz=640 batch=auto \
  optimizer=AdamW lr0=0.001 lrf=0.01 weight_decay=0.01 freeze=10 seed=42 name=adamw_freeze10

产出表:[实验名, mAP50, mAP50-95, P, R, ms/img, params, FLOPs],并附 8~12 张 固定样例 可视化图用于主观对比。


12) 推理与阈值调优(部署前的最后三步)

# 批量推理,输出到 runs/predict
yolo predict model=best.pt source=images/val conf=0.25 iou=0.7 save=True
  • PR 曲线 找到你业务的最佳 conf
  • 若漏检偏多,提高 iou 阈值意义不大,更多来自数据与模型容量;
  • 导出部署:yolo export model=best.pt format=onnx dynamic=True(或 TensorRT/OpenVINO 等)。

13) 课后练习(建议 90–120 分钟)

  1. 构建 基线 与两个 单因子实验(任选:imgsz、lr、optimizer、freeze、mosaic/mixup),对比 mAP50-95 与推理耗时。
  2. 选择 12 张固定样例图,导出三组预测可视化,点评优劣。
  3. 在验证集上扫描 conf∈{0.25,0.4,0.6}iou∈{0.5,0.7},报告 P/R/F1 表,选定上线阈值。
  4. (可选)多卡训练一次,对比吞吐与最终指标,记录显存占用。

小结

  • 先用 小模型 稳健增强 建立基线,再做 单因子 迭代;
  • 学习率是第一调参位;imgsz 与冻结帮助你在显存与过拟合之间找平衡;
  • AMP/EMA/ 梯度裁剪保稳定,多卡与日志保效率与可复现;
  • 指标 + 样例双视角评估,别被单一数字牵着走。

正文完
 0
一诺
版权声明:本站原创文章,由 一诺 于2025-09-09发表,共计3997字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码