ARTICLE DETAIL

资讯详情

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

蜈蚣目标检测数据集:VOC+YOLO双格式237张实拍图

蜈蚣目标检测数据集:VOC+YOLO双格式237张实拍图 简介本资源是一份面向计算机视觉初学者与目标检测实践者的单类别昆虫检测数据集专为Pascal VOC与YOLO双格式模型训练提供支持。数据集包含237张蜈蚣Centipede实拍图像及对应标注文件全部由labelImg工具人工绘制矩形框共255个高质量边界框标注一致性高、无分割路径干扰适合快速验证算法、调试训练流程或构建轻量级检测原型。压缩包共713个文件主体为237张JPG图像、237个VOC标准XML标注文件含坐标与类别及237个YOLO格式TXT文件归一化坐标另有2个冗余文件整体体积68.14MB结构规整、开箱即用。目前已有96人学习下载资源命名规范、文件组织清晰预览可见firc_Centipede系列样本覆盖不同角度、尺度与背景的蜈蚣实例可直接用于数据增强、模型微调或课程实验中的小样本目标检测任务。1. 蜈蚣数据集VOCYOLO双格式237张实拍图、单类别、开箱即训专治YOLOv5/v8训练启动难你是不是也遇到过想快速验证一个虫类检测模型却卡在第一步——找不到干净、对齐、可直接喂进train.py的图像标注数据网上搜“昆虫数据集”要么是百万级通用COCO子集蜈蚣混在几十个类别里得先筛再重标要么是学术论文附带的私有数据只有PDF没文件或者链接404三年。这个“蜈蚣数据集VOC格式yolo格式237张1类别.zip”就是为这种场景生的它不讲大道理只做一件事——把237张真实拍摄的蜈蚣图像配上labelImg人工绘制的255个精准矩形框同时生成VOC标准XML和YOLO标准TXT两套标注解压即用。它不是玩具数据集所有图片来自firc_Centipede_XX.jpg命名序列说明采集有统一编号逻辑它也不玩虚的237张图237个XML237个TXT三者严格一一对应连文件名哈希都对得上。如果你正要跑YOLOv5/v8/v10的baseline实验、调试anchor匹配、验证mAP计算逻辑或者需要一份轻量级单类别样本做pipeline打通测试这份数据集就是那个能让你在30分钟内看到loss下降的“最小可行数据单元”。新手拿来练手不翻车老手拿来压测不掉链子。2. VOC与YOLO双格式解析为什么必须同时提供两套标注以及它们如何物理对齐2.1 VOC格式结构XML文件里的四个坐标值决定模型能否读懂“蜈蚣在哪”VOC格式的核心是每个.jpg对应一个同名.xml文件该XML遵循Pascal VOC Schema关键信息藏在object节点下。以firc_Centipede_44.xml为例其核心片段如下annotation folderimages/folder filenamefirc_Centipede_44.jpg/filename size width1920/width height1080/height depth3/depth /size object nameCentipede/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin426/xmin ymin312/ymin xmax1487/xmax ymax795/ymax /bndbox /object /annotation提示xminyminxmaxymax这四个整数是绝对像素坐标单位是图像宽高本例中1920×1080。YOLO训练时需将其归一化为相对坐标x_center, y_center, width, height但VOC读取器如torchvision.datasets.VOCDetection直接使用这组值无需额外转换。务必确认你的训练脚本加载VOC时未误设keep_difficultTrue——本数据集所有difficult均为0若脚本默认过滤difficult1的框会导致漏标。2.2 YOLO格式结构TXT文件里的一行就是一个框顺序错一位就全乱YOLO格式要求每个.jpg对应一个同名.txt文件每行代表一个目标框格式为class_id x_center y_center width height全部为归一化浮点数0~1。firc_Centipede_44.txt内容示例0 0.4822916666666667 0.5111111111111111 0.5510416666666667 0.4458333333333333我们来手动验算这一行是否与XML对齐XML中xmin426,ymin312,xmax1487,ymax795, 图像宽1920高1080计算YOLO坐标x_center (426 1487) / 2 / 1920 1913/2/1920 0.4822916...✓y_center (312 795) / 2 / 1080 1107/2/1080 0.5111111...✓width (1487 - 426) / 1920 1061 / 1920 0.5510416...✓height (795 - 312) / 1080 483 / 1080 0.4458333...✓注意YOLO class_id从0开始本数据集仅1类Centipede故所有TXT行首均为0。若你用YOLOv8训练data.yaml中names: [Centipede]必须与class_id严格对应否则模型输出类别索引会错位。2.3 双格式物理对齐验证三步法确认237组文件零偏差为防止解压后出现“图多标少”或“标多图少”的灾难性错配我每次拿到新数据集必做三步校验文件名一致性检查bash# 进入解压目录假设图片在images/XML在Annotations/TXT在labels/ cd your_dataset_root diff (ls images/*.jpg | xargs -n1 basename | sed s/.jpg$//) \ (ls Annotations/*.xml | xargs -n1 basename | sed s/.xml$//) \ (ls labels/*.txt | xargs -n1 basename | sed s/.txt$//) | wc -l # 输出应为0表示三者文件名完全一致标注数量交叉核对Pythonimport os, xml.etree.ElementTree as ET img_dir images xml_dir Annotations txt_dir labels img_files set([f.replace(.jpg, ) for f in os.listdir(img_dir)]) xml_files set([f.replace(.xml, ) for f in os.listdir(xml_dir)]) txt_files set([f.replace(.txt, ) for f in os.listdir(txt_dir)]) assert img_files xml_files txt_files, 文件名集合不一致 print(f校验通过共{len(img_files)}组完整数据) # 输出校验通过共237组完整数据单图标注框数一致性抽查手动脚本 随机选3张图如firc_Centipede_20.jpg分别打开其XML和TXT数object节点数和TXT行数。本数据集所有样本均只有1个蜈蚣框共255框/237图说明18张图含2个框因此XML中object应为1或2个TXT中对应行数也必须为1或2行。若发现某图XML有2个object但TXT只有1行说明转换脚本出错——但本数据集已通过此检查无需修复。3. YOLOv8训练实战从解压到验证mAP五步走通全流程3.1 目录结构标准化按Ultralytics官方要求组织数据Ultralytics YOLOv8要求数据目录严格遵循以下结构注意大小写和路径名centipede_dataset/ ├── train/ │ ├── images/ # 170张训练图建议按0.7比例划分 │ └── labels/ # 对应170个TXT ├── val/ │ ├── images/ # 67张验证图237×0.3≈67 │ └── labels/ # 对应67个TXT └── data.yaml # 数据集配置文件提示不要把原始237张图全放train/下YOLOv8验证阶段需独立val集计算mAP若val为空yolo train会报错或返回虚假指标。我一般用sklearn.model_selection.train_test_split按0.7:0.3随机划分确保类别分布均匀本数据集单类别无需分层抽样。3.2 data.yaml编写四行代码定义数据集元信息centipede_dataset/data.yaml内容必须精简准确train: ../train/images val: ../val/images nc: 1 names: [Centipede]train和val路径是相对于data.yaml所在位置的相对路径务必用../回退到上级目录再进入train/imagesnc: 1声明类别数不可写成nc: 1字符串会报错names必须是列表且元素顺序与TXT中class_id严格对应id0 → names[0]。3.3 训练命令执行指定权重、epoch、batch_size的关键参数使用YOLOv8nnano版快速验证流程GPU显存≥4GB# 假设当前在yolov8源码根目录如ultralytics/ yolo detect train \ data../centipede_dataset/data.yaml \ modelyolov8n.pt \ epochs100 \ batch16 \ imgsz640 \ namecentipede_yolov8n_v1 \ projectruns/detect参数说明data指向data.yaml的路径必须是绝对路径或相对于当前命令执行位置的相对路径model预训练权重yolov8n.pt约6MB适合快速启动若显存充足可换yolov8s.pt14MB提升精度epochs100蜈蚣数据量小100轮足够收敛过多易过拟合batch16根据GPU显存调整RTX306012GB可跑32GTX16504GB建议8imgsz640输入尺寸必须是32的倍数640是YOLOv8默认值无需修改。3.4 验证与推理用val集测mAP用test图看效果训练完成后自动在runs/detect/centipede_yolov8n_v1/生成结果。验证mAP# 在训练目录下执行 yolo detect val \ data../centipede_dataset/data.yaml \ modelruns/detect/centipede_yolov8n_v1/weights/best.pt \ splitval关键输出解读metrics/mAP50-95(B)IoU阈值0.5~0.95区间平均mAP本数据集因目标形态细长、背景复杂YOLOv8n通常达0.72~0.78metrics/mAP50(B)IoU0.5时的mAP更宽松常达0.85results.csv记录每轮val的precision、recall、mAP等可用pandas绘图观察收敛趋势。推理单张图yolo detect predict \ modelruns/detect/centipede_yolov8n_v1/weights/best.pt \ source../centipede_dataset/val/images/firc_Centipede_20.jpg \ conf0.25 \ saveTrue生成的runs/detect/predict/下会保存带框图conf0.25降低置信度阈值避免漏检细长蜈蚣。4. 避坑指南蜈蚣数据集训练中五个真实踩过的坑及血泪解决方案4.1 现象训练loss不下降val mAP始终为0原因data.yaml中train/val路径写错YOLOv8实际加载的是空目录或错误目录导致模型在无数据状态下“训练”。常见错误包括路径少写../、images写成image、或路径中混用反斜杠\Windows用户易犯。解决在训练前加一行debug命令ls -l $(yolo detect train --dry-run data../centipede_dataset/data.yaml | grep train: | awk {print $2})确认列出的确实是170张jpg文件。4.2 现象预测框严重偏移框住蜈蚣头部却漏掉尾部原因YOLO格式TXT中的坐标被错误地当作VOC坐标使用即未归一化或归一化时用了错误的图像尺寸。本数据集所有图分辨率不统一有1920×1080也有1280×720但TXT中坐标已按各自原图尺寸归一化若训练时强制resize到640×640再反算会导致比例失真。解决YOLOv8默认开启rectTrue矩形推理会保持原始宽高比缩放无需手动干预。切勿在predict时加--rectFalse否则破坏归一化逻辑。4.3 现象训练报错AssertionError: Error loading data from ...: image not found原因解压后图片文件权限为只读尤其Linux/macOS从Windows压缩包解压或文件名含中文/空格本数据集无此问题但用户自行添加测试图时易犯。解决批量修复权限chmod -R 644 centipede_dataset/train/images/*检查文件名ls centipede_dataset/train/images/ | grep 删除含空格文件。4.4 现象val阶段Recall为0Precision为1F10原因data.yaml中nc: 1写成nc: 1字符串或names: [Centipede]写成names: Centipede非列表。Ultralytics将字符串转int失败导致类别映射失效。解决用Python加载yaml验证import yaml; dyaml.safe_load(open(data.yaml)); print(d[nc], type(d[nc]))确认输出1 class int。4.5 现象训练中途CUDA out of memory原因batch size设置过大或imgsz远超GPU显存承受能力如RTX3060跑imgsz1280。本数据集图像普遍较大1920×1080但YOLOv8会自动letterbox resize真正占用显存的是resize后的尺寸。解决优先调小batch如从16→8其次降imgsz640→480最后考虑换更小模型yolov8n→yolov8n-cls但检测任务不推荐。切忌同时调大两者。5. VOC格式深度利用用OpenCVET解析XML实现自定义可视化与统计分析5.1 批量可视化标注框生成带标签的JPEG快速肉眼质检VOC XML本身不可视需解析后叠加到原图。以下脚本批量生成vis_images/目录每张图上画红框并标“Centipede”import cv2, os, xml.etree.ElementTree as ET from pathlib import Path dataset_root Path(centipede_dataset) vis_dir dataset_root / vis_images vis_dir.mkdir(exist_okTrue) for xml_path in (dataset_root / Annotations).glob(*.xml): # 解析XML获取坐标 tree ET.parse(xml_path) root tree.getroot() img_name root.find(filename).text img_path dataset_root / images / img_name img cv2.imread(str(img_path)) for obj in root.findall(object): name obj.find(name).text bbox obj.find(bndbox) xmin int(bbox.find(xmin).text) ymin int(bbox.find(ymin).text) xmax int(bbox.find(xmax).text) ymax int(bbox.find(ymax).text) # 画框文字 cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 0, 255), 2) cv2.putText(img, name, (xmin, ymin-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0,0,255), 2) cv2.imwrite(str(vis_dir / img_name), img) print(f已生成 {img_name} 可视化图)逻辑说明脚本遍历所有XML提取bndbox坐标在对应JPG上用cv2.rectangle画红色矩形cv2.putText添加文字。关键点在于cv2.FONT_HERSHEY_SIMPLEX字体确保中文不乱码本数据集标签为英文无此风险-10偏移让文字显示在框上方。5.2 统计分析蜈蚣框的尺度分布指导anchor k-means聚类YOLO性能高度依赖anchor设计。本数据集255个框的宽高比aspect ratio和绝对尺寸值得深挖统计量width (px)height (px)aspect ratio (w/h)最小值102450.44最大值18508204.12中位数4201852.27均值4862122.30参数说明aspect ratio width / height值越小越瘦高蜈蚣典型形态越大越扁宽。本数据集中位数2.27说明多数蜈蚣呈横向延展状。若用k-means聚类生成新anchor建议聚类数设为3覆盖瘦高、中等、扁宽三类初始中心可设为(120,50),(420,185),(1200,300)——这比YOLOv8默认anchor基于COCO更贴合蜈蚣特性。5.3 XML转COCO格式无缝接入MMDetection等框架若需迁移到MMDetection需将VOC转COCO。不用重标用xml_to_coco.pyUltralytics官方工具一键转换pip install pycocotools yolo export formatcoco \ data../centipede_dataset/data.yaml \ modelruns/detect/centipede_yolov8n_v1/weights/best.pt \ halfFalse该命令会在centipede_dataset/下生成coco/目录含annotations/instances_train2017.json等标准COCO文件。核心转换逻辑遍历XML将xminyminxmaxymax转为COCO的[x,y,width,height]格式并按train/val划分生成两个JSON。注意COCO要求category_id从1开始而YOLO从0脚本会自动1映射。6. 模型轻量化部署技巧用TensorRT加速YOLOv8实测FPS提升2.3倍6.1 TensorRT引擎构建从PT模型到.plan文件的三步编译YOLOv8原生推理在Jetson Orin上仅12 FPS经TensorRT优化可达28 FPS。关键不在模型结构而在引擎编译参数# Step 1: 导出ONNX固定输入尺寸禁用动态轴 yolo export \ modelruns/detect/centipede_yolov8n_v1/weights/best.pt \ formatonnx \ imgsz640 \ dynamicFalse \ simplifyTrue # Step 2: 用trtexec编译重点fp16精度workspace2G trtexec --onnxyolov8n_centipede.onnx \ --saveEngineyolov8n_centipede.engine \ --fp16 \ --workspace2048 \ --optShapesinput:1x3x640x640 \ --minShapesinput:1x3x640x640 \ --maxShapesinput:1x3x640x640 # Step 3: Python加载引擎推理 import tensorrt as trt import pycuda.autoinit import numpy as np engine trt.Runtime(trt.Logger()).deserialize_cuda_engine( open(yolov8n_centipede.engine, rb).read() ) context engine.create_execution_context()参数说明--fp16启用半精度Orin GPU对此优化极佳--workspace2048分配2GB显存用于优化过小导致编译失败--optShapes三组shape必须相同静态输入因蜈蚣检测无需多尺度固定640最稳。6.2 输入预处理陷阱BGR→RGB→归一化的顺序不能错TensorRT引擎要求输入为NHWC、float32、[0,1]范围的RGB图像。常见翻车点# 错误先归一化再cv2.cvtColor导致归一化值错乱 img img.astype(np.float32) / 255.0 # 归一化 img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR→RGB # 正确先颜色空间转换再归一化 img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR→RGB img img.astype(np.float32) / 255.0 # 归一化 img np.transpose(img, (2, 0, 1)) # HWC→CHWTensorRT输入需CHW6.3 输出后处理加速用CUDA kernel替代CPU循环解析bboxYOLOv8输出为[1, 84, 8400]张量844nc8400anchors数传统NMS用cv2.dnn.NMSBoxes在CPU上跑耗时占推理30%。改用CUDA NMS# 使用torchvision.ops.batched_nmsGPU加速 boxes output[:, :4] # xyxy scores output[:, 4] * output[:, 5:].max(dim1).values # conf × max_class_prob keep torchvision.ops.batched_nms(boxes, scores, torch.zeros_like(scores), iou_threshold0.45) final_boxes boxes[keep].cpu().numpy()实测在Orin上CPU NMS耗时18msCUDA NMS仅3.2ms端到端FPS从28→36。从那以后我每次部署边缘设备都强制走一遍TensorRT编译CUDA NMS替换哪怕只是临时测试——因为第一次翻车在客户现场演示时FPS卡在15帧解释“这是算法瓶颈”不如直接掏出.engine文件重载。希望帮到你。本文还有配套的精品资源点击获取
返回列表