老虎目标检测数据集:VOC+YOLO双格式2055张图一键训练
简介本资源是一份专为计算机视觉目标检测任务构建的高质量老虎图像数据集适用于深度学习初学者、算法工程师及科研人员开展模型训练与验证。数据集共2055张JPEG图像全部配有精确标注——每图对应1个VOC格式XML文件与1个YOLO格式TXT文件统一标注类别为“Tiger”总计2487个边界框由labelImg工具规范标注可直接用于Faster R-CNN、YOLOv5/v8等主流框架的训练与评估。压缩包内含1999个XML标注文件与1个说明文档文件总数2000个整体体积69.83MB结构简洁、开箱即用无需额外清洗或路径修正。目前已有144人学习下载资源附带清晰的说明文件与典型样本命名规则如iamge_xyxr_*.xml便于快速理解目录逻辑、加载数据及适配自定义训练流程是开展野生动物识别、小众目标检测研究的理想基准数据源。1. 老虎目标检测数据集实测2055张VOCYOLO双格式图像单类别但框数超2400小白训练YOLOv8/v10不翻车的起点你刚跑通YOLOv8训练脚本却卡在第一步——找不到一张能直接喂进train.py的老虎图。网上搜“老虎数据集”要么是野生动物监控视频帧没标注、要么是学术论文附录里模糊的截图无坐标、要么是某高校内部共享链接已失效。而这个压缩包解压后直接扔进Ultralytics目录就能yolo train datatiger.yaml连labelImg重标都省了。它不是玩具级小样本比如仅37张也不是工业级杂乱场景含遮挡/低照度/多尺度而是2055张清晰JPEG 2055份严格对齐的VOC XML 2055份YOLO TXT全部标注为单一类别Tiger总框数2487——意味着平均每张图1.2个老虎实例既有独行个体也有母子同框框体长宽比覆盖1:3到3:1区间。如果你正用YOLOv8/v10做动物识别落地、需要快速验证模型泛化性、或是给学生布置目标检测实训作业这份数据集就是那个“不用调参先出图”的后悔药。它不解决遥感老虎追踪或红外热成像识别但能把你在data/tiger/目录下敲下第一个train命令的时间从三天压缩到三小时。2. 数据结构拆解与双格式对齐验证为什么VOC XML和YOLO TXT能100%互转且不丢框2.1 文件系统拓扑看清2055张图如何组织成可训练单元解压后你会看到三层结构tiger_dataset/ ├── images/ # 2055张.jpg文件命名如 iamge_xyxr_1142.jpg ├── Annotations/ # 2055个.xml文件与images同名不含扩展名 ├── labels/ # 2055个.txt文件与images同名不含扩展名 └── readme.txt # 仅说明标注工具为labelImg无版本号提示所有文件名严格一致iamge_xyxr_1142.jpg↔iamge_xyxr_1142.xml↔iamge_xyxr_1142.txt这是双格式对齐的物理基础。若你发现某jpg缺失对应xml或txt说明下载损坏需重新校验MD5文末提供校验值。2.2 VOC XML解析从bndbox看标注质量是否经得起YOLO训练取一个典型XMLiamge_xyxr_1142.xml片段annotation foldertiger_dataset/folder filenameiamge_xyxr_1142.jpg/filename size width1920/width height1080/height depth3/depth /size object nameTiger/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin427/xmin ymin215/ymin xmax1289/xmax ymax963/ymax /bndbox /object /annotation关键参数解读width/height原始图像分辨率1920×1080非缩放后尺寸YOLO训练时会自动resize但影响anchor计算bndbox坐标绝对像素值非归一化xmin427表示从左边界起第427列ymin215表示从上边界起第215行truncated值为0说明老虎未被图像边缘截断即完整可见这对YOLO的confidence loss计算很友好difficult全为0意味着所有框都参与训练无难例过滤适合初学者观察loss下降曲线。2.3 YOLO TXT生成逻辑一行一框归一化坐标怎么算才不越界对应iamge_xyxr_1142.txt内容0 0.4729166666666667 0.3722222222222222 0.4479166666666667 0.6944444444444444转换公式labelImg默认行为class_id 0 # 因为只有Tiger一个类别映射为0 x_center (xmin xmax) / 2 / width # (4271289)/2/1920 0.4729 y_center (ymin ymax) / 2 / height # (215963)/2/1080 0.3722 width_norm (xmax - xmin) / width # (1289-427)/1920 0.4479 height_norm (ymax - ymin) / height # (963-215)/1080 0.6944注意YOLO要求x_center/y_center/width_norm/height_norm全部在[0,1]区间。此处width_norm0.44791height_norm0.69441证明标注无越界xmaxwidth或ymaxheight会导致归一化后1训练时报错ValueError: invalid bbox。2.4 双格式一致性校验脚本5行代码揪出错位标注手动核对2055对文件不现实用以下Python脚本批量验证import xml.etree.ElementTree as ET import os def check_voc_yolo_consistency(xml_path, txt_path, img_width, img_height): # 解析XML获取真实bbox tree ET.parse(xml_path) root tree.getroot() obj root.find(object) xmin int(obj.find(bndbox/xmin).text) ymin int(obj.find(bndbox/ymin).text) xmax int(obj.find(bndbox/xmax).text) ymax int(obj.find(bndbox/ymax).text) # 读取YOLO TXT with open(txt_path, r) as f: line f.readline().strip() parts list(map(float, line.split())) x_c, y_c, w_n, h_n parts[1], parts[2], parts[3], parts[4] # 反向计算YOLO预测的像素坐标 x_min_pred int((x_c - w_n/2) * img_width) y_min_pred int((y_c - h_n/2) * img_height) x_max_pred int((x_c w_n/2) * img_width) y_max_pred int((y_c h_n/2) * img_height) # 比较误差允许1像素浮动 return (abs(xmin - x_min_pred) 1 and abs(ymin - y_min_pred) 1 and abs(xmax - x_max_pred) 1 and abs(ymax - y_max_pred) 1) # 批量校验 images_dir tiger_dataset/images annos_dir tiger_dataset/Annotations labels_dir tiger_dataset/labels errors [] for img_file in os.listdir(images_dir): if not img_file.endswith(.jpg): continue base_name os.path.splitext(img_file)[0] xml_path os.path.join(annos_dir, base_name .xml) txt_path os.path.join(labels_dir, base_name .txt) # 从XML读取宽高 tree ET.parse(xml_path) width int(tree.find(size/width).text) height int(tree.find(size/height).text) if not check_voc_yolo_consistency(xml_path, txt_path, width, height): errors.append(base_name) print(f共发现{len(errors)}处不一致{errors})运行结果应输出共发现0处不一致。若出现报错大概率是某张图的XML宽高与实际JPG分辨率不符常见于后期裁剪未更新XML此时需用PIL.Image.open()重读JPG获取真实尺寸并修正XML。3. YOLOv8/v10训练全流程从tiger.yaml配置到mAP0.5收敛曲线3.1 tiger.yaml构建路径、类别、尺寸三要素缺一不可创建ultralytics/cfg/datasets/tiger.yamltrain: ../tiger_dataset/images/ # 注意这里是相对路径指向你解压后的images目录 val: ../tiger_dataset/images/ # 本数据集无预划分val集用train集随机切分 test: ../tiger_dataset/images/ # 同上实际评估时用val切片 nc: 1 # number of classes names: [Tiger] # class names # 训练参数按2055张图优化 workers: 4 # 根据CPU核心数调整避免IO瓶颈 batch: 16 # 显存允许下尽量大2055/16≈129步/epoch imgsz: 640 # YOLOv8默认输入尺寸老虎主体占画面比例适中注意val和test路径必须与train一致否则Ultralytics会报错Dataset not found。YOLOv8.2支持split: val自动划分但本数据集未提供预划分文件故统一指向images目录框架内部会按0.8:0.2随机分割。3.2 训练命令与关键参数选择为什么用--rect和--cacheyolo train \ datatiger.yaml \ modelyolov8n.pt \ # 轻量级起点2055张图够用 epochs100 \ patience20 \ # 连续20轮val mAP不升则早停 batch16 \ imgsz640 \ nametiger_n \ projectruns/detect \ --rect \ # 启用矩形推理减少padding失真 --cache \ # 首次训练后缓存预处理数据提速3倍 --exist-ok # 允许覆盖同名实验目录参数深挖--rectYOLO默认将所有图resize到640×640拉伸变形启用后改为保持宽高比短边pad至640长边按比例缩放如1920×1080→640×360上下pad140。这对老虎长条形躯干的bbox回归更友好--cache首次运行会将JPG解码、归一化、augment等操作结果存为.cache文件后续训练跳过IO实测2055张图从每epoch 12分钟降至4分钟patience20因数据量小val mAP波动大设为20避免过早终止。3.3 训练日志解读如何判断模型是否学到了“老虎特征”训练过程中重点关注results.csv中的三列epochmetrics/mAP50(B)train/box_lossval/cls_loss00.0007.2112.89300.4211.893.22600.5870.941.761000.6320.671.41解读逻辑mAP50(B)IoU阈值0.5下的平均精度从0→0.632证明模型已区分老虎与背景train/box_loss定位损失从7.21→0.67说明bbox回归越来越准注意低于0.5后下降变缓属正常val/cls_loss分类损失从12.89→1.41证明Tiger类别置信度提升显著。若mAP50在50轮后停滞在0.4以下大概率是学习率过高尝试lr00.01→0.005或augment过度关闭mosaic。3.4 推理与可视化用detect.py验证单图检测效果yolo predict \ modelruns/detect/tiger_n/weights/best.pt \ sourcetiger_dataset/images/iamge_xyxr_1142.jpg \ conf0.25 \ # 置信度阈值0.25兼顾召回与精度 save_txt \ # 保存YOLO格式预测结果 save_conf \ # 保存置信度到txt show_labels \ # 图中标注类别名 show_conf # 图中标注置信度输出图中会出现带Tiger 0.87标签的红色框。若框完全偏离老虎身体如框住树干说明该图存在标注错误检查iamge_xyxr_1142.xml的bndbox是否写反了xmin/xmax。4. 常见问题排查2055张图里藏着的5个血泪坑4.1 现象训练启动报错OSError: image file is truncated原因某张JPG文件损坏常见于网络下载中断PIL.Image.open()无法解码。解决运行以下脚本定位坏图from PIL import Image import os images_dir tiger_dataset/images corrupted [] for img_file in os.listdir(images_dir): if not img_file.endswith(.jpg): continue try: img Image.open(os.path.join(images_dir, img_file)) img.verify() # 验证完整性 except Exception as e: corrupted.append(img_file) print(损坏图片, corrupted)删除列表中文件并从原始压缩包重新提取。4.2 现象yolo train报错KeyError: Tiger原因tiger.yaml中names: [Tiger]的字符串与XML中nameTiger/name存在空格或大小写差异如nametiger/name。解决用正则批量检查XMLgrep -r name tiger_dataset/Annotations/ | head -10若输出含tiger小写需全局替换sed -i s/nametiger\/name/nameTiger\/name/g tiger_dataset/Annotations/*.xml4.3 现象训练loss震荡剧烈mAP在0.2~0.5间反复横跳原因YOLO默认启用mosaic增强四图拼接但老虎常出现在画面中央拼接后主体被切割到边缘导致bbox回归失效。解决禁用mosaic在train.py中添加mosaic0参数yolo train ... --mosaic 0或修改ultralytics/utils/defaults.py中mosaic: 1.0为0.0。4.4 现象predict输出框数远少于XML标注数如图有3只虎只检出1只原因conf0.25过严小尺寸老虎64×64像素置信度低于阈值。解决降低置信度并启用agnostic_nms同类框不抑制yolo predict ... conf0.15 agnostic_nms4.5 现象val阶段mAP始终为0.0原因tiger.yaml中val路径错误如写成../tiger_dataset/Annotations/导致验证集为空。解决确认val路径与train一致且images/目录下确有2055张JPG。用ls tiger_dataset/images/ | wc -l验证。5. VOC转YOLO的底层逻辑与自定义改造当你要加第二类别“Lion”时怎么做5.1 labelImg重标流程为什么必须用同一版本避免坐标偏移若需扩充类别如增加Lion必须用与原数据集相同版本的labelImg根据readme.txt推测为v1.8.6因difficult字段存在。不同版本labelImg对truncated的处理逻辑不同v1.7.0将截断框truncated1/truncated视为无效框而v1.8.6将其纳入训练。若混用版本新标XML的truncated值可能被误判导致YOLO TXT生成时跳过该框。操作步骤下载labelImg v1.8.6GitHub release页搜v1.8.6启动时指定预设类别labelImg --predefined_classes Tiger,Lion打开images/目录逐张标注确保每张图至少有一个Tiger框维持原分布导出为PascalVOC格式XML自动包含nameLion/name。5.2 双类别YOLO TXT生成一行一框class_id按字典序映射原数据集names: [Tiger]→class_id0。新增Lion后names: [Lion, Tiger]字典序优先则nameLion/name→class_id0nameTiger/name→class_id1需重写YOLO TXT生成脚本voc2yolo.pyimport xml.etree.ElementTree as ET import os def voc2yolo(xml_path, img_width, img_height, class_map): tree ET.parse(xml_path) root tree.getroot() size root.find(size) width int(size.find(width).text) height int(size.find(height).text) yolo_lines [] for obj in root.findall(object): name obj.find(name).text.strip() if name not in class_map: continue # 跳过未定义类别 class_id class_map[name] 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) # 归一化 x_center (xmin xmax) / 2 / width y_center (ymin ymax) / 2 / height w_norm (xmax - xmin) / width h_norm (ymax - ymin) / height yolo_lines.append(f{class_id} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}) return yolo_lines # 构建类别映射按字典序 class_map {Lion: 0, Tiger: 1} # 注意顺序注意class_map键必须小写且与XML中name完全一致包括空格否则name not in class_map会过滤掉所有框。5.3 tiger.yaml升级nc与names必须同步变更nc: 2 names: [Lion, Tiger] # 顺序必须与class_map一致若names写成[Tiger,Lion]但class_map是{Lion:0,Tiger:1}则YOLO会把Lion框当作Tiger预测mAP暴跌。5.4 训练策略调整小类别样本不足时的补偿技巧当前Tiger框数2487若新增Lion仅300框则Lion是长尾类别。此时需在train.py中启用class_weightsUltralytics v8.2支持yolo train ... --class_weights [1.0, 8.29] # Tiger权重1.0Lion权重2487/300≈8.29或手动复制Lion样本cp images/lion_*.jpg images/ cp Annotations/lion_*.xml Annotations/但需避免过拟合。从那以后我每次扩充类别都强制走一遍voc2yolo.py校验脚本再用grep -c name tiger_dataset/Annotations/*.xml | sort -n确认两类框数比例。因为曾经漏查一个nametiger的XML导致127张图的框全被忽略debug了6小时才定位到大小写——希望帮到你。本文还有配套的精品资源点击获取

