ARTICLE DETAIL

资讯详情

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

YOLO项目实战:10个精选数据集与格式转换指南

YOLO项目实战:10个精选数据集与格式转换指南 “做YOLO项目最先卡住的往往不是模型而是数据集。”这是我带了好几届实习生之后最深的体会。不管你是跑yolov5、v8还是最新的v11模型结构都变化不大真正决定项目能不能落地的永远是喂进去的数据。网上公开数据集一大堆有的藏在论文附录里有的散落在GitHub仓库有的来自各种比赛真到用的时候光是“找数据转格式”就能耗掉两三天。这一期我把过去两年实际用过的、帮别人调过的、亲自踩过坑的10个精选数据集整理出来都是能直接下载、能转换成YOLO格式、能立刻开训的那种覆盖行人车辆、农业植保、工业安全、遥感小目标几大高频场景。不管你是刚入门练手还是项目验收前需要补数据这期内容都能帮你少走很多弯路。1. 选数据集之前先把这几个标准想清楚1.1 不是所有“数据集”都能拿来做YOLO很多新手上来就搜“数据集下载”看到几百G的图片资源就往下拉结果拉下来发现要么没有标签要么标签是分类格式不是目标框。YOLO训练有个硬性前提每张图必须有bounding box标注也就是“目标在哪、是什么类别”这两个信息。像热词里总出现的CIFAR-10、ImageNet这类纯分类数据集没有框坐标直接拿来YOLO是没法用的最多只能用来做预训练之外的对比实验。另外像GDP空间分布网格数据、blogcatalog这种结构化数据根本不属于图像范畴和YOLO完全不搭边。1.2 五个选型维度我每次给项目选数据集一定会先过这五个维度任务类型匹配先想清楚你是做检测、实例分割还是姿态估计。这期的数据集主要针对目标检测个别附带分割标注后面会单独说明。标注格式兼容性COCO格式、VOC格式、Roboflow自定义格式都能转成YOLO需要的txt但转起来要花时间优先选原生或已有成熟转换脚本的。类别覆盖度项目要检测哪些类、各类样本量是否均衡别信“通用的就是万能的”。场景分布差异训练集和实际部署场景越接近效果越好。比如无人机视角就找航拍数据集别用地面视角硬顶。版权与合规学术数据集通常限制商用做产品落地前一定看清楚license这是很多团队容易忽略的雷。1.3 这10个数据集是怎么选出来的这一期不是简单堆热门而是按照“通用基础训练—典型应用场景—特殊任务加成”三层结构来的。前几个适合打底预训练中段几个对应工业和农业落地最后两个是专门给资深玩家准备的进阶内容。每个数据集我都会给出实际体感、转换难易度和典型坑点让你拿到手能快速判断“这东西能不能用在当前项目”。2. 10个精选数据集逐个拆解先上总览表方便你快速定位序号数据集名称核心任务类别数规模量级原生标注格式适合场景1MS COCO 2017通用目标检测/实例分割80训练集11.8万张COCO JSON预训练、通用模型2PASCAL VOC 2012通用目标检测20训练验证集1.7万张VOC XML入门练手、迁移学习3CrowdHuman行人检测1训练集1.5万张COCO风格密集人群、行人检测4VisDrone 2019无人机视角目标检测10训练集6471张COCO格式航拍、小目标、遥感5Global Wheat Head Detection农业麦穗检测1训练集3422张CSV/框坐标农业计数、田间检测6PlantDoc植物病害检测27约2500张图像VOC XML农作物病虫害识别7SHWD 安全帽佩戴检测工业安全检测2约7500张VOC XML工地安全、人员监管8TT100K 腾讯交通标志交通标志检测4510万张图像自定义TXT自动驾驶、交通标识9AITODV2航空目标检测8约21000张COCO风格遥感解译、小目标检测10Roboflow Universe 精选公开集多任务综合视项目而定海量可直接导出YOLO格式垂直场景快速起步2.1 MS COCO 2017跑YOLO之前先跑它打底MS COCO是YOLO系列官方预训练权重的基础数据集几乎每个YOLO版本的.pt预训练文件都先在COCO上训过一遍。它的80类覆盖人、车、动物、日常用品标注不仅有检测框还有实例分割掩码和关键点质量非常高。实际用的时候我建议不要下载全部的18万张图去训练小模型而是先拿COCO预训练权重在自己的数据上微调。只有做通用检测产品时才需要重新在COCO全量上训练。COCO的坑在于人体形状的框比例特殊迁移到行人检测还好但迁移到小目标场景要慎重COCO里中小目标的分布和航拍图完全不一样。转YOLO格式时pycocotools库可以直接解析官方Ultralytics仓库里也有现成脚本。2.2 PASCAL VOC 2012最适合练习格式转换的经典PASCAL VOC是很多早期YOLO教程的首选数据集只有20类标注文件是VOC XML格式结构简单特别适合用来理解“标注如何变成边界框”。比如VOC的标注里每个object节点包含name和bndboxbndbox里有xmin、ymin、xmax、ymax转换成YOLO格式时只需要做个归一化除法。这个数据集我一般推荐给两类人一类是完全没接触过数据集处理的新手因为结构简单不容易懵另一类是准备换工作面试的面试官问VOC格式和COCO格式的区别拿VOC练一遍就能讲清楚。注意VOC的train和val划分比较老很多文章直接用trainval训练再在自己的test集上验证这样可比性会打折扣建议统一按官方划分来。2.3 CrowdHuman密集人群场景的“硬骨头”CrowdHuman的每一张图都是真实街景密集程度很高经常有几十个行人挤在一起互相遮挡严重。它的出现就是为了解决行人检测中“人被挡住一半”这种老大难。我第一次用它训yolov5s的时候测试集mAP只有0.72左右明显比在VOC上低原因就是数据太难、目标太密集默认的NMS参数会压掉很多正确框。后来把NMS的IoU阈值从0.45调低到0.2情况好了不少。这个数据集表征了真实监控场景的复杂度想做人流量统计、安防监控的强烈建议作为补充训练集。标注格式和COCO接近uppers和visibles两种框都可以用检测框建议取full_body部分。2.4 VisDrone 2019无人机视角和密集小目标的必修课VisDrone是天津大学等单位发布的无人机视觉数据集图像全部来自无人机俯拍内容包括行人、车辆、自行车、公交车等10个类别。数据量虽然只有几千张但单张图像的标注目标数量非常大小目标比例很高这对模型的感受野和特征提取能力是很大的考验。用VisDrone训练最大的体感是“loss降得慢”。因为小目标太多框的坐标误差占比被放大。这时可以试试把输入分辨率从640提到1280虽然慢一点但对小目标的mAP提升非常明显。下载的时候建议直接拿VisDrone官方提供的COCO格式再转换到YOLO格式网上现成脚本很多。2.5 Global Wheat Head Detection农业场景下的目标计数利器这个数据集来自全球小麦头检测比赛目标是识别田间图像里的麦穗并定位每个麦穗的位置。所有图都是田里实拍自然光照、不同生长阶段、密集重叠的麦穗都在里面是练农业目标检测和计数的绝佳数据。比较特殊的是它的原始标注不是框而是点的形式需要自己做后处理生成框。比赛官方提供了baseline脚本把每个点扩展成一个固定尺寸的框。如果你不想处理这个麻烦Kaggle上有人转换好的YOLO格式版本可以直接下载。农业项目落地时我特别推荐配合TTA测试时增强来做因为麦穗的密集程度会让框偏移很频繁。2.6 PlantDoc病虫害识别的入门首选PlantDoc是一个植物病害检测数据集包含27类植物病害图像来源是自然环境中的手机拍摄不是实验室白背景照片这点非常讨喜。它和PlantVillage经常被混在一起说但PlantVillage是分类数据集PlantDoc才带检测框别下错了。这个数据集的问题是标注质量参差不齐部分框画得不准有些图像对焦模糊。实际训练时建议先做一轮清洗把明显标注错的样例删掉能提升2到3个点的mAP。对应到热词里“烟草病虫害数据集”这类需求PlantDoc虽然不是烟草专用但迁移学习的路子是完全成立的先在PlantDoc上训通用病害特征再用自家烟草图片微调数据量压力会小很多。2.7 SHWD安全帽佩戴检测工业场景的最实用样本SHWD是开源社区整理的安全帽检测数据集标注就两类佩戴了安全帽的头部和没有佩戴安全帽的头部。图片来自工地监控和网络爬取场景接近施工现场。做施工安全、工厂人员监管的朋友基本绕不开它。SHWD的原始标注是VOC格式图片尺寸比较杂有的很大有的很小我处理时统一做了letterbox缩放避免训练维度不一致。类别不平衡问题也存在未佩戴安全帽的样本明显少于佩戴样本这时可以用在线增强、类别权重、或者采集补充未佩戴样本。如果你准备做ToB交付原数据集的图片数量并不够建议在SHWD基础上追加自己拍的现场图。2.8 TT100K腾讯交通标志自动驾驶场景的“中文字典”TT100K的全称是Tencent Traffic-sign 100K由腾讯地图团队采集标注包含了数十万张街景图和45类交通标志标注。这个数据集最大的特点是有大量中国特有的交通标志和国外数据集有本质区别。做国内自动驾驶、高精度地图、辅助驾驶等方向用它比用德国的GTSRB更贴实际。标注格式需要重点关注它自带TXT位置文件尺寸和类别信息都在里面但同时也提供了COCO和VOC版本建议直接用转换好的版本。这数据集的类别分布极其不均匀像“限速40”这类标志样本非常多而一些冷门警告标志可能只有几张图训练时建议用类别重映射或剔除过少类别。2.9 AITODV2遥感目标检测的高质量选择AITODV2是目前航拍遥感领域很受关注的一个数据集目标包含飞机、车辆、船只等8类图像来自不同传感器、不同高度和不同城市比很多单一来源遥感数据集更贴近真实遥感图像。它和VisDrone的差异在于VisDrone强调的是“从空中看地面的细节”AITODV2更偏“遥感影像解译”的工程感尺度变化更大很多目标只有几像素大小。训练时强烈建议开启YOLO的mosaic增强并且把anchor尺寸调小一档不然很容易出现框不收敛或者震荡。另外AITODV2的标注格式虽然标称COCO风格但原始下载里可能缺category字段需要补一个类别映射表。2.10 Roboflow Universe精选公开集垂直场景的“万能补给站”Roboflow Universe是一个公开数据集平台里面集合了大量作者上传的数据集涵盖医疗影像、工业检测、零售分析等细分方向。平台最大的优势是导出方便选好目标格式YOLO v8 PyTorch、YOLOv5 TXT等直接下载连划分比例都给你生成好。很多冷门场景比如热词里的“燃气管道图像数据集”“鸟类目标检测的数据集”在上面都能搜到社区版本。但要注意平台数据集质量参差有的完全没有人工校验有的标注者水平一般。我的习惯是下载后先抽5%到10%的图看一眼可视化结果框错得很离谱的直接放弃。Roboflow还给每个数据集提供了一个“数据卡”里面有类别分布、图片尺寸、标注数量等统计信息下载前先看数据卡能省去很多踩坑时间。3. 格式转换与预处理把数据集真正变成YOLO能用的样子3.1 YOLO标注格式到底长什么样YOLO格式的核心是一个txt文件每一行代表一个目标格式是类别id、中心点x坐标、中心点y坐标、目标宽度w、目标高度h。这五个值全部是归一化坐标也就是相对图片宽度和高度的比例取值在0到1之间。比如一张宽1920像素、高1080像素的图片某个目标的框是(100, 200)到(300, 600)那中心点就是((100300)/2 / 1920, (200600)/2 / 1080)宽度是(300-100)/1920高度是(600-200)/1080。这个归一化步骤很关键任何一步写错都会导致训练时框的位置完全错乱。3.2 VOC XML转YOLO的参考代码VOC格式转YOLO格式并不复杂核心就是读取XML里的bndbox坐标做归一化。下面这段代码是我平时常用的版本已经处理了xml.etree解析和类别映射import xml.etree.ElementTree as ET import os def voc_to_yolo(xml_path, out_dir, class_names): tree ET.parse(xml_path) root tree.getroot() img_w int(root.find(size/width).text) img_h int(root.find(size/height).text) lines [] for obj in root.findall(object): name obj.find(name).text if name not in class_names: continue cls_id class_names.index(name) box obj.find(bndbox) xmin float(box.find(xmin).text) ymin float(box.find(ymin).text) xmax float(box.find(xmax).text) ymax float(box.find(ymax).text) x_center (xmin xmax) / 2.0 / img_w y_center (ymin ymax) / 2.0 / img_h width (xmax - xmin) / img_w height (ymax - ymin) / img_h lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n) with open(os.path.join(out_dir, os.path.splitext(os.path.basename(xml_path))[0] .txt), w) as f: f.writelines(lines)使用的时候只需要传入xml文件路径、保存txt的目录和提前定义好的类别列表。这里有个容易踩的坑有些标注工具生成的XML里还有difficult节点表示目标是否难以辨识转换时最好跳过difficult1的样本。3.3 COCO JSON转YOLO的思路COCO格式的标注是一个大JSON文件里面有一个annotations数组每条annotation包含image_id、category_id、bbox四个值。转YOLO格式时需要先把JSON里的images和annotations按image_id关联起来再对每一张图生成对应的txt。这里关键点是COCO的bbox格式是[x, y, width, height]表示左上角坐标和宽高而YOLO需要中心点和宽高所以转换时要先算出x_center x width/2y_center y height/2再除以图片宽高。另外COCO的category_id并不是从0开始的它中间可能有空号必须自己维护一个连续ID映射表。3.4 LabelImg标注完如何正确输出YOLO格式热词里频繁出现“labelimg打标完yolo格式”这里我多说一句。LabelImg是一个开源标注工具它其实支持两种输出格式VOC XML和YOLO TXT。新建标签时选“YOLO”模式保存时就会自动生成txt文件。但如果一开始用了VOC模式后面想转成txt直接在LabelImg里“Change Save Dir”不会自动转换必须用脚本或者重新标注一遍。所以标注前一定要明确你最终要喂给哪个框架别等标了几百张才发现模式选错。注意YOLO格式的txt文件名必须和图片文件名完全一致而且图片和txt要放在同一个目录下或者在yaml配置里分别指定images和labels的路径。目录结构不一致是新手最容易犯的错。3.5 训练集划分的最佳实践划分比例没有绝对标准但有一个通用参考训练集70%到80%验证集15%到20%测试集5%到10%。验证集和训练集不能有重叠而且最好按场景分布划分别把所有相似场景的图都扔进同一个集合。划分之后我会做两件事一是统计每个类别的数量分布二是随机抽几张图做可视化确认txt里的坐标画出来和原图目标吻合。可视化这一步强烈建议自动化脚本里用OpenCV画框保存到output目录扫一眼就能发现问题。4. 常见问题与排查技巧实录4.1 训练loss不降或降得很慢这个问题的原因可能是多方面的但首先要排查数据集。常见情况包括标注坐标归一化出错、边界框超出图像范围、类别id和yaml配置对不上。我遇到过最离奇的一次是脚本里图片的宽高写反了导致所有框都变成竖条训练了十几个epoch才发现。排查方法简单粗暴把训练集中的图片和标注可视化出来挨个看。如果框完全贴不上目标问题一定在转换脚本或者在标注源文件里。如果只有部分图片有问题就检查是不是某些图片本身分辨率特殊、或者文件没有成功匹配。4.2 类别id错乱训练集和yaml文件对不上YOLO的类别id是从0开始按字母表顺序排的这个顺序必须和data.yaml里的names列表完全一致。比如VOC里的person是第14个类别如果你的yaml只保留person这一个类那person的id应该改成0。用脚本转换时类别映射表一定要自己手动写清楚绝对不能依赖原数据集的category_id因为不同数据集之间的id语义完全不同。4.3 数据集太小怎么缓解过拟合如果样本量不足1000张直接训练很容易过拟合。我的做法是分三条路同时走一是数据增强拉满YOLOv8的增强参数里可以把hsv_h、hsv_s、hsv_v、scale、flip这些设大一些mosaic和mixup也开着二是加预训练权重不要随机初始化三是用交叉验证换训练集划分找一组最稳定的。如果空间允许还可以从相关数据集做迁移补充比如你是训练安全帽的先用SHWD预训练一遍再用自有数据微调效果常常比从头训好得多。4.4 置信度门限怎么调才合理热词里有人问“yolo检测调整置信度门限”实际部署时conf-thres调多低取决于你对漏检和误检的容忍度。白名单场景比如刷脸门禁可以调低一点比如0.15宁可多出几个假框再做业务过滤安全场景比如工地未戴安全帽报警则建议调高一点比如0.45以上避免太多误报骚扰到值班人员。我踩过的坑是测试时把conf-thres从0.25调到0.05mAP看着是变高了但实际部署后误检多到没法看。mAP本身是置信度无关的指标它对框的排序质量打分如果你只看mAP不关注最终输出框很容易被数字骗到。调参还是要结合业务场景做端到端评测。4.5 类别不均衡数据占比严重失衡怎么办类别不均衡在工业数据集中非常常见比如安全帽数据里“未戴帽”样本很少交通标志里“限速100”不到10张。先优先做的是重采样把少类样本复制几次但别复制太多会过拟合。然后是loss层面的处理YOLOv8可以用cls_loss调节部分类别的权重不过需要改源码。最实用的还是开源数据补充和场景采集干净有效的补充数据永远是第一位的。4.6 关于“从hugging face下载数据集”的小提示Hugging Face等平台上也有很多目标检测数据集搜索时直接搜“object-detection”或具体类别词就能找到。下载后别直接用先看数据集的卡片说明确认标注格式是否满足YOLO要求再看license是否允许商用。很多平台数据集是用大模型自动标注生成的精确率不一定可靠务必做可视化抽检。4.7 快速避坑速查表问题现象可能原因应对方案训练loss不降坐标归一化错误、框超出图像可视化检查标注脚本所有框全部偏移图片宽高解析反了检查XML/JSON里width和height取值mAP很高但实测误检多置信度阈值设太低结合业务场景端到端调参验证集loss震荡训练集验证集有重叠重新划分确保场景独立类别显示全乱了类别映射表写错重新整理yaml和转换脚本的class_names小目标检测不到输入分辨率太低提到1280或使用SAHI切片推理标注抽检框跑飞某个标注文件损坏单独看该图的txt和原图是否匹配5. 一些额外想说的话其实选数据集这件事本质上是一次“需求拆解”。你以为你在选数据集实际上你在定义问题你的目标是什么视角、什么尺度、什么环境、什么类别占比、什么误检容忍度把这些想清楚10个数据集也好100个数据集也好都能快速筛出你要的那一个。如果开始实在拿不准我的经验是从COCO预训练权重出发先在你的验证集上跑一版baseline看看哪些类别掉点最严重再针对性地找数据补强这比我在这里推荐任何一个数据集都更管用。最后再分享一个小技巧每次拿到新数据集别急着直接训练先用最小的模型比如yolov8n在CPU上跑10个epoch检测一下整个数据流水线有没有问题。这一步只需要十几分钟却可以帮你避开“跑了一晚上才发现标签全错”的悲剧。希望这期数据集合集对你有实际帮助也欢迎你在实践后分享你自己的数据集使用心得——毕竟数据集的坑只有真正踩过的人才有最深的体会。
返回列表