YOLOv5实战指南:从零构建自定义数据集

张开发
2026/4/18 15:14:32 15 分钟阅读

分享文章

YOLOv5实战指南:从零构建自定义数据集
1. 为什么需要自定义数据集YOLOv5作为当前最流行的目标检测算法之一其预训练模型虽然能识别常见物体但在实际业务场景中往往需要检测特定目标。比如在工业质检中要识别产品缺陷在智慧农业中要检测病虫害这些场景都需要我们构建专属的数据集。我去年帮一家电子厂部署电路板缺陷检测系统时就深刻体会到自定义数据集的重要性。他们的产品型号特殊市面上根本没有现成数据集可用。通过收集2000张带缺陷的电路板图片并标注最终训练出的模型准确率达到了98%远超人工检测水平。2. 数据采集的实用技巧2.1 数据来源选择常见的数据获取方式有三种自行拍摄用手机或工业相机采集一手数据适合特定场景网络爬取从公开数据集或行业平台获取注意版权问题合成数据使用Blender等工具生成适合罕见场景我建议新手从Kaggle、Roboflow等平台找现成数据练手。比如要做口罩检测可以直接下载MAFA数据集包含30万张标注好的口罩图片。2.2 数据质量把控收集数据时要注意这些坑多样性不同角度、光照、遮挡情况都要覆盖平衡性正负样本比例建议保持在3:1左右分辨率至少640x640像素太低会影响检测效果曾经有个安防项目客户提供的全是正面人脸数据结果模型遇到侧脸就失效。后来补充了2000张多角度数据才解决问题。3. 标注工具实战对比3.1 LabelImg使用详解安装只需一行命令pip install labelimg启动后按W键快速调出标注框支持快捷键操作CtrlS保存标注D下一张图片A上一张图片标注时建议遵循这些规范框体要紧贴目标边缘避免框体重叠同类目标使用相同标签3.2 Roboflow的高级功能对于团队协作项目推荐使用Roboflow支持多人同时标注内置数据增强工具自动生成YOLO格式他们的智能标注功能特别实用能自动预标注相似目标节省50%以上的时间。4. 格式转换核心代码解析4.1 JSON转TXT的完整方案这是改进版的转换脚本增加了错误处理import json from pathlib import Path def convert(size, box): 将绝对坐标转为YOLO标准格式 dw 1. / size[0] dh 1. / size[1] x (box[0] box[2]) / 2.0 y (box[1] box[3]) / 2.0 w box[2] - box[0] h box[3] - box[1] return [x*dw, y*dh, w*dw, h*dh] def process_json(json_path): try: with open(json_path, r, encodingutf-8) as f: data json.load(f) txt_path json_path.with_suffix(.txt) with open(txt_path, w) as f: for shape in data[shapes]: points np.array(shape[points]) xmin, ymin points.min(axis0) xmax, ymax points.max(axis0) yolo_box convert((data[imageWidth], data[imageHeight]), [xmin, ymin, xmax, ymax]) line f{class_dict[shape[label]]} { .join(map(str, yolo_box))}\n f.write(line) except Exception as e: print(fError processing {json_path}: {str(e)})4.2 常见问题排查遇到转换错误时检查这些点图片和JSON文件是否一一对应标注框坐标是否超出图片范围标签名称是否在class_dict中有定义5. 数据集架构最佳实践5.1 标准目录结构推荐这样组织数据集dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── dataset.yaml5.2 YAML文件配置详解完整的配置文件示例path: ../dataset train: images/train val: images/val test: images/test nc: 3 names: [cat, dog, person] # 高级参数 roboflow: license: CC BY 4.0 split: 70-20-10关键参数说明nc: 类别总数必须与names长度一致names: 类别名称列表建议使用英文path: 数据集根目录相对路径6. 数据增强策略6.1 基础增强方法在YOLOv5中可以直接配置augmentation: hsv_h: 0.015 # 色相调整 hsv_s: 0.7 # 饱和度调整 hsv_v: 0.4 # 明度调整 degrees: 10 # 旋转角度 translate: 0.1 # 平移比例6.2 高级增强技巧对于小样本数据集建议使用mosaic增强四图拼接添加cutout随机遮挡混合不同场景背景在PCB缺陷检测项目中通过mosaic增强使mAP提升了12%。7. 实战经验分享7.1 工业质检案例某汽车零件厂需要检测螺丝缺失问题收集了5000张带标注的零件图使用LabelImg标注了3种缺陷类型通过添加高斯噪声增强数据多样性最终模型召回率达到99.3%7.2 避坑指南这些是我踩过的坑标注不一致不同人标注标准不同解决方案是制定详细的标注规范文档样本不平衡某类样本过少导致漏检通过过采样解决误标问题定期人工复查5%的标注数据

更多文章