尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
蟑螂检测数据集:374张图双格式标注,YOLOv8开箱即训
简介一套专注于蟑螂检测的标注数据集面向计算机视觉初学者、算法工程师以及模型评测场景可用于目标检测模型的训练、验证与算法对比数据规模适中特别适合深度学习目标检测的入门练习与消融实验。压缩包共包含1124个文件包括374张JPG原图、374个Pascal VOC格式的XML标注文件以及376个文本文件其中374个对应YOLO格式标注整体大小仅12.29MB轻量而规范下载后无需额外转换。目前已有78人学习下载适合作为小样本基线、教学示例或快速验证流程的实验数据。数据集中仅一个类别标注框总计943个全部由labelImg手工绘制图片来源百度网页经作者逐张核实标注准确性可直接用于YOLO系列、SSD、Faster R-CNN等常见检测框架。由于仅提供检测所需的矩形框标注不包含分割路径适合框级目标检测任务。1. 蟑螂检测数据集374 张图、943 个框VOC 与 YOLO 双格式开箱即训做害虫识别相关的项目数据集永远是第一个卡壳的地方——公开的蟑螂检测数据少得可怜标注质量更是参差不齐。这套蟑螂检测数据集共 374 张 JPG 原图配套 374 个 Pascal VOC 格式的 xml 和 374 个 YOLO 格式的 txt标注框总数 943 个类别只有 cockroach 一类。图片来自百度网页爬取由 labelImg 手工画矩形框完成已核实标注准确性不需要再花时间清脏数据。单类别、双格式、直接能喂给 YOLOv8 训练适合刚接触目标检测、想拿真实数据跑通全流程的人也适合做厨房卫生监测、仓储虫害预警这类原型验证。2. 先把两种标注格式看透xml 的绝对坐标和 txt 的归一化坐标怎么对应2.1 解压后的目录jpg、xml、txt 三份文件一套命名解压后看到的是zhanglang (165).jpg这种带括号编号的命名编号并不连续这是标注过程中人为跳过模糊、遮挡太严重的废图导致的属于正常现象不用纠结文件之间的编号空洞。文件类型后缀数量内容原始图片.jpg374实拍场景图分辨率不统一光照差异大VOC 标注.xml374图片尺寸、目标类别、矩形框绝对像素坐标YOLO 标注.txt374类别编号 归一化中心点坐标和宽高三份文件靠主文件名一一对应比如zhanglang (165).jpg对应zhanglang (165).xml和zhanglang (165).txt。这套标注是用 labelImg 生成的labelImg 在 PascalVOC 模式下保存 xml切到 YOLO 模式再保存一次就能得到 txt两边的框一一对应。实际使用中我一般会把 jpg、xml、txt 分开三个目录放训练时再按框架要求重新组织避免爬取来的杂散文件干扰。2.2 打开一个 xml 看标注信息到底长什么样VOC 格式的精髓在于它记录了图片本身的尺寸和每个目标的矩形框绝对坐标不依赖任何框架任何语言都能解析。随便打开一个 xml结构是这样的annotation folderJPEGImages/folder filenamezhanglang (165).jpg/filename size width640/width height427/height depth3/depth /size object namecockroach/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin120/xmin ymin85/ymin xmax390/xmax ymax310/ymax /bndbox /object /annotation重点是size和bndbox两段。size里的 width、height 是原图的实际像素尺寸后续做归一化坐标全靠它bndbox里的 xmin、ymin 是框左上角坐标xmax、ymax 是右下角。注意这里坐标是绝对像素值不是百分比而且宽高是原始分辨率不是缩略图分辨率读取时务必以 size 字段为准。另外这个 xml 里只截取了一个 object实际文件里可能包含多个object节点对应一张图里多只蟑螂的情况。总计 943 个框意味着平均每张图约 2.5 个目标这种分布对检测器来说还算友好不会出现画面里几十个目标挤在一起的极端情况。2.3 xml 转 txt 的换算逻辑为什么 YOLO 只需要五个数字YOLO 的 txt 格式每行五个数字类别编号、归一化中心点 x、归一化中心点 y、归一化宽度、归一化高度。这份数据的类别只有 cockroach 一种所以编号固定是 0。从 xml 换算成 txt 的代码并不复杂我习惯用一个固定脚本处理import xml.etree.ElementTree as ET def voc_to_yolo(xml_path, class_id0): tree ET.parse(xml_path) root tree.getroot() size root.find(size) w int(size.find(width).text) h int(size.find(height).text) lines [] for obj in root.iter(object): 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 / w y_center (ymin ymax) / 2 / h box_w (xmax - xmin) / w box_h (ymax - ymin) / h lines.append(f{class_id} {x_center:.6f} {y_center:.6f} {box_w:.6f} {box_h:.6f}) return lines换算的核心是先求像素中心点和像素宽高再分别除以图片宽度和高度得到 0 到 1 之间的浮点数。为什么要归一化因为 YOLO 训练时会对输入图片做 letterbox 缩放不同分辨率的图片拉伸比例不同只有归一化坐标才能保证框在缩放后仍然准确贴合目标。这里有一个容易出偏差的细节宽度和高度是两套分母中心点 x 和框宽除以w中心点 y 和框高除以h。不少新手统一除以 w 或统一除以 h导致框位置偏移验证时损失函数一直下不去数据本身没问题问题出在换算上。3. 用 YOLOv8 训练这份数据集从目录划分到参数调优的完整路径3.1 训练前强制校验三件事拿到数据集的第一件事不是急着训练而是先做三轮校验图片能不能正常打开、xml 和 txt 数量是否配对、坐标有没有越界。第三点尤其值得重视爬取图片标注时偶尔会有标注框超出画面边界的情况。先校验图片完整性。374 张图里只要有一张损坏的 jpgYOLOv8 训练到一半就会报错中断白白浪费几小时from PIL import Image import os img_dir images broken [] for f in sorted(os.listdir(img_dir)): path os.path.join(img_dir, f) try: with Image.open(path) as im: im.load() except Exception as e: broken.append(f) print(f损坏图片: {f} - {e}) print(f检查完成共 {len(broken)} 张损坏图片)这里是逐个尝试加载图片并调用load()强制解码只要文件头伪装成 jpg 但数据不完整的图都会被揪出来。爬取来源的图偶尔会出现后缀是 .jpg 但实际编码损坏的情况不校验直接训练就是浪费时间。第二步校验 txt 坐标是否都在 0 到 1 范围内。YOLO 对越界坐标会打警告但不会帮你修正import os txt_dir labels issues [] for f in sorted(os.listdir(txt_dir)): path os.path.join(txt_dir, f) with open(path) as fh: for line in fh: parts line.strip().split() if len(parts) ! 5: issues.append((f, 字段数不是 5)) break vals [float(v) for v in parts[1:]] if any(v 0 or v 1 for v in vals): issues.append((f, 坐标越界)) break print(f异常文件 {len(issues)} 个) for f, reason in issues[:10]: print(f, reason)图片校验和坐标校验分开跑哪个环节出问题一眼就能定位。3.2 按 YOLOv8 的目录要求重新组织文件YOLOv8 对数据集目录有一套固定规则images 和 labels 必须在同一父目录下且 images/train 对应 labels/trainimages/val 对应 labels/val。文件名必须完全一致否则训练时报告找不到标签。374 张图数量不大我一般按 85/15 划分留出约 56 张做验证集另外在训练前固定随机种子保证每次划分结果一致mkdir -p roach_data/images/train roach_data/images/val mkdir -p roach_data/labels/train roach_data/labels/val用脚本按比例随机分配把每个 jpg 连同同名的 txt 一起移动。注意只移动 jpg 和 txtxml 这个阶段已经可以不用了保留一份到备份目录即可。划分完成后写 data.yaml这是 YOLOv8 读取数据配置的唯一入口path: /home/user/roach_data train: images/train val: images/val names: 0: cockroachpath是数据集根目录的绝对路径train 和 val 都是相对这个根目录的路径names 的索引顺序必须和 txt 里的类别编号一致。这份数据只有 cockroach 一类names 从 0 开始写一行就够了如果后续想加类别新类别的编号从 1 开始往后排。3.3 训练参数怎么定先把 n 模型跑通再说数据量只有 374 张直接上 YOLOv8m 或 YOLOv8l 很容易过拟合我的建议是先拿 YOLOv8n 跑通整个链路看验证集指标稳定了再决定是否换大模型。训练命令如下yolo detect train \ dataroach_data/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ patience20 \ projectruns/detect几个关键参数的设定逻辑参数设置值理由modelyolov8n.pt374 张数据只够支撑小模型n 参数量最小不容易过拟合epochs100数据量小100 轮足够收敛配合早停不会浪费算力imgsz640YOLOv8 默认推理尺寸保持默认即可batch16取决于显存8GB 显存跑 16 没问题不够就降到 8patience20连续 20 轮验证集指标不提升就自动停止节省时间batch 的调节要看显存2GB 显存跑不了 16batch8 也能训练只是收敛会更慢一些。另外这个数据规模下训练参数更多是经验而非玄学不用纠结学习率YOLOv8 默认的自动学习率调度已经够用。3.4 训练完别急着收工用预测图核验效果训练结束后看 best.pt 的验证集指标只是第一步一定要挑几张训练时没见过的图跑一次预测yolo detect predict \ modelruns/detect/train/weights/best.pt \ sourceroach_data/images/val \ conf0.25 \ saveTrueconf 参数控制置信度阈值0.25 是默认值。跑完后打开预测图重点看两类错误漏检画面里明显有蟑螂但模型没框出来误检把阴影、反光或者类似形状的物体框成了 cockroach。验证集指标只能告诉你一个平均值真实效果必须靠肉眼扫图这一步省不掉。我一般会在预测结果里挑出漏检最严重的 5 张图回看它们对应的原图和标注确认是目标太模糊还是标注漏标了。如果是标注漏标补标后重新训练比盲目加大模型参数更有效。4. 避坑训练蟑螂数据最容易翻车的五个点4.1 训练到一半报图片打不开现象训练跑到某个 epoch 时中断报错提示某张图片无法读取。原因爬取来源的 jpg 不全是标准编码个别图存在文件头损坏或数据截断。YOLOv8 在数据加载阶段会校验图片但报错信息不会告诉你具体哪张图有问题排查起来很费劲。解决训练前先用 3.1 节那段 PIL 脚本全量跑一遍把损坏图片直接移出数据集目录。如果已经训练到一半才报错看报错信息里的图片路径单独删掉那张重跑即可。4.2 xml 里的坐标越界现象xml 里 xmax 或 ymax 明显大于 size 中的宽高训练时 YOLOv8 打坐标越界警告。原因标注时 labelImg 对图像做过缩放显示人工画框可能在视觉上没越界但保存的坐标按原始分辨率计算后超出了画面范围也可能是目标本身被图片边缘裁切了一部分。解决写一段脚本遍历所有 xml把越界坐标修正为图片边缘值并同步更新 txt或直接删除越界严重的标注框。这个属于数据清洗必须做在训练之前。4.3 类别编号和 names 对不上现象训练过程没有报错loss 也在下降但预测结果里所有框的类别都是 0看不清实际目标。原因data.yaml 里 names 的索引顺序和 txt 文件里的类别编号不一致。比如 txt 里写的是 1但 names 里 1 对应了别的类名或者 names 只写了 0 一个类而 txt 里出现了编号 1。解决打开任意一个 txt 确认第一列数字的范围再对照 data.yaml 里的 names 索引。单类别数据集最常见的问题是 names 里忘了写0: cockroach这一行导致类别名缺失但训练仍能跑。4.4 374 张图严重过拟合现象训练集 mAP 接近 1.0验证集 mAP 却卡在 0.6 上不去预测测试图时漏检明显。原因数据量小且全部来自网页爬取场景分布有限模型把训练图背了下来没有学到泛化特征。解决优先用 YOLOv8n训练时开启数据增强比如 mosaic 和 random flip 默认就是开的不用额外改。第二个有效手段是固定验证集不要每次随机划分保证验证集覆盖不同光照和角度场景。最后再考虑补充数据从测试视频里截帧标注比换大模型更管用。4.5 txt 坐标出现负值或大于 1现象用 3.1 的校验脚本查出来一批 txt 坐标越界模型训练时 NMS 警告或 mAP 异常。原因标注时矩形框紧贴图片边缘归一化换算后出现 0.000000 或 1.000000 这种边界值或换算脚本里宽高用反了导致数值偏差。解决边界值可以保留但小于 0 或大于 1 的必须 clamp 到 0 到 1 之间。如果是一整批文件都越界回去检查 2.3 节换算脚本里的分母是不是写反了这是最常见的批量错误。5. 进阶一个脚本把 374 组 xml 和 txt 的一致性验明白这套数据虽然已经核实过标注准确性但 labelImg 手工标注过程中存在一个隐蔽风险xml 保存了 3 个框txt 却只保存了 2 行两个文件分别生成任何一次保存遗漏都会造成静默错位。训练时模型按 txt 读取txt 少了框只会被当成背景样本不会报错但等于白白丢掉了标注信息。解决这个问题我习惯跑一遍一致性校验对比每个同名 xml 和 txt 的标注数量import os import xml.etree.ElementTree as ET def xml_box_count(xml_path): tree ET.parse(xml_path) return len(tree.getroot().findall(object)) def txt_box_count(txt_path): count 0 with open(txt_path) as f: for line in f: if line.strip(): count 1 return count xml_dir Annotations txt_dir labels mismatch [] for xml_f in sorted(os.listdir(xml_dir)): base os.path.splitext(xml_f)[0] txt_f base .txt a xml_box_count(os.path.join(xml_dir, xml_f)) b txt_box_count(os.path.join(txt_dir, txt_f)) if a ! b: mismatch.append((base, a, b)) if mismatch: for base, a, b in mismatch: print(f{base}: xml{a} 框, txt{b} 行) else: print(全部一致共, len(os.listdir(xml_dir)), 组)这段脚本的逻辑是遍历全部 xml解析出object节点数量再数对应 txt 的非空行数两者不等就打印文件名和差异值。跑完如果输出为空说明 374 组文件全部对齐可以直接开训。这个脚本看起来简单但它是我处理标注数据时的最后一道防线。以前我接过一份虫子检测数据训练完发现某个类别的 mAP 异常低排查到最后才发现是 txt 漏了一行模型一直在用残缺标签训练。从那以后我每次拿到新数据集都会强制走一遍一致性校验再往后才允许自己碰训练命令这份蟑螂数据也不例外。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

