news 2026/10/1 3:07:27

YOLOv5测试数据集:用COCO预训练权重验收人猫狗检测效果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv5测试数据集:用COCO预训练权重验收人猫狗检测效果

简介:YOLOv5测试数据集,专门用于检测图像中的人、猫和狗,面向目标检测初学者、算法调参人员以及需要快速验证模型效果的开发者。资源共501个文件,压缩包大小约53.53MB,包含200张JPG测试图片、201个TXT标注文件以及100个XML标注文件;其中TXT标注文件对应YOLO格式的边界框与类别信息,XML标注文件可用于VOC格式的训练或评估,数据完整保留原始信息,便于对照不同框架下的检测结果。借助这套数据,读者可以测试自己训练的模型,观察其对行人、猫和狗三类目标的识别表现,也可配合训练集开展图像分类与定位实验,熟悉标注格式转换、置信度阈值调整和mAP评估等常见流程。目前已有770人学习下载,适合个人实验、课程作业或模型性能验证等场景,省去自行搜集整理图片的时间,快速检验模型效果。

1. 用YOLOv5测试数据集先做模型验收:比训练指标更可信的一步

模型训练完,损失曲线好看、mAP刷得漂亮,但拿一张没见过的图丢进去,检测框偏偏把人身后那只猫漏了。这种“训练还行、一测原形毕露”的情况,几乎每个做过目标检测的人都遇到过。YOLOv5测试数据集就是拿来干这件事的:它专门用于检测图像中的人、猫和狗三类目标,图片已经保留了原始信息,直接丢给模型或检测脚本就能出结果,不用二次标注、不用清洗。适合三类人:刚把YOLOv5跑通、想验证模型真实水平的新手;训练完自己的数据集、需要一个独立测试集交叉验证的从业者;以及做对比实验时缺一份固定评测数据的开发者。下面我按实际使用顺序,把这个测试集从冒烟测试到回归基线讲透。

2. 拿到测试集先做冒烟测试:detect.py推理与参数解读

2.1 从零跑通第一轮检测:命令与目录准备

不管你是下载了YOLOv5源码,还是用了带weights的完整项目,第一件事都是把测试图片放到一个固定目录,然后调用detect.py推理。常见做法是建一个test_images文件夹,把jpg文件都丢进去,然后执行:

python detect.py --source ./test_images --weights yolov5s.pt --conf-thres 0.5 --iou-thres 0.45 --project ./runs/detect --name test1 --save-txt --save-conf

这条命令的逻辑拆开看:--source指定输入来源,可以是单张图片、图片目录、视频或摄像头,目录是最稳的;--weights选用官方COCO预训练的yolov5s.pt,因为人、猫、狗都属于COCO的80类里面,直接就能识别;--conf-thres和--iou-thres控制检测框的置信度门槛和NMS的IoU门槛,第一次跑先用默认值,后面要调再动;--project和--name决定了输出结果保存位置,放进runs/detect/test1,方便跟后续实验对比;--save-txt把检测信息单独存成文本,--save-conf把每个框的置信度一起写进去。

第一次跑完,打开runs/detect/test1目录,里面会有一张张标注好框的jpg,以及同名的txt文件。txt每行是一组数据,格式是“类别id x_center y_center width height 置信度”,比如“0 0.45 0.62 0.18 0.30 0.87”,代表以图片宽高为基准归一化后的中心点、框宽高和置信度。这一步能过,说明环境没问题、权重没损坏、测试图片能被正常读取。

2.2 参数改了到底影响什么:conf_thres、iou_thres和imgsz的取舍

很多新手卡在同一个地方:同样的图,为什么别人跑出来框很多,自己跑出来干干净净几个框?大概率是conf_thres设太高。比如你设0.8,模型对那只被遮挡了一半的猫置信度只有0.6,它就直接不画框。我一般建议第一轮用0.25,把所有可能的目标都放出来看一遍,心里有个底,再逐步往上提到0.5或0.7。

imgsz这个参数很多人忽略,但它对结果影响不小。YOLOv5默认推理尺寸是640,但原图如果本身就是1280的大图,直接把小目标缩没了,猫和狗这类边缘清晰的目标还好,人在远处可能只剩二三十个像素,检测框会飘。所以如果测试图普遍偏大,建议:

python detect.py --source ./test_images --weights yolov5s.pt --imgsz 1280 --conf-thres 0.4 --iou-thres 0.5

注意,--imgsz增大到1280意味着推理时间明显变长,CPU上可能从几十毫秒变成几百毫秒。但作为测试集验收,准确率优先,时间慢一点没关系。iou_thres控制两个重叠框合并的阈值:0.5表示重叠50%以上的框会被合并成一个,值越小越容易合并,越不容易出现一个目标被框两次的情况,但也可能把挨得很近的人猫合并成一个框。一般不动它,只有遇到重复框才下调到0.3。

2.3 输出文件的保存位置与可视化确认

detect.py跑完,很多人直接在终端里看个大概就走了,这不行。我一般会做两步确认:第一步,打开输出图片,肉眼检查每个框和类别的对应关系,重点看有没有“人框里套着猫框”“把狗标成人”这类错乱;第二步,打开txt文件,核对坐标值是否都在0~1之间,如果某个框的width超过1,说明标注导出有问题,但测试集是原图直出,一般不会出现,一旦出现就要怀疑图片本身有没有EXIF旋转信息导致宽高读错。

如果检测结果明显不对,比如整张图一个框都没有,先看置信度阈值,再检查图片路径是否读到了空目录。常见做法是把输出目录同时打开两张图对比,一张是原图,一张是标注后的,迅速定位问题出在模型推断还是参数筛选。

3. 用测试集替代验证集:评估人与宠物的检测效果

3.1 数据集目录组织:images与labels的对应关系

光看不练不行。如果你想拿这套测试集做量化评估,而不是只看几张图的感性结果,就得把它组织成YOLOv5 val.py能直接读取的结构。YOLOv5的验证流程依赖严格的目录对应关系:images目录放图片,labels目录放同名txt标注文件,且两个目录在各自层级下必须完全平行。常见组织方式如下:

dataset/ ├── images/ │ ├── test5.jpg │ ├── test12.jpg │ ├── test93.jpg │ └── ... └── labels/ ├── test5.txt ├── test12.txt ├── test93.txt └── ...

注意,labels里的txt文件名必须跟images里的jpg完全同名,后缀可以不同,但前缀必须一字不差。图片是test5.jpg,标注就必须是test5.txt,多一个空格都不行。这是YOLO系列的老规矩,val.py和train.py都会按这个规则去找标注。

有人可能会问:我的测试集只有图片,哪来的labels?这个要看你的资源版本。如果下载的包里有labels目录,直接用;如果只有图片,那就需要先用自己的模型或标注工具生成预测结果来当“伪标注”做评估对比,或者干脆先跑一轮detect.py拿到txt输出,再组织成labels目录结构。

3.2 写一个data.yaml并跑通val.py

组织好目录后,还需要一个data.yaml把路径和类别告诉YOLOv5。注意,YOLOv5要求类别必须从0开始连续编号,不能跳号:

# data.yaml train: ./dataset/images val: ./dataset/images nc: 3 names: ['person', 'cat', 'dog']

train和val这里可以填同一个路径,因为这套数据集本来就是给你做测试的,不参与训练。nc是类别数量,固定为3;names的顺序必须跟标注文件里的类别id对应:标注里id=0就是person,id=1就是cat,id=2就是dog。跑验证命令:

python val.py --data data.yaml --weights yolov5s.pt --img 640 --conf-thres 0.001 --iou-thres 0.6

这里conf-thres设成0.001是有意为之的:val.py的mAP计算会在所有置信度档位上做积分,如果一开始就把置信度砍到0.5,低置信度的正确检测会被误判为漏检,mAP偏低。iou-thres设0.6是评估时框匹配的严格度,0.5更宽松,0.7更严格,0.6是个中间值,很多库默认用它。

3.3 看懂metrics输出:mAP、precision、recall的判定标准

val.py跑完,终端会打印一张metrics表格,里面最值得关注的是三类指标:

指标含义参考区间
Precision所有预测框中真正正确的比例0.7~0.95 算正常
Recall所有真实目标中被找出来的比例0.6~0.9 视难度而定
mAP@0.5IoU阈值0.5下的平均精度0.7以上可用
mAP@0.5:0.95多IoU阈值下的平均精度COCO标准,0.5以上已不错

还有一个容易忽略的细节:表格里会按类别分别列出AP,也就是person、cat、dog各自的数值。如果person的AP是0.82,cat是0.6,dog是0.9,说明模型对猫的检测明显偏弱。这时候你回头翻测试图片,会发现猫多为小目标且颜色与背景接近,这是数据层面的问题,不是模型参数问题。拿这套测试集的价值就在这里:它不是告诉你“模型好不好”,而是告诉你“模型在哪个类别上翻车了”。

4. 把它并进自己的训练管线:从pretrained权重到迁移学习

4.1 为什么拿COCO权重直接测就有结果

