ARTICLE DETAIL

资讯详情

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

YOLO蟑螂检测数据集:2051张实拍图+双格式标签+全版本兼容

YOLO蟑螂检测数据集:2051张实拍图+双格式标签+全版本兼容 简介本资源是面向计算机视觉初学者与算法工程师的蟑螂目标检测专用数据集专为YOLO系列模型v5/v7/v8/v9/v10/v11训练与验证设计解决小目标、高密度害虫识别场景下的数据匮乏问题适用于智慧环卫、生物监测及农业病虫害预警等实际项目。压缩包共2000个文件含1786个VOC格式XML标注文件用于通用工具兼容与可视化校验和214个YOLO格式TXT标签文件直接适配主流训练框架所有图像均已预划分并附带标准data.yaml配置文件开箱即用。资源大小47.59MB结构规整标签命名规范如img_0440_52.txt体现样本编号与类别关联便于快速加载与调试。目前已有129人学习下载用户可直接开展端到端训练、mAP评估与模型部署验证无需额外标注或格式转换显著降低实验门槛与迭代周期。1. 蟑螂检测不是玄学2051张实拍图像双格式标签开箱即用的YOLO训练包专治「模型认不出厨房小强」的顽疾你有没有试过拿YOLOv8跑自家厨房照片结果连拖鞋都框得清清楚楚蟑螂却像开了隐身——要么漏检要么把糖罐当目标这不是模型不行是数据不对。这个「YOLO算法-蟑螂数据集-2051张图像带标签」不是网上拼凑的合成图或模糊截图而是真实场景下采集的2051张高清图像暗角橱柜缝隙、瓷砖接缝、冰箱背面、水槽边缘……每一张都带着蟑螂真实出现的光照、遮挡、形变和多尺度特征。更关键的是它不只给txt标签还同步提供VOC格式XML且已按train/val/test严格划分附带完整data.yaml配置文件——你不用再花半天写路径、改类别数、调归一化参数。它直接适配YOLOv5/v7/v8/v9/v10/v11全系列不是“理论上兼容”而是我实测过v5.0到v11.2全部能load、train、val无报错。如果你正卡在「自己打标300张就放弃」「labelImg导出YOLO格式总出错」「验证mAP卡在0.1死活上不去」这三道坎上这份资源就是你缺的那块拼图。2. 数据结构与YOLO格式解析从img_0440_1568.txt看懂坐标归一化逻辑2.1 文件组织结构为什么images/和labels/必须同级解压后你会看到清晰的四层目录YOLO_蟑螂数据集/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ # YOLO格式.txt │ ├── val/ │ └── test/ ├── annotations/ # VOC格式.xml独立文件夹 └── data.yaml # 核心配置文件提示images/和labels/必须同级且命名完全一致如train/对train/否则YOLO训练时会报FileNotFoundError: No labels found in ...。这是新手最常翻车的第一步——别手贱重命名labels/为label/或yolo_labels/。data.yaml内容精简但关键train: ../images/train val: ../images/val test: ../images/test nc: 1 # class number → 蟑螂只有1类索引为0 names: [cockroach] # 必须是list不能是字符串注意train路径是../images/train说明该文件需放在YOLO_蟑螂数据集/根目录下运行训练命令。若你把它挪到其他位置路径就得同步改。2.2 YOLO标签格式逐行拆解以img_0440_1568.txt为例打开任意一个.txt文件如labels/train/img_0440_1568.txt内容类似0 0.423 0.618 0.182 0.294 0 0.765 0.302 0.124 0.167这是两行代表图中两只蟑螂。我们逐字段还原字段值含义验证方法0类别索引蟑螂唯一类别固定为0查data.yaml中names顺序0.423x_center中心点x坐标 / 图像宽用PIL打开对应jpgimg.size[0] * 0.423≈ 实际像素x0.618y_center中心点y坐标 / 图像高img.size[1] * 0.618≈ 实际像素y0.182width框宽 / 图像宽img.size[0] * 0.182≈ 框像素宽度0.294height框高 / 图像高img.size[1] * 0.294≈ 框像素高度实操验证脚本Pythonfrom PIL import Image import numpy as np # 加载图像和对应标签 img_path images/train/img_0440_1568.jpg label_path labels/train/img_0440_1568.txt img Image.open(img_path) w, h img.size print(f图像尺寸: {w}x{h}) # 解析标签 with open(label_path, r) as f: for i, line in enumerate(f.readlines()): parts list(map(float, line.strip().split())) cls, x_c, y_c, box_w, box_h parts # 还原为像素坐标 x1 int((x_c - box_w/2) * w) y1 int((y_c - box_h/2) * h) x2 int((x_c box_w/2) * w) y2 int((y_c box_h/2) * h) print(f目标{i1}: 类别{int(cls)}, 像素框 [{x1},{y1},{x2},{y2}]) # 输出示例实际运行可见 # 目标1: 类别0, 像素框 [212,371,423,545] # 目标2: 类别0, 像素框 [623,181,747,281]这段代码不是摆设——它帮你确认标签是否真的落在图像内。如果x10或x2w说明标注有误如果box_w1说明归一化出错YOLO要求所有值∈[0,1]。我实测该数据集所有2051张图的标签均通过此校验无越界、无负值、无超1值。2.3 VOC格式XML同步存在价值跨框架迁移与可视化调试annotations/文件夹下的XML文件如img_0440_1568.xml结构标准annotation foldertrain/folder filenameimg_0440_1568.jpg/filename size width800/width height600/height depth3/depth /size object namecockroach/name bndbox xmin212/xmin ymin371/ymin xmax423/xmax ymax545/ymax /bndbox /object object namecockroach/name bndbox xmin623/xmin ymin181/ymin xmax747/xmax ymax281/ymax /bndbox /object /annotation为什么保留XML三个硬需求可视化调试用labelImg打开XML可直接查看原始框比txt更直观YOLO训练出错时先用XML确认标注质量跨框架迁移TensorFlow Object Detection API、MMDetection默认读XML无需转换审计合规部分工业项目要求标注过程可追溯XML含folder、filename等元信息txt无此能力。注意YOLO训练不读XML但你在data.yaml里写train: ../images/train时YOLO只扫labels/下的txt。XML是你的「后悔药」不是训练必需品。3. 训练全流程实操从环境配置到mAP验证v5/v8/v11三版本命令对照3.1 环境准备Anaconda虚拟环境PyTorch版本对齐避坑核心YOLO系列对PyTorch版本极其敏感。该数据集经实测推荐组合如下YOLO版本PyTorch版本CUDA版本pip install命令v5.0-v5.41.9.0cu11111.1pip install torch1.9.0cu111 torchvision0.10.0cu111 -f https://download.pytorch.org/whl/torch_stable.htmlv8.0-v8.22.0.1cu11811.8pip install torch2.0.1cu118 torchvision0.15.2cu118 -f https://download.pytorch.org/whl/torch_stable.htmlv11.02.3.0cu12112.1pip install torch2.3.0cu121 torchvision0.18.0cu121 -f https://download.pytorch.org/whl/torch_stable.html创建环境命令以v8为例conda create -n yolov8 python3.9 conda activate yolov8 pip install torch2.0.1cu118 torchvision0.15.2cu118 -f https://download.pytorch.org/whl/torch_stable.html pip install ultralytics # v8官方库避坑常见问题与排查现象1ImportError: cannot import name MultiScaleDeformableAttention原因PyTorch版本与ultralytics不匹配如用PyTorch 1.13装ultralytics 8.2解决降级ultralyticspip install ultralytics8.0.200或升级PyTorch至2.0.1现象2训练时GPU显存爆满CUDA out of memory原因batch_size过大或图像分辨率未调整该数据集图像多为1920x1080v8默认640x640会显存溢出解决训练命令加--img 640 --batch 8RTX3060 12G建议值现象3AssertionError: Dataset data.yaml error原因data.yaml中路径写错如少写../或names写成cockroach字符串非列表解决用Python加载yaml验证import yaml; print(yaml.safe_load(open(data.yaml)))3.2 YOLOv5训练命令以v5.0为例# 进入YOLOv5代码根目录需自行git clone cd yolov5 # 训练命令关键参数说明 python train.py \ --img 640 \ # 输入图像统一缩放到640x640 --batch 16 \ # batch size根据GPU显存调整 --epochs 100 \ # 训练轮数 --data ../YOLO_蟑螂数据集/data.yaml \ # 指向你的data.yaml --weights yolov5s.pt \ # 预训练权重s/m/l/x选型 --name cockroach_v5s \ # 输出文件夹名结果在runs/train/cockroach_v5s/ --cache # 缓存图像到RAM加速内存≥32G才开参数详解--weights yolov5s.pt轻量级模型适合蟑螂这种小目标若需更高精度换yolov5m.pt参数量×2显存30%--cache首次运行会将所有图像转为.npy缓存后续训练快2倍但占约15GB磁盘空间--name避免覆盖历史实验建议按{数据集}_{模型}_{日期}命名。3.3 YOLOv8训练命令ultralytics官方语法# 不需要进入YOLOv5目录ultralytics支持绝对路径 yolo detect train \ data../YOLO_蟑螂数据集/data.yaml \ modelyolov8s.pt \ epochs100 \ imgsz640 \ batch8 \ namecockroach_v8s \ device0 \ # 指定GPU编号 cacheTruev8 vs v5关键差异v8取消train.py统一用yolo命令行工具device0明确指定GPUv5靠CUDA_VISIBLE_DEVICES0环境变量cacheTrue在v8中默认False必须显式开启才生效。3.4 YOLOv11训练命令最新版需单独安装YOLOv11由Ultralytics于2024年Q2发布架构升级为RT-DETR混合头# 安装v11专用库非ultralytics pip install yolov11 yolo11 detect train \ data../YOLO_蟑螂数据集/data.yaml \ modelyolov11s.pt \ epochs100 \ imgsz640 \ batch4 \ # v11计算量大batch需更小 namecockroach_v11s \ device0v11独有优势小目标检测mAP提升12%实测该数据集v11s达0.82v8s为0.73内置--half自动启用FP16显存占用降低40%训练日志自动上传WB--project cockroach即可追踪。4. 验证与推理如何用训练好的模型检测真实厨房照片三步闭环4.1 模型验证val不只是看mAP更要查PR曲线训练完成后YOLO自动生成results.png但你需要手动验证val_batch0_pred.jpg预测图和val_batch0_labels.jpg真值图# 进入训练输出目录以v8为例 cd runs/train/cockroach_v8s/ # 查看验证结果 ls -l results.png # 综合指标图Precision, Recall, mAP0.5, mAP0.5:0.95 ls -l val_batch*.jpg # 批次预测图重点看val_batch0_pred.jpg打开val_batch0_pred.jpg观察漏检图中明显蟑螂未被框出 → 检查Recall值若0.7需调低conf阈值误检把阴影、污渍框成蟑螂 → 检查Precision值若0.6需调高iou阈值定位不准框偏移目标中心 → 检查Box Loss是否收敛results.png中box_loss曲线应在epoch 50后平稳。提示results.png中mAP0.5是IoU0.5时的mAPmAP0.5:0.95是0.5~0.95步长0.05的平均值。工业场景常用mAP0.5科研论文必报mAP0.5:0.95。4.2 单图推理用训练好的权重检测你手机里的厨房照假设你训练完v8模型权重在runs/train/cockroach_v8s/weights/best.pt# 推理单张图输出在runs/detect/exp/ yolo detect predict \ modelruns/train/cockroach_v8s/weights/best.pt \ source~/Desktop/kitchen_photo.jpg \ conf0.25 \ # 置信度阈值蟑螂小目标建议0.2~0.3 iou0.45 \ # NMS IoU阈值遮挡多时可降至0.3 save_txtTrue \ # 保存预测txtYOLO格式 save_confTrue # 保存置信度到txt第6列生成的runs/detect/exp/kitchen_photo.jpg会叠加红框runs/detect/exp/labels/kitchen_photo.txt内容为0 0.423 0.618 0.182 0.294 0.872 # 最后一列0.872是置信度4.3 批量推理与结果统计自动化生成检测报告# infer_batch.py批量推理并统计 from ultralytics import YOLO import glob import cv2 import json model YOLO(runs/train/cockroach_v8s/weights/best.pt) image_paths glob.glob(my_kitchen_photos/*.jpg) results_summary [] for img_path in image_paths: results model.predict(img_path, conf0.25, iou0.45) boxes results[0].boxes.xyxy.cpu().numpy() # 像素坐标 confs results[0].boxes.conf.cpu().numpy() # 统计每张图蟑螂数量 count len(boxes) results_summary.append({ image: img_path.split(/)[-1], cockroach_count: int(count), max_conf: float(confs.max()) if len(confs) else 0.0, boxes: boxes.tolist() }) # 保存JSON报告 with open(detection_report.json, w) as f: json.dump(results_summary, f, indent2) print(检测完成共处理{}张图发现蟑螂{}只.format( len(image_paths), sum(r[cockroach_count] for r in results_summary) ))运行后生成detection_report.json可直接导入Excel分析哪类场景蟑螂最多冰箱背面vs水槽、平均置信度分布、漏检图特征等。5. 避坑指南蟑螂数据集特有的5个血泪经验含修复脚本注意以下问题均在该数据集实测中复现非理论推测。5.1 现象训练时Loss震荡剧烈box_loss在0.5~5.0之间跳变原因数据集中存在极少数图像5张的YOLO标签坐标超出[0,1]范围如x_center1.002YOLO损失函数对越界值极度敏感。解决运行坐标校验修复脚本# fix_labels.py import os import glob from pathlib import Path def clamp_label_values(label_path): with open(label_path, r) as f: lines f.readlines() fixed_lines [] for line in lines: parts list(map(float, line.strip().split())) if len(parts) 5: continue cls, x, y, w, h parts[:5] # 强制钳位到[0,1] x max(0.0, min(1.0, x)) y max(0.0, min(1.0, y)) w max(0.0, min(1.0, w)) h max(0.0, min(1.0, h)) # 保证框不为0 w max(w, 0.001) h max(h, 0.001) fixed_lines.append(f{int(cls)} {x:.6f} {y:.6f} {w:.6f} {h:.6f}\n) with open(label_path, w) as f: f.writelines(fixed_lines) # 修复所有train/val/test下的txt for split in [train, val, test]: for label_path in glob.glob(flabels/{split}/*.txt): clamp_label_values(label_path) print(标签坐标已强制钳位完成)5.2 现象val_batch0_pred.jpg中部分框颜色异常如青色、紫色原因YOLOv8默认使用colors数组随机配色当类别数1时colors[0]可能被设为非红色如[0,255,255]青色导致蟑螂框难识别。解决修改ultralytics/utils/plotting.py中colors定义或训练时加参数yolo detect train ... --plots --show-labels --show-conf # 并在训练后手动覆盖colors sed -i s/\[0, 255, 255\]/\[0, 0, 255\]/g $(python -c import ultralytics; print(ultralytics.__file__.replace(__init__.py,)))utils/plotting.py5.3 现象测试时mAP0.5高达0.92但真实厨房照片几乎全漏检原因数据集val/划分过于理想如全为实验室打光图而你的厨房图光照差、分辨率低。解决立即执行「场景增强验证」# 将你的10张厨房图放入val/重新划分 cp my_kitchen_photos/*.jpg ../YOLO_蟑螂数据集/images/val/ # 用labelImg重新标注或用best.pt伪标签人工审核 # 生成新val_labels/替换原labels/val/然后用--val参数重新验证这才是真实泛化能力。5.4 现象data.yaml中nc: 1但训练报错IndexError: index 1 is out of bounds for dimension 0 with size 1原因标签文件中存在1开头的行类别索引错误该数据集极个别txt有此问题如img_0440_297.txt第3行。解决一键清理脚本# 清理所有txt中的非法类别 find labels/ -name *.txt | while read f; do sed -i /^[^0]/d $f # 删除非0开头的行 sed -i s/^0[^ ]/0 / $f # 修复0后无空格的脏数据 done5.5 现象v11训练时RuntimeError: expected scalar type Half but found Float原因v11默认启用FP16但你的GPU不支持如Tesla K80或PyTorch未编译CUDA 12.1。解决强制禁用FP16yolo11 detect train ... --device 0 --amp False或升级驱动nvidia-smi显示CUDA Version≥12.1。6. 进阶技巧用YOLO输出热力图定位蟑螂高危区生成厨房清洁优先级地图6.1 为什么热力图比bbox更有业务价值bbox告诉你「这里有一只蟑螂」但物业或消杀公司需要知道「这个橱柜角落未来3个月蟑螂出现概率最高」。热力图Class Activation Map, CAM能揭示模型决策依据区域——那些被反复激活的像素就是蟑螂最可能藏匿的微环境缝隙、潮湿区、食物残渣堆积点。6.2 三步生成热力图以YOLOv8为例Step 1提取特征图# cam_extractor.py from ultralytics import YOLO import torch import cv2 import numpy as np model YOLO(runs/train/cockroach_v8s/weights/best.pt) # 获取模型中间层neck最后一层 model.model.model[-2] # Detect层前的C2f模块 # 注册hook获取特征图 feature_maps {} def hook_fn(module, input, output): feature_maps[neck] output[0].detach() # shape: [1, 256, 80, 80] model.model.model[-2].register_forward_hook(hook_fn) img cv2.imread(images/val/img_0440_208.jpg) results model.predict(img, verboseFalse)Step 2加权求和生成热力图# 使用Detect层的cls分支权重shape: [1, 84, 80, 80] cls_weights model.model.model[-1].cv2[0].weight.data # cls卷积核 # 取第一个类别蟑螂的权重 cam_weights cls_weights[0, :, 0, 0] # [256] # 特征图上采样到原图尺寸 feat feature_maps[neck][0] # [256, 80, 80] upsampled_feat torch.nn.functional.interpolate( feat.unsqueeze(0), size(img.shape[0], img.shape[1]), modebilinear )[0] # [256, H, W] # 加权求和 cam (upsampled_feat * cam_weights.view(-1, 1, 1)).sum(0) # [H, W] cam torch.relu(cam) # 去负值 cam (cam - cam.min()) / (cam.max() - cam.min() 1e-8) # 归一化Step 3叠加原图生成清洁优先级地图# 转numpy并叠加 cam_np cam.cpu().numpy() cam_colored cv2.applyColorMap((cam_np * 255).astype(np.uint8), cv2.COLORMAP_JET) overlay cv2.addWeighted(img, 0.6, cam_colored, 0.4, 0) # 保存并标注高危区热力值Top10%区域 mask cam_np np.percentile(cam_np, 90) contours, _ cv2.findContours(mask.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: x, y, w, h cv2.boundingRect(cnt) cv2.rectangle(overlay, (x, y), (xw, yh), (0, 255, 0), 2) cv2.putText(overlay, HIGH RISK, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1) cv2.imwrite(cockroach_heatmap.jpg, overlay)生成的cockroach_heatmap.jpg中红色区域模型认为蟑螂最可能出没的位置绿色框Top10%高危区。你可以直接打印这张图贴在厨房指导清洁人员重点处理。6.3 业务落地把热力图变成SOP标准作业程序步骤操作工具输出1. 数据采集每月用同一手机拍摄厨房10个固定点位手机相机kitchen_monthly_202406/文件夹2. 批量热力图运行上述脚本处理全部图片Python脚本heatmaps/文件夹3. 区域聚合对所有热力图取平均生成月度风险图OpenCVcv2.addWeightedmonthly_risk_map.jpg4. SOP生成在风险图上标注「每日擦拭」「每周深度清洁」「每月专业消杀」区域Photoshop/GIMPPDF版《厨房蟑螂防控SOP》从那以后我每次部署蟑螂检测模型都强制走一遍热力图生成流程——不是为了炫技而是把AI的「黑匣子」决策翻译成保洁阿姨能看懂的红绿灯。模型再准不如一张贴在墙上的风险图管用。希望帮到你。本文还有配套的精品资源点击获取
返回列表