分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

文章目录:

1 关于gallery和probe的介绍

人脸识别中评价指标中仅仅通过 准确率是无法评价一个模型性能的,因为准确率无法体现出人脸识别中最重要的指标 通过率拒绝率参考),而通过率、拒绝率的计算就会设计到gallery和probe的概念,往下继续看吧。

1、首先来看下单词的意思:

  • gallery:画廊
  • probe:探针、调查

2、下面从具体使用gallery和probe的场景介绍什么着两个东西具体是什么

1)gallery

评价人脸识别模型的时候,通常需要构建一个很大的人脸数据库(百万级别),人脸数据库就是每个人注册一张人脸图片,并和为其绑定一个身份ID,这样就构建了一个巨大的人脸识别数据库,这个数据库就是gallery!测试的时候需要,就是拿一张人脸图片与注册数据库中的人脸一个一个去比对(一般比对的都是提取好的特征)

2)probe

probe原意:探针、调查。这里博主就通俗地翻译为 查询集,就是说,我们在测试的时候是在probe中选取元素来到gallery寻找的,最终 测试阶段对模型性能的评估是根据 probe中元素查询的效果来反映的。

注意1:gallery是只有测试集才有的,因为训练的时候我们的期望是模型能根据两张标注好的图像更好地提取特征,以及判断相似度。这个过程的数据来源是标注好的图像,目标仅仅是训练模型对提供的图片的特征提取能力,也就不需要gallery来提供参考。

注意2:根据查询的probe是否在gallery中,又可以把probe中的数据分成pg和pn,后面我们在继续介绍 人脸识别的评价指标

  • 参考:https://www.zhihu.com/question/38194429
  • 参考:https://blog.csdn.net/weixin_44273380/article/details/108949031 # 这篇博客对gallery和probe解释的比较准确,
  • 参考:https://blog.csdn.net/fzthao/article/details/60320780
  • 参考:https://blog.csdn.net/Roland2014/article/details/78912169

2 二分类常用评价指标

在介绍 人脸识别评价指标之前,我们先来回顾一下分类评价指标

2.1 二分类常用的评价指标

1、二分类算法常用的评价指标,他们都是基于混淆矩阵的度量标准:

  • TP(True Postives):真阳性 / 真正例:分类器把 正例正确的分类/预测为 正例
  • FN(False Negatives):假阴性 / 伪负例:分类器把 正例错误的分类/预测为 负例
  • TN(True Negatives):真阴性 / 真负例:分类器把 负例正确的分类/预测为 负例
  • FP(False Postives):假阳性 / 伪正例:分类器把 负例错误的分类/预测为 正例

所以上面,可以叫 阳性、阴性正例、负例

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

实 际 正 例 数 量 + 实 际 负 例 数 量 = 测 试 数 据 集 大 小 / 样 本 总 数 = T P + T N + F P + F N 实际正例数量 + 实际负例数量 = 测试数据集大小 / 样本总数 = TP + TN + FP+ FN 实际正例数量+实际负例数量=测试数据集大小/样本总数=T P +T N +F P +F N

这四个基础指标的组合,就可以得到其他的指标!

2、相关计算

P = TP+FN:表示实际为正样例的数目
N = TN+FP:表示实际为负样例的数目
True、False:描述的是分类器预测(判断)的是否正确
Positive、Negative:是分类器的分类结果,如果正例为1,负例为-1,即:positive=1,negative=-1,用1表示True,-1表示False,例如:

  • TP:实际类别标签为=1*1=1正例
  • FP:实际类别标签为=(-1)*1=-1负例
  • FN:实际类别标签为=(-1)*(-1)=1正例
  • TN:实际类别标签为=1*(-1)=1负例

3、

真假阳性率,真假阴性率(参考):

真 阳 性 率 T P R ( T r u e P o s i t i v e R a t e ) = 正 样 本 被 预 测 为 正 样 本 数 所 有 正 样 本 实 际 数 = T P T P + F N = T P P = s e n s i t i v i t y = r e c a l l 真阳性率 TPR(True Positive Rate)=\frac{正样本被预测为正样本数}{所有正样本实际数}=\frac{TP}{TP+FN}=\frac{TP}{P}=sensitivity=recall 真阳性率T P R (T r u e P o s i t i v e R a t e )=所有正样本实际数正样本被预测为正样本数​=T P +F N T P ​=P T P ​=s e n s i t i v i t y =r e c a l l

假 阳 性 率 F P R ( F a l s e P o s i t i v e R a t e ) = 正 样 本 被 错 误 预 测 为 负 样 本 所 有 负 样 本 = F P T N + F P = F P N 假阳性率 FPR(False Positive Rate)=\frac{正样本被错误预测为负样本}{所有负样本}=\frac{FP}{TN+FP}=\frac{FP}{N}假阳性率F P R (F a l s e P o s i t i v e R a t e )=所有负样本正样本被错误预测为负样本​=T N +F P F P ​=N F P ​

真 阴 性 率 T N R ( T r u e N e g a t i v e R a t e ) = 负 样 本 被 预 测 为 负 样 本 所 有 负 样 本 = T N T N + F P = T N N 真阴性率 TNR(True Negative Rate)=\frac{负样本被预测为负样本}{所有负样本}=\frac{TN}{TN+FP}=\frac{TN}{N}真阴性率T N R (T r u e N e g a t i v e R a t e )=所有负样本负样本被预测为负样本​=T N +F P T N ​=N T N ​

