数据标注需用 LabelImg 或 CVAT 标出目标框和类别,统一命名并生成。xml或。json 文件;数据组织按 YOLO、Faster R-cnn、tensorflow 要求转为对应格式;训练推荐 YOLOv8 或 Faster R-CNN,注意学习率、增强与早停;部署需导出 ONNX,用 ORT/TensorRT 加速,再 封装API 服务。

数据标注:用 LabelImg 或 CVAT 标出目标框和类别
标注是训练前最耗时但最关键的一步。推荐用LabelImg(轻量、本地运行)或CVAT(支持多人协作、带插件和自动标注辅助)。标注时需统一命名规范(如全小写、无空格),每张图生成一个同名的.xml(Pascal VOC)或.json(COCO)文件,内容包含目标位置(xmin, ymin, xmax, ymax)和类别名(如“car”“person”)。注意遮挡、小目标、边界模糊样本要如实标注,别跳过难例——模型后期泛化力就靠这些。
数据组织与格式转换:按框架要求整理成标准结构
不同模型对输入格式敏感。例如:
– YOLOv5/v8需要 train/val/test 三份图像 + 对应 .txt 标签(每行 class_id center_x center_y width height,归一化到 0~1);
– Faster R-CNN(pytorch torchvision) 常用 COCO 格式,用 coco_utils.py 加载,或转为自定义 Dataset 类返回 image, target(含 boxes、labels、image_id);
– TensorFlow Object Detection API 则依赖 TFRecord 文件,需用官方 generate_tfrecord.py 脚本转换。
建议写个简单脚本自动划分训练集(如 8:1:1)、检查标签完整性(有图无标 / 有标无图)、过滤无效框(坐标越界、宽高≤0),省得训练时报错中断。
模型训练:选好基线、调参、监控收敛
新手从 YOLOv8(ultralytics) 或torchvision.models.detection.fasterrcnn_resnet50_fpn起步最稳。命令行一行启动训练:
yolo detect train data=dataset.yaml model=yolov8n.pt epochs=100 imgsz=640 batch=16
立即学习“Python 免费学习笔记(深入)”;
关键点:
– 学习率 :初始设0.01(YOLO)或0.02(Faster R-CNN),用余弦退火或 StepLR;
– 数据增强 :YOLO 默认开 Mosaic+MixUp,小数据集可保留,大场景可关 Mosaic 防过拟合;
– 早停与保存 :监控map@0.5,保存 best.pt 而非 last.pt;
– 验证频率:每 5~10 个 epoch 跑一次 val,看 loss 是否下降、mAP 是否爬升,卡住就调学习率或增数据。
模型部署:转 ONNX + 推理加速 + 封装 接口
训练完的 .pt 或.pth不能直接上线。分三步走:
– 导出为 ONNX:YOLOv8 用 yolo export model=best.pt format=onnx;Faster R-CNN 用torch.onnx.export(),注意dynamic_axes 设好 batch 和 box 数;
– 推理加速 :用 ONNX Runtime(CPU 快)、TensorRT(nvidia GPU 极致加速)、或openvino(Intel CPU 优化)加载 ONNX,比原生 PyTorch 提速 2~5 倍;
– 封装服务 :flask/fastapi 写个 http 接口,接收图片 base64 或 URL,返回 JSON 格式检测结果(类别、置信度、xyxy 坐标);也可打包成 docker 镜像,方便上 K8s 或边缘设备(Jetson、RK3588)。
基本上就这些。不复杂但容易忽略细节——标得不准、路径写错、归一化漏做、ONNX 输入尺寸没对齐,都可能让模型训不出或跑不动。边做边验证每一步输出,比全跑完再 debug 省十倍时间。