新闻详情

新闻详情

首页 / 资讯中心 / 详情

泊车位检测数据集:YOLOv8训练与VOC/COCO/YOLO标签格式详解

发布时间:2026/10/1 11:03:34来源:尧图网络
泊车位检测数据集:YOLOv8训练与VOC/COCO/YOLO标签格式详解
简介面向目标检测开发者和课程学习者这份YOLO泊车位数据集包含1000张真实场景的高质量图片场景丰富采用LabelImg标注框质量高并提供VOC、COCO、YOLO三种格式标签分别存放兼容常见检测框架可直接用于主流YOLO系列模型训练、验证与评估省去格式转换环节。包内共2000个文件涵盖xml/txt标注文件、环境搭建与训练教程html文档、数据划分py脚本和模型yaml配置等压缩包约238.49MB目录结构清晰便于按格式和用途检索。配套Linux和Windows环境搭建教程、训练案例教程以及训练集/验证集/测试集划分脚本可一键按需拆分数据快速跑通从环境配置到模型训练的全流程。目前已有507人学习使用适合做泊车位检测项目、课程设计或入门目标检测的读者参考。1. 泊车位检测为什么绕不开这份1000张图的数据集做自动泊车、车位引导或者智慧停车项目时第一步就把很多人卡住了没有自己的泊车位图片拿什么去喂YOLO这份数据集直接给到了1000张泊车位图片而且每个目标都配套VOC、COCO、YOLO三种格式的标签文件连划分脚本和训练教程都放在压缩包里。也就是说从解压到跑通YOLOv8训练中间不需要再自己找数据、转格式、手写划分。适合刚入目标检测的新手用来走通完整流程也适合急着出一版泊车位检测原型的工程师直接拿去做基线。它解决的核心问题不是算法多难而是“数据准备和格式转换”这个最容易被低估的坑。2. 拆解三种标签格式VOC、COCO、YOLO到底各存了什么2.1 VOC格式XML里的object逐个拆解VOC格式的标签是XML文件每个图片对应一个同名XML。打开后你会看到一堆object节点每个节点描述一个目标。annotation folderVOC2007/folder filenameparking_012.jpg/filename size width1920/width height1080/height depth3/depth /size object nameparking_space/name bndbox xmin300/xmin ymin400/ymin xmax800/xmax ymax600/ymax /bndbox difficult0/difficult /object /annotation上面这段XML是这份数据集里很典型的泊车位框。bndbox四个值记录目标左上角和右下角的像素坐标是绝对值而非归一化值。difficult为0表示这个车位可用如果标成1通常表示被车遮挡或者太远连人眼都难确认训练时YOLO会默认忽略这类框。泊车位检测里一个车位就是一个object类别名就是parking_space。2.2 COCO格式JSON里的categories与annotationsCOCO格式把整份数据集的标注集中到一个JSON文件里结构分为images、annotations和categories三个大数组。{ images: [ { id: 1, file_name: parking_012.jpg, width: 1920, height: 1080 } ], annotations: [ { id: 1, image_id: 1, category_id: 1, bbox: [300, 400, 500, 200], area: 100000, iscrowd: 0 } ], categories: [ { id: 1, name: parking_space } ] }注意COCO的bbox跟VOC不一样它是[x, y, width, height]也就是左上角坐标加上框的宽高。area在泊车位场景里可以直接用width*height计算iscrowd这个字段对泊车位来说基本是0因为车位很少出现密集重叠到无法单个标注的情况。如果后续你想用COCO预训练模型或者做实例分割这个JSON就是基础。2.3 YOLO格式txt里的class和归一化坐标YOLO格式是训练时真正会读入的标签。每张图片对应一个同名的txt文件每一行代表一个目标。0 0.2865 0.4630 0.2604 0.1852这一行里第一个数字是类别ID因为只有泊车位一个类别所以是0。后面四个数字分别是目标的中心点x、中心点y、框宽w、框高h全部除以图片宽高做了归一化取值范围在0到1之间。这就是YOLO训练时输入的标准格式。如果图片宽1920、高1080这个txt对应的实际像素框就是中心点(550, 500)宽500高200。2.4 三种格式怎么互相转换一份数据三份标签的意义格式存储方式坐标表示训练适用VOC每个图片一个XMLxmin, ymin, xmax, ymax绝对值老牌检测模型、数据可视化COCO全部标注一个JSONx, y, width, height绝对值Mask R-CNN、Detectron2、实例分割YOLO每个图片一个txtcx, cy, w, h归一化YOLO全系、RT-DETR这份数据集直接给全三种格式最大的意义不是让你去选一个用而是省掉转换脚本的调试成本。实际转换过程中最常出问题的就是坐标系的混用VOC转YOLO要把(xmin, ymin, xmax, ymax)换算成中心点加宽高COCO转YOLO则必须先把绝对宽高转成归一化。一步算错框就飘了。有了三种现成标签你可以用VOC格式做校验可视化用COCO格式做通用模型的直接训练用YOLO格式跑YOLOv8/YOLOv11互相对照出了问题很容易定位是哪一环节的坐标算错。3. 用划分脚本切分数据集训练/验证/测试的比例与随机种子3.1 划分脚本的核心逻辑做目标检测训练时数据切分不是简单粗暴地把文件分开它需要保证图片和标签严格同步。很多新手只把图片挪走了标签没跟上训练时直接报错No labels in xxx。这份数据集里的划分脚本解决的就是这个同步问题。脚本的逻辑很简单遍历所有图片文件名按设定比例随机拆成训练、验证、测试三份然后把对应的标签文件路径写进三个txt文件里。同一份文件名在三个txt中不能重复这是脚本的基本底线。3.2 Python实现train/val/test划分脚本网上能下载到的划分脚本大多长这样核心逻辑完全可以拿来自用import os import random from sklearn.model_selection import train_test_split # 数据集路径 data_dir parking_dataset image_dir os.path.join(data_dir, images) label_dir os.path.join(data_dir, yolo_labels) # 收集所有图片文件名不带后缀 img_files [f.split(.)[0] for f in os.listdir(image_dir) if f.endswith(.jpg)] print(f共找到 {len(img_files)} 张图片) # 按7:2:1划分训练、验证、测试 train_files, test_files train_test_split(img_files, test_size0.1, random_state42) train_files, val_files train_test_split(train_files, test_size0.222, random_state42) # 将划分结果写入txt for split, files in [(train, train_files), (val, val_files), (test, test_files)]: with open(f{split}.txt, w) as f: for name in files: img_path os.path.join(image_dir, name .jpg) label_path os.path.join(label_dir, name .txt) # 确保图片和标签都存在才写入 if os.path.exists(img_path) and os.path.exists(label_path): f.write(img_path \n) print(f{split} 数量: {len(files)}) print(划分完成请检查 train.txt / val.txt / test.txt)test_size0.1先分出10%的测试集剩余90%再按0.222分出20%验证集实际比例约7:2:1。random_state42固定随机种子这样每次运行脚本得到的划分结果一致方便复现模型效果。脚本里os.path.exists检查双重保证图片和标签路径都有效这一步非常关键很多数据集里存在孤儿图片或者孤儿标签漏掉检查会让后续训练白跑几小时。3.3 划分后必须检查的三件事划分完成不是直接开练先花两分钟做三个检查。第一是类别平衡统计三个txt文件里各自的类别数量泊车位数据一般单类别如果验证集里样本特别少模型的验证分数波动会很大。第二是场景覆盖泊车位场景往往包含室内地下车库和室外露天停车场如果全部室外图都被分进训练集验证集就失真了。第三是文件对应随机挑一个txt文件里的第一个路径确认图片能正常打开且有同名标签文件。3.4 同步三种格式的划分这份数据集的划分脚本一般是一个py文件跑完只生成训练列表txt不会去复制或移动原文件。真正训练时YOLOv8只需要train.txt里写的图片路径标签路径会自动根据图片路径推导。但如果你计划用VOC或者COCO格式去训练其他模型就得保证划分列表对三种格式都适用。常见做法是保留一份图片文件清单三个训练脚本都读这份清单而不是各自维护一套路径。我一般会把train.txt / val.txt / test.txt里的路径统一改为图片绝对路径再把标签目录名从images换成labels交给YOLO自动推导这样无论怎么切换格式都不需要重新划分。4. 用YOLOv8在泊车位数据集上跑通训练参数与命令4.1 环境准备conda创建虚拟环境并安装ultralytics拿到数据后第一件事是搭环境。强烈建议用conda建独立环境别把YOLO装到基础Python环境里免得和TensorFlow、PyTorch老版本打架。conda create -n parking python3.10 -y conda activate parking pip install ultralyticsultralytics这个包已经集成了YOLOv5、YOLOv8和YOLOv11一条命令就能下载训练好的预训练模型权重。这里不需要手动去下载单独的模型文件训练时指定modelyolov8n.pt首次运行会自动从官方地址拉取。如果网络条件不理想也可以提前手动把权重文件放到当前目录。4.2 准备YAML配置文件与数据集目录结构YOLOv8训练需要先准备一个data.yaml文件描述数据集路径和类别信息。这份数据集解压后典型的目录结构是images/和labels/分别存放图片和YOLO格式标注。# parking.yaml path: /home/you/parking_dataset train: train.txt val: val.txt test: test.txt nc: 1 names: [parking_space]path是数据集根目录绝对路径train和val指向之前划分脚本生成的txt文件。这里有个容易踩的坑如果txt里写的是绝对路径train字段填train.txt即可如果txt里写的是相对路径就得在这里补上images/前缀。nc: 1指的是只有泊车位一个类别names里的类别名必须和训练标签中的类别ID对应上顺序不能错。4.3 启动训练训练命令与关键参数说明环境配好、数据就位后一行命令就能跑起来yolo train dataparking.yaml modelyolov8n.pt epochs100 imgsz640 batch16 device0epochs100代表完整遍历训练集100轮泊车位检测这类单类别任务一般60轮就能收敛100轮是为了观察过拟合趋势。imgsz640把输入图片等比缩放到640x640这个值不是越大越好图片太大显存占用暴涨太小会丢失小目标的细节。batch16是每批送入的图片数显存不足时报错CUDA out of memory就把它降到8或者4。device0指定第一块GPU训练。数据集里1000张图单卡训练一轮大概一两分钟整体几小时能完成。4.4 训练结束后看什么metrics、混淆矩阵、验证集推理训练默认会在runs/detect/train/下输出结果。头一个看results.csv里面每一行是每一轮的train_loss、val_loss、mAP50等指标。泊车位检测重点关注mAP50-95它比mAP50更严格反映框位置的精准度。再看confusion_matrix.png能直观看到有没有把车位误检为背景或者漏检。最后用一句命令跑验证集推理yolo predict modelruns/detect/train/weights/best.pt sourcetest_images/ saveTrue注意这里source要指向测试集图片目录saveTrue会把检测框画在图上保存下来。肉眼扫一遍这些图比单看数字更能判断模型真实水平。5. 泊车位数据集训练避坑与常见问题排查5.1 标签文件为空导致训练报错“No labels”现象训练启动后没报错但打印出WARNING ⚠️ no labels found in datasets/train/images/parking_001.jpg有大量图片没参与训练。原因标签文件名和图片名没有一一对应或者标签文件是空的。有些标注工具导出的txt只有一行换行符看起来存在实际没有任何目标。解决写个小脚本统计所有空标签文件并把对应的图片从训练目录挪出去不要留在里面浪费训练时间。import os label_dir labels empty_files [] for f in os.listdir(label_dir): path os.path.join(label_dir, f) if os.path.getsize(path) 0: empty_files.append(f) print(f空标签文件数量: {len(empty_files)}) for f in empty_files: print(f)5.2 训练过程中BN层崩溃现象训练到几十轮时train_loss突然变成nan或者metrics全部归零之后无法恢复。原因BN层崩溃通常由训练不稳定引起常见诱因是学习率太大或者batch太小。batch4时BN统计量方差特别大容易产生数值溢出。解决把batch调到16以上或者降低初始学习率lr00.001。另一个有效手段是开启cacheTrue把图片直接缓存到显存减少IO波动。yolo train dataparking.yaml modelyolov8n.pt epochs100 imgsz640 batch16 lr00.001 cacheTrue5.3 类别数量对不上导致训练报错现象训练时报AssertionError: impossible to satisfy constraints或者加载权重时提示类别数不匹配。原因data.yaml里nc和names的定义与实际标签ID对不上。这张数据集里类别名虽然只有一种但如果标签tx里出现类别ID为1或2的框而nc1就会出问题。解决打开几个txt文件看一眼里面第一位数字最大值把nc改为最大值加1names按顺序列出所有类别名。5.4 分割线或车位线被数据增强搞丢现象训练完发现验证框总比实际车位小一圈或者漏检侧方停车的车位线。原因YOLO默认开启hsv_h、hsv_s、hsv_v色彩增强以及随机旋转degrees。泊车位检测依赖车位线的颜色和方向增强过头会让这些特征失真。解决在训练命令里调整增强参数yolo train dataparking.yaml modelyolov8n.pt epochs100 imgsz640 batch16 hsv_h0.0 hsv_s0.2 hsv_v0.2 degrees55.5 不同格式转换时坐标越界现象用VOC的XML转成YOLO txt时某些行出现x_center大于1或者w为负值的情况。原因标注时框的左上角坐标大于右下角坐标或者目标跨越图片边缘导致宽高计算超出范围。很多标注工具允许画出界框转换脚本没有做裁剪。解决转换时加边界裁剪逻辑x_center (xmin xmax) / 2 / width y_center (ymin ymax) / 2 / height w (xmax - xmin) / width h (ymax - ymin) / height x_center min(max(x_center, 0), 1) y_center min(max(y_center, 0), 1) w min(w, 1) h min(h, 1)6. 泊车位检测的进阶验证与优化从mAP曲线到数据扩充6.1 用混淆矩阵判断漏检与误检训练结束后别急着部署。先打开runs/detect/train/confusion_matrix.png看清四个象限真正例是预测为泊车位且真实就是泊车位假负例是真实车位但模型没检测出来。泊车位检测最常见的漏检发生在车位线模糊的地面比如水泥地上磨损严重的白线。如果假负例集中在某个特定停车场说明训练数据里那个场景的样本不够。6.2 批量可视化测试集结果找规律写一个批量预测脚本把所有测试图片的检测结果拼成一张大图快速浏览from ultralytics import YOLO import os import cv2 model YOLO(runs/detect/train/weights/best.pt) test_dir test_images output_dir pred_output os.makedirs(output_dir, exist_okTrue) for img_name in os.listdir(test_dir): result model.predict(os.path.join(test_dir, img_name), conf0.25) annotated result[0].plot() cv2.imwrite(os.path.join(output_dir, img_name), annotated) print(预测结果已保存到 pred_output 目录)conf0.25是置信度阈值低于这个分数的框会被滤掉。泊车位检测建议用0.3到0.4之间太低会把地面阴影当车位太高会漏掉远处的小车位。跑完后把输出目录里的图按“正常”“漏检”“误检”分三堆能快速定位模型的系统性问题。6.3 数据扩充的方向不是无脑加图泊车位检测的数据扩充最先加的不是更多车位图片而是场景多样性。地下车库的灯光偏黄、垂直车位和斜车位角度差异大、雨天反光严重这些都比单纯增加图片数量更能提升泛化能力。实际操作上我会把这1000张图按室内/室外、垂直/平行/斜向分档统计每个子类的数量少于50张的子类优先补数据。用YOLO自带的YOLO(yolov8n.pt)去给新拍的视频抽帧是低成本打标思路但抽出来的帧之间相似度太高直接进训练集反而会导致过拟合每10秒抽一帧比较合适。最后的建议是先跑通默认参数再谈调优。这份数据集已经给了三种格式标签和划分脚本训练教程里也写好了命令第一次训练直接按默认参数跑完看结果再调。我自己吃过的亏是上来就调imgsz1280、batch32结果显存溢出后开始怀疑数据有问题折腾半天才发现只是硬件扛不住。把基线跑出来再一步步加分辨率、加增强每一步动一项参数对比着看mAP变化才是在这个数据集上做优化的正确姿势。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

