目标检测模型选型+训练调参极简步骤清单
本清单适配 通用目标检测场景,兼顾精度优先、速度优先、边缘端部署三类需求,步骤可直接落地执行。
一、 前期准备:数据集与环境配置
-
数据集标准化
-
标注格式:统一转为 COCO 格式 (主流框架均支持,含
train.json/val.json/test.json标注文件)。 -
数据集划分:严格遵循 7:2:1 比例划分训练集、验证集、测试集,避免类别分布不均。
-
数据增强(按需选择)
场景需求 增强策略 通用目标 随机裁剪、翻转、色域变换、Mosaic(YOLO系列专用) 小目标密集(如文本) 上采样、多尺度拼接、缩小裁剪范围 边缘端部署(算力有限) 减少增强复杂度,仅保留翻转+色域变换
-
-
环境与框架选型
- 通用框架:Ultralytics YOLO (支持 YOLOv5/v8/v11,一键训练+部署)、MMDetection(支持全模型,灵活度高)。
- 硬件匹配:边缘端用 TensorRT/TFLite 量化,服务器端用 PyTorch 原生训练。
二、 模型与骨干网络匹配
根据选型决策树确定模型后,搭配最优骨干网络:
| 模型类型 | 推荐骨干网络 | 适配场景 |
|---|---|---|
| Faster R-CNN/Mask R-CNN | ResNet50/101 + FPN | 高精度场景 |
| YOLOv5/v8/v11 | CSPDarknet53(通用)/MobileNet(轻量化) | 实时检测/边缘端 |
| CenterNet/CornerNet | Hourglass-52(轻量)/104(高精度) | 小目标/异形目标 |
| DETR | ResNet50 + Transformer Encoder | 遮挡/复杂背景目标 |
| MobileNet-SSD | MobileNetV2/V3 | 移动端/嵌入式设备 |
三、 核心超参数设置(极简版)
1. 通用超参数(所有模型必调)
| 参数名 | 初始值 | 调参技巧 |
|---|---|---|
| 批次大小(batch size) | 8/16/32 | 显卡显存不足则减小,建议为 2 的幂次;边缘端设为 1 |
| 初始学习率(lr) | 0.001(SGD)/0.0001(AdamW) | 轻量化模型下调至 0.0001;用余弦退火策略衰减 |
| 训练轮数(epochs) | 100-300 | 验证集 mAP 不再提升时提前终止(早停机制) |
| 权重衰减(weight decay) | 0.0005 | 防止过拟合,轻量化模型可降至 0.0001 |
2. 模型专属超参数(按需调整)
| 模型类型 | 关键参数 | 调参方向 |
|---|---|---|
| 二阶段模型(Faster R-CNN) | RPN 锚框尺寸/IOU 阈值 | 小目标调小锚框;IOU 设为 0.7 减少负样本 |
| 一阶段模型(YOLO) | 锚框尺寸(anchors) | 用自有数据集聚类生成 anchors,提升匹配度 |
| 无锚框模型(CenterNet) | 中心点阈值/偏移量权重 | 密集目标提高中心点阈值;小目标增大偏移量权重 |
| Transformer 模型(DETR) | 解码器层数/注意力头数 | 算力有限则减少层数;目标多则增加注意力头数 |
3. 损失函数选择
- 样本平衡:优先用 Focal Loss(解决正负样本不平衡,适配 RetinaNet/YOLOv8)。
- 边框回归:用 CIoU Loss(比 IoU/GIoU 更精准,适配 YOLO 系列)。
四、 训练过程监控与优化
- 训练关键动作
- 必用 预训练权重:加载 COCO 预训练权重,加速收敛(边缘端模型可加载轻量化预训练权重)。
- 开启 多尺度训练:YOLO 系列建议设为 320-640px,提升模型对不同尺寸目标的鲁棒性。
- 监控核心指标:训练集/验证集的 mAP@0.5:0.95 (精度)、FPS(速度)、损失曲线(分类损失+回归损失)。
- 常见问题排查
- 过拟合:增大数据增强强度、提高权重衰减、减少网络层数。
- 欠拟合:提升学习率、增加训练轮数、换更深的骨干网络。
- 小目标检测差:多尺度训练、增大特征图、调小锚框/中心点阈值。
五、 模型验证与部署
- 验证 :用测试集评估模型的 mAP、FPS、召回率,重点关注业务核心目标的检测效果。
- 优化 :边缘端模型需做 量化/剪枝(TensorRT 量化可提升 2-5 倍速度);服务器端模型可蒸馏压缩。
- 部署 :
- 边缘端:导出为 ONNX/TFLite 格式,部署到手机/单片机/智能摄像头。
- 服务器端:用 PyTorch/TensorRT 部署,提供 HTTP API 接口。
调参小贴士
- 调参顺序:先调 批次大小+学习率,再调模型专属参数,最后优化损失函数。
- 单次只改一个参数,避免参数耦合难以定位效果变化原因。
- 所有调整需基于 验证集指标,而非训练集指标。