首页/新闻资讯/正文详情

宠物猫狗识别检测数据集:3947张xml与yolo双格式实战指南

发布时间:2026/9/26 9:41:58 来源:云帆数科 栏目:资讯中心
宠物猫狗识别检测数据集:3947张xml与yolo双格式实战指南
简介这份宠物猫狗识别检测数据集面向从事深度学习目标检测的科研人员、学生与工程开发者用于训练和验证猫狗目标检测模型解决宠物识别场景中样本不足、标注不规范的问题。资源包共2000个文件包含3947张jpg图像、3947个xml标注文件与3947个txt标注文件分别对应VOC与YOLO两种主流标注格式压缩包整体约388.12MB可直接接入常见检测算法流程。图像中猫狗目标形态多样、背景丰富标注精准无误适合作为课程实验、算法对比与项目落地的训练素材。目前已有2092人学习下载说明其在同类数据集中具备一定认可度。使用者可据此省去自行采集与标注的成本快速构建训练集与验证集并借助双格式标签灵活适配不同框架提升模型训练与调参效率。1. 宠物猫狗识别检测数据集3947 张、xml 与 yolo 双格式到底解决了什么如果你正在做宠物猫狗识别检测大概率卡在同一个地方模型结构抄得飞快数据却凑不齐。网上能找到的猫狗图片要么是分类数据集一张图一个标签没有框要么是零散爬下来的图标注质量参差不齐。真正能直接喂给 YOLO 训练的检测数据集尤其是同时带 xml 和 yolo 格式标签的其实不多。这个 3947 张的宠物猫狗识别检测数据集核心价值就在于它把「图 框 双格式标签」一次性给全了xml 是 Pascal VOC 风格yolo 是 txt 归一化坐标两条路都能走。它适合三类人一是刚入门目标检测、想跑通训练全流程的新手二是需要快速验证自己模型改动、不想在数据清洗上耗时间的熟手三是做宠物相关应用喂食器、门禁、监控需要落地检测能力的工程师。3947 张不算大但作为单类别猫、狗两类检测任务够你跑通训练、调参、评估的完整链路。下面我把这套数据从格式解析到训练落地拆开讲包括 xml 解析、yolo 标签校验、类别映射这些容易翻车的点。2. 先搞懂 xml 和 yolo 两种标签格式结构、差异与转换逻辑2.1 Pascal VOC 的 xml 长什么样字段怎么读xml 格式的标注一张图对应一个 xml 文件文件名通常和图片同名。核心结构是annotation根节点下面挂filename、size宽高通道、以及若干个object。每个object里有name类别名这里是 cat 或 dog、bndboxxmin、ymin、xmax、ymax绝对像素坐标。很多人第一次打开 xml 觉得眼花其实只要盯住object循环就行。annotation filenamecat_001.jpg/filename size width640/width height480/height depth3/depth /size object namecat/name bndbox xmin112/xmin ymin88/ymin xmax430/xmax ymax402/ymax /bndbox /object /annotation上面这段里size决定了后面归一化的分母bndbox是绝对坐标。注意一个坑有些 xml 的 xmin 可能大于 xmax或者框超出图像边界训练前必须校验。xml 解析用 Python 标准库xml.etree.ElementTree就够不用装额外依赖。2.2 yolo 格式的 txt 为什么是归一化坐标yolo 格式一张图对应一个 txt每行一个目标格式是class_id x_center y_center width height全部是相对图像宽高的归一化值0~1。class_id 从 0 开始需要你自己维护一个类别映射表比如{0: cat, 1: dog}。它和 xml 最大的区别是xml 存绝对坐标和类别名yolo 存归一化坐标和类别索引。归一化的好处是图片缩放、resize 后标签不用改直接跟着模型输入尺寸走。# xml 绝对坐标转 yolo 归一化坐标 def voc_to_yolo(xmin, ymin, xmax, ymax, img_w, img_h): 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 return x_center, y_center, w, h这段函数是转换的核心。参数 img_w、img_h 来自 xml 的size不要用图片实际尺寸去猜因为标注时的尺寸可能和当前图片不一致。转换后所有值必须落在 0~1超出说明框有问题要单独拎出来看。2.3 两种格式的选型什么时候用哪个选哪个格式取决于你的训练框架。YOLOv5/v8 系列直接吃 yolo txt配一个data.yaml指定 train/val 路径和类别名。如果你用 Detectron2、MMDetection 或者自己写的 PyTorch 训练循环xml 转成 COCO json 更顺。这套数据集两种都给了省去你自己转的麻烦。但要注意双格式不代表可以混用训练时只能选一种混着喂会直接报错或静默学歪。对比项xml (VOC)yolo txt坐标类型绝对像素归一化 0~1类别表示类别名 cat/dog类别索引 0/1一图多目标多个 object 节点多行适用框架Detectron2、MMDetectionYOLOv5/v8、YOLOX校验重点框越界、坐标反了值域、类别 id 越界3. 用这套数据集跑通训练目录组织、配置与最小可运行命令3.1 目录结构怎么摆别让路径成为第一个翻车点拿到数据集后第一件事是整理目录。YOLO 训练对目录结构有约定常见做法是 images 和 labels 分开train/val 再分。很多人直接把图和标签混在一个文件夹训练脚本找不到标签报No labels found这就是血泪经验。推荐结构如下pet_dataset/ ├── images/ │ ├── train/ # 约 3158 张 │ └── val/ # 约 789 张 ├── labels/ │ ├── train/ # 对应 txt │ └── val/ └── data.yamltrain/val 按 8:2 切3947 张大概 3158 训练、789 验证。切分时注意同一只宠物的多张图尽量别跨集否则验证指标虚高。图片和标签必须同名cat_001.jpg对应cat_001.txt差一个字符都找不到。3.2 data.yaml 的三个必填字段YOLO 训练靠data.yaml找数据。这个文件看着简单写错一个字段就训练不起来。path: /home/user/pet_dataset train: images/train val: images/val nc: 2 names: [cat, dog]path是数据集根目录train/val是相对 path 的路径。nc是类别数这里是 2。names顺序必须和 txt 里的 class_id 对应0 对应 cat1 对应 dog写反了模型会把猫认成狗而且 loss 还降得很正常属于最隐蔽的坑。改完 yaml 建议先跑一次数据校验再开训。3.3 最小可运行训练命令与参数含义假设你用 YOLOv8一条命令就能起训yolo detect train \ datapet_dataset/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ device0modelyolov8n.pt是预训练权重小模型适合快速验证。imgsz640是输入尺寸和标注时的尺寸不必一致yolo 会自动缩放标签。batch16看显存调显存不够就降到 8 或 4。device0指定第一块 GPU没 GPU 就写cpu但 3947 张用 CPU 训会非常慢。训练开始后重点看mAP50和box_loss前者涨、后者降才算正常。3.4 训练前用脚本校验标签别等 loss 不降才回头查开训前花两分钟跑个校验脚本能省几小时排查。import os from pathlib import Path def check_yolo_labels(label_dir, nc2): bad [] for txt in Path(label_dir).glob(*.txt): for i, line in enumerate(open(txt)): parts line.strip().split() if len(parts) ! 5: bad.append((txt.name, i, 字段数不对)) continue cid int(parts[0]) vals list(map(float, parts[1:])) if cid 0 or cid nc: bad.append((txt.name, i, f类别越界 {cid})) if any(v 0 or v 1 for v in vals): bad.append((txt.name, i, 坐标越界)) return bad issues check_yolo_labels(pet_dataset/labels/train) print(f发现 {len(issues)} 处问题) for it in issues[:10]: print(it)这个脚本检查三件事每行是否 5 个字段、类别 id 是否在 0~nc-1、坐标是否在 0~1。参数nc要和 data.yaml 一致。发现问题标签要么修要么删别带着脏数据训否则模型学到的框会飘。4. 避坑与排查xml 解析、标签转换、训练报错的高频问题4.1 xml 解析报错 ParseError多半是编码或特殊字符现象用 ElementTree 解析时抛xml.etree.ElementTree.ParseError: not well-formed。原因通常是 xml 文件头声明了encodingutf-8但实际存的是 GBK或者类别名里混了、这类未转义字符。解决先用chardet或直接二进制读前几字节判断编码统一转成 utf-8特殊字符做转义。批量处理时加 try/except 把坏文件单独记录别让一个坏 xml 中断整个转换。4.2 转换后框位置整体偏移检查 size 和实际图片是否一致现象xml 转 yolo 后可视化发现框整体偏了或大小不对。原因xml 里的width/height和图片真实尺寸不一致可能是标注工具导出时写死了旧尺寸。解决转换时以PIL.Image.open(img).size的真实宽高为准而不是盲信 xml 的 size。如果两者差异超过 5%这批数据要重点复核。4.3 训练报 No labels found路径和文件名大小写是元凶现象训练启动即报找不到标签。原因images 和 labels 目录层级不对或者图片是.JPG大写而标签是.txt小写YOLO 按 stem 匹配时对不上。解决确认 images/train 和 labels/train 平级图片和标签主文件名完全一致含大小写。Linux 下大小写敏感Windows 下不敏感跨系统搬数据特别容易踩。4.4 类别名写反导致猫狗互换验证集指标却正常现象推理时猫被标成 dog但训练 mAP 看着不低。原因data.yaml 的 names 顺序和 txt 里 class_id 的约定反了。解决抽 5 张图做可视化推理人工确认类别。names 顺序一旦定了就别改改了要重新对齐所有标签。这个坑最坑的地方在于 loss 曲线完全正常只能靠可视化抓出来。4.5 显存溢出 CUDA out of memory先降 batch 再查 imgsz现象训练中途报显存不足。原因batch 或 imgsz 太大或者 dataloader 的 workers 开太多。解决先把 batch 减半还不行就把 imgsz 从 640 降到 512 或 416。workers 一般设 4~8设成 CPU 核数反而可能因为内存拷贝拖慢。3947 张数据量不大batch8 配 imgsz640 在 8G 显存上通常能跑。5. 进阶技巧用这套数据做迁移与半自动标注提效5.1 用预训练模型做半自动标注把 3947 张的边际成本压下来3947 张全人工标注成本不低。如果你要扩充数据可以先用这套数据训一个基础模型再拿它去推理新图片生成预标注 yolo txt人工只做修正。流程是训练好的best.pt跑yolo detect predict输出带框的 txt再导入标注工具微调。这样每张新图的标注时间能从几分钟降到几十秒。注意预标注的框会有漏检和误检修正时重点看小目标和遮挡目标。yolo detect predict \ modelruns/detect/train/weights/best.pt \ sourcenew_images/ \ save_txtTrue \ conf0.25 \ iou0.45conf0.25是置信度阈值调低会多出框但误检增多调高会漏检。iou0.45控制 NMS 合并重叠框的力度。生成的 txt 在labels子目录下直接拿去改。这套半自动流程适合数据持续增长的场景边际成本会越来越低。5.2 验证模型是否真的学到东西看混淆矩阵而不是只看 mAPmAP 高不代表模型可用。跑完训练后YOLO 会在runs/detect/train下生成confusion_matrix.png。重点看猫狗之间的误判比例如果 cat 被预测成 dog 的比例超过 10%说明两类特征区分度不够可能是数据里猫狗同框太多或者类别名映射有问题。另一个技巧是拿验证集里 mAP 最低的 20 张图单独看往往能发现标注错误或难样本。我一般会把这 20 张的预测结果和原图并排看比盯指标有用得多。5.3 一个我踩过的习惯先跑通 10 张再全量刚拿到数据集时别急着上全量训练。我习惯先抽 10 张图、20 个目标跑 5 个 epoch确认数据加载、标签解析、类别映射、推理可视化整条链路通了再放开全量。这一步能提前暴露 80% 的格式问题。3947 张全量训一次少则几十分钟多则几小时用 10 张做冒烟测试省下的时间够你调好几轮参数。数据格式这种事宁可前期慢一点也别等训到一半才发现标签是错的。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