假 阴 性 率 F N R ( F a l s e N e g a t i v e R a t e ) = 正 样 本 被 预 测 为 负 样 本 所 有 正 样 本 = F N T P + F N = F N P 假阴性率 FNR(False Negative Rate)=\frac{正样本被预测为负样本}{所有正样本}=\frac{FN}{TP+FN}=\frac{FN}{P}假阴性率F N R (F a l s e N e g a t i v e R a t e )=所有正样本正样本被预测为负样本​=T P +F N F N ​=P F N ​

; 2.2 混淆矩阵

1、混淆矩阵就是基于TP、TN、FP、FN四个指标计算的(参考

n=192predicted:1predicted:0actual:1118(TP)12(FN)actual:047(FP)15(TN)

混淆矩阵中,如果你看到所有的值都位于 斜对角线上时,表示该模型对分类性能非常好,对正样本和负样本全部预测正确!

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

当然TP、FP、TN、FN,混淆矩阵在 多分类中同样适用,具体计算操作可以参考这篇博客(参考

画混淆矩阵:右侧的颜色条深浅,表示被预测为某一类的数量多少,因此一般也可以通过混淆矩阵查看样本是否均衡!

import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix

y_true = [2, 1, 0, 1, 2, 0]
y_pred = [2, 0, 0, 1, 2, 1]
C1 = confusion_matrix(y_true, y_pred)
print(C1)
'''
[[1 1 0]
 [1 1 0]
 [0 0 2]]
'''

y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]

C2 = confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
print(C2)
'''
[[2 0 0]
 [0 0 1]
 [1 0 2]]
'''
sns.set()
f, ax = plt.subplots()
sns.heatmap(C2, annot=True, ax=ax)
plt.show()
  • y_true = [“cat”, “ant”, “cat”, “cat”, “ant”, “bird”]
  • y_pred = [“ant”, “ant”, “cat”, “cat”, “ant”, “cat”]

样本数=6ant-predict 0bird_predict 1cat_predict 2
ant_actual 0

200
bird_actual 1

001
cat_actual 2

102

通过绘制的 混淆矩阵可以看出:

  • 混淆矩阵上所有的数加起来刚好是 样本数6=2+0+0 +0+0+1 + 1+0+2
  • 0 代表的是ant,实际ant,且被预测为ant的数量是2,从我们给出的测试数据中也是可以看到的
  • 混淆矩阵的颜色深浅表示数量多少!

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

更过混淆矩阵相关内容参考

2.3 评价指标

1)正确率(accuracy rate)

正确率是最常见的评价指标:正确率是 被分对的样本数所有样本数中的占比,通常来说, 正确率越高,分类器越好!

a c c u r a c y _ r a t e = T P + T N T P + T N + F P + F N = ( T P + T N ) / ( P + N ) = 正 确 的 预 测 为 正 例 T P + 正 确 的 预 测 为 负 例 T N 所 有 的 正 样 本 和 负 样 本 accuracy_rate=\frac{TP+TN}{TP+TN+FP+FN}=(TP+TN) / (P+N)=\frac{正确的预测为正例TP + 正确的预测为负例TN}{所有的正样本和负样本}a c c u r a c y _r a t e =T P +T N +F P +F N T P +T N ​=(T P +T N )/(P +N )=所有的正样本和负样本正确的预测为正例T P +正确的预测为负例T N ​

2)错误率(error rate)

错误率则与 正确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(P+N),对某一个实例来说,分对与分错是互斥事件,所以 accuracy =1 - error rate

a c c u r a c y _ r a t e = ( F P + F N ) / ( P + N ) = 错 误 的 预 测 为 正 例 F P + 错 误 的 预 测 为 负 例 F N 所 有 的 正 样 本 和 负 样 本 accuracy_rate=(FP+FN) / (P+N)=\frac{错误的预测为正例FP + 错误的预测为负例FN}{所有的正样本和负样本}a c c u r a c y _r a t e =(F P +F N )/(P +N )=所有的正样本和负样本错误的预测为正例F P +错误的预测为负例F N ​

e r r o r _ r a t e = 1 − a c c u r a c y error_rate = 1- accuracy e r r o r _r a t e =1 −a c c u r a c y

3)灵敏度(sensitivity)= 真阳性率

灵敏度(sensitivity):表示的是 所有正例被分对的比例,衡量了 分类器对正例的识别能力

灵 敏 度 ( s e n s i t i v i t y ) = T P T P + F N = T P P 灵敏度(sensitivity)=\frac{TP}{TP+FN} = \frac{TP}{P}灵敏度(s e n s i t i v i t y )=T P +F N T P ​=P T P ​

4)特异性(specificity)

特异性(specificity):表示的是 所有负例被分对的比例,衡量了 分类器对负例的识别能力

特 异 性 ( s p e c i f i c i t y ) = T N T N + F P = T P N 特异性(specificity)=\frac{TN}{TN+FP} = \frac{TP}{N}特异性(s p e c i f i c i t y )=T N +F P T N ​=N T P ​

5)精度(precision)

精度(precision):精度是 精确性的度量,表示 被正确分为正例所有被分为例中的比例,当然也是精度越高越好!

精 度 ( p r e c i s i o n ) = T P T P + F P 精度(precision)=\frac{TP}{TP+FP}精度(p r e c i s i o n )=T P +F P T P ​

6)召回率(recall),又被称(TPR),真阳性率、查全率、TAR