爬虫技能化与定时任务管理:CoPaw skill 架构落地实践

爬虫技能化与定时任务管理:CoPaw skill 架构落地实践

做爬虫这些年,我最烦的不是反爬,而是脚本越攒越多、任务调度基本靠手动cron、换台机器就得重新折腾一遍。后来把爬虫拆成 CoPaw 里的 skill 技能,再把执行交给定时任务管理,整套流程才算真正顺了。这篇东西我会从 skill 工程结构、…

📅 2026/10/11 21:27:11
如何在浏览器中零安装刷写HaleHound-CYD:Web Flasher快速上手教程(含CH340驱动)

如何在浏览器中零安装刷写HaleHound-CYD:Web Flasher快速上手教程(含CH340驱动)

【免费下载链接】HaleHound-CYD ESP32-DIV HaleHound Edition for Cheap Yellow Display - Multi-protocol offensive security toolkit 项目地址: https://gitcode.com/gh_mirrors/ha/HaleHound-CYD 点击查看 免费下载 HaleHound-CYD 是一款运行在 ESP32 Cheap Ye…

📅 2026/10/11 21:27:11
PostgreSQL增删改查进阶指南:从SQL语法到底层原理的高性能CRUD实践

PostgreSQL增删改查进阶指南:从SQL语法到底层原理的高性能CRUD实践

