YOLOv7 mAP@0.5 与 mAP@0.5:0.95 区别:为什么前者和后者能差出 20 个点?
2026/9/12 20:50:27 网站建设 项目流程

YOLOv7 mAP@0.5 与 mAP@0.5:0.95 区别:为什么前者和后者能差出 20 个点?

【免费下载链接】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

上次同事问我:明明 mAP@0.5 涨了 2 个点,为什么上线后框的位置反而越飘越远?答案多半藏在指标选择里——这就是两个评估口径的差别,即 YOLOv7 mAP@0.5 与 mAP@0.5:0.95 区别。下面用十分钟把这两个数讲透。

先建立直觉:30 秒看懂 IoU 及格线在判什么

先给白话翻译。IoU(交并比)就是预测框和正确答案框的重叠比例,阈值是"及格线":重叠比达到线才算"检到了"。

打个比方:面试打分表只有一题"过没过"。mAP@0.5 就是这一条线——0.5,框和真值重叠到一半就算命中,它主要回答"找没找到"。

mAP@0.5:0.95 则是十道题:0.5、0.55、…、0.95 共十条及格线,框要逐线通过,每一线各算一个 AP 再取平均。AP 就是 PR 曲线下能装下多少面积,mAP 就是各类别 AP 的均值。所以它既问"找没找到",也问"框画得紧不紧"。

代码就在 test.py,你可以看这两行:

iouv = torch.linspace(0.5, 0.95, 10).to(device) # 10 档 IoU 及格线 ap50, ap = ap[:, 0], ap.mean(1) # AP@0.5, AP@0.5:0.95

看下面这张马群检测结果:有的框紧贴真值,有的框只是勉强压住马边。0.5 这条线两者都能混过去,0.95 那条线只有紧的框活下来。

整条判定链路,其实就是一条流水线:

跟着我跑一遍:评估命令怎么敲、结果目录看哪几列

在项目根目录直接敲(还没 clone 代码的话:git clone https://gitcode.com/GitHub_Trending/yo/yolov7):

python test.py --weights yolov7.pt --data data/coco.yaml --img 640 --iou 0.65

评估完,结果落在runs/test/exp/confusion_matrix.pngPR_curve.png,还有几张test_batch*_pred.jpg对比图。最值得盯的是终端那行汇总:

print(pf % ('all', seen, nt.sum(), mp, mr, map50, map))

其中map50对应 mAP@0.5,map对应 mAP@0.5:0.95;mpmr是各类平均的精确率与召回率。注意--iou 0.65是 NMS 去重阈值,不是评估用的 IoU 线。加上--verbose还会逐类输出,方便你揪出薄弱类别。

做模型对比或看论文时,常被贴出来的 AP 对比图,用的正是后者的口径:

一张表 + 一句口诀:什么时候该看哪个 mAP

mAP@0.5mAP@0.5:0.95
及格线一条(0.5)十条(0.5→0.95,步长 0.05)
主要考什么找没找到(召回)框画得紧不紧(定位)
对定位漂移的敏感度
适合什么场景快速迭代、初筛论文对比、最终选型

口诀记一句:初筛看 0.5,选型看 0.95;两数差值拉大,先查定位再庆功。

别急着下结论:mAP@0.5 涨了不等于模型变好了。差值(map50 - map)保持平稳甚至缩小,才说明框真的画得越来越紧。

踩坑实录:mAP 差值过大先查什么 ⚠️

坑一:只盯 mAP@0.5,定位漂移被平均掉

  • 现象:训练日志一路向好,上线后框却明显偏大,点击落点偏移。
  • 原因:0.5 这条线太宽松,框偏掉近一半也照样算命中,"找到了"的分数把"画得紧"掩盖了。
  • 解法:实验日志里同时记map50 - map;健康模型通常差 10-20 个点,差值越拉越大,就先查定位损失和 cfg/training/yolov7.yaml 里的锚框配置。

坑二:v5_metric 与 v7_metric 口径没对齐

  • 现象:自己跑出来的数和 YOLOv5 官方结果对不上,怀疑代码有 bug。
  • 原因:utils/metrics.py 里的compute_ap有两套口径——默认在召回曲线尾部补recall[-1] + 0.01(YOLOv7 默认口径);加--v5-metric则补 1.0,把最大召回当满分。
  • 解法:对比数字前别换开关;要和 YOLOv5 官方对比,就显式加上--v5-metric

坑三:--iou是 NMS 去重,不是评估阈值

  • 现象:把--iou 0.65改成 0.6,mAP 抖了一下,怀疑模型退化了。
  • 原因:它决定推理时 NMS 去重后剩几个框,和评估那十条 IoU 线是两码事。
  • 解法:对比两个模型时保持该参数一致;要调就一起调,并记下这组数是在什么配置下跑出来的。

速查清单:训练完直接照做

  • mAP@0.5 涨了、差值(map50 - map)也变大 = 定位在变差,先别上线;
  • 快速迭代看 mAP@0.5,最终选型与论文对比看后者;
  • 和别人对比结果,先问"哪个 AP 口径"(--v5-metric开没开);
  • 改 NMS 或置信度阈值前,先把旧数字记下来,否则分不清是模型变了还是评估参数变了。

下一步很简单:下次训练完先跑一遍test.py,把map50map的差值记进实验日志——超过 20 个点,就先查定位。🎯

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询