泊松分布与二项分布的可加性原理及工程应用 2026/10/1 19:08:03

泊松分布与二项分布的可加性原理及工程应用

1. 为什么“可加性”是概率论里最值得反复琢磨的底层逻辑泊松分布与二项分布的可加性——这八个字看起来像教科书里的冷门定理,但在我带过的二十多期统计建模实战训练营里,它几乎每次都会在第三天凌晨两点被学员集体“围攻”。不是因为难,而是…

阅读更多 →
Agent Skill系统实战:从聊天到干活的架构设计与落地 2026/10/1 19:08:03

Agent Skill系统实战:从聊天到干活的架构设计与落地

1. 从“聊天”到“干活”:Skill 系统到底在解决什么问题如果你最近半年一直在折腾 Agent 相关的东西,大概率会有一种强烈的割裂感:模型在对话框里能跟你聊哲学、写诗、解释量子纠缠,但一旦你让它“帮我把这周的销售数据拉出来&…

阅读更多 →
JNPF低代码平台AI节点化编排:从智能体到MCP的全流程落地实践 2026/10/1 19:08:03

JNPF低代码平台AI节点化编排:从智能体到MCP的全流程落地实践

低代码平台这几年铺得很快,但大多数团队用下来的感受都差不多:表单拖拽、流程画布确实省了前端工作量,可一旦业务里出现"需要判断""需要生成""需要理解语义"的环节,还是得回头写代码,或…

