目标检测——评价指标

博客围绕目标检测评价指标展开,先介绍混淆矩阵,其用n行n列矩阵表示精度评价。接着结合混淆矩阵引出TP、FP、TN、FN的定义,最后阐述常用指标,如精准率、召回率、漏杀率和过杀率的含义及计算方式。

评价指标概述

1. TP、FP、TN、FN

1.1 混淆矩阵

提到TP、FP、TN、FN,首先介绍以下混淆矩阵。
混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用nnnnnn列的矩阵形式来表示。
混淆矩阵的每一代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目
例如:

表1. 多类别混淆矩阵
prediction
Category 1Category 2Background
ground truthCategory 1801010
Category 2107020
Background555
如表1所示:

其中,第一行第一列的80表示原本属于类1,且预测为类1的数量为80。
第二行第一列的10表示原本属于类2,且预测为类1的数量为10。
第三行第一列的5表示原本属于背景,且预测为类1的数量为5。
其余数目同理。

第一行总数80+10+10=100,表示全部原本属于类1的数目是100。
第一列总数80+10+5=95,表示全部预测为类1的数目为95。
其余数目同理。

1.2 结合混淆矩阵理解TP、FP、TN、FN

经过混淆矩阵的理解,引出TP、FP、TN、FN的定义:

  • TP(True Positive): 真正例,表示预测为正例(positive),且预测正确(true),即原本为正例。
  • FN(False Negative): 假反例,表示预测结果为反例(negative),且预测错误(false),即原本为正例。
  • FP(False Positive): 假正例,表示预测结果为正例(positive),且预测错误(false),即原本为反例。
  • TN(true Negative): 真反例,表示预测结果为反例(negative),且预测正确(true),即原本为反例。(注:用不到这个)

个人记忆的方法是,后面的字母表示预测的结果,前面的字母表示预测的正确与否。

表2. 混淆矩阵
prediction
正例反例
ground truth正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

1.3 常用指标

1.3.1 精准率(Precision):

P=TPTP+FPP=\frac{TP}{TP+FP}P=TP+FPTP
精准率(Precision)又叫查准率,它是针对预测结果而言的,它的含义是在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确。

1.3.2 召回率(Recall):

R=TPTP+FNR=\frac{TP}{TP+FN}R=TP+FNTP
召回率(Recall)又叫查全率,它是针对原样本而言的,它的含义是在实际为正的样本中被预测为正样本的概率。

1.3.3 漏杀:

漏杀率=FNTP+FP=1−P漏杀率=\frac{FN}{TP+FP}=1-P漏杀率=TP+FPFN=1P

漏杀率的评估方式是假反例除以总样本数。

1.3.4 过杀:

过杀率=FPTP+FP过杀率=\frac{FP}{TP+FP}过杀率=TP+FPFP

过杀率的评估方式是假正例除以总样本数。

### 目标检测模型评估指标 mAP (Mean Average Precision) #### 定义 均值平均精度(mAP, Mean Average Precision)是一个综合性的度量标准,用于评估目标检测模型的整体表现。该指标不仅考虑了模型对不同类别的识别能力,还考量了其定位准确性。 对于单个类别而言,先计算出各个置信阈值下的精确(Precision)召回(Recall),进而获得该类别的平均精度(AP)[^1]。具体来说,在给定一系列预测框的情况下,通过设定不同的IoU交并比阈值来判断哪些预测被认为是正确的(True Positive),从而统计TP、FP(False Positive)以及FN(False Negative),最终得出PrecisionRecall曲线图上的多个点位数据[^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、付费专栏及课程。

余额充值