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

本文介绍如何使用Python为目标检测任务绘制ROC和PR曲线,包括匹配检测框与真实框,设定阈值,计算交并比,以及从.txt文件读取数据。代码实现包括匹配、阈值划分和画图功能,适用于评估检测模型如人脸检测,并提供在FDDB上的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在评价一个检测模型时通常需要绘制出其 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

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值