目标检测中的Map指标讲解
目标检测与图像分类不同,目标检测不仅要对检测出来的目标框正确分类,同时,还需要考虑目标框与target是否贴合。
首先我们需要知道几个常见指标:
TP (True Positive):iou>0.5的检测框数量。在上图中,绿色的框表示GT,其中cat 0.9的红色框就是TP。
FP (False Positive):iou<=0.5的检测框。cat 0.3的红色框与GT的IOU小于0.5所以是FP。
FN (False Negative):没有检测到的GT(ground truth)数量。上图中右下角的绿色框出现漏检了所以FN+1。
查准率:Precision:TP/(TP+FP) 模型预测的所有目标中,预测正确的比例
如上图所示,当存在5个GT时,模型仅检测出序号1,此时TP=1,FP=0,查准率是1,无法准确评定模型性能。
查全率:Recall:TP/(TP+FN) 所有真实目标中,模型预测正确的目标比例
如上图所示,模型预测的检测框超过了GT的数量,其中TP=5,FN=0,召回率=1,所以单召回率也无法准确评定模型性能。
P-R曲线:不同confidence会对应不同TP,FP,将不同confidence下Precision与Recall组成的点连接起来就形成了P-R曲线。
AP:P-R曲线下的面积;mAP:各类别AP的平均值。
下面我们具体讲解如何绘制P-R曲线并计算AP




将左表中的坐标连接绘制出P-R曲线,并计算出面积即AP。
结合目标检测代码来看看具体步。
给定了一个IOU阈值、并给定了一个类别,如何具体地计算检测的性能。首先,我们要先对所有的检测结果排序,得分越高的排序越靠前,然后依次判断检测是否成功。将排序后的所有结果定义为DTs,所有同类别的真实目标定义为GTs。先依序遍历一遍DTs中的所有DT,每个DT和全部GT都计算一个IOU,如果最大的IOU超过了给定的阈值,那么视为检测成功,算作TP(True Positive),并且最大IOU对应的GT被视为匹配成功;如果该DT与所有GT的IOU都没超过阈值,自然就是FP(False Positive);同时,每当一个GT被检测成功后,都会从GTs中“被取走”,以免后续的检测结果重复匹配。因此如果有多个检测结果都与同一个GT匹配,那么分数最高的那个会被算为TP,其余均为FP。遍历完成后,我们就知道了所有DTs中,哪些是TP,哪些是FP,而由于被匹配过的GT都会“被取走”,因此GTs中剩下的就是没有被匹配上的FN(False Negative)。以下是为了方便理解的代码(Python),这段代码仅用于理解,效率较低。真实代码请参考MS COCO的官方源码。
文章中的图片与表格来自https://www.bilibili.com/video/BV1ez4y1X7g2,视频讲解很棒。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/17653327.html,如有侵权联系删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!