阅读更多 →
Win7/8.1运行Steam卡顿白屏?从steamwebhelper到兼容性调优全攻略 2026/10/1 19:08:03

Win7/8.1运行Steam卡顿白屏?从steamwebhelper到兼容性调优全攻略

最近陆续有朋友拿着Win7/8.1的老机器来问我:Steam一点开就白屏、动不动弹出“steamwebhelper没有响应”、想玩游戏结果一直停在“正在启动”……甚至有人刚从官网下载的新版Steam,装到一半就报错,代码都看不懂。我自己的二奶机一直在跑Win8.1…

阅读更多 →
基于YOLOv8的港口船舶吃水线实时监测预警系统实战解析 2026/10/1 19:08:03

基于YOLOv8的港口船舶吃水线实时监测预警系统实战解析

简介:面向计算机视觉与人工智能方向的毕业设计或课程设计场景,基于YOLOv8的港口船舶吃水线实时监测预警系统资源提供了完整可复用的项目方案。资源内含可直接运行的Python工程源码、完整标注数据集、可视化交互界面以及部署说明文档,从模型训…

阅读更多 →
银河麒麟V10系统级重构:从密码修改到AI部署的原生能力演进 2026/10/1 19:07:56

银河麒麟V10系统级重构:从密码修改到AI部署的原生能力演进

1. 为什么这次V10升级不是“换个皮肤”——从用户真实操作链路看系统级演进 “Update!银河麒麟桌面操作系统V10体验再升级”这个标题,表面看是常规版本迭代通告,但结合近期全网爆发式涌现的37个高频实操类热搜词(如“银河麒麟怎么…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