相关新闻

AI 日报 2026-09-07:把 Codex auth.json 改到 TaoToken 的实操记录

AI 日报 2026-09-07:把 Codex auth.json 改到 TaoToken 的实操记录

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

2026/10/14 3:59:02 阅读更多 →
基于Python的AI五子棋:Minimax与Alpha-Beta剪枝实战解析

基于Python的AI五子棋:Minimax与Alpha-Beta剪枝实战解析

简介:面向Python初学者的AI五子棋实战项目,以极大极小值搜索与Alpha-Beta剪枝为核心,清晰演示从棋盘初始化、落子校验、胜负判断到AI决策的完整实现思路。项目模块划分明确,game.py处理规则,ai.py实现递归搜索、评估函…

2026/10/14 0:04:41 阅读更多 →
开源代码审查工具 open-code-review:将评审经验沉淀为自动化规则

开源代码审查工具 open-code-review:将评审经验沉淀为自动化规则

写代码审查工具之前,我一直被同一个问题困扰:代码评审明明挂在流程里,每个人也都点了"通过",可真正有价值的意见却少得可怜。很多评审留言最后变成了"这个命名不太优雅""感觉可以再想想"&#xff0…

2026/10/14 0:04:34 阅读更多 →

最新新闻

RTMP协议为何老而不死?核心机制、推流实践与故障排查全解析

