Viola-Jones人脸检测论文中ROC曲线绘制及数据获取问询
人脸/非人脸二元分类中ROC曲线的绘制与数据点解析
Great question—ROC curves are fundamental to evaluating binary classifiers like the Viola-Jones face detector, so let's break this down step by step, tailored to the face/non-face detection task.
1. ROC曲线的绘制流程
ROC曲线以**假阳性率(FPR)**为横轴,**正确检测率(即真阳性率,TPR)**为纵轴,绘制步骤如下:
- 首先,你的分类器(比如Viola-Jones的级联分类器)会给每个输入样本输出一个置信度分数——分数越高,代表模型越认为这个样本是人脸。
- 设定一系列阈值:从模型输出的最低置信度到最高置信度,遍历所有可能的分界点。
- 对每个阈值,将分数≥阈值的样本判定为「人脸(正样本)」,分数<阈值的判定为「非人脸(负样本)」。
- 计算每个阈值对应的FPR和TPR,得到一个(FPR, TPR)坐标点。
- 把所有这些点连接起来,再补充(0,0)(阈值极高,无样本被判定为正)和(1,1)(阈值极低,所有样本被判定为正)两个端点,就得到了完整的ROC曲线。
2. (FPR, TPR)数据点的计算方法
首先明确几个核心定义(针对人脸/非人脸任务):
TP(真阳性):实际是人脸,被模型正确判定为人脸的样本数。FN(假阴性):实际是人脸,被模型错误判定为非人脸的样本数。FP(假阳性):实际是非人脸,被模型错误判定为人脸的样本数。TN(真阴性):实际是非人脸,被模型正确判定为非人脸的样本数。
基于这些定义,两个关键指标的公式为:
- 正确检测率(TPR):
TPR = TP / (TP + FN)→ 所有真实人脸中被成功检测的比例。 - 假阳性率(FPR):
FPR = FP / (FP + TN)→ 所有真实非人脸中被误判为人脸的比例。
获取数据点的具体操作:
- 第一步:收集独立测试集的所有样本(注意:不能用训练集,否则结果会过于乐观,无法反映模型真实泛化能力),记录每个样本的模型置信度分数和真实标签(人脸/非人脸)。
- 第二步:把所有测试样本按置信度分数从高到低排序。
- 第三步:遍历排序后的样本,每遍历到一个样本,就将其分数设为当前阈值——此时所有排在它前面(分数≥该阈值)的样本都会被判定为正样本。
- 第四步:对当前阈值,统计对应的
TP、FN、FP、TN,代入公式计算FPR和TPR,得到一个坐标点。 - (优化点:如果多个样本有相同的置信度分数,只需要计算一次对应的FPR和TPR,不需要重复计算)
3. 是否需要针对训练集中的每一个正/负样本计算这些点?
答案是不需要,原因有两点:
- 训练集不适合用来评估性能:ROC曲线的核心作用是衡量模型的泛化能力,训练集是用来训练模型的,用它计算的ROC曲线会高估模型性能,无法反映模型在 unseen 数据上的表现。我们应该用独立的测试集来计算ROC。
- 无需逐个样本计算:我们不需要单独针对每个正/负样本计算点,而是通过遍历所有不同的置信度阈值(基于测试集样本的分数排序)来生成所有必要的坐标点。重复的分数可以合并处理,减少冗余计算。
内容的提问来源于stack exchange,提问作者Nemi Bhattarai
相关产品推荐
相关产品推荐

