新闻详情

新闻详情

首页 / 资讯中心 / 详情

370张鹅数据集VOC与YOLO格式标注及小样本检测实战

发布时间:2026/10/1 20:34:02来源:尧图网络
370张鹅数据集VOC与YOLO格式标注及小样本检测实战
简介本资源为一份面向目标检测学习者的鹅类图像数据集采用VOC与YOLO双格式标注适合从事禽类识别、农业智能化或计算机视觉入门实践的开发者与研究人员使用。压缩包共1111个文件包含370张jpg图片、370个xml标注文件与371个txt标注文件整体约26.82MBrar格式无需解压密码解压后图片与标注分文件夹存放可直接导入labelImg或主流检测框架查看与训练。所有图片均由labelImg人工标注类别统一为goose标注过程遵循边界框选准确、目标尽量不遗漏、完成后交叉一致性检查等原则标注质量较为可靠。目前已有85人学习关注可作为鹅类检测模型训练、格式转换练习或小样本实验的基础数据帮助读者省去自行采集与标注的时间成本快速投入模型搭建与验证工作。1. 鹅数据集 VOC 和 YOLO 格式目标标注 370 张小样本检测到底能不能打手里只有 370 张鹅的图片标注还分 VOC 和 YOLO 两套格式这事放在目标检测项目里属于典型的“小样本起步”。很多做养殖巡检、鹅群计数、行为分析的朋友第一步就卡在数据上公开数据集里鹅的样本少自己拍又拍不了几千张标注工具换一个格式就乱一次。这个标题讲的就是这么一件具体的事——370 张鹅图同时提供 VOC 的 XML 和 YOLO 的 TXT 两套标注怎么把它们用起来、怎么训、训出来能不能用。适合谁看手头有几百张自采图、想跑通鹅目标检测的工程同学需要把 VOC 标注迁到 YOLO 训练管线的人以及想评估“这个量级的数据值不值得投入”的决策者。370 张不算多但也不是玩具级关键看你怎么切分、怎么增强、怎么选预训练权重。下面按“先搞懂格式差异 → 再动手转换和训练 → 最后说坑和进阶”的顺序讲能直接抄的步骤我都给全。2. VOC 与 YOLO 标注格式的差异与转换从 XML 到 TXT 的完整脚本2.1 两种格式到底差在哪为什么不能混着喂给模型VOC 格式的核心是一个 XML 文件对应一张图里面用object节点记录每个目标的类别和边界框边界框用xmin/ymin/xmax/ymax四个绝对像素坐标表示。YOLO 格式则是一个 TXT 文件对应一张图每行一个目标格式是类别索引 cx cy w h其中cx cy是归一化后的中心点坐标w h是归一化后的宽高全部除以图片的宽和高得到 0 到 1 之间的小数。这个差异带来的直接后果是VOC 的坐标跟图片分辨率绑定换一套图就得重新算YOLO 的归一化坐标跟分辨率解耦但类别必须映射成从 0 开始的整数索引。很多人把 VOC 的 XML 直接改后缀当 TXT 用训练时 loss 不降排查半天才发现坐标根本没归一化。另一个常见翻车点是类别索引VOC 里类别是字符串YOLO 里是整数如果你的类别列表顺序和生成 TXT 时的顺序不一致模型学到的就是错位的类别。提示转换前先把所有类别名收集全排好序生成一个classes.txt后续训练和推理都依赖这个顺序别中途改。2.2 用 Python 把 VOC 批量转成 YOLO 格式下面这个脚本我用了很多次输入是 VOC 的Annotations目录和JPEGImages目录输出是 YOLO 的labels目录和classes.txt。它做了三件事收集类别、按图片尺寸归一化坐标、跳过没有目标的空标注文件。import os import xml.etree.ElementTree as ET from PIL import Image # 输入路径 voc_anno_dir dataset/Annotations voc_img_dir dataset/JPEGImages # 输出路径 yolo_label_dir dataset/labels classes_file dataset/classes.txt os.makedirs(yolo_label_dir, exist_okTrue) # 第一步收集所有类别排序保证索引稳定 classes set() for xml_file in os.listdir(voc_anno_dir): if not xml_file.endswith(.xml): continue tree ET.parse(os.path.join(voc_anno_dir, xml_file)) for obj in tree.findall(object): classes.add(obj.find(name).text) classes sorted(list(classes)) with open(classes_file, w) as f: f.write(\n.join(classes)) print(类别列表:, classes) # 第二步逐张转换 for xml_file in os.listdir(voc_anno_dir): if not xml_file.endswith(.xml): continue tree ET.parse(os.path.join(voc_anno_dir, xml_file)) root tree.getroot() # 找到对应图片读尺寸 img_name root.find(filename).text img_path os.path.join(voc_img_dir, img_name) if not os.path.exists(img_path): print(缺图跳过:, img_name) continue with Image.open(img_path) as im: iw, ih im.size lines [] for obj in root.findall(object): cls_name obj.find(name).text cls_id classes.index(cls_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) # 归一化中心点和宽高 cx (xmin xmax) / 2.0 / iw cy (ymin ymax) / 2.0 / ih w (xmax - xmin) / iw h (ymax - ymin) / ih lines.append(f{cls_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) # 写 TXT空标注也写空文件保持一一对应 txt_name os.path.splitext(xml_file)[0] .txt with open(os.path.join(yolo_label_dir, txt_name), w) as f: f.write(\n.join(lines)) print(转换完成)逻辑说明先遍历所有 XML 收集类别并排序保证classes.txt的顺序就是索引顺序然后逐张读图拿宽高把 VOC 的绝对坐标转成归一化中心点加宽高。参数上cx cy w h保留 6 位小数足够YOLO 训练时对精度不敏感。注意空标注文件也要生成否则训练时图片和标签数量对不上DataLoader 会报错。2.3 转换后必须做的三项校验转换完别急着开训先做校验这三项能挡掉八成低级错误。第一项检查 TXT 行数和 XML 里object数量是否一致不一致说明有目标被漏掉。第二项随机抽 5 张图用 OpenCV 把归一化坐标画回原图肉眼看框是否贴合鹅的身体。第三项统计每个类别的框数量如果某个类别只有个位数训练时基本学不动得考虑合并类别或补数据。import cv2 def draw_yolo_box(img_path, label_path, classes): img cv2.imread(img_path) ih, iw img.shape[:2] with open(label_path) as f: for line in f: parts line.strip().split() if len(parts) ! 5: continue cls_id, cx, cy, w, h int(parts[0]), *map(float, parts[1:]) x1 int((cx - w / 2) * iw) y1 int((cy - h / 2) * ih) x2 int((cx w / 2) * iw) y2 int((cy h / 2) * ih) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img, classes[cls_id], (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) cv2.imwrite(check_vis.jpg, img) # 用法draw_yolo_box(dataset/JPEGImages/001.jpg, dataset/labels/001.txt, classes)这段代码把归一化坐标还原成像素坐标画框cx - w/2就是左上角 x乘回iw得到像素值。跑几张看看如果框整体偏移或大小不对回去查归一化时用的图片尺寸是不是和实际图片一致——常见坑是 XML 里记录的size和真实图片尺寸不符脚本里我直接用 PIL 读真实尺寸避开了这个雷。3. 370 张鹅图怎么切分与训练YOLOv8 最小可跑通流程3.1 数据集切分比例与目录结构370 张的切分不能照搬大数据的 8:1:1那样验证集只有 37 张指标抖动会很大。我一般按 7:2:1 切训练 259 张、验证 74 张、测试 37 张。如果类别不平衡严重改用分层抽样保证每个类别在验证集里都有出现。目录结构按 YOLOv8 的要求来dataset/ images/ train/ val/ test/ labels/ train/ val/ test/ data.yamldata.yaml里写清楚路径和类别名path: ./dataset train: images/train val: images/val test: images/test nc: 1 names: [goose]nc是类别数鹅检测通常就一类如果还要分“成年鹅/幼鹅”就改成对应数量names顺序必须和classes.txt一致。3.2 用预训练权重起步别从零训370 张从零训基本没戏必须用 COCO 预训练的 YOLOv8n 或 YOLOv8s 起步。n 版参数量小小样本下更不容易过拟合s 版精度略高但需要更多数据。我的经验是 370 张先用 n 版跑基线mAP 能到 0.6 以上再考虑换 s 版。训练命令yolo detect train \ datadataset/data.yaml \ modelyolov8n.pt \ epochs150 \ imgsz640 \ batch16 \ lr00.01 \ patience30 \ augmentTrue \ projectruns/goose \ nameexp1参数说明epochs150对小数据够用配合patience30早停防止过拟合imgsz640是 YOLOv8 默认鹅的体型在图中占比中等640 够用如果鹅很小可以提到 960batch16看显存V100 上可以到 32lr00.01是初始学习率小数据建议降到 0.005 更稳augmentTrue开启内置增强包括马赛克、翻转、HSV 抖动这对 370 张的扩充很关键。3.3 训练过程看什么指标什么时候该停训练时重点盯三个东西box_loss是否稳定下降、mAP50是否在涨、验证集 loss 是否开始反弹。前 20 个 epoch loss 下降慢是正常的预训练权重需要时间适配新数据。如果 50 epoch 后 mAP50 还在 0.1 以下大概率是标注有问题或类别映射错了回去查 TXT 文件。如果训练 loss 降但验证 loss 涨说明过拟合加增强或减模型容量。混淆矩阵不唯一这种问题在小数据里也常见通常是验证集样本太少导致把验证集比例提到 0.25 能缓解。注意370 张的验证集只有 70 多张mAP 波动 ±0.05 都算正常别因为一个 epoch 掉了就调参看趋势。4. 小样本鹅检测的避坑与排查5 个血泪教训4.1 现象训练 loss 不降mAP 始终为 0原因最常见的是类别索引错位。VOC 转 YOLO 时classes.txt顺序和data.yaml的names不一致模型学的是错位标签。另一个原因是 TXT 里坐标没归一化还是绝对像素值YOLO 解析时当成 0 到 1 的数框全跑到图外。解决先跑一遍校验脚本确认 TXT 每行第二个值在 0 到 1 之间。再核对classes.txt和data.yaml的names逐行一致。两个都对了还不行用yolo detect train加--verbose看数据加载日志确认标签被正确读取。4.2 现象验证集 mAP 高但测试集一塌糊涂原因370 张切分时如果按文件名顺序切可能训练集和验证集来自同一批拍摄场景测试集却是另一个场景分布不一致。鹅的拍摄角度、光照、背景差异大随机切分容易造成这种“假高分”。解决切分前先按场景分组同一场景的图要么全在训练集要么全在测试集。如果场景标签没有用图片的 EXIF 时间或文件名前缀粗分。测试集 mAP 比验证集低 0.15 以内算正常低太多就是分布问题。4.3 现象模型把鹅和背景里的白色物体混淆原因370 张里如果鹅的白色羽毛和背景白色墙面、水面反光同时出现模型学到的特征不够判别。小数据下模型容易走捷径学颜色而不是形状。解决增强里加大 HSV 抖动的幅度特别是hsv_v和hsv_s让模型对颜色不敏感。另外检查标注把明显不是鹅的误标框删掉。如果背景单一考虑加一些负样本图没有鹅的图YOLO 支持空标注文件能降低误检。4.4 现象训练到一半 loss 突然变 NaN原因小数据配大学习率容易梯度爆炸尤其是 batch 里有异常样本时。另一个原因是标注框宽高为 0归一化后除零。解决把lr0降到 0.001 再试加warmup_epochs3让学习率慢慢升。检查 TXT 里有没有w0或h0的行有就删掉或修正。YOLOv8 默认有梯度裁剪但小数据下还是保守点好。4.5 现象推理时框重叠严重同一只鹅出多个框原因NMS 的iou阈值设太高或者训练时正样本分配太宽松。370 张下模型对鹅的边界学得不够准框会偏大。解决推理时把conf提到 0.4 以上iou降到 0.5。训练时如果用了mosaic增强最后 10 个 epoch 关掉让模型在真实分布上收一收。YOLOv8 的close_mosaic参数设成 10 就行。5. 把 370 张用到极致半自动标注与增量迭代370 张训出第一版模型后别停在这。真正让这个小数据集发挥价值的做法是拿模型去标新图人工修正后加入训练集滚雪球式迭代。具体操作用训好的best.pt对未标注的鹅图跑推理导出 YOLO 格式的预测 TXT然后用标注工具LabelImg 或 AnyLabeling打开图片和预测框人工只做删改不做从零画框。这一步能把单张标注时间从 2 分钟压到 20 秒。yolo detect predict \ modelruns/goose/exp1/weights/best.pt \ sourcenew_images/ \ conf0.3 \ save_txtTrue \ save_confTrue \ projectauto_label \ nameround1save_txtTrue会在auto_label/round1/labels下生成 YOLO 格式 TXTconf0.3放低阈值多召回一些框人工删比人工画快。修正后的 TXT 直接放进训练集重新跑训练时把epochs降到 50学习率降到 0.001做微调而不是重训。增量迭代的节奏我一般这样控第一轮 370 张训基线第二轮加 100 到 200 张修正图第三轮再加 200 张到 800 张左右 mAP 通常能比基线涨 0.1 到 0.15。超过 1000 张后收益递减这时候该考虑的是换更大的模型或加更多类别而不是继续堆图。验证方法很简单每轮留一个固定的测试集不参与训练只看测试集 mAP涨了就继续平了就停。我自己的习惯是每轮迭代都存一份data.yaml和classes.txt的快照标注格式这东西改着改着就忘了当初的顺序留个后悔药比事后排查省事得多。鹅检测这个方向370 张起步完全能跑通关键是别在格式转换和切分上翻车把省下的时间花在迭代上。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