召回率(recall):是覆盖面的度量,度量有多少个正例被分成正例,和 灵敏度是一样的

r e c a l l = T P T P + F N = T P P = s e n s i t i v i t y recall = \frac{TP}{TP+FN}=\frac{TP}{P}=sensitivity r e c a l l =T P +F N T P ​=P T P ​=s e n s i t i v i t y

7)其他评价指标

  • 计算速度:分类器训练和预测需要的时间;
  • 鲁棒性:处理缺失值和异常值的能力;
  • 可扩展性:处理大数据集的能力;
  • 可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。

8)精度和召回率反应了分类器性能的两个方面,因此需要综合考虑 查准率(precision)查全率(recall)参考

前面的指标介绍完了,下面再开始介绍 ROC曲线PR曲线

1、P-R曲线(precision-recall 曲线)

PR曲线是Precision Recall Curve的简称,描述的是 precision和recall之间的关系,以recall为横坐标,precision为纵坐标绘制的曲线。 该曲线的所对应的面积AUC实际上是目标检测中常用的评价指标 平均精度(Average Precision, AP)。AP越高,说明模型性能越好。

以查准率为纵轴,查全率为横轴作图, 就得到查准率-查全率曲线, 简称 “P-R曲线”, 显示该曲线的图称为 “P-R图”

  • 纵轴是:查准率(precision)= TP / (TP + FP)
  • 横轴是:查全率(recall)= 真阳性率 = TP / TP + FN

坐标值:

  • 坐标值:(查全率,查准率)=(recall,precision)