前面提到yolov5s.pt是COCO预训练权重,而COCO数据集本身就包含person、cat、dog这三个类,所以拿这个测试集直接推理几乎必出结果。这个特性也意味着:你不需要重新训练就能验收这套测试集。这一点很多人没想明白,以为拿到测试集就必须先写上半天训练代码——其实完全不需要。

如果你的需求是先确认“这套测试集本身有没有问题”,最稳的做法是先把YOLOv5官方权重和这张图跑一遍。检测结果如果干净利落,框位置合理、类别正确,就说明图片没有损坏、没有异常旋转、没有极端物体比例。用COCO权重当“基准模型”,等于给测试集本身做了一次质检。反过来,如果COCO权重在这个测试集上漏检严重,那问题大概率在测试图片的复杂度上,后续用什么模型都难出效果。

4.2 训练自己的数据集时如何复用这套测试集

自己训练的时候,常见的做法是把test5.jpg、test12.jpg这组图片单独留作验证集,永远不参与训练。原因很简单:验证集的唯一使命是测泛化能力,一旦参与训练,评估指标就没有参考价值。很多人训练自己的数据集时喜欢把全部图片扔进去,train和val用同一份,最后mAP漂亮得惊人,但一上真实场景就废。这就是典型的过拟合骗局。

复用的方式有两种:第一种,把你的训练集和这套测试集放在同一个项目下,data.yaml里train指向你的数据,val指向测试集,每次训练完自动评估一遍;第二种,训练完成后单独跑val.py,只验证测试集上的mAP。两种方式建议都做,一个看收敛趋势,一个看最终效果。

还有一种更细的用法:如果你的自建数据里也包含人、猫、狗,这套测试集可以作为类别均衡性的校准样本。比如你的训练集里狗只有200张,猫有2000张,训练完模型的dog AP大概率偏低。这时候拿测试集复测,能帮你快速判断是否需要给狗类数据做增强。

4.3 超参数与图片尺寸在前测阶段的常见调法

迁移学习阶段,超参数调整要克制。很多人一上来就动learning rate、momentum,我建议前测阶段只改三个东西:imgsz、epochs和batch size。imgsz决定了输入分辨率,直接关系到小目标能不能被保住;epochs决定模型能不能收敛,一般从100起调;batch size如果显存够就尽量往大设,因为目标检测的BN层对batch size敏感,太小会导致统计量震荡。

python train.py --data data.yaml --weights yolov5s.pt --img 640 --epochs 100 --batch-size 16 --project ./runs/train --name self_train

这几个参数不需要来回试,因为测试集的作用是验收不是调参。真正需要精细调的是conf_thres这类推理参数,训练参数按默认就好。调参这事玄学成分大,但如果你的测试集是固定的,每次调完都拿它测一遍,至少能保证前后对比是在同一个裁判面前进行的。

5. 避坑记录:测试集使用中的五个经典翻车现场

5.1 现象:detect.py能跑,但输出图片上一片空白,一个框都没有

原因通常是conf_thres设得太高,或者模型权重与自己数据集类别不匹配。比如你拿一个只训练了行人的权重来测猫和狗,模型压根没有这两个类别的输出头,自然什么都画不出来。

解决:先把conf_thres降到0.25重新跑,确认有没有框;如果还没有,检查weights路径是否是COCO预训练权重,或者用样本图片跑一次官方yolov5s.pt做对照实验。这一步能快速定位是阈值问题还是权重类别覆盖问题。

5.2 现象:val.py报错“no labels found”

原因是最常见的目录或文件不匹配:images里有test5.jpg,但labels目录下没有test5.txt,或者文件名大小写不一致,再或者yaml里val路径指错了。

解决:进入labels目录执行ls | grep test5,确认标注文件存在且前缀完全一致。另外注意,YOLOv5对中文路径支持不好,路径里带中文名也会导致找不到文件。把整个项目移到纯英文路径下,重新执行val.py。

5.3 现象:图片命名带空格或中文,终端显示读取成功但实际没读进来

原因是detect.py内部用的是glob匹配加路径拼接,空格会被当成路径分隔符,中文字符在部分编码环境下会乱码。

解决:所有测试图片统一重命名为纯英文短名,比如img01.jpg、img02.jpg,再执行推理。这个坑看起来基础,但几乎每个下载到带空格文件名数据集的人都踩过,重命名动作必须放在第一步,不要等跑挂了再改。

5.4 现象:把测试集的图片混进训练集,训练指标虚高,测试集验收形同虚设

原因是很多人没理解“测试集”和“训练集”的分工。测试集一旦参与训练,模型相当于见过考试答案,之后的mAP完全是自欺欺人。

解决:严格隔离,测试集目录只出现在val字段里,永远不出现在train字段中。同时建议给测试集目录设置一个只读权限,常见做法是在Linux下执行chmod -R a-w dataset/test,从物理上防止误拷贝。

