案例目标:在预训练模型基础上,改路径/类别数/特征层参数,用案例一的数据集训练出高准确率的交通路牌检测模型。主流方案是 PyTorch + YOLO 系列工程(训练日志 results.csv 正是 YOLOv5/v8 的产物,值得归档对比)。下面给出两个版本的写法。
# data.yaml —— YOLOv8 / YOLOv5 的数据集配置(需要你亲手改的三个地方都标了)
path: /home/user/dataset # ← 改1:数据集根目录(绝对路径最稳)
train: images/train # 训练图目录(相对 path)
val: images/val # 验证图目录
nc: 3 # ← 改2:类别个数(有几类写几)
names: ["prohibitory", "warning", "mandatory"] # ← 改3:类别名列表,顺序=标注时的类别号
# YOLOv5 的用户改 models/yolov5s.yaml:
nc: 3 # 把默认的 80 类改成 3
# yolov5s.pt 预训练权重的顶层分类头是 80 类,需要改或删掉
# train_yolo.py
from ultralytics import YOLO
# 加载预训练模型(起点高、收敛快)
model = YOLO("yolov8n.pt") # 或替换为你的 .pt 路径
model.train(
data="data.yaml", # 指向 8.1 的配置文件
epochs=100, # 轮数:小数据集 100 轮起步,看着 loss 收敛即可
imgsz=640, # 输入尺寸:路牌小目标建议 640,显存不够降 512
batch=16, # 批大小:显存 OOM 就减半
lr0=0.01, lrf=0.01, # 初始/最终学习率,预训练微调别开太大
patience=20, # 早停:20 轮无提升自动停,省时间
hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, # 色彩抖动:路牌对颜色敏感,幅度要克制
degrees=5, translate=0.1, scale=0.5, # 几何增强:模拟行车视角
fliplr=0.5, # 水平翻转(flipud 上下翻转对路牌无意义,别开)
project="runs/sign", name="exp1") # 输出目录,results.csv 会生成在这里
metrics = model.val() # 训练完立即在验证集上评估
print(metrics.box.map) # mAP@0.5:0.95
# YOLOv5 工程版(命令行方式):
python train.py --img 640 --batch 16 --epochs 100 \
--data data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt \
--name exp1
# 训练日志在 runs/train/exp1/results.csv —— 训练完成后值得归档的就是它!
| 列名 | 含义 | 健康信号 |
|---|---|---|
train/box_loss | 框回归损失(框画得准不准) | 持续下降后趋平 |
train/cls_loss | 分类损失(类别认得对不对) | 持续下降 |
metrics/mAP_0.5 | IoU≥0.5 时的平均精度 | 上升并稳定在高位 |
metrics/mAP_0.5:0.95 | 更严格的综合指标(案例四考核的就是它) | 越高越好 |
调参口诀:loss 不降 → 学习率太大,除以 10;mAP 卡住 → 加数据/加增强/换更大的模型(s→m);验证 loss 上升训练 loss 下降 → 过拟合,减轮数或加正则。改一个参数重训一次,每次都要看 results.csv 对比,别盲改。
— AI训练师技术交流教程 · 仅供学习交流 —