达梦 DMSQL 游标全解析:从隐式游标、显式游标到动态游标与游标变量
达梦 DMSQL 游标全解析:从隐式游标、显式游标到动态游标与游标变量

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:41:58

Agentic执行层:面向LLM任务的语义化调度引擎
Agentic执行层:面向LLM任务的语义化调度引擎

1. 项目概述:从“ax”这个极简标题看Agentic系统调度的底层逻辑你搜“ax”,第一反应是什么?命令行里敲ax报错?某个新出的CLI工具?还是最近刷屏技术圈的Agentic X?其实都不是——这个看似空泛的标题&#xf… · 2026/9/26 9:41:58

AP9196 LED驱动芯片深度解析:高动态响应与超低消隐时间设计
AP9196 LED驱动芯片深度解析:高动态响应与超低消隐时间设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:41:58

HART转Modbus协议网关:污水厂自动化兼容难题的工程解法
HART转Modbus协议网关:污水厂自动化兼容难题的工程解法

1. 为什么污水厂现场还在为“协议不兼容”反复返工? 去年在华东某日处理量30万吨的市政污水厂做自动化升级,我亲眼看到仪表班师傅蹲在二沉池边的PLC柜前,手里捏着三张纸:一张是罗斯蒙特3051差压变送器的HART手操器截图&#xff0c… · 2026/9/26 10:22:33