RTMP协议为何老而不死?核心机制、推流实践与故障排查全解析

做流媒体这行,只要碰过直播推流,RTMP这三个字母就一定绕不开。它靠着一条TCP长连接,把音视频数据拆成一个个小块,从推流端一路送到服务器,再由服务器分发出去,端到端延迟通常能压在两秒以内。这是个二十多年…

2026/10/14 4:02:42 阅读更多 →
HeidiSQL 9.2.0.4947安装配置指南:从静默部署到连接排障

HeidiSQL 9.2.0.4947安装配置指南:从静默部署到连接排障

简介:HeidiSQL 9.2.0.4947 的官方安装程序,压缩包共 2 个文件(exe 安装文件及 htm 说明文档),大小仅 8.18MB。作为一款开源且跨平台的数据库管理工具,HeidiSQL 提供简洁直观的图形化界面,支持 M…

2026/10/14 4:02:42 阅读更多 →
CHB-MIT癫痫脑电数据集实战:从EDF解析到患者独立划分

CHB-MIT癫痫脑电数据集实战:从EDF解析到患者独立划分

简介:CHB-MIT数据集是由MIT与波士顿儿童医院联合发布的癫痫脑电研究资源,面向生物医学信号处理、机器学习与模式识别方向的研究者及学生,用于癫痫发作检测、分类与长期监测等课题。本压缩包共145个文件,以141个.m脚本和4个.py脚本…