在实际的模型评估中,单用 Precision或者 Recall来评价模型是不完整的,评价模型时 必须用Precision/Recall两个值 。这里介绍三种使用方法,来说面如何取precision 和 recall 的一个平衡值`,作为模型评估的标准(参考):

  • 平衡点(Break-Even Point, BEP
  • F1度量
  • F1度量的一般化形式。

BEP查准率查全率曲线中 查准率=查全率时的取值,如下:

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

图片来源:https://www.cnblogs.com/nowgood/p/APdefinite.html

P-R曲线平衡点,从图中可以看出效果:

A>B>C # 即越靠近 右上角的平衡点,对应的precision和recall代表当前模型比较好!

一般来说,若一个 P-R 曲线被另一个 P-R 曲线 完全”包住”的话,则后者的性能优于前者(面积越大, 性能越好吧).

F1度量的准则是:F1值越大算法性能越好,公式如下:

F 1 _ s c o r e = 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 = 2 × P × R P + R F1_score = \frac{2\times precision \times recall}{precision + recall} = \frac{2\times P \times R}{P+R}F 1 _s c o r e =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 ​=P +R 2 ×P ×R ​

在一些实际使用中,可能会对查准率或者查全率有 偏重,比如:逃犯信息检索系统中,更希望尽量少的漏掉逃犯,此时的 查全率比较重要。会有下面F1的一般形式。

F 1 β = ( 1 + β 2 ) × P × R β 2 × P + R F1_\beta = \frac{(1+\beta^2)\times P \times R}{\beta^2 \times P+R}F 1 β​=β2 ×P +R (1 +β2 )×P ×R ​

!$\beta>1$时查全率(recall)重要, !$\beta<1$< code>&#x65F6;&#x67E5;&#x51C6;&#x7387;&#xFF08;precision&#xFF09;&#x91CD;&#x8981;<!--1$<-->

2、ROC曲线(Receiver Operating Characteristic Curve)

ROC曲线是(Receiver Operating Characteristic Curve,受试者工作特征曲线)的简称,是以 &#x7075;&#x654F;&#x5EA6;&#xFF08;&#x771F;&#x9633;&#x6027;&#x7387;&#xFF09;&#x4E3A;&#x7EB5;&#x5750;&#x6807;,以 1&#x51CF;&#x53BB;&#x7279;&#x5F02;&#x6027;&#xFF08;&#x5047;&#x9633;&#x6027;&#x7387;&#xFF09;&#x4E3A;&#x6A2A;&#x5750;&#x6807;绘制的性能评价曲线。可以将不同模型对同一数据集的ROC曲线绘制在同一笛卡尔坐标系中, ROC&#x66F2;&#x7EBF;&#x8D8A;&#x9760;&#x8FD1;&#x5DE6;&#x4E0A;&#x89D2;,说明其对应模型越可靠。也可以通过ROC曲线下面的面积(Area Under Curve, AUC)来评价模型, AUC&#x8D8A;&#x5927;&#xFF0C;&#x6A21;&#x578B;&#x8D8A;&#x53EF;靠。

  • 纵轴:灵敏度(sensitivity)=真阳性率=recall=TP / (TP+FN) = TP / P
  • 横轴:1-特异性(specificity)=(假阳性率)= 1 – TN / (TN + FP ) = 1 – TN / N = FP / (TN+FP)=FP / N

坐标值:

  • (1-特异性,灵敏度)= (1 – 特异性,recall)

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

如何画ROC曲线(参考

3、AUC(Area Under Curve)

ROC&#x66F2;&#x7EBF;下的面积就是AUC,可以用AUC围成的面积越大,模型越可靠!

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

4、ROC曲线和P-R去向有什么联系和不同 ?(参考

&#x76F8;&#x540C;&#x70B9;:首先从定义上PR曲线的 R&#x503C;是等于ROC曲线中的 TPR&#x503C;(真阳性率=召回率recall),都是用来评价分类器的性能的.

&#x4E0D;&#x540C;&#x70B9;ROC&#x66F2;&#x7EBF;&#x662F;&#x5355;&#x8C03;的而 PR&#x66F2;&#x7EBF;&#x4E0D;&#x662F;&#x5355;&#x8C03;&#x7684;(根据它能更方便调参), 可以用AUC的值得大小来评价分类器的好坏(是否可以用PR曲线围成面积大小来评价呢?), &#x6B63;&#x8D1F;&#x6837;&#x672C;&#x7684;&#x5206;&#x5E03;&#x5931;&#x8861;&#x7684;&#x65F6;&#x5019;&#xFF0C;ROC&#x66F2;&#x7EBF;&#x4FDD;&#x6301;&#x4E0D;&#x53D8;&#xFF0C;&#x800C;PR&#x66F2;&#x7EBF;&#x4F1A;&#x4EA7;&#x751F;&#x5F88;&#x5927;&#x7684;&#x53D8;&#x5316;

ROC曲线和PR曲线对比

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

(a) (b) 分别是正反例相等的时候的ROC曲线和PR曲线
© (d) 分别是十倍反例一倍正例的ROC曲线和PR曲线

可以看出,在 &#x6B63;&#x8D1F;&#x5931;&#x8861;&#x7684;&#x60C5;&#x51B5;&#x4E0B;,从ROC曲线看分类器的表现仍然较好(图c),然而从P-R曲线来看,分类器就表现的很差, 也就是说样本不均衡时, 使用 P-R &#x66F2;&#x7EBF;&#x66F4;&#x80FD;&#x533A;&#x5206;&#x4E0D;&#x540C;&#x5206;&#x7C7B;&#x5668;&#x7684;&#x6027;&#x80FD;.

事实情况是分类器确实表现的不好,是ROC曲线欺骗了我们(分析过程见知乎 qian lv 的回答)。

5、CMC曲线(参考

CMC&#x66F2;&#x7EBF;全称是 Cumulative Match Characteristic (CMC) Curve,也就是 &#x7D2F;&#x79EF;&#x5339;&#x914D;&#x66F2;&#x7EBF;,同ROC曲线Receiver Operating Characteristic (ROC) curve一样,是模式识别系统,如人脸,指纹,虹膜等的重要评价指标,尤其是在生物特征识别系统中,一般同ROC曲线一起给出,能够综合评价出算法的好坏。

CMC曲线综合反映了分类器的性能,它评价的指标与深度学习当中常用的top1 err和top5 err评价指标一样的意思,不同的是横坐标的Rank表示的是正确率而不是错误率,两者的关系是:

R a n k 1 识 别 率 = 1 − t o p 1 _ e r r Rank1识别率 = 1 – top1_err R a n k 1 识别率=1 −t o p 1 _e r r

R a n k 5 识 别 率 = 1 − t o p 5 _ e r r Rank5识别率 = 1 – top5_err R a n k 5 识别率=1 −t o p 5 _e r r

人脸识别评价指标

  • 参考1
  • 参考2:这篇文章写的比较好,能让你快速对人脸识别评价有一个全方位的了解
  • 参考3

; 3 人脸识别基本概念

3.1 人脸验证(Face Verification 1vs1)

两张图片经过 &#x4EBA;&#x8138;&#x9A8C;&#x8BC1;&#x7CFB;&#x7EDF;,判断 &#x662F;&#x5426;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;,常见的应用有 &#x706B;&#x8F66;&#x7AD9;&#x4EBA;&#x8138;&#x95F8;&#x673A;&#x5B9E;&#x540D;&#x9A8C;&#x8BC1;&#x624B;&#x673A;&#x4EBA;&#x8138;&#x89E3;&#x9501;等。

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

人脸验证测试,需要构建 &#x4EBA;&#x8138;&#x56FE;&#x7247;&#x5BF9;,图片对一般分成:

  • 同一个的人脸的图片对
  • 不同人脸构成的图片对

用于人脸验证测试的 &#x8BC6;&#x522B;&#x7B97;&#x6CD5;需要计算人脸图片对中 &#x4E24;&#x5F20;&#x4EBA;&#x8138;之间的 &#x76F8;&#x4F3C;&#x5EA6;(表示两张人脸之间的相似程度,值越高表示两张人脸为同一人的概率越高),后通过 &#x76F8;&#x4F3C;&#x5EA6;&#x9608;&#x503C;确定 &#x8BC6;&#x522B;&#x7B97;&#x6CD5;&#x9884;&#x6D4B;&#x7684;&#x56FE;&#x7247;&#x5BF9;&#x662F;&#x5426;&#x4E3A;&#x540C;&#x4E00;&#x4EBA;

  • 相似度大于阈值:表示预测为同一人
  • 相似度小于阈值:表示预测为不同人

最终识别算法的 &#x9884;&#x6D4B;&#x7ED3;&#x679C;会分成以下几种情况:

  • TP(True Positve): &#x540C;&#x4EBA;&#x5BF9;被正确预测为同一人
  • TN(True Negative): &#x4E0D;&#x540C;&#x4EBA;&#x5BF9;被预测为不同一人
  • FP(False Positive): &#x4E0D;&#x540C;&#x4EBA;&#x5BF9;被错误的预测为同一人
  • FN(False Negative): &#x540C;&#x4EBA;&#x5BF9;被错误的预测为不同人

&#x628A;&#x540C;&#x4EBA;&#x5BF9;&#x770B;&#x4F5C;&#x662F;&#x6B63;&#x4F8B;&#xFF0C;&#x628A;&#x4E0D;&#x540C;&#x4EBA;&#x5BF9;&#x770B;&#x4F5C;&#x662F;&#x8D1F;&#x4F8B;

; 3.2 人脸辨识 / 识别(Face Identification 1vsN)

1、人脸辨识是指给定一张人脸图片图片,在 &#x4EBA;&#x8138;&#x6570;&#x636E;&#x5E93;中检索以确定 &#x4EBA;&#x8138;&#x8EAB;&#x4EFD;的过程,其流程如下图,人脸辨识测试一般也称谓 1vsN&#x6D4B;&#x8BD5;

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

人脸——》人脸识别系统+人脸数据库——》personA(pg)
人脸——》人脸识别系统+人脸数据库——》不在库人脸(pn)

2、人脸辨识测试一般需要构建两个数据集:

  • GallerySet&#xFF08;&#x5165;&#x5E93;&#x56FE;&#x7247;&#xFF09;
  • PobeSet&#xFF08;&#x6D4B;&#x8BD5;&#x56FE;&#x7247;&#xFF09;

其中, GallerySet&#x56FE;&#x7247;即为上述 &#x4EBA;&#x8138;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x7684;&#x56FE;&#x7247;ProbeSet&#x56FE;&#x7247;&#x5F85;&#x9A8C;&#x8BC1;&#x8EAB;&#x4EFD;的图片。根据 ProbeSet&#x56FE;&#x7247;&#x7684;IDGallerySet&#x56FE;&#x7247;&#x7684;ID关系可将人脸辨识测试分为 &#x5F00;&#x96C6;&#x6D4B;&#x8BD5;&#xFF08;Open-Set&#xFF09;&#x95ED;&#x96C6;&#x6D4B;&#x8BD5;&#xFF08;Close-Set&#xFF09;,其中:

  • 1) &#x5F00;&#x96C6;&#x6D4B;&#x8BD5;:ProbeSet中存在一些人脸的ID不在Gallery中。PorbeSet数据可以分成两部分:
  • ProbeSet&#x4E2D;ID在Gallery中的图片叫做 PG
  • ProbeSet&#x4E2D;ID不在Gallery中的图片叫 PN
  • 2) &#x95ED;&#x96C6;&#x6D4B;&#x8BD5;ProbeSet&#x4E2D;&#x6240;&#x6709;&#x4EBA;&#x8138;&#x56FE;&#x7247;ID&#x90FD;&#x5728;GallerySet&#x4E2D;

如下图:

人脸辨识测试集样例,左边为Gallery,中间为ProbeSet闭集,右边为ProbeSet开集

人脸辨识测试一般是通过 ProbeSet&#x56FE;&#x7247;GallerySet&#x56FE;&#x7247;&#x76F8;&#x4F3C;&#x5EA6;来判断是否正确,比如,在人脸识别测试中,识别算法预测结果会分成以下几种情况:

  • TP(True Positve): &#x540C;&#x4EBA;&#x5BF9;被正确预测为同一人
  • TN(True Negative): &#x4E0D;&#x540C;&#x4EBA;&#x5BF9;被预测为不同一人
  • FP(False Positive): &#x4E0D;&#x540C;&#x4EBA;&#x5BF9;被错误的预测为同一人
  • FN(False Negative): &#x540C;&#x4EBA;&#x5BF9;被错误的预测为不同人

4 人脸验证评价方法(1v1测试)

通过判断比对 &#x56FE;&#x7247;&#x7684;&#x76F8;&#x4F3C;&#x5EA6;&#x5426;&#x5927;&#x4E8E;&#x9608;&#x503C;,常用的性能评估指标有如下几个:

  • FAR(False Accept Rate):错误接受率 / &#x8BEF;&#x8BC6;&#x7387; / 误检率 / 认假率
  • TAR(True Accept Rate): &#x6B63;&#x786E;&#x63A5;&#x6536;&#x7387; / &#x53EC;&#x56DE;&#x7387; / 查全率
  • FRR(False Reject Rate):错误拒绝率 / &#x62D2;&#x8BC6;&#x7387; / 漏检率

人脸验正(1v1测试)通过统计不同错误接受率FAR(False Accept Rate,又称误识率)情况下正确的正确接受率TAR(True Accept Rate,又称召回率、查全率)来进行评价。其中:

1、 FAR(False Accept Rate)认假率,表示错误的接受比例,与 FPR(False Positive Rate)&#x5047;&#x6B63;&#x4F8B;&#x7387; / &#x5047;&#x9633;&#x6027;&#x7387;等价,指 &#x4E0D;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x5374;&#x88AB;&#x9519;&#x8BEF;&#x7684;&#x8BA4;&#x4E3A;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x5360;&#x6240;&#x6709;&#x4E0D;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x6BD4;&#x8F83;&#x7684;&#x6B21;&#x6570;,计算公式如下:

F A R ( T ) = 相 似 度 阈 值 大 于 T 的 非 同 人 对 个 数 非 同 人 对 个 数 = 非 同 人 相 似 度 > T 非 同 人 比 较 次 数 FAR(T) = \frac{相似度阈值大于T的非同人对个数}{非同人对个数} = \frac{非同人相似度>T}{非同人比较次数}F A R (T )=非同人对个数相似度阈值大于T 的非同人对个数​=非同人比较次数非同人相似度>T ​

假 阳 性 率 = F P R ( F a l s e P o s i t i v e R a t e ) = F P F P + T N = F P N 假阳性率 = FPR(False Positive Rate) = \frac{FP}{FP+TN} = \frac{FP}{N}假阳性率=F P R (F a l s e P o s i t i v e R a t e )=F P +T N F P ​=N F P ​

2、 TAR(True Accept Rate)表示正确的接受比例,与 TPR(True Positive Rate)&#x771F;&#x6B63;&#x7387; / &#x771F;&#x9633;&#x6027;&#x7387;等价,指是 &#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x4E14;&#x88AB;&#x6B63;&#x786E;&#x7684;&#x8BA4;&#x4E3A;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x5360;&#x6240;&#x6709;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x6BD4;&#x8F83;&#x7684;&#x6B21;&#x6570;,计算公式如下:

T A R ( T ) = 相 似 大 于 阈 值 T 的 同 人 对 个 数 同 人 对 个 数 = 同 人 相 似 度 > T 同 人 比 较 次 数 TAR(T) = \frac{相似大于阈值T的同人对个数}{同人对个数} = \frac{同人相似度>T}{同人比较次数}T A R (T )=同人对个数相似大于阈值T 的同人对个数​=同人比较次数同人相似度>T ​

真 阳 性 率 = T P R ( T r u e P o s i t i v e R a t e ) = T P T P + F N = T P P = 召 回 率 = 查 全 率 真阳性率 = TPR(True Positive Rate) = \frac{TP}{TP+FN} = \frac{TP}{P} = 召回率=查全率真阳性率=T P R (T r u e P o s i t i v e R a t e )=T P +F N T P ​=P T P ​=召回率=查全率

3、 FRR(False Reject Rate)错误拒绝率,与 FNR(False Negative Rate)&#x5047;&#x8D1F;&#x7387; / &#x5047;&#x9634;&#x6027;&#x7387;,指 &#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x4F46;&#x88AB;&#x8BA4;&#x4E3A;&#x4E0D;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x5360;&#x6240;&#x6709;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x6BD4;&#x8F83;&#x7684;&#x6B21;&#x6570;,计算公式如下:

F R R ( T ) = 同 人 相 似 度 < T 同 人 比 较 次 数 FRR(T) = \frac{同人相似度

假 阴 性 率 = F N R ( F a l s e N e g a t i v e R a t e ) = F N T P + F N = F N P 假阴性率 = FNR (False Negative Rate) = \frac{FN}{TP+FN} = \frac{FN}{P}假阴性率=F N R (F a l s e N e g a t i v e R a t e )=T P +F N F N ​=P F N ​

上面分母说的同人也可以理解为类间,就是同一个人之间,反之也一样!

F R R = F N R = 1 − T P R = 1 − T A R = F N P FRR = FNR = 1-TPR=1-TAR = \frac{FN}{P}F R R =F N R =1 −T P R =1 −T A R =P F N ​

一般情况下,我们通过对比感兴趣FAR下的TAR值来分析 &#x4E0D;&#x540C;&#x6A21;&#x578B;&#x7684;&#x8BC6;&#x522B;&#x6027;&#x80FD;,如表1,例如 !$FAR=[1e-1, 1e-2, 1e-3, 1e-4, 1e-5...]$

5 人脸辨识评价方法(1vN测试)

人脸辨识,根据测试的 ProbeSet中图片人的 ID是否在 GallerySet中分为 &#x5F00;&#x96C6;&#x95ED;&#x96C6;,那测试自然也分成两种:

  • 闭集测试
  • 开集测试

两种测试的 &#x8BC4;&#x4EF7;&#x65B9;&#x6CD5;&#x4E5F;&#x4F1A;&#x6709;&#x6240;&#x4E0D;&#x540C;

5.1 人脸辨识:闭集测试的评价方法

对于GallerySet与ProbeSet闭集进行1vN测试,一般评价方式如下:

每个ProbeSet图片与所有GallerySet图片进行特征比对,获得前TopK个检索结果,若正确ID在检索的所得的TopK个结果中,则正确识别数加1,最终统计 &#x547D;&#x4E2D;&#x7387;,命中率的计算公式:

命 中 率 = 正 确 识 别 数 N P r o b e S e t 图 片 总 数 命中率=\frac{正确识别数N}{ProbeSet图片总数}命中率=P r o b e S e t 图片总数正确识别数N ​

\frac{}{}:如果分母全是中文就会显示不全,如果包含字幕或数字就正常显示,这是bug吗?

一般根据业务需求可关注: Top1&#x3001;Top30&#x3001;Top50下的命中率。不同模型可通过如表2所示进行对比, &#x76F8;&#x540C;TopK&#x4E0B;&#x7684;&#x547D;&#x4E2D;&#x7387;&#x8D8A;&#x9AD8;&#xFF0C;&#x5219;&#x4EE3;&#x8868;&#x6A21;&#x578B;&#x6027;&#x80FD;&#x8D8A;&#x9AD8;&#xFF01;

具体操作:

首先明确ProbeSet中的所有图片的ID在GallerySet中都是存在的,具体步骤:

  • 对ProbeSet中的每一张图片根据模型预测出其特征
  • 让ProbeSet每一张图的特征与Gallery中所有图片特征做比对
  • 然后对的所有结果(相似度)进行从大到小排序,然后取出前 TopK个的相似度结果
  • 如果这 K个相似度结果大于设定阈值,则表示此时测试的ProbeSet中的这张图片在GallerySet中,因此也就 &#x547D;&#x4E2D;Gallery&#x4E2D;&#x7684;&#x56FE;&#x7247;

从上面的分析知道,当TopK中的K取值越小,命中也就比较难,命中率在数值表现上也就小一点,比如一般Top1的命中率肯定是小于Top30的命中率!

5.2 人脸辨识:开集测试的评价方法

对于Gallery与ProbeSet开集进行 1vN&#x6D4B;&#x8BD5;,一般评价方法如下:

&#x7EDF;&#x8BA1;&#x4E0D;&#x540C;&#x8BEF;&#x8BC6;&#x7387;FAR&#x4E0B;&#x7684;&#x6B63;&#x786E;&#x8BC6;&#x522B;&#x7387;TAR&#xFF08;&#x4E5F;&#x79F0;&#x4E3A;&#x901A;&#x8FC7;&#x7387;&#xFF09;,FAR与TAR的计算公式如下:

T A R ( T ) = T o p 1 相 似 度 大 于 阈 值 T 且 I D 相 同 的 比 对 次 数 在 库 人 员 的 比 对 次 数 TAR(T) = \frac{Top1相似度大于阈值T且ID相同的比对次数}{在库人员的比对次数}T A R (T )=在库人员的比对次数T o p 1 相似度大于阈值T 且I D 相同的比对次数​

F A R ( T ) = T o p 1 相 似 度 大 于 阈 值 T 但 I D 不 一 致 的 比 对 次 数 不 在 库 人 员 的 比 对 次 数 FAR(T) = \frac{Top1相似度大于阈值T但ID不一致的比对次数}{不在库人员的比对次数}F A R (T )=不在库人员的比对次数T o p 1 相似度大于阈值T 但I D 不一致的比对次数​

其中, T代表不同的阈值(threshold)

一般情况下,我们通过对比感兴趣FAR下的TAR值来分析不同模型的识别性能,如表1,例如 !$FAR=[1e-1,1e-2,1e-3,1e-4,1e-5,...]$。相同FAR下,TAR越高代表模型性能越好。

所以对于测试:

  • 当p n = 0 pn=0 p n =0 时,是闭集测试
  • 当p n ≠ 0 pn\neq0 p n ​=0时,是开集测试

开集测试:

T A R = n u m b e r _ t r u e _ a c c e p t n u m b e r _ p g TAR=\frac{number_true_accept}{number_pg}T A R =n u m b e r _p g n u m b e r _t r u e _a c c e p t ​

F A R = n u m b e r _ p g _ f a l s e _ a c c e p t + n u m b e r _ p n _ f a l s e _ a c c e p t n u m b e r _ p g + n u m b e r _ p n FAR = \frac{number_pg_false_accept+number_pn_false_accept}{number_pg+number_pn}F A R =n u m b e r _p g +n u m b e r _p n n u m b e r _p g _f a l s e _a c c e p t +n u m b e r _p n _f a l s e _a c c e p t ​

F R R = ( n u m b e r _ p g _ f a l s e _ m a t c h + n u m b e r _ p g _ f a l s e _ r e j e c t ) n u m b e r _ p g FRR = \frac{(number_pg_false_match+number_pg_false_reject)}{number_pg}F R R =n u m b e r _p g (n u m b e r _p g _f a l s e _m a t c h +n u m b e r _p g _f a l s e _r e j e c t )​

分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

; 6 人脸识别性能评价指标

在产品实际工作平台以及需求规定的资源下 &#x5355;&#x5E76;&#x53D1;&#x4E32;&#x884C;&#x6D4B;&#x8BD5;1000&#x5F20;&#x4EBA;&#x8138;&#x56FE;&#x7247;,统计总的 &#x7279;&#x5F81;&#x63D0;&#x53D6;时间后求取平均值。公式如下:

特 征 提 取 耗 时 = 1000 张 人 脸 图 片 特 征 提 取 总 耗 时 1000 特征提取耗时 = \frac{1000张人脸图片特征提取总耗时}{1000}特征提取耗时=1 0 0 0 1 0 0 0 张人脸图片特征提取总耗时​

7 gallery、probe、pg、pn的数据划分

1、采集到一批人脸数据(百万级别)

2、通过之前与训练的人脸模型对其进行特征提取,每张图片得到一个512维的特征

3、对特征之间进行聚类(计算两站图片的特征距离,也可以认为是相似度!)

4、对聚类的结果中,每一类认为是一个ID,然后从每个ID中抽取一张作为gallery入库,其他的作为probe

5、后面需要根据得到的gallery和probe做1v1测试和1vn测试,然后过滤出以下图片,进行人工核验,最终得到一个正确的gallery和probe数据列表

还有按照质量评价得分进行划分的:使用 &#x7EFC;&#x5408;&#x8D28;&#x91CF;&#x6253;&#x5206;在每个ID中挑选一张质量分大于0.8的图片入库,其他图片作为PG,如果该ID中所有图片的质量分均小于0.8,则该ID的所有图片作为PN。

probe_num = pg_num + pn_num

  • pg:是在gallery中有ID的
  • pn:在gallery中没有ID的

pg&#x548C;pn&#x662F;&#x5982;&#x4F55;&#x5212;&#x5206;&#x5F97;&#x5230;&#x7684;

  • pg_ids = gallery & probe # 两者取交集
  • pn_ids = probe - pg_ids # 二者取差集

8 测试规范

  • 正常测试集及测试Case
  • 瞳距影响测试集及测试Case
  • 角度影响测试集及测试Case
  • 口罩遮挡测试集及测试Case
  • 戴眼镜测试集及测试Case
  • 刘海测试集及测试Case
  • 种族影响测试集及测试Case
  • 年龄影响测试集及测试Case
  • 特殊情形误识测试集及测试Case

魏梦测试报告中的 &#x8BC6;&#x522B;&#x6307;&#x6807;

误 识 率 ( F A R ) = ( p g 误 识 ( 首 位 不 是 本 人 且 相 似 度 达 到 阈 值 ) + p n 误 识 ( 跟 库 中 首 位 相 似 度 达 到 阈 值 ) ) ( p g 个 数 + p n 个 数 ) 误识率(FAR)=\frac{( pg误识(首位不是本人且相似度达到阈值)+ pn误识(跟库中首位相似度达到阈值))}{(pg个数+pn个数)}误识率(F A R )=(p g 个数+p n 个数)(p g 误识(首位不是本人且相似度达到阈值)+p n 误识(跟库中首位相似度达到阈值))​

拒 真 率 / 拒 识 率 ( F R R ) = ( p g 首 位 错 误 + p g 首 位 正 确 但 相 似 度 没 有 达 到 阈 值 ) ( p g 个 数 ) 拒真率 / 拒识率(FRR)=\frac{(pg首位错误+pg首位正确但相似度没有达到阈值)}{(pg个数)}拒真率/拒识率(F R R )=(p g 个数)(p g 首位错误+p g 首位正确但相似度没有达到阈值)​

FAR和FRR参考

F A R = 把 不 应 该 匹 配 的 人 脸 , 当 成 匹 配 人 脸 的 个 数 p g 个 数 + p n 个 数 FAR = \frac{把不应该匹配的人脸,当成匹配人脸的个数} {pg个数+pn个数}F A R =p g 个数+p n 个数把不应该匹配的人脸,当成匹配人脸的个数​

不应该匹配的人脸,当成匹配人脸的个数:在 &#x6807;&#x51C6;&#x7684;&#x4EBA;&#x8138;&#x6570;&#x636E;&#x5E93;中测试人脸识别算法的时候, &#x4E0D;&#x540C;&#x4EBA;&#x8138;&#x7279;&#x5F81;&#x5339;&#x914D;&#x5206;&#x6570;大于给定的阈值,从而被认为是相同人脸的比例!

F R R = 把 应 该 匹 配 的 人 脸 , 当 成 不 匹 配 人 脸 的 个 数 p g 个 数 FRR = \frac{把应该匹配的人脸,当成不匹配人脸的个数}{pg个数}F R R =p g 个数把应该匹配的人脸,当成不匹配人脸的个数​

把应该匹配的人脸,当成不匹配人脸的个数:在 &#x6807;&#x51C6;&#x4EBA;&#x8138;&#x6570;&#x636E;&#x5E93;中测试人脸识别算法的时候, &#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x8138;&#x7684;&#x5339;&#x914D;&#x5206;&#x6570;低于给定的阈值,从而认为是不同人脸的比例

9 其他

9.1 把txt的特征文件保存成npy类型文件

代码来源:

230&#x670D;&#x52A1;&#x5668;&#xFF1A;/storage_server1/workspace/weimeng/for_shl/jiadu_test/feature_npy

import os
import numpy as np
import glob
import badu
def load_feat(line):
    feat_part = line.split(':')[1]
    d_f = [float(d) for d in feat_part.split(" ")]
    return np.array(d_f).astype(np.float32)
if __name__ == "__main__":
    root = "/data1/weimeng/test/jiadu/testset_500w_v2/check_test/feature_sdk/*feat.txt"
    save_root = "/data1/weimeng/test/jiadu/testset_500w_v2/check_test/feature_npy/"
    feat_paths = glob.glob(root)
    for feat_path in feat_paths:
        print(feat_path)
        lines = [item.strip() for item in open(feat_path)]
        data_dict = {}
        for line in lines:
            feat = load_feat(line)
            key = line.split(':')[0]
            data_dict[key] = feat
        print("num is: {}".format(len(data_dict)))
        np.save(os.path.join(save_root, os.path.basename(feat_path).replace("txt","npy")), data_dict)

9.2 读取npy的特征文件

import numpy

Feat_dict = np.load('color_feature.npy', allow_pickle=True).item()

TAR、FAR、FRR公式概念参考
查看:https://blog.csdn.net/sinat_29957455/article/details/109031471
参考:https://blog.csdn.net/Robin_Pi/article/details/107913181
参考:https://lavi-liu.blog.csdn.net/article/details/81259492
参考:https://zhuanlan.zhihu.com/p/33025359
参考:https://blog.csdn.net/colourful_sky/article/details/72830640

参考:https://www.cnblogs.com/dlml/p/4403482.html # ROC介绍比较详细
参考:https://blog.csdn.net/abcjennifer/article/details/7359370
参考:https://zhuanlan.zhihu.com/p/33025359 # FAR和FRR介绍
参考 # 评价指标
参考:https://blog.csdn.net/qq_27871973/article/details/81065074 # 查准率和查全率
参考:https://www.cnblogs.com/nowgood/p/APdefinite.html # ROC和PR曲线

Original: https://blog.csdn.net/weixin_41010198/article/details/120848880
Author: 点亮~黑夜
Title: 分类评价指标:TP、TN、FP、FN、Recall,以及人脸识别评价指标TAR、FAR、FRR

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/597898/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球