GEO搜索结果过程优化|AI搜索流量入口改写:从点蓝链到被AI推荐的技术解读 2026/10/1 21:29:00

GEO搜索结果过程优化|AI搜索流量入口改写:从点蓝链到被AI推荐的技术解读

给开发者一个工程化读法:AI搜索时代品牌流量入口的改写,本质是两套语料账——SEO优化托住「被找到」(蓝链列表、可索引性),GEO优化托住「被推荐」(AI答案里的引用权重)。本文把入口改写拆成数据…

阅读更多 →
PanWatch 从源码构建 Docker 镜像:make build 与 GitHub Actions 发布流程 2026/10/1 21:28:59

PanWatch 从源码构建 Docker 镜像:make build 与 GitHub Actions 发布流程

PanWatch 从源码构建 Docker 镜像:make build 与 GitHub Actions 发布流程 【免费下载链接】PanWatch PanWatch — AI stock monitoring for A-shares, HK & US markets, powered by TradingAgents. Portfolio insights, real-time alerts & automated repo…

阅读更多 →
流量分析实战:从 pcap 包中挖掘黑客攻击痕迹 2026/10/1 21:28:52

流量分析实战:从 pcap 包中挖掘黑客攻击痕迹

流量分析实战:从 pcap 包中挖掘黑客攻击痕迹 在应急响应、网络取证、CTF 流量分析场景中,pcap 流量包是还原攻击事件最重要的证据。当服务器被入侵、业务异常、告警触发之后,运维和安全人员拿到流量抓包文件,需要从成千上万的数据…