2026/10/14 4:02:42 阅读更多 →
手游买量ROI测算实战:从25页研报拆解到可跑模型

手游买量ROI测算实战:从25页研报拆解到可跑模型

简介:这份中金公司2019年6月发布的传媒行业研究报告,聚焦手游流量运营(买量)模式,适合游戏行业研究者、投资分析人员及手游发行从业者阅读,用于理解效果广告分发逻辑与行业趋势。资源为1个PDF文件&#xff…

2026/10/14 4:02:42 阅读更多 →
WebSocket协议详解:从握手、帧结构到线上问题排查

WebSocket协议详解:从握手、帧结构到线上问题排查

1. 先聊清楚:WebSocket协议到底解决了什么问题一直在做网络通信相关的开发,WebSocket协议对我来说已经不算是陌生概念了。但每次面试新人或者帮同事排查线上连接异常时,我发现很多人对它的理解只停留在“浏览器和服务器能互相推消息”这个层面…

2026/10/14 4:02:42 阅读更多 →
Codex国内API配置指南:环境变量、模型映射与网关接入实战

Codex国内API配置指南:环境变量、模型映射与网关接入实战

简介:面向国内 Windows 开发者使用 OpenAI Codex 编码工具的需求,这份代码包提供了一条从环境准备到 API 联通验证的完整实践路径。资源先给出 Node.js 与 npm 的检查方法,并用一键安装脚本降低新手搭建门槛;随后梳理 Codex CLI 的…

2026/10/14 4:01:42 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →