目标检测中的评价指标mAP含义

目标检测中的评价指标mAP含义

阅读论文的时候经常看到有一个评价指标mAP,我们都知道mAP的值越高越好,但mAP到底是什么含义,起什么作用,为什么越高越好?

1.计算过程

  1. 有计算mAP我们首先要计算出AP的值。
  2. 计算AP的值我们又需要计算召回率Recall以及准确率Precision。
  3. 计算Recall和Precision我们又需要知道模型预测的样本中的情况,比如预测对的positive样本数量、预测错误的positive样本数量等。
  4. 一般在检测任务中我们要给预测的样本分类需要用到IoU(交并比,预测框与真实框的交集和并集的比),我们设置某个阈值,计算出的IoU>阈值时为TP(True positive),IoU<=阈值时为FP(False positive);还有TN(True negative),FN(False negative)。

2. 名词含义

  1. TP:True positive,预测正确的positive样本。
  2. FP:False positive,本来为Negative样本,被错误的预测成了Positive样本。
  3. FN:False negative,本来为Positive样本,被错误的预测成了Negative样本。
  4. Precision:TP/(TP + FP),也可写作TP/预测Positive个数
  5. Recall:TP/(TP + FN),为了方便理解,可以直接写成:TP/真实Positive 个数
  6. PR曲线:横坐标为Recall,纵坐标为Precision,构成了曲线。
  7. AP:PR曲线构成的面积。
  8. mAP:mean Average Precision,各个类别AP的平均值。

下图时维基百科中对主要计算式的定义:
在这里插入图片描述

3. AP的两种计算方式

  1. 在VOC 2010以前,构建PR曲线时横坐标即Recal选择11个点,{0,0.1,0.2,…,1},选择当Recall大于等于各个点的值时的Precision中的最大值,再取这11个precision的平均值。
  2. 在VOC 2010及以后,需要针对计算得出的每一个Recall值,也包含坐标中的0与1,选取大于等于这些Recall值时的Precision最大值,计算PR曲线构建的面积就是AP的值。

4. mAP含义理解

经过上面的学习我们也对mAP的计算过程有了一定的理解,mAP的计算和recall与precision的值相关。
上面讲到FP、TP的值受IoU阈值设置的影响,也就是说当阈值设置的较大时也就意味着对预测的要求较高,这也就使得precision的值很高,而recall的值很低(我们放弃了一些得分较低的真实positive样本)。
当阈值设置较小时,我们对预测的要求降低,precision的值就会很低,而recall的值就会很高。

recall高precision低或recall低precision高都不是最理想的结果,而mAP的值就可以衡量precision和recall总体的优劣。

### 目标检测模型评估指标 mAP (Mean Average Precision) #### 定义 均值平均精度(mAP, Mean Average Precision)是一个综合性的度量标准,用于评估目标检测模型的整体表现。该指标不仅考虑了模型对不同类别的识别能力,还考量了其定位准确性。 对于单个类别而言,先计算出各个置信阈值下的精确率(Precision)和召回率(Recall),进而获得该类别的平均精度(AP)[^1]。具体来说,在给定一系列预测框的情况下,通过设定不同的IoU交并比阈值来判断哪些预测被认为是正确的(True Positive),从而统计TP、FP(False Positive)以及FN(False Negative),最终得出Precision和Recall曲线图上的多个点位数据[^3]。 #### 计算过程 为了求得某个特定类别的AP: - 对于每一个测试样本中的真实对象实例,按照预测得分从高到低排序; - 遍历这些预测结果,每当遇到一个新的True Positive时更新当前累计的TP数,并据此重新计算此时此刻为止所累积起来的所有预测案例中TP占总数量的比例作为新的Precision值;同时记录下对应的Recall比率; - 将上述过程中形成的若干组(P,R)坐标连接成一条PR曲线; - AP等于这条曲线下方面积大小,可以采用积分法近似估算或者简单地取固定间隔处的最大Precision值得分加权平均而得。 当完成了所有类别的AP计算之后,就可以很容易地得到整个系统的mAP——只需将各单独类目的AP相加以总数除之即可完成最后一步运算[^2]。 ```python def calculate_ap(precisions, recalls): """Calculate the area under PR curve.""" ap = 0. for i in range(len(recalls)-1): delta_recall = recalls[i+1] - recalls[i] avg_precision = (precisions[i]+precisions[i+1])/2 ap += delta_recall * avg_precision return ap def mean_average_precision(all_precisions, all_recalls): """Compute mAP over multiple classes""" class_aps = [] for precisions, recalls in zip(all_precisions.values(), all_recalls.values()): ap = calculate_ap(precisions, recalls) class_aps.append(ap) map_score = sum(class_aps)/len(class_aps) return map_score ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值