阅读更多 →
微软Copilot最新升级解读:哪些变化真正影响企业数字化建设? 2026/10/1 21:28:46

微软Copilot最新升级解读:哪些变化真正影响企业数字化建设?

9月25日,微软发布了迄今规模最大的一次 Copilot 产品更新。 从 Home、Code 到 Autopilot,从 Office 深度整合到全新的 AI Agent 能力,不少功能都引发了市场关注。 但对于企业用户来说,更值得关注的问题其实是这些新能力会给企业…

阅读更多 →
十一假期去哪玩?2024冷门高性价比旅行地推荐 2026/10/1 21:28:46

十一假期去哪玩?2024冷门高性价比旅行地推荐

引言:告别拥挤,寻找属于你的十一假期每到十一黄金周,热门景点“人从众”的景象总是让人望而却步。与其在景区排队、看人头,不如将目光投向那些尚未被过度开发的冷门目的地。2024年的十一假期,我们为你精心甄选了六个高…

阅读更多 →
Isaac Sim 5.1.0 安装踩坑小结 2026/10/1 21:28:39

Isaac Sim 5.1.0 安装踩坑小结

Isaac Sim 5.1.0 安装踩坑小结 问题: 装 isaacsim[all,extscache]5.1.0 时,下载 extscache 大包中途断流,报 IncompleteRead,已下 381MB 全部作废。 原因: 传输层断连,不是版本依赖问题。 三步解决&#xf…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