基于COCO2017与自定义数据集定制YOLOv5检测数据集方法咨询
COCO+自定义数据集训练4类YOLOv5模型实操步骤
1. 提取COCO数据集中三类目标样本
- 提前准备好COCO2017的检测标注文件(
instances_train2017.json、instances_val2017.json)和对应train、val图片集,不需要下载COCO全量其他类型标注。 - 先明确COCO原生类别ID对应关系:bicycle为1、car为2、motorcycle为4,提取时统一做类别ID映射:bicycle=0、car=1、motorcycle=2,和后续新增的电动滑板车类别ID顺承。
- 提取逻辑不用写复杂工具:读取COCO标注json,过滤出所有包含这三类目标的图片,标注里只保留这三类的检测框,删除其他类别标注,同时把标注格式转成YOLO要求的归一化xywh格式,存为和图片同名的txt标签文件。
- 提取后的文件单独存到
coco_filtered目录,按images/train、images/val、labels/train、labels/val分层存放。注意:只要图片包含三类目标之一就保留,不要因为图片里有其他COCO类别就直接删掉整图,否则会损失大量有效样本。
2. 制作电动滑板车自定义数据集
- 数据采集覆盖多元场景:城市非机动车道、商圈、小区、不同光照条件(白天/夜间/雨天)、不同拍摄角度、不同遮挡程度,总标注量建议不低于1500张,按8:2比例拆分训练集和验证集。
- 标注用LabelImg工具即可,保存格式直接选YOLO格式,标注类别名统一为
electric_scooter,对应类别ID固定为3。标注时只标露出比例超过1/3、特征清晰的目标,严重遮挡、模糊的目标不要强行标注,避免引入标注噪声。 - 标注完成的文件单独存到
custom_scooter目录,目录结构和之前提取的COCO数据保持一致。
3. 合并数据集并校准配置
- 新建最终训练用的数据集根目录
dataset_4class,下设images/train、images/val、labels/train、labels/val四个子目录。 - 将
coco_filtered和custom_scooter下的训练集图片、标签全部拷贝到对应train目录,验证集同理拷贝到val目录。如果出现文件名重复,给其中一批文件加统一前缀(比如COCO来源的文件加coco_前缀,自定义数据加scooter_前缀),避免文件覆盖丢失。 - 在数据集根目录新建
dataset.yaml配置文件,内容参考如下:
path: /your/absolute/path/to/dataset_4class # 替换成你自己的数据集绝对路径 train: images/train val: images/val nc: 4 names: 0: bicycle 1: car 2: motorcycle 3: electric_scooter
- 合并完成后随机抽30张左右图片,将标签框绘制到图片上校验,确认没有类别ID错配、框坐标偏移、漏标错标问题,再启动训练。
4. 启动YOLOv5训练
- 拉取YOLOv5官方代码,安装完依赖后先跑官方自带的demo脚本,确认PyTorch、CUDA环境正常。
- 根据自身显卡显存选择模型规格:8G及以下显存选yolov5s,10-12G显存选yolov5m,16G以上显存可选yolov5l/x。
- 复制对应规格的模型配置文件,将文件中
nc参数从默认的80修改为4,匹配当前的4个检测类别。 - 训练启动命令参考如下,参数可根据硬件情况调整:
python train.py \ --img 640 \ --batch 16 \ --epochs 100 \ --data /your/path/to/dataset.yaml \ --cfg models/yolov5s.yaml \ --weights yolov5s.pt \ --device 0 \ --patience 10
参数说明:batch大小根据显存调整,显存不足就降到8甚至4;加--patience 10开启早停,验证集精度连续10轮不涨就自动停止训练,避免浪费算力;--weights用官方预训练权重做迁移学习,收敛速度比从零训快3倍以上。
5. 常见问题踩坑提示
- 不要直接用全量COCO数据集训练:全量COCO包含80个类,训练时其他类的梯度会干扰目标类的特征学习,还会大幅拉长训练时间,过滤后的三类样本量已经足够训练需求。
- 标注标准要统一:不要把电动自行车、平衡车归到电动滑板车类别,否则会造成类间特征混淆,模型容易把摩托车、电动自行车错检成滑板车。
- 注意类别不平衡问题:COCO中car类样本量远高于另外三类,电动滑板车样本量最少,如果训练后发现滑板车召回率低,可以给少样本类做离线数据增强(随机翻转、亮度调整、加噪声)扩充样本,也可以在训练时调整类别损失权重,提升少样本类的训练优先级。
- 模型验证不要用和训练集同源的图片,尽量用不同来源的实拍图测试,发现错检漏检多的场景,补充对应场景的难例样本迭代训练2-3轮,精度就能达到可用水平。
内容的提问来源于stack exchange,提问作者Crixus
相关产品推荐
相关产品推荐