NodeGui 事件系统解析:QActionSignals 信号接口完整指南
NodeGui 事件系统解析:QActionSignals 信号接口完整指南

桌面应用跨平台 【免费下载链接】nodegui A library for building cross-platform native desktop applications with Node.js and CSS 🚀. React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org 项目地址: https://git… · 2026/9/26 10:22:27

opencodex 生命周期生产加固:Grok Build 桥接的 ensure 重注入、restart 往返与 heartbeat 决策实战
opencodex 生命周期生产加固:Grok Build 桥接的 ensure 重注入、restart 往返与 heartbeat 决策实战

【免费下载链接】opencodex Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code 项目地址: https://gitcode.com/gh_mirrors/ope/opencodex 点击… · 2026/9/26 10:22:27

49 OpenClaw 故障排查:系统异常时的诊断方法(TaoToken 配置与验证)
49 OpenClaw 故障排查:系统异常时的诊断方法(TaoToken 配置与验证)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 10:22:27

Puppeteer MCP 配 TaoToken:让大模型操控浏览器的自动化采集配置骨架
Puppeteer MCP 配 TaoToken:让大模型操控浏览器的自动化采集配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 10:22:27

Redmine API 实战:3 步完成第一次 Redmine RESTful API 集成
Redmine API 实战:3 步完成第一次 Redmine RESTful API 集成

Redmine API 实战:3 步完成第一次 Redmine RESTful API 集成 【免费下载链接】redmine Mirror of redmine code source - Official Subversion repository is at https://svn.redmine.org/redmine - contact: vividtone or maeda (at) farend (dot) jp 项目地址: … · 2026/9/26 10:22:21

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码