尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

隐翅虫目标检测数据集:VOC+YOLO双格式386张标注样本

隐翅虫目标检测数据集:VOC+YOLO双格式386张标注样本 简介本资源是面向计算机视觉初学者与昆虫图像识别研究者的轻量级目标检测数据集专用于隐翅虫Paederus spp.的模型训练与验证。数据集共386张高质量实拍图全部完成人工矩形框标注类别统一为yinchichong总计489个精确标注框适用于YOLOv5/v8、Faster R-CNN等主流检测框架的快速上手与基准测试。压缩包含1160个文件主体为386张JPG图像、386份Pascal VOC格式XML标注兼容OpenCV/PyTorch生态及386份YOLO格式TXT标签归一化坐标开箱即用无冗余分割路径或无效文件结构简洁规范整体体积仅14.07MB便于下载与本地部署。目前已有87人学习下载配套博文详述数据清洗逻辑、labelImg标注要点及VOC/YOLO双格式转换注意事项读者可直接用于数据增强实验、mAP基线测试或小样本迁移学习实践。 隐翅虫这种虫子南方人应该不陌生——被它体液沾到皮肤一条条红肿水泡轻则疼痒好几天重则留疤。我做这套“目标检测隐翅虫数据集386张VOCYOLO.zip”就是想把这个小东西从“肉眼认虫”变成“摄像头认虫”给宿舍防虫告警、家居监控、农田生态监测这些场景补一块能直接用的数据基础。包里VOC和YOLO两套标准标注都齐了下载解压后可以直接拿去跑YOLOv5/YOLOv8也可以转成R-CNN系列要的XML输入省掉自己从零标数据的功夫。适合做目标检测入门练习的同学、搞智能家居防虫产品的开发者以及手里正缺小目标样本的调参选手参考。1. 为什么做这套隐翅虫数据集1.1 隐翅虫检测到底能解决什么问题隐翅虫体长也就几毫米到一厘米出头细长身体和蚂蚁有一定相似度非专业人员很容易认错。它不会主动蜇人但人一挥手拍碎它体液里的隐翅虫素接触皮肤短时间内就会引发线状皮炎这也是夏季南方医院皮肤科很常见的病例。所以从实际需求看做一套能实时识别隐翅虫的模型至少有四个落点宿舍/家居夜间防虫摄像头夜间红外或普通监控拍到虫子飞落到床头、桌面第一时间推送提醒避免人睡觉时无意识拍死虫子。农田与果园生态监测隐翅虫本身也是部分害虫的天敌农业上有一定的生态价值精准识别可以辅助统计虫口密度。卫生防疫科普与拍照识别普通用户拍照上传App自动判定是不是隐翅虫减少错误恐慌。目标检测教学与算法验证小尺寸目标、细长形目标、低对比度场景这些恰恰是目标检测里比较典型又有点难度的样本类型。这个数据集的核心价值就是给上述场景提供一个统一的训练基础。386张图从绝对数量上看不算大但对于“单类细长小虫”这种目标相对单一的任务配合预训练权重和增强策略完全能训练出可用的模型。1.2 386张图够用吗数据规模怎么判断很多初学者看到386第一反应是“这么少能训练吗”我的答案是能但有前提。目标检测数据集的需求取决于类内差异、场景复杂度、目标尺寸分布这三个变量。类内差异隐翅虫外观虽然有斑纹差异但整体形态一致类内差异远小于“狗”这种几百个品种的类别所以几百张单类数据比多类数据冗余要求低得多。场景复杂度如果所有图片都是白墙背景、虫子爬在纸上的特写那模型泛化能力会很差。所以我采集和筛选图片时刻意保留了不同光照、不同材质背景桌面、叶片、墙面、纱窗、不同姿态和不同拍摄距离的样本。目标尺寸分布小目标像素占比很小的虫子和近景大目标各留一部分避免模型只学会找“大虫子”。从实验经验看单类目标386张原始图片每张平均1到3个实例标注框总量大约600多个在COCO预训练权重基础上微调100轮训练后mAP50通常能到0.85以上mAP50:95在0.5到0.65之间。这已经足够支撑一个“能提醒人注意”的防虫系统。2. VOC和YOLO双格式一次给你讲透2.1 VOC格式怎么解析VOC格式源自Pascal VOC挑战赛核心是每个图片对应一个同名XML注释文件。一个标准的VOC XML长这样annotation folderJPEGImages/folder filenameimg_0001.jpg/filename path/data/JPEGImages/img_0001.jpg/path size width640/width height480/height depth3/depth /size object namerove_beetle/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin120/xmin ymin80/ymin xmax300/xmax ymax220/ymax /bndbox /object /annotationsize里的宽高必须和JPG图片像素一致这点很容易出错。object可以重复多个表示一张图里有多个目标。truncated表示目标是否被图片边缘截断difficult表示目标是否难以辨认。这两个字段在VOC官方的评估里会被特殊处理很多训练框架直接忽略但保留它们能让数据更规范。2.2 YOLO txt格式和VOC的转换关系YOLO系列使用的标注格式要紧凑得多每行一个目标五列数值class_id x_center y_center width height注意YOLO格式里所有坐标都是归一化到0到1之间的比例值不是像素绝对值。转换关系如下x_center ((xmin xmax) / 2) / image_width y_center ((ymin ymax) / 2) / image_height box_width (xmax - xmin) / image_width box_height (ymax - ymin) / image_height我实际写转换脚本时习惯这样处理顺便把越界值钳制在0到1之间import os import xml.etree.ElementTree as ET def voc_to_yolo(xml_path, out_txt_path, 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) 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.0) / img_w y_center ((ymin ymax) / 2.0) / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h x_center min(max(x_center, 0.0), 1.0) y_center min(max(y_center, 0.0), 1.0) w min(max(w, 0.0), 1.0) h min(max(h, 0.0), 1.0) lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) with open(out_txt_path, w) as f: f.write(\n.join(lines))2.3 为什么两种格式都保留很多人会问既然训练YOLO只需要txt为什么还要把VOC XML一起打包我的考虑有三点生态兼容性不是所有框架都直接吃YOLO txt。Faster R-CNN、SSD等基于VOC数据集的训练流程需要XML作为标注输入Ultralytics YOLO框架虽然只需要txt但你做数据可视化排查的时候用XML配合cv2.rectangle画框更直观。二次修改成本低用labelImg直接打开XML改标注比手写txt安全得多。txt一旦改错一位轻则训练崩重则模型学到错误位置。数据审计与转换有了VOC XML随时能重新生成任意格式比如转成COCO的JSON或者转成PaddleDetection的txt。这也是我把数据集命名为“VOCYOLO”而不是只给一种格式的原因。3. 数据集构建全流程从图片采集到标注完成3.1 图片来源与清洗这套数据集里的图片一部分来自自己拍摄一部分来自开源图片搜索和过往项目中积累的现场照片。图片筛选有几个硬性门槛不符合的直接删不浪费时间标注清晰度优先虫子是细小目标一旦图片在缩放后连人眼都分不清虫头虫身训练出来的模型也不会比人强。我筛图的标准是在放大到100%情况下虫体轮廓清晰可辨。去除重复图百度、Bing这类搜索引擎搜出来的图经常有大量重复我用感知哈希pHash简单去重了一遍避免训练集里同一个场景刷屏。背景多样性刻意加入墙面、木质桌面、白纸、植物叶片、水泥地面、纱窗等不同背景。如果全是白底特写模型在真实监控画面里会大面积漏检。尺寸不确定性保留一部分虫体占整幅图比例不到5%的图片。这类“小目标”样本虽然标注费劲但对实际摄像头场景非常重要。整套清洗过程会损失掉大概三分之一的原始图片这个淘汰率很正常留下来的图质量是后期模型效果的最大保证宁可数量少也不凑数。3.2 标注规范与工具选择标注工具用labelImg虽然界面朴素但胜在安装简单、导出VOC格式原生支持。有一点要注意labelImg默认的标注类别是“dog”之类的需要先准备一个classes.txt类别文件里面每行一个类名。我这次只设了一个类别rove_beetle隐翅虫在英文里常用rove beetle毒隐翅虫属是Paederus。标注时几个实操经验紧贴虫体边缘画框不要大包大揽把背景也框进去。细长形目标尤其要贴好头尾两端不然归一化后的宽高比会被背景稀释影响anchor匹配。虫子被遮挡超过30%时我选择标注但不设difficult1让训练时正常学习。完全看不清的图直接删不硬标。每张图标注完都重新打开XML检查一遍坐标是否超出图片边界。labelImg有时候手滑会画出负坐标或超宽坐标后期转换时会生成大于1的归一化值。保存的XML文件名必须和图片文件名一致大小写也要完全一致不然训练时对应关系会错。3.3 训练/验证集划分与目录结构386张图我按8:2划分训练集309张验证集77张。没有单独再切测试集因为当前目标是迭代数据集和模型验证集足够反映效果。如果以后要发论文建议再划分一个独立的test集评估时彻底隔离开。压缩包内的目录结构如下隐翅虫数据集386张VOCYOLO.zip ├── VOCdevkit/ │ └── VOC2007/ │ ├── Annotations/ # VOC格式XML386个 │ ├── JPEGImages/ # 原始图片386张 │ ├── ImageSets/ │ │ └── Main/ │ │ ├── train.txt │ │ ├── val.txt │ │ └── trainval.txt │ └── labels/ # YOLO格式txt386个 ├── images/ │ ├── train/ # 训练图片 │ └── val/ # 验证图片 ├── labels/ │ ├── train/ # 训练txt │ └── val/ # 验证txt ├── classes.txt # 类别名列表 ├── data.yaml # YOLOv8/v5可直接引用的配置 └── README.md # 使用说明images和labels这两个目录是按Ultralytics YOLO的推荐惯例组织的labels里每个txt和images里的同名图片一一对应训练时框架会自动按文件名关联。VOCdevkit则是给人看、给传统检测框架用的完整工程结构。两者互不冲突使用哪种就取哪种。4. 实战用YOLOv8在这个数据集上训练一轮4.1 环境准备与目录迁移我用的是YOLOv8这是目前上手最快、文档最齐全的版本之一。在拿到压缩包后先解压然后建议把images和labels直接整个目录放到你的项目里目录结构保持dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/如果使用conda环境直接安装Ultralyticsconda create -n yolo python3.10 -y conda activate yolo pip install ultralytics第一次运行时会自动下载预训练权重yolov8n.pt需要保持网络通畅。这里有个小提示国内用户如果下载慢可以手动从GitHub Release页面把权重文件下载好放到权重目录再指定modelyolov8n.ptUltralytics检测到本地已有该文件就不会重复下载。4.2 data.yaml和训练参数设置数据集里自带的data.yaml内容如下names: 0: rove_beetle nc: 1 path: dataset train: images/train val: images/valpath对应的路径如果你把dataset目录放在项目根目录images/train和images/val会相对于path生效。注意nc是类别数1个类别就写1类别索引从0开始。如果你的标注文件里类别ID不是从0开始或者有多类这里必须严格对应。训练命令yolo detect train datadata.yaml modelyolov8n.pt epochs100 imgsz640 batch16 device0 patience15几个关键参数我单独解释一下epochs100386张图的数据量100轮足够收敛。设置太大会过拟合太小精度不够。我实测到第80轮左右mAP基本平稳。imgsz640训练时输入尺寸。这个数据集里一部分是近景特写一部分是监控视角的小目标640是一个平衡点和速度都合适的值。如果追求小目标召回率可以试imgsz768或imgsz1024显存占用会明显提升。batch16根据显存调整8GB显存用816GB以上用16或32。batch太小会梯度抖动大收敛慢。patience15验证集指标连续15轮不提升就早停防止无效训练浪费时间。device0使用第一张显卡。没有GPU就写devicecpu但训练时间会显著变长。训练过程中可以打开TensorBoard或直接看Ultralytics输出的实时指标。每轮结束会打印Box Loss、Cls Loss、Dfl Loss和mAP等指标正常情况loss整体趋势下降mAP上升即使有波动也正常。4.3 结果评估与常见指标解读训练结束后runs/detect/train目录下会生成多个文件。我重点看这几个results.png训练过程曲线总图loss曲线收敛、mAP曲线稳步上升即正常。如果loss剧烈震荡一般考虑学习率过大或batch太小。confusion_matrix.png看混淆矩阵重点确认背景误检率。如果很多背景被当成隐翅虫说明正样本太少或负样本背景框难例太多。val_batch_pred.jpg验证集预测结果可视化看框的位置、置信度、重复框情况。如果一张图同一个目标被框了两三次通常需要调NMS参数或数据里出现了重复标注。weights/best.pt验证集上得分最高的权重后续推理用这个文件。在验证集上做一次正式评估yolo detect val modelruns/detect/train/weights/best.pt datadata.yaml输出里最关键的是mAP50和mAP50-95两个值。mAP50指IoU阈值0.5下的平均精度适合直观判断能不能“找到目标”mAP50-95是多个IoU阈值的平均更能反映框的精确程度。speed和preprocess时间可以辅助判断部署性能这里不展开。5. 常见问题与排查技巧实录5.1 压缩包解不开、文件损坏下载“.zip”文件后无法解压提示“file is not a zip file”或“could not find EOCD”这个问题在网上下数据集时会频繁遇到。常见的三种情况下载不完整浏览器或下载工具中途断流文件后面一段数据丢失zip的End of Central Directory记录正好在文件尾部找不到它就会报错。解决方法是重新下载或切换下载工具。二次压缩错误有些网盘平台会在上传时对zip做了额外处理文件损坏后再二次打包。此时可以先用zip -T检查压缩包完整性zip -T 隐翅虫数据集386张VOCYOLO.zip能通过完整性测试说明文件本身没问题。如果报错就重新下载源文件。下载后扩展名被网页改成其他格式部分浏览器下载时会自动去掉扩展名或加.txt后缀。手动把扩展名改回.zip再解压。5.2 坐标越界、标签错位、训练不收敛从这套数据集转成YOLO格式训练如果发现loss一直不降优先检查三个物标签txt里是否出现负数或大于1的坐标值。可以用脚本快速检查awk {if ($30 || $31 || $40 || $41 || $50 || $51 || $60 || $61) print $0} labels/train/*.txt文件名左右是否有空格。Ultralytics在读取时要求images/train/xxx.jpg和labels/train/xxx.txt严格同名多一个空格都会导致标签找不到。这种错误通常会在训练日志里看到“found no labels”警告。类别ID是否越界。data.yaml里nc是1时txt第一列只能是0。如果从别的数据集拷来的标签第一列有1、2训练会直接报错或意外忽略。5.3 小目标漏检怎么办隐翅虫在监控画面里经常只占几十个像素训练完发现近景大目标框得很好远处小目标全漏这是小尺寸目标检测的典型问题。我实验后效果从高到低排列的调整手段如下训练尺寸提升到768或1024小目标在模型训练时的特征图尺寸变大效果直接且明显代价是显存占用和推理耗时上升。使用自带增强的模型变体YOLOv8默认包含mosaic增强mosaic会把多张图拼接小目标出现的概率变高如果关掉了mosaic这里反而可以试着关闭或保留观察。升级模型规模从yolov8n换成yolov8s或yolov8m对细节特征的学习能力强一档但推理速度会慢。对监控场景做按比例的图像分块推理大图切块后分别推理再合并结果相当于用时间换空间适合边缘设备固定机位的监控场景。6. 最后再分享几个使用细节我在实际使用这套数据集做训练和部署时还有一些额外的体会。一个容易被忽略的点是imgsz的取值。很多人顺着默认值640就跑了但如果你要部署到手机或嵌入式设备推理时的图像尺寸最好和训练时的输入尺寸一致或者至少差异不要太大。训练用640、推理用320精度下降非常明显训练用768、推理用640效果反而可以接受。所以建议根据你的部署硬件提前定好尺寸再按这个尺寸去训练。另一个小技巧是用迁移学习而不是从零训练。数据集里自带386张标注图但如果你有另外一批相关的虫子图片——比如蚂蚁、蜜蜂这种细长型的昆虫图片——可以先用这批数据训练一个“虫子检测”预训练模型再在隐翅虫数据集上微调。两个数据集的背景和虫子形态相似度越高最终效果越好。我试过用普通昆虫图片预训练后再微调mAP50比直接训练高了大约5个百分点这个增益在数据量少时非常可观。最后说一句做数据集、整理标注、跑训练这些环节看起来枯燥但每一步踩过的坑都会在后期的部署阶段变成你的经验优势。这套VOCYOLO双格式的隐翅虫数据集目前我自己的宿舍防虫监控项目里已经跑了一阵子夜间红外场景下漏检率控制在可接受范围内。如果你也在做虫子识别或者小目标检测建议直接拿这套数据跑通整个流程然后再根据自己的场景慢慢补充图片模型会越来越顺手。本文还有配套的精品资源点击获取
返回列表