Python 为目标检测任务绘制 ROC 和 PR 曲线

  在评价一个检测模型时通常需要绘制出其 ROC 曲线或 PR 曲线。本文利用 Python 实现了 ROC 和 PR 曲线的绘制,在 draw_curves 函数中读取 .txt 文件即可一次性绘制出两条曲线并输出 AUC 和 mAP 值,适用于目标检测任务,例如人脸检测。获取代码请戳 GitHub 链接

1 流程

为目标检测任务绘制曲线的流程如下:

  1. 以检测结果中每一个的 boundingbox 为对象(记检测出的 boundingbox 的个数为 M),去匹配该张图片里的每一个 groundtruth boundingbox,计算出交并比 (IoU),并保留其中最大的值—— maxIoU,同时记录下 confidence 分数。就得到了一个数组—— maxIoU_confidence,其长度等于 M,宽度为 2,再按照 confidence 从大到小排序。
  2. 设置一个阈值,一般取 0.5。当 maxIoU 大于阈值时,记为 1,即 true positive;当 maxIoU 小于阈值时,记为 0,即 false positve。这样就得到了 tf_confidence,其尺寸不变,与 maxIoU_confidence 相同。
  3. 从上到下截取数组 tf_confidence 的前 1,2,3,…,M 行,每次截取都得到一个子数组,子数组中 1 的个数即为 tp,0 的个数即为 fp,查全率 recall (或 TPR) = tp / (groundtruth boundingbox 的个数),查准率 precision = tp / (tp + fp)。每次截取得到一个点,这样就一共得到 M 个点。以 fp 为横坐标,TPR 为纵坐标绘制出 ROC 曲线;以 recall 为横坐标,precision 为纵坐标绘制出 PR 曲线。

2 输入

  本程序需要读入两个分别记录检测结果和标准答案的 .txt 文件,记录格式与 FDDB 的要求相同,即
...
image name i
number of faces in this image =im
face i1
face i2
...
face im
...
当检测框为矩形时, f a c e   i m face\ i_m face im

  • 13
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
好的,以下是一个使用sklearn和matplotlib库绘制ROC曲线PR曲线的示例代码: ```python from sklearn.metrics import roc_curve, roc_auc_score, precision_recall_curve, average_precision_score import matplotlib.pyplot as plt # 计算ROC曲线 fpr, tpr, thresholds = roc_curve(labels, logits) roc_auc = roc_auc_score(labels, logits) # 绘制ROC曲线 plt.figure(figsize=(8, 6)) plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic') plt.legend(loc="lower right") plt.show() # 计算PR曲线 precision, recall, thresholds = precision_recall_curve(labels, logits) avg_precision = average_precision_score(labels, logits) # 绘制PR曲线 plt.figure(figsize=(8, 6)) plt.plot(recall, precision, color='darkorange', lw=2, label='PR curve (average precision = %0.2f)' % avg_precision) plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall curve') plt.legend(loc="lower right") plt.show() ``` 其中,`logits`为模型的预测结果,`labels`为样本的真实标签。绘制ROC曲线PR曲线的过程分别为: 1. 使用`roc_curve`函数计算ROC曲线上的每个点的FPR和TPR以及对应的阈值; 2. 使用`roc_auc_score`函数计算ROC曲线下的面积(AUC); 3. 使用`precision_recall_curve`函数计算PR曲线上的每个点的Precision和Recall以及对应的阈值; 4. 使用`average_precision_score`函数计算PR曲线下的面积(AP); 5. 使用`matplotlib`库绘制ROC曲线PR曲线,并显示在屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值