1. 为什么简单的增删改查,也会成为生产事故的源头很多人一听到CRUD,第一反应就是“这有什么好写的,不就是几个SQL语句”。说实话,我早年也是这么想的,直到有一次在一个实际项目里,一条看起来人畜无害的UPDA…

📅 2026/10/11 21:27:11
MORE NEWS

更多资讯

📰

机器学习多因子选股实战:因子筛选、模型回测与避坑指南

简介:基于机器学习方法构建多因子选股模型的完整实战项目,面向量化金融、金融工程及人工智能相关专业的学生与研究者,可作为毕业设计或课程设计的参考实现。项目围绕单因子测试与机器学习回测两条主线,涵盖因子筛选、共线性分析、…

📰

机器学习重构多因子选股:从IC加权到排序学习的完整实战路线

简介:一份基于机器学习构建多因子选股模型的完整项目,含源代码与文档说明,面向量化金融专业学生及智能选股开发者。项目覆盖单因子测试、因子共线性分析、特征与标签构建,并实现支持向量回归、长短期记忆网络、极端梯度提升、随机…

📰

NVM安装与Node版本切换实战指南

如果你的电脑里同时躺着好几个前端项目,大概率早晚会撞上这样一个场景:某个老项目在 package.json 里写死了 Node 12,另一个新项目要用 Node 18 的新特性,还有一次上线前的紧急修复只需要临时切到 Node 16 跑一下构建。手忙脚乱地…

📰

BP模糊神经网络python实现:兼顾精度与可解释性的预测模型

简介:面向深度学习与模糊系统方向的开发者及研究人员,这份Python实现代码包提供了BP模糊神经网络(BP-FNN)的完整可运行范例。作者添加了详细注解,可配合博文中的算法推导过程逐段理解实现思路,适合课程设计…

📰

Python实现16个经典机器学习算法源码解析与实战

简介:这份基于Python的机器学习算法设计源码包,面向具备一定Python基础和机器学习概念的开发者与学习者,可用于系统掌握多种经典算法的实现与调参思路。资源按算法分章节组织,覆盖分类、回归、聚类、推荐等常见任务,包…

📰

C# WinForm触摸屏虚拟键盘:基于SendInput的无焦点输入方案

简介:这是一份面向C#初学者与WinForm开发者的轻量级模拟键盘工具项目,专为触摸屏交互场景定制,解决无物理键盘设备下的快捷输入需求。项目完整实现悬浮式圆形键盘界面、Win32底层按键注入、SendKeys指令发送及窗体图片填充等核心功能&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