目标检测中的评价指标F-score AP mAP ROC/AUC的理解和使用


  深度学习测试模型效果的时, 经常会使用一些特定的评价指标. 根据数据集的分布情况以及使用侧重的效果可以选择不同的指标进行评价. 一般常用的评价指标有F-score、mAP、ROC/AUC. 在介绍这三种评价指标之前首先了解下准确率、召回率、精准率、IOU等指标的概念和计算方式.

IOU、precision、 recall、 accurancy

  Precision,准确率/查准率。Recall,召回率/查全率。这两个指标分别以两个角度衡量分类系统的准确率。目标检测中计算查准率和召回率之前需要需要计算检测框的IOU值, 并根IOU值判断是否预测正确.

  1. IoU这一值,可以理解为系统预测出来的框与原来图片中标记的框的重合程度。 计算方法即检测结果Detection Result与 Ground Truth 的交集比上它们的并集,即为检测的准确率。
      IOU是这种Detect box和Ground truth的差异的指标:
       I O U = g r o u n d t r u t h ∩ D e t e c t T r u t h g r o u n d t r u t h ∪ D e t e c t T r u t h IOU=\frac{ground truth\cap Detect Truth}{ground truth\cup Detect Truth} IOU=groundtruthDetectTruthgroundtruthDetectTruth
      
       针对目标检测任务中会设定一个IOU threshold, 当预测的box和真实的box之间的IOU大于IOU threshold可以判定为预测正确, 反之预测错误.

  2. Precision针对的是某一类样本,如果没有说明类别,那么Precision是毫无意义的(有些地方不说明类别,直接说Precision,是因为二分类问题通常说的Precision都是正样本的Precision)。
    P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP

  3. Recall和Precision一样,脱离类别是没有意义的。说道Recall,一定指的是某个类别的Recall。Recall表示某一类样本,预测正确的与所有Ground Truth的比例。
    R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP

  4. 准确率=预测正确的样本数/所有样本数,即预测正确的样本比例(包括预测正确的正样本和预测正确的负样本,不过在目标检测领域,没有预测正确的负样本这一说法,所以目标检测里面没有用Accuracy的)。
    A c c u r a n c y = T P + T N T P + F P + F N + T N Accurancy = \frac{TP+TN}{TP+FP+FN+TN} Accurancy=TP+FP+FN+TNTP+TN

PR曲线

Precision-recall曲线(PR曲线), PR曲线的横轴Recall也就是TPR,反映了分类器对正例的覆盖能力。而纵轴Precision的分母是识别为正例的数目,而不是实际正例数目。Precision反映了分类器预测正例的准确程度。那么,Precision-recall曲线反映了分类器对正例的识别准确程度和对正例的覆盖能力之间的权衡。对于随机分类器而言,其Precision固定的等于样本中正例的比例,不随recall的变化而变化。
多分类中每个类别可以绘制出一条PR曲线, 曲线中为依次改变置信度为10%-100%得到一组由precision和recall组成的坐标, 连接这些值就是PR曲线.

ROC曲线

ROC曲线,是以FPR为横轴、TPR为纵轴,衡量二分类系统性能的曲线。
T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP
F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP
  同样依次取置信度10%-100%, 会得到一组不同的FPR、TPR组成的坐标连接两者就能得到ROC曲线, ROC曲线与X轴围成的图形面积可以作为一个综合衡量指标,即AUC(Area Under Curve,曲线下面积)。AUC越大,曲线就越凸,分类器的效果也就越好。
  ROC曲线反映了分类器对正例的覆盖能力和对负例的覆盖能力之间的权衡。

F-score

F1分数,它被定义为查准率和召回率的调和平均数, 具体的计算方式为:

F 1 = 2 ∗ P r e c i s i o n ∗ R e c a l l P r e c i s i o n + R e c a l l F_1=2*\frac{Precision*Recall}{Precision+Recall} F1=2Precision+RecallPrecisionRecall

当业务需求, 需要给予准确率和召回率不同的权重的时候可以使用 F β F_\beta Fβ

F β = ( 1 + β 2 ) ∗ P r e c i s i o n ∗ R e c a l l β 2 P r e c i s i o n + R e c a l l F_\beta=(1+\beta^2)*\frac{Precision*Recall}{\beta^2Precision+Recall} Fβ=(1+β2)β2Precision+RecallPrecisionRecall

q其中 F 2 F_2 F2 F 0 . 5 F_0.5 F0.5在统计学中经常使用, 并且 F 2 F_2 F2分数中, 召回率权重大于查准率, 而 F 0 . 5 F_0.5 F0.5分数则刚好相反.

多分类中F-score是先计算每个类别的F-score然后在求平均

AP、mAP

