YOLOv7 mAP@0.5 与 mAP@0.5:0.95 一次跑完评测后到底信哪个的完整指南
【免费下载链接】yolov7Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors项目地址: https://gitcode.com/GitHub_Trending/yo/yolov7
刚用 test.py 评完 YOLOv7 模型,最后那行all输出里摆着两列数字:map50(即 mAP@0.5)和map(即 mAP@0.5:0.95),通常前者 0.7xx、后者 0.5xx。该信哪个?这是刚上手目标检测评测时最常见的困惑,咱们一次讲透。
30 秒速记:及格线 vs 全科目均分
一句话记住区别:mAP@0.5 只问"找没找到",mAP@0.5:0.95 问"框画得多准"。
打个比方:mAP@0.5 像单科及格线——预测框和真实框重叠够 50%(IoU(框重叠程度))就算对。mAP@0.5:0.95 像全科目均分:把标准逐步抬高到 0.55、0.60 … 0.95,每一档打一次分,再取平均。
mAP 分数从哪来:先看 10 个 IoU 阈值
评测时先把所有预测框按置信度从高到低排队,逐个对照真实框判断"算不算找到"。关键在于:YOLOv7 没设单一标准,而是一口气列了 10 个。在 test.py 里搜iouv就能看到:
iouv = torch.linspace(0.5, 0.95, 10).to(device) # iou vector for mAP@0.5:0.95也就是从 0.5 到 0.95、步长 0.05 的 10 个 IoU 阈值。每个阈值都把预测框完整过一遍、统计真阳性和误检,得到 10 套结果;每个类别从这 10 套结果里算出 10 个 AP(精确率-召回率曲线下的面积,衡量"找得稳不稳")。
然后对所有类别取平均:只取第一列(0.5 那档)就是 mAP@0.5,十列全取平均就是 mAP@0.5:0.95。两个数字来自同一次评测,差别只在"怎么聚合这十列"。
map50 那列到底在算什么
test.py 打印的表头把列名写得很直白:mAP@.5和mAP@.5:.95。map50只取"重叠 50% 就算对"那档的 AP,标准最松,所以数值天然偏高。
map则是 0.5 到 0.95 十列的平均。阈值越高,对定位精度的要求越苛刻,所以这列必然低于 map50,两列差 10~20 个点属于正常现象。
想抠细节的话,打开 utils/metrics.py 搜ap_per_class,里面for j in range(tp.shape[1])那个循环就是在逐个 IoU 阈值算 AP,compute_ap则是单条曲线上算 AP 的函数。
🎯 三种场景各该看哪个指标
短答取决于你要干嘛:
| 你的目的 | 看哪个 | 为什么 |
|---|---|---|
| 快速验证、盯训练 | map50 | 灵敏度高,动没动一眼看出 |
| 写论文、对比模型 | map | COCO 及主流论文都用 mAP@0.5:0.95 做标准 |
| 上生产选模型 | 两个都看 + 时延 | map 看质量,map50 看"找不找得到",再叠加耗时 |
跟别人对比时先对刻度:YOLOv7 论文里报的那个 "AP",就是 COCO 上的 mAP@0.5:0.95。
上图取自 paper/yolov7.pdf 的 COCO 性能对比,纵轴 AP 正是这个 mAP@0.5:0.95。
生产选模型时别只盯这两列:train.py 训练时算 fitness 用的是同一套口径,给 map 配 0.9 的权重、map50 只有 0.1,方向感是现成的。
test.py 输出的最后一行怎么读
整场评测的结论就是这一行:
print(pf % ('all', seen, nt.sum(), mp, mr, map50, map))各列含义:seen是评测图片数,nt.sum()是真实框总数,mp/mr是平均精确率和召回率,map50即 mAP@0.5,map即 mAP@0.5:0.95。这两个变量由上方ap50.mean()和ap.mean()得到——前者取 AP 的第一列,后者取全部十列平均。
⚡ 想涨分该往哪使劲
想让 mAP@0.5 上去:先解决"找不找得到"。确认锚框和你数据集的尺度分布对得上——cfg/training/yolov7.yaml 里能看到每个检测头的锚框写法,同时检查置信度阈值是否设得过高。
想让 mAP@0.5:0.95 上去:得靠"框得准"。发力点在框回归损失(CIoU/GIoU 系)、多尺度训练和 TTA(测试时增强,同一张图翻来覆去多看几眼);test.py 的--augment参数打开就能见到收益。
最后一条建议:对比两个模型时,先确认两边用了同一份数据、同样的图像尺寸和 NMS 参数,再谈数字。不然看哪列都是白看。
【免费下载链接】yolov7Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors项目地址: https://gitcode.com/GitHub_Trending/yo/yolov7
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考