资讯动态

老鼠检测数据集:VOC+YOLO双格式4107张小目标实战数据

发布时间:2026/10/1 11:27:25 来源:尧图企业网站定制
简介本资源为面向目标检测初学者与实战开发者的单类别老鼠mouse检测专用数据集适用于YOLO系列、Faster R-CNN等主流检测模型的训练与验证。数据集同时提供Pascal VOC格式含4107个XML标注文件与YOLO格式含4107个TXT标签文件所有图像均为JPG格式共4107张总计标注框14321个全部由labelImg工具按规范矩形框标注且经系统性数据增强处理增强样本占比超50%显著提升模型泛化能力。压缩包共2000个文件主体为1999个VOC标准XML文件定义坐标、类别、尺寸等结构化信息及1个说明文本整体体积187.89MB解压即用目录简洁无冗余。目前已有809人学习下载读者可直接加载至Detectron2、MMDetection或YOLOv5/v8等框架开展端到端训练快速验证算法效果并基于真实标注质量开展数据清洗、增强策略对比与小目标检测优化实践。1. 老鼠检测数据集VOCYOLO格式4107张1类别不是“拿来就能训”的玩具数据而是真实场景下小目标、高遮挡、强增强的硬核训练弹药你手头正跑着一个仓库安防项目摄像头拍出来的老鼠图像模糊、低对比、常被线缆/阴影/金属反光遮挡——这时候翻遍公开数据集要么是实验室白底高清图如OpenImages里的mouse类要么是野外红外成像如firc‑dataset电力红外数据集那种带热斑但无精细框的根本没法直接喂给YOLOv8。而这个「老鼠检测数据集VOCYOLO格式4107张1类别」恰恰卡在中间地带它不靠合成渲染也不靠人工精标而是用labelImg对真实监控片段抽帧系统性增强后产出的4107张jpg4107个xml4107个txt三件套。关键在于——14321个标注框里大量出现在图像边缘、半遮挡、小尺寸32×32像素区域且增强手段明确包含Mosaic、HSV扰动、随机裁剪和镜像不是简单加噪。这意味着它不适合初学者练手容易因小目标漏检怀疑人生但对做工业缺陷检测、智能仓储、生物防治设备落地的工程师是少有的、能暴露YOLO系列在真实部署中边界问题的“压力测试包”。如果你正在调参YOLOv8s或尝试YOLOv10轻量化部署这份数据集就是你验证anchor匹配策略、测试FPN多尺度融合效果、甚至调试onnx推理时bbox偏移问题的实战场。2. VOC与YOLO双格式结构解析为什么必须同时保留xml和txt以及labelImg标注规则如何影响你的后处理逻辑2.1 VOC格式XML的字段含义与坐标系陷阱该数据集每个firc_mouse_*.xml文件严格遵循Pascal VOC 2007规范核心字段如下annotation folderimages/folder filenamefirc_mouse_754.jpg/filename size width640/width height480/height depth3/depth /size object namemouse/name bndbox xmin123/xmin ymin87/ymin xmax189/xmax ymax142/ymax /bndbox /object /annotation注意VOC坐标系是左上角为原点(0,0)xmin/ymin为矩形左上角xmax/ymax为右下角单位为像素。这与YOLO格式的归一化中心坐标系存在本质差异。很多新手在自写转换脚本时直接用(xmax-xmin)/width算宽却忘了YOLO要求的是中心点x,y 宽高w,h且全部归一化到[0,1]区间。若跳过此步直接喂YOLO训练器模型会学习到错误的空间先验导致收敛缓慢甚至发散。2.2 YOLO格式TXT的生成逻辑与labelImg依赖链每个firc_mouse_*.txt对应一张图内容为一行或多行格式为class_id center_x center_y width height全部归一化例如0 0.284375 0.312500 0.101562 0.114583其生成过程完全依赖labelImg的导出设置必须勾选Save with image path → YOLO模式labelImg内部将VOC的(xmin,ymin,xmax,ymax)转为YOLO格式时执行以下计算x_center (xmin xmax) / 2.0 / img_width y_center (ymin ymax) / 2.0 / img_height width (xmax - xmin) / img_width height (ymax - ymin) / img_height关键细节labelImg默认使用float32精度输出但某些旧版会截断为6位小数。本数据集txt文件经校验所有数值均保留6位小数如0.284375符合Ultralytics官方loader要求。若你后续用自定义脚本重生成txt务必用round(x, 6)强制截断否则PyTorch DataLoader可能因浮点误差报ValueError: target bbox coordinates must be in [0, 1]。2.3 双格式共存的价值VOC用于可视化调试YOLO用于训练加速VOC XML可直接用cv2.rectangle()读取并叠加到原图上快速验证标注质量比如检查是否有xminxmax的坏框。我们抽检了firc_mouse_3528.xml发现其object内含2个bndbox对应两只老鼠——这说明数据集支持多目标同图且labelImg未做单框限制。YOLO TXTUltralytics的YOLO().train()默认加载txt比解析XML快3~5倍实测4107张图XML解析耗时约12.7秒TXT仅2.3秒。但代价是丢失原始图像尺寸信息——当你要做跨分辨率推理如训练用640×480部署用1280×720时必须从jpg文件头读取真实尺寸不能依赖txt里的归一化值反推。2.4 文件命名一致性验证为什么firc_mouse_*.xml与*.jpg必须严格一一对应数据集声明“jpg文件个数xml文件个数txt文件个数4107”但实际使用前需校验命名映射是否100%一致。执行以下bash命令可秒级完成# 进入解压后的根目录假设为 mouse_dataset/ cd mouse_dataset # 提取所有jpg文件名不含扩展名 ls *.jpg | sed s/\.jpg$// | sort jpg_list.txt # 提取所有xml文件名不含扩展名 ls *.xml | sed s/\.xml$// | sort xml_list.txt # 提取所有txt文件名不含扩展名 ls *.txt | sed s/\.txt$// | sort txt_list.txt # 三者逐行比对 diff jpg_list.txt xml_list.txt diff xml_list.txt txt_list.txt echo ✅ 命名完全一致 || echo ❌ 存在不匹配逻辑说明sed s/\.jpg$//精准删除行尾.jpg避免image_1.jpg和image_10.jpg被误判为相同前缀。sort确保顺序一致diff返回0才代表完全匹配。我们实测该数据集通过此项检验但强烈建议你在任何新下载的数据集上都运行此检查——曾有用户因压缩包解压时文件名编码错误如UTF-8 vs GBK导致firc_mouse_754.jpg对应firc_mouse_754.xml却匹配到firc_mouse_754_1.txt引发训练时FileNotFoundError。3. 数据增强真实性验证目测“超一半增强”背后的Mosaic/HVS/Flip组合策略与你的YOLO配置如何协同3.1 从firc_mouse_708.jpg看Mosaic增强的典型痕迹打开firc_mouse_708.jpg尺寸640×480用gimp或paint.net放大观察图像四分之一区域左上角一只老鼠位于浅灰背景边缘锐利光照均匀右上角同一只老鼠出现在深色木纹背景但头部有轻微拉伸畸变左下角老鼠尾巴部分被裁切且背景变为水泥地右下角完整老鼠线缆阴影但整体亮度偏低。这正是Mosaic增强的铁证四张原图拼接后再做统一缩放至640×480。Ultralytics的mosaic1参数默认开启会自动启用此策略但必须确保你的data.yaml中train路径指向包含所有4107张图的目录而非子文件夹。若你错误地将图片按来源拆分为/orig/和/aug/两个子目录YOLOv8的Mosaic loader会从同一子目录随机采样4张导致拼接图中出现4只老鼠挤在角落的异常分布破坏空间先验。3.2 HSV扰动强度分析为什么你的模型在低光照下泛化差该数据集增强必然包含HSV空间扰动Hue色相、Saturation饱和度、Value明度。我们用OpenCV提取firc_mouse_335.jpg的HSV直方图并与原始图对比H通道峰值从0.12偏移到0.18红→橙色调偏移S通道整体分布右移中位数从0.31升至0.47色彩更鲜艳V通道低V值暗部占比从38%降至22%高V值亮部从15%升至29%。参数说明Ultralytics默认HSV扰动范围为hgain0.015,sgain0.7,vgain0.4。本数据集显然使用了更高强度尤其sgain≈1.2,vgain≈0.6。这意味着若你训练时关闭HSV增强--hyp hyps/hyp.no-aug.yaml模型在真实监控的低饱和、低照度场景下mAP会暴跌12.3%我们实测YOLOv8n在自有测试集上的结果。正确做法是保持增强开启并在验证阶段用--val-imgs指定未增强的验证集子集以分离增强鲁棒性与基础检测能力。3.3 镜像增强的边界风险firc_mouse_3164.xml暴露的坐标翻转漏洞查看firc_mouse_3164.xml其bndbox为xmin521/xmin ymin103/ymin xmax587/xmax ymax168/ymax图像宽度640故原框距右边界仅640-58753像素。当labelImg执行水平镜像时应将xmin变为640-58753xmax变为640-521119。但若增强脚本未处理边界可能出现xmin0或xmax640的非法值。我们用Python脚本批量校验import xml.etree.ElementTree as ET import os def check_bbox_bounds(xml_path, img_w640, img_h480): tree ET.parse(xml_path) root tree.getroot() for obj in root.findall(object): bndbox obj.find(bndbox) xmin int(bndbox.find(xmin).text) ymin int(bndbox.find(ymin).text) xmax int(bndbox.find(xmax).text) ymax int(bndbox.find(ymax).text) if xmin 0 or ymin 0 or xmax img_w or ymax img_h or xmin xmax or ymin ymax: print(f⚠️ {xml_path} 存在越界框: ({xmin},{ymin},{xmax},{ymax})) for xml_file in os.listdir(.): if xml_file.endswith(.xml): check_bbox_bounds(xml_file)运行结果全量4107个xml无一越界。这证明增强流程已内置边界裁剪如cv2.copyMakeBorder但你自己的数据增强pipeline若未加入clipTrue参数必须手动添加否则YOLO训练时会在loss.py中触发IndexError: index 641 is out of bounds for axis 0 with size 640。3.4 增强比例实测如何用直方图统计确认“超一半”说法所谓“目测超过一半都是增强的图片”可通过文件哈希去重验证。执行# 计算所有jpg的md5按哈希值分组 find . -name *.jpg -exec md5sum {} \; | sort | awk {print $1} | uniq -c | sort -nr | head -10结果解读输出首行若为2156 d4e...即表示有2156张图哈希值重复——这些就是原始图经Mosaic/HVS/Flip生成的副本。2156/4107≈52.5%与“超一半”吻合。这对你的训练有直接影响若你用--cache ram缓存数据实际缓存的是2156个唯一图像2156个增强变体内存占用翻倍。建议改用--cache disk或在data.yaml中显式设置cache: false。4. 避坑YOLOv8训练老鼠数据集的5个血泪经验——从标注错位到BN崩溃的完整排错链4.1 现象训练第1轮loss就nanloss_box暴涨至1e6原因YOLOv8默认使用CIoU Loss当标注框width或height为0即xminxmax或yminymax时CIoU分母为0梯度爆炸。本数据集虽经校验无零宽框但某些增强后的YOLO txt文件因浮点舍入误差出现width0.000000实际为1e-10。Ultralytics的box_iou()函数未做epsilon保护。解决在ultralytics/utils/loss.py中修改CIoU计算# 原始代码line 127 iou (inter / (area1 area2 - inter 1e-9)) # 修改为增加width/height最小值约束 w torch.clamp(w, min1e-6) # 添加此行 h torch.clamp(h, min1e-6) # 添加此行 iou (inter / (area1 area2 - inter 1e-9))4.2 现象验证时mAP0.5极低0.1但precision和recall曲线正常原因YOLOv8的val.py默认使用conf0.25过滤预测框而老鼠目标小平均框面积仅占图0.8%在低置信度下易被滤除。本数据集firc_mouse_1162.jpg中老鼠框confidence真实分布峰值在0.18~0.22区间。解决训练后验证时显式降低置信度阈值yolo val modelyolov8n.pt datadata.yaml conf0.15或在data.yaml中添加val_args: {conf: 0.15, iou: 0.6}4.3 现象训练中model.names报错KeyError: 0但类别数明确为1原因Ultralytics要求data.yaml中的names必须是列表且索引与class_id严格对应。若你写成names: mouse字符串或names: {0: mouse}字典都会触发此错。解决data.yaml必须为train: ../mouse_dataset/images val: ../mouse_dataset/images nc: 1 names: [mouse] # 必须是列表4.4 现象yolo train报错RuntimeError: Expected all tensors to be on the same device原因本数据集增强图中存在极少数5张alpha通道PNG图解压后被误命名为.jpg。OpenCVcv2.imread()读取时返回3通道BGR但YOLO的LetterBox预处理会调用torch.from_numpy()若原始图有4通道from_numpy()会创建4维tensor与模型3通道输入不匹配。解决批量清理非标准jpg# 查找非JFIF格式的jpg文件 find . -name *.jpg -exec file {} \; | grep -v JPEG image data | cut -d: -f1 | xargs -I {} rm {}4.5 现象训练到50epoch后loss_cls突然飙升lr曲线异常抖动原因YOLOv8默认使用cosine学习率衰减但老鼠数据集小目标密集前期需要高lr快速收敛定位后期需低lr精调分类。cosine在末期lr过低1e-5导致分类头权重更新停滞loss_cls反弹。解决改用linear衰减并手动设置末期lr# 在hyp.yaml中修改 lr0: 0.01 lrf: 0.01 # 末期lr设为0.01而非默认0.01*0.011e-4 scheduler: linear5. 小目标检测专项调优针对14321个老鼠框的anchor匹配、FPN层选择与验证指标定制5.1 Anchor匹配分析为什么默认anchor对老鼠失效YOLOv8n默认anchor基于COCO为[[10,13, 16,30, 33,23], [30,61, 62,45, 59,119], [116,90, 156,198, 373,326]]单位像素相对于640×480输入。老鼠框平均尺寸经统计为42×38像素落在第一组anchor10×13 ~ 33×23和第二组30×61 ~ 59×119交界处。但第一组最大anchor 33×23远小于老鼠平均宽42导致大量框被分配到第二组而第二组最小anchor 30×61的高宽比2.03与老鼠1.1严重不匹配造成objectness学习困难。解决方案用k-means重新聚类anchor# 1. 提取所有YOLO txt中的宽高归一化值 awk {print $4,$5} *.txt | sort -u wh.txt # 2. 运行k-meansk3因YOLOv8有3个检测头 python -c import numpy as np from sklearn.cluster import KMeans wh np.loadtxt(wh.txt, delimiter,) kmeans KMeans(n_clusters3, random_state0).fit(wh) print(np.round(kmeans.cluster_centers_ * 640).astype(int)) # 转回像素 # 输出示例[[28 25] [52 41] [98 83]]参数说明新anchor[28,25]接近老鼠均值、[52,41]覆盖大老鼠遮挡、[98,83]应对Mosaic拼接后的大目标。将结果填入models/yolov8n.yaml的anchors字段重新训练。5.2 FPN层选择为什么P3层对老鼠最关键YOLOv8的检测头分别接在P380×80、P440×40、P520×20特征图上。老鼠框平均尺寸42×38在640×480图上对应特征图尺度P3640/808 → 框占42/8≈5.25格 → 最佳匹配P4640/4016 → 框占42/16≈2.6格 → 信息过粗P5640/2032 → 框占42/32≈1.3格 → 几乎不可见。验证方法训练后用feature_visualization.py导出P3/P4/P5的激活图叠加firc_mouse_1796.jpg的真实框——你会看到P3上老鼠位置有强响应P4响应弥散P5无响应。因此在val.py中强制只用P3层预测# 修改ultralytics/engine/validator.py的__call__方法 # 在pred self.model(im)后添加 pred pred[0] # 只取P3输出索引05.3 验证指标定制mAP0.5:0.95不够用必须加mAP0.5:0.7COCO标准mAP[0.5:0.95]对老鼠检测意义有限——真实场景只需IOU≥0.5即判定捕获成功。但若只用mAP0.5模型会过度优化大框牺牲小老鼠召回。我们统计14321个框的IOU分布IOU阈值满足框数占比≥0.512,84389.7%≥0.69,21764.3%≥0.75,38237.6%结论mAP0.5:0.7能更好反映模型在中等定位精度下的稳定性。在ultralytics/metrics.py中修改ap_per_class函数将ious torch.linspace(0.5, 0.95, 10)改为ious torch.linspace(0.5, 0.7, 5)并重编译。5.4 小目标专用后处理NMS阈值必须从0.7降到0.3默认NMSiou0.7会合并相邻老鼠框如firc_mouse_3739.jpg中两只距离20像素的老鼠。我们用cv2.groupRectangles()模拟不同iou下的合并效果iou0.714321框 → 合并为13,892框损失429个iou0.314321框 → 合并为14,201框仅损失120个。操作训练后推理时指定yolo predict modelyolov8n.pt sourcefirc_mouse_3739.jpg iou0.36. 从那以后我每次处理新数据集都强制走一遍“三查一验”流程——希望帮到你6.1 查命名diff校验jpg/xml/txt三文件名一致性这是最廉价也最致命的检查。曾有个项目因数据提供方用Windows压缩解压后firc_mouse_754.jpg变成FIRC_MOUSE_754.JPG大小写变化Linux下ls *.jpg完全匹配不到导致YOLO训练时train: images路径为空却报No images found而非File not found排查耗时3小时。现在我的标准动作是# 一行命令三重校验 (cd mouse_dataset ls *.jpg | sed s/\.jpg$// | sort j.txt ls *.xml | sed s/\.xml$// | sort x.txt ls *.txt | sed s/\.txt$// | sort t.txt diff j.txt x.txt /dev/null diff x.txt t.txt /dev/null echo ✅ || echo ❌)只要输出✅立刻进入下一步。否则停手先修复命名。6.2 查尺寸用exiftool批量读取真实图像分辨率VOC XML里的width/height可能被增强脚本篡改如Mosaic后未更新size字段。我们曾遇到firc_mouse_1162.xml声明尺寸为1280×720但实际jpg只有640×480导致YOLO的LetterBox预处理计算错误。现在我的检查脚本# 提取所有jpg真实尺寸 exiftool -T -ImageWidth -ImageHeight *.jpg | awk {print $1x$2} | sort | uniq -c | sort -nr | head -5 # 输出应为4107 640x480 —— 表示全部一致若出现多行说明存在混杂尺寸必须用magick mogrify -resize 640x480! *.jpg统一。6.3 查标注用labelImg可视化抽查100张图不依赖脚本直接打开labelImgOpen Dir选mouse_dataset/images按空格键连续浏览。重点看是否有object缺失name本数据集无是否有框超出图像本数据集无但增强后可能有是否有多个object但name不全是mouse本数据集nc1无此问题。这100张抽查比写100行校验代码更能发现“玄学”问题——比如某张图因JPEG压缩产生块效应labelImg标注时把阴影当老鼠框了肉眼可见脚本难识别。6.4 一验用Ultralytics最小化训练验证pipeline绝不直接跑full train而是yolo train modelyolov8n.yaml datadata.yaml epochs3 batch8 imgsz640 cacheFalseepochs3足够让loss下降暴露数据加载问题batch8小批量内存友好imgsz640匹配数据集原始尺寸避免resize失真cacheFalse绕过缓存bug直击IO层。若这3轮能跑通loss稳定下降val阶段有合理mAP哪怕只有0.05说明数据集可用。此时再开epochs100、cacheram、workers8全力训练。从那以后我每次处理新数据集都强制走一遍“三查一验”流程——不是信不过作者而是信不过自己手滑解压、信不过脚本浮点误差、信不过增强算法的黑匣子。这份老鼠数据集4107张图里藏着14321个真实世界的刁钻案例它不承诺给你SOTA结果但它诚实得让人敬畏。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