与AUC相似,AP就是PR曲线与X轴围成的图形面积.
对于连续的PR曲线,有:语句为 A P = ∫ 0 1 P R d r AP= \int_{0}^{1}PR\text{d}r AP=01PRdr
对于离散的PR曲线,有:
A P = ∑ k = 1 n P ( k ) Δ r ( k ) AP= \sum_{k=1}^nP(k)\Delta r(k) AP=k=1nP(k)Δr(k)
在多个分类中, 可以通过求平均得到mAP
m A P = ∑ q = 1 Q A P ( q ) Q mAP = \frac{\sum_{q=1}^QAP(q)}{Q} mAP=Qq=1QAP(q)

验证指标的选择

  一般在查全率和查准率上有偏向的时候, 会选用F-SCORE, 例如推荐系统中,如果希望更精准的了解客户需求,避免推送用户不感兴趣的内容,precision 就更加重要;在疾病检测的时候,我们不希望查漏任何一项疾病,这时 recall(TPR) 就更重要。当两者都需要考虑时,F-score 就是一种参考指标。
  当面临数据 class imbalance 问题,即正负样本比例失衡,而且测试数据中的正负样本的分布也可能随着时间变化。根据计算公式可以推知,在测试数据出现imbalance 时 ROC 曲线能基本保持不变,而 PRC 则会出现大变化, 此时选用AUC指标作为评价指标会更理想.

例如yolov3中出现下来的指标

除了AP以外还有其他的评价指标. 其中:
A P 50 AP_{50} AP50: IOU阈值为0.5时AP测量值
A P 75 AP_{75} AP75: IOU阈值为0.75时AP测量值
A P s AP_{s} APs: 像素面积小于 3 2 2 32^2 322的目标框的AP测量值
A P M AP_{M} APM: 像素面积在 3 2 2 − 9 6 2 32^2-96^2 322962之间目标框的AP测量值
A P L AP_{L} APL: 像素面积大于 9 6 2 96^2 962的目标框的AP测量值

### 分类模型性能评估指标AUC mAP #### AUC 的定义使用方法 AUC (Area Under the Curve) 是 ROC 曲线下的面积,用于衡量二元分类器的整体表现。ROC曲线描绘了不同阈值下真正率(True Positive Rate, TPR)假正率(False Positive Rate, FPR)之间的关系。AUC 值范围从0到1,理想情况下希望接近于1。 对于多分类任务而言,由于缺乏统一标准来设定决策边界(threshold),这使得 AUC 不再是一个理想的度量工具[^4]。 ```python from sklearn.metrics import roc_auc_score y_true = [0, 1, 1, 0, 1] y_scores = [0.1, 0.4, 0.35, 0.8, 0.7] auc_value = roc_auc_score(y_true, y_scores) print(f"AUC Score: {auc_value}") ``` #### mAP 的定义使用方法 mAP (mean Average Precision) 主要应用于目标检测场景中的性能评测。它通过计算各个类别 AP 平均值得出整体模型的表现水平。具体来说,在给定置信度得分的情况下,先确定预测框是否为真阳性(true positive),接着基于此构建 PR 曲线,并最终求得该曲线下方面积作为 AP;最后对所有类别做算术平均获得 mAP[^2]。 ```python import numpy as np def calculate_ap(recalls, precisions): """Calculate average precision from recall and precision lists.""" recalls = np.concatenate(([0.], recalls, [1.])) precisions = np.concatenate(([0.], precisions, [0.])) for i in range(precisions.size - 1, 0, -1): precisions[i - 1] = max(precisions[i - 1], precisions[i]) indices = np.where(recalls[:-1] != recalls[1:])[0] ap = np.sum((recalls[indices + 1] - recalls[indices]) * precisions[indices + 1]) return ap recall_values = [0., 0.2, 0.4, 0.6, 0.8, 1.] precision_values = [0.9, 0.8, 0.7, 0.6, 0.5, 0.] average_precision = calculate_ap(np.array(recall_values), np.array(precision_values)) print(f"Average Precision(AP): {average_precision:.2f}") # Assuming we have multiple classes with their respective APs... aps_per_class = {'cat': 0.75, 'dog': 0.8} mean_average_precision = sum(aps_per_class.values()) / len(aps_per_class) print(f"Mean Average Precision(mAP): {mean_average_precision:.2f}") ``` #### 区别联系 - **应用场景差异**: AUC 更适合用来比较两个或多个二元分类器之间相对优劣程度;而 mAP 则更侧重于评价单个对象检测系统的综合效能。 - **数据分布敏感性**: 当样本不平衡时,AUC 可能会给出误导性的高分,因为它只关注排名顺序而非绝对概率估计质量。相比之下,mAP 对此类问题更加稳健一些。 - **维度特性**: AUC 属于全局性质的评分机制,反映了整个操作区域内的总体趋势;相反地,mAP 关注局部细节——特别是那些具有较高 IOU(intersection over union)重叠比例的对象匹配情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值