ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

YOLO训练数据集精选:10个实战数据集整理与格式转换指南

YOLO训练数据集精选:10个实战数据集整理与格式转换指南 1. 为什么我要做这个数据集整理系列做YOLO相关项目的人都有一个共同的痛点模型结构网上教程一抓一大把环境配置也有大把现成的脚本可以抄但真正到了要训练自己数据的时候卡住绝大多数人的不是代码而是数据从哪里来。我自己从YOLOv5刚出来那会儿就开始折腾到后来的YOLOv8、YOLOv9、YOLOv10一路踩过来最耗时间的环节永远不是调参而是找数据、洗数据、转格式。你可能有很好的想法比如做一个农田病虫害检测、做一个工业管道缺陷识别、做一个交通场景的多目标跟踪但如果没有合适的数据集再好的模型也只能在COCO上跑跑demo。这个系列我打算做成一个长期更新的合集每一期整理10个左右我实际用过或者深度调研过的数据集覆盖不同的应用场景。第03期这一批我挑选的标准有三个第一必须是YOLO格式或者能低成本转成YOLO格式的第二场景要有代表性不能全是通用目标检测第三下载渠道要相对稳定不能今天给了链接明天就失效。这10个数据集涵盖了农业、工业、交通、遥感、安防等方向有的适合做baseline有的适合做迁移学习的预训练有的则适合做特定领域的fine-tune。如果你正在找YOLO训练数据或者你手头有一个具体的检测任务但不知道从哪里找数据这篇文章应该能帮你省下不少时间。我会把每个数据集的来源、规模、类别、格式、适用场景以及我实际使用中的注意事项都写清楚你可以直接按图索骥。2. 数据集选型的核心逻辑与评估维度2.1 为什么不能随便找个数据集就开始训练很多人拿到一个数据集看图片数量还行就直接开始跑训练脚本结果训出来的模型在实际场景里一塌糊涂。问题往往出在数据集的域分布和标注质量上。举个例子你拿一个城市道路的交通数据集去训练一个农田场景的检测模型即使类别都是“车辆”模型在农田里的表现也会大打折扣因为背景纹理、光照条件、目标尺度分布完全不同。这就是所谓的域偏移问题。我在选数据集的时候会从以下几个维度去评估场景匹配度数据集的采集场景是否和你的目标场景一致。如果不一致能不能通过数据增强或者少量标注来弥补。标注质量标注框是否贴合目标有没有大量漏标、误标。这个只能通过抽样可视化来检查不能只看数据集介绍。类别平衡性各类别的样本数量是否均衡。长尾分布严重的数据集训练时需要做重采样或者损失加权。图像分辨率与目标尺度小目标多的数据集对模型的输入分辨率要求更高训练策略也要相应调整。格式兼容性是否直接支持YOLO格式或者能否通过脚本快速转换。VOC、COCO格式转YOLO都有现成工具但要注意坐标归一化的细节。2.2 YOLO格式的核心要求YOLO格式的标注文件是.txt每行代表一个目标格式为class_id x_center y_center width height其中坐标都是相对于图像宽高的归一化值范围在0到1之间。这里有几个容易踩坑的地方注意归一化时要用图像的绝对宽高而不是标注框的宽高。很多人第一次写转换脚本时会把x_center算成(x_min x_max) / 2 / image_width这个是对的但容易漏掉除以图像宽度这一步。另外类别ID是从0开始的整数需要和data.yaml中的names列表顺序严格对应。如果顺序错了模型会把“猫”识别成“狗”而且训练loss还会正常下降因为模型学的是映射关系它不知道你类别名写错了。2.3 数据集规模与训练策略的匹配不是所有任务都需要十万张图片。对于YOLOv8这样的现代检测器如果做迁移学习几千张高质量标注图片就能得到一个可用的模型。关键是标注质量要高场景覆盖要全。我一般会这样分配数据集规模适用策略预期效果500-2000张冻结backbone只训练head快速验证可行性2000-10000张全量fine-tune低学习率生产可用10000张以上从头训练或大规模预训练高精度专用模型这一期整理的10个数据集规模从几百张到几万张不等你可以根据自己的任务阶段来选择。3. 第03期10个精选数据集逐一拆解3.1 农田病虫害检测数据集这个数据集是我在做一个农业项目时找到的包含水稻、小麦、玉米三种作物的常见病虫害图像标注类别包括稻瘟病、锈病、蚜虫、螟虫等。图像采集自真实农田环境光照变化大背景复杂非常适合做农业场景的鲁棒性测试。规模约3200张图像标注框约1.2万个格式原始为VOC格式我转成了YOLO格式类别数8类分辨率多为1920x1080部分为手机拍摄的4032x3024我实际用下来的感受是这个数据集的标注质量中等偏上但小目标特别多蚜虫的标注框有时候只有十几个像素。如果你直接用YOLOv8的默认输入尺寸640训练这些小目标基本学不到。我的做法是把输入尺寸调到1280同时用Mosaic增强时注意不要过度缩小图像。实操心得农业场景的数据集颜色是最重要的特征之一。训练时HSV增强的色调变化范围不要开太大否则模型会把不同颜色的病斑混淆。3.2 工业管道缺陷检测数据集工业质检是YOLO落地最成熟的方向之一。这个数据集包含燃气管道、石油管道的内壁图像标注了裂纹、腐蚀、焊缝缺陷、凹陷四类缺陷。图像来自工业内窥镜采集分辨率不高但缺陷特征明显。规模约1800张图像格式COCO格式需要转换类别数4类分辨率多为640x480这个数据集的难点在于正负样本极度不平衡。正常管道图像占大多数缺陷样本很少。我训练的时候用了copy_paste增强来增加缺陷样本的多样性同时在损失函数里对稀有类别加了权重。另外工业场景对误检率要求极高因为一个误报可能导致整条管线停工检查所以置信度阈值我一般设到0.5以上。3.3 遥感图像目标检测数据集遥感方向的YOLO应用这两年增长很快尤其是无人机巡检和卫星图像分析。这个数据集包含飞机、船舶、储油罐、桥梁、车辆五类目标图像来自公开的卫星影像分辨率从0.5米到2米不等。规模约4500张图像切片后约2万张格式DOTA格式需要专门转换类别数5类原始DOTA有15类我筛选了常用5类分辨率原始1024x1024切片后512x512DOTA格式的转换是个体力活。它的标注是旋转框而YOLO用的是水平框。如果你的任务不需要精确的旋转角度可以直接取旋转框的外接水平矩形。但如果目标密集排列比如港口里的船只水平框会大量重叠这时候建议用YOLOv8的OBB定向边界框分支来训练。注意遥感图像的切片要有重叠否则边缘目标会被切断。我一般设置重叠率为20%。3.4 交通场景多目标检测数据集这个数据集是我从几个公开数据集中筛选合并的专注于城市道路场景包含行人、自行车、汽车、公交车、卡车、交通灯、交通标志七类。图像来自车载摄像头涵盖了白天、黄昏、夜晚三种光照条件。规模约8000张图像格式已转为YOLO格式类别数7类分辨率1280x720这个数据集最大的价值在于光照多样性。很多交通数据集只有白天场景训出来的模型一到晚上就瞎。这个数据集里夜晚图像约占30%而且包含了雨天和雾天。我训练的时候会额外做亮度扰动和运动模糊增强让模型对恶劣条件更鲁棒。3.5 烟草病虫害数据集这是一个比较垂直的数据集专门针对烟草种植场景。标注类别包括烟蚜、烟青虫、黑胫病、赤星病等。图像采集自云南和贵州的烟田背景是典型的阔叶作物。规模约2600张图像格式YOLO格式类别数6类分辨率多为3000x4000这个数据集我用来做过一次迁移学习实验从农业病虫害数据集预训练再在这个数据集上fine-tunemAP比从头训练高了约12个百分点。说明同领域预训练对垂直场景的帮助非常大。3.6 人脸口罩佩戴检测数据集这个数据集在特殊时期非常实用包含佩戴口罩、未佩戴口罩、口罩佩戴不规范三类。图像来自公共场所监控和手机拍摄涵盖了不同角度和遮挡情况。规模约7000张图像格式YOLO格式类别数3类分辨率多样从480p到1080p这个数据集的标注有一个特点口罩佩戴不规范这一类边界模糊不同标注者的标准不一致。我建议在使用前先抽样检查把标注不一致的样本剔除或者重新标注。另外人脸检测本身对小目标要求高输入尺寸建议不低于640。3.7 泥石流滑坡检测数据集地质灾害监测是YOLO的一个新兴应用方向。这个数据集包含滑坡、泥石流、崩塌三类图像来自无人机航拍和卫星遥感。规模约1500张图像格式COCO格式类别数3类分辨率1024x1024这个数据集规模不大但场景非常特殊。我实际用的时候发现负样本没有灾害的正常山体也很重要否则模型会把所有山体纹理都当成滑坡。建议自己补充一些正常山体图像作为背景负样本。3.8 自动驾驶场景点云投影数据集这个数据集严格来说不是纯图像数据集而是激光雷达点云投影到图像平面后的融合数据。包含车辆、行人、骑行者三类标注在图像坐标系下。规模约10000帧格式需要从KITTI格式转换类别数3类分辨率1242x375这个数据集的图像是宽幅的长宽比很大。直接resize到640x640会严重变形。我的做法是保持宽高比resize然后padding到正方形。另外点云投影后的图像有大量稀疏区域训练时要注意不要被这些区域主导梯度。3.9 西瓜成熟度检测数据集这是一个非常接地气的数据集用于西瓜成熟度分类和检测。标注类别包括生瓜、熟瓜、过熟瓜。图像来自瓜田包含不同光照和遮挡条件。规模约1200张图像格式YOLO格式类别数3类分辨率多为4000x3000这个数据集规模小但非常适合做快速原型验证。我用YOLOv8n在单张RTX 3060上训练了不到一个小时就得到了可用的模型。注意西瓜的颜色是判断成熟度的关键特征数据增强时不要做太强的颜色抖动。3.10 无人机农田语义检测数据集这个数据集来自一个农业无人机项目包含农田、道路、水体、建筑、植被五类语义分割标注但也可以用于YOLO的检测任务把每个区域的外接矩形作为检测框。规模约3000张图像格式语义分割掩码需要转检测框类别数5类分辨率5472x3648这个数据集的图像分辨率极高直接训练不现实。我一般会切成512x512的patch切的时候注意保持类别分布均衡。另外语义分割转检测框时如果区域形状不规则外接矩形会包含大量背景这时候建议用最小外接矩形而不是轴对齐矩形。4. 数据集处理与YOLO训练实操流程4.1 从下载到YOLO格式的完整转换不管你拿到的是什么格式的数据集最终都要转成YOLO需要的结构。标准的目录结构是这样的dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml的内容path: ./dataset train: images/train val: images/val test: images/test nc: 8 names: [class1, class2, ...]转换脚本的核心逻辑是读取原始标注计算归一化坐标写入txt文件。我写了一个通用的VOC转YOLO脚本你可以直接参考import os import xml.etree.ElementTree as ET def voc_to_yolo(xml_path, img_width, img_height, class_map): tree ET.parse(xml_path) root tree.getroot() lines [] for obj in root.findall(object): cls_name obj.find(name).text if cls_name not in class_map: continue cls_id class_map[cls_name] bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) x_center (xmin xmax) / 2 / img_width y_center (ymin ymax) / 2 / img_height width (xmax - xmin) / img_width height (ymax - ymin) / img_height lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) return lines注意浮点数保留6位小数就够了太多位数会增加文件体积对精度没有实际影响。4.2 数据清洗与标注检查拿到数据集后不要直接开始训练。先做一轮数据清洗我一般会做这几件事可视化抽样随机抽100张图把标注框画上去肉眼检查有没有明显错误。统计类别分布用脚本统计每个类别的样本数看看有没有极端长尾。检查图像完整性有些数据集里的图片是损坏的用PIL打开会报错需要提前剔除。检查标注越界归一化坐标应该在0到1之间超出范围的标注要修正或删除。我写了一个简单的检查脚本from PIL import Image import os def check_dataset(images_dir, labels_dir): issues [] for img_name in os.listdir(images_dir): img_path os.path.join(images_dir, img_name) try: img Image.open(img_path) img.verify() except: issues.append(f损坏图像: {img_name}) continue label_name os.path.splitext(img_name)[0] .txt label_path os.path.join(labels_dir, label_name) if not os.path.exists(label_path): issues.append(f缺失标注: {img_name}) continue with open(label_path) as f: for line in f: parts line.strip().split() if len(parts) ! 5: issues.append(f格式错误: {label_name}) continue coords [float(x) for x in parts[1:]] if any(c 0 or c 1 for c in coords): issues.append(f坐标越界: {label_name}) return issues4.3 YOLOv8训练配置与参数调优环境配置这块我推荐用Anaconda建一个独立环境Python版本3.9或3.10都可以。安装ultralyticspip install ultralytics训练脚本的核心参数from ultralytics import YOLO model YOLO(yolov8m.pt) model.train( datadata.yaml, epochs100, imgsz640, batch16, lr00.01, lrf0.01, momentum0.937, weight_decay0.0005, warmup_epochs3, augmentTrue, mosaic1.0, mixup0.1, copy_paste0.1, hsv_h0.015, hsv_s0.7, hsv_v0.4, degrees0.0, translate0.1, scale0.5, shear0.0, perspective0.0, flipud0.0, fliplr0.5, )这里有几个参数需要根据你的数据集特点调整imgsz小目标多用1280常规用640。mosaic小数据集建议开大数据集可以关掉最后10个epoch。mixup对类别不平衡有帮助但可能让收敛变慢。copy_paste实例分割任务效果好检测任务也可以尝试。hsv_h颜色敏感的任务如农业调小到0.015以下。4.4 训练过程监控与早停策略训练启动后重点看几个指标box_loss定位损失应该稳定下降。cls_loss分类损失如果震荡严重可能是学习率太大。mAP50IoU阈值为0.5时的平均精度这是最直观的指标。mAP50-95更严格的指标反映定位精度。我一般会设置patience20如果20个epoch mAP没有提升就早停。另外最后10个epoch关掉Mosaic可以让模型更好地适应真实分布通常能提升1-2个点的mAP。实操心得如果训练过程中mAP突然掉到0大概率是学习率爆炸了。检查一下lr0是不是设得太大或者数据里有没有脏标注。5. 常见问题与排查技巧实录5.1 数据集相关高频问题问题现象可能原因解决方法训练loss不下降学习率太小或标注格式错误检查标注文件调大lr0mAP始终为0类别ID不匹配或标注坐标未归一化核对data.yaml和标注文件验证集mAP远低于训练集过拟合或验证集分布不同增加增强检查验证集来源小目标检测效果差输入分辨率不够提高imgsz用SAHI切片推理误检率高负样本不足补充背景图像作为负样本训练速度慢batch太大或imgsz太高降低batch用AMP混合精度5.2 标注工具与格式转换的坑LabelImg是用的最多的标注工具但它默认保存的是VOC格式的XML。你需要在标注前就把格式切换成YOLO否则标完再转会很麻烦。另外LabelImg的YOLO模式保存的类别是索引而不是名称所以你要提前在predefined_classes.txt里按顺序写好类别名。VSCode也有YOLO标注插件适合小规模标注但大规模标注还是推荐LabelImg或者CVAT。CVAT支持团队协作和自动标注但部署稍微复杂一点。5.3 数据集合并与类别对齐当你把多个数据集合并时最大的坑是类别名不一致。比如数据集A叫“car”数据集B叫“vehicle”合并后模型会当成两个类。我的做法是建一个统一的类别映射表class_map { car: 0, vehicle: 0, automobile: 0, person: 1, pedestrian: 1, }合并后重新生成所有标注文件确保类别ID一致。5.4 训练环境配置的常见报错Anaconda环境配置YOLOv8时最常见的报错是CUDA版本不匹配。torch和torchvision的版本要严格对应而且要和你的显卡驱动兼容。我一般用这个组合conda create -n yolo python3.10 conda activate yolo pip install torch2.1.0 torchvision0.16.0 --index-url https://download.pytorch.org/whl/cu118 pip install ultralytics如果你的显卡不支持CUDA 11.8就去PyTorch官网查对应版本的安装命令。不要直接pip install torch那样装的是CPU版本训练会慢到无法忍受。6. 数据集扩展与持续迭代的思路这一期整理的10个数据集只是一个起点。实际项目中你很难找到一个完全匹配需求的数据集更多时候是多个数据集混合自己标注。我的建议是第一先用公开数据集快速训一个baseline验证技术路线可行。第二用这个baseline去实际场景里跑推理把误检和漏检的样本收集起来。第三对这些困难样本进行人工标注加入训练集重新训练。这个迭代闭环比一次性追求完美数据集要高效得多。另外Hugging Face上有很多社区贡献的数据集搜索“YOLO dataset”能找到不少。下载的时候注意看license有些只允许研究使用。国内的话一些公开的竞赛平台也会放出数据集质量参差不齐需要自己筛选。我个人的习惯是维护一个数据集索引表记录每个数据集的来源、规模、类别、使用过的项目、实际效果评价。这样下次遇到类似任务时可以直接查表不用重新踩坑。这个习惯帮我省了大量时间推荐你也试试。
返回列表