5.5 现象:改了一轮参数后,对比不出前后两次实验的差异

原因是你没有固定评估口径。比如第一次跑detect.py用了conf_thres=0.5,第二次调成0.3,框多了很多,你以为是模型变好了,其实只是阈值放宽了。

解决:评估统一用val.py的mAP指标,不拿detect.py的单张截图说话。跑之前记录完整参数组合:权重路径、img尺寸、conf阈值、iou阈值,每次实验一个变量只改一处。我给每个实验统一编号,参数写进实验记录表里,对比时先看参数再看结果,能避免九成误判。

6. 把测试集变成回归基线:一次手动记录改变的工作习惯

这套测试集最好用的地方,是把它固定下来当回归基线。比如你现在有两个候选权重,一个是官方yolov5s.pt,一个是你自己微调过的,怎么快速判断要不要换?跑同一套测试集,记录各自的人、猫、狗AP,做一张对比表,五分钟出结论。关键是,这个基线要保持固定,不能今天换一张图、明天删一张图,否则所有对比都不成立。

我现在的做法是:建一个test_bench目录,把测试集原图和对应的验证yaml全部放进去,然后写一个极简脚本,把每次实验的指标自动追加到同一张CSV里,命令如下:

python val.py --data data.yaml --weights ./weights/yolov5s.pt --img 640 --conf-thres 0.001 --iou-thres 0.6 --project ./runs/bench --name yolo5s_v1 | tee -a ./bench_results.log

tee -a把输出同时打印到屏幕和日志文件,日志文件里沉淀的就是一次次实验的原始数据。等积累了七八条记录,再用Excel或pandas拉一张透视表,看每个权重的mAP趋势、类别间差异,比翻训练曲线直观得多。从那以后,我每次新训完一个模型,都强制走一遍这个流程:固定测试集、固定参数、固定脚本,跑完记日志,再对比。这套操作说不上高深,但确实帮我避开了很多“感觉模型变好了”的错觉。测试集的使命就是当一面诚实的镜子,希望你也能用好这份资源,让每次实验结论都站得住脚。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 3:07:01

PyTorch实现DnCNN图像去噪:从原理到工业级部署

简介:本资源是一份面向深度学习初学者与课程设计学生的图像去噪实践项目,基于Python与MATLAB双平台实现五种主流算法(均值滤波、中值滤波、NLM、BM3D与DnCNN),聚焦高斯白噪声(强度10–70)在Set1…

作者头像 李华
网站建设 2026/10/1 3:06:53

中文法律大模型本地化微调实战指南

简介:本资源是一套面向AI开发者与法律科技从业者的中文法律领域大语言模型应用实践方案,聚焦大模型在司法文书理解、法律问答、案情推理等场景的落地实现。压缩包共42个文件,含12个Python核心脚本(如微调train_clm.py、推理infer.…

作者头像 李华
网站建设 2026/10/1 3:05:44

codex-auth 10大核心命令完整清单:list、login、switch、remove全解

codex-auth 10大核心命令完整清单:list、login、switch、remove全解 【免费下载链接】codex-auth A CLI tool to switch and manage Codex accounts 项目地址: https://gitcode.com/gh_mirrors/co/codex-auth codex-auth 是一款开源命令行(CLI&am…

作者头像 李华
网站建设 2026/10/1 3:04:56

Java 小程序退款 V3 实战:签名、证书与回调验签一次跑通

简介:这份资源面向使用Java开发微信小程序支付的开发者,聚焦微信支付V3版本的退款功能实现,帮助解决退款接口调用、签名验证与回调处理等实际问题。压缩包共4个文件,以3个txt示例代码和1个properties配置文件为主,分别…

作者头像 李华
网站建设 2026/10/1 3:04:54

NBA比赛数据抓取与机器学习预测:Python课程设计实战指南

简介:这份资源面向计算机相关专业学生与Python初学者,提供一套可直接参考的NBA比赛结果预测课程设计完整方案,解决从数据采集到模型预测的全流程实现问题。包内共11个文件,以6个CSV数据文件、4个Python脚本和1份docx说明文档为主&…

作者头像 李华
网站建设 2026/10/1 3:04:40

蝴蝶分类数据集20类实战:从压缩包到可训练模型的完整落地路径

简介:蝴蝶分类数据集20类.zip 面向机器学习与图像识别方向的开发者、深度学习入门者及生物多样性研究者,用于训练和测试蝴蝶物种自动识别模型。压缩包共1870个文件,以1866张jpg图像为主体,另含2个txt标签文件、1个json字典文件和1…

作者头像 李华