本文参考自:《Handbook of Face Recognition》 和https://zhuanlan.zhihu.com/p/57350424。
1 概念
人脸识别任务分为 人脸验证(1:1,Face Verification)和 人脸识别(1:N,Face Recognition) 两种。
人脸验证是给定一对图像,判定是否是同一个人;人脸识别是给定一张图像,判断其是图像底库中的谁。
性能度量需要三个数据集,分别是:
- 底库数据集 G(gallary);
- 测试集p_G,由属于G中的人员的且与G已包含的不同的图像组成 (库内人员的测试图像);
- 测试集p_N,由不属于G中的人员的图像组成(库外人员的测试图像)。
2 1:1 Face verification
人脸验证是给定一系列的图像对,判断出哪些图像对是同一个人,哪些图像对不是同一个人。比如在高铁站入口处,需要刷身份证进站的人脸闸机,就是人脸验证。我们希望算法对使用了自己真实身份证的人的通过率越高越好,希望使用了伪造身份证的人的误识率越低越好。
一般的人脸特征提取算法,都是对一副人脸图像使用了一个特征向量进行了描述,具体两幅图像是不是同一个人要根据这两个特征向量的相似度进行判断,计算相似度可以使用余弦距离、欧式距离等。计算了两幅图像的特征向量的相似度之后,还要和一个指定的相似度阈值进行比较,大于该阈值则认为是同一个人,小于该阈值则认为不是同一个人。
假定测试数据集包含M个测试图像对。
TP:相似度大于给定阈值 且 真实label为同一个人的图像对数;
FP:相似度大于给定阈值 且 真实label不是同一个人的图像对数;
FN:相似度小于给定阈值 且 真实label为同一个人的图像对数;
TN:相似度小于给定阈值 且 真实label不是同一个人的图像对数;
accuracy:总的判定对数中有多少对判定正确(包括属于同一个人的图像对和不属于同一个人的图像对)
acc=TP+TN+FP+FNTP+TN?=MTP+TN?
TAR : True Accept Rate
相似度大于阈值的图像对中有多少是真正属于同一个人的图像对比例。
TAR=TP+FNTP?
FAR:False Accept Rate
真实情况不属于同一个人的图像对中相似度大于设置阈值的图像对比例。
FAR=FP+TNFP?
FRR:False Reject Rate
真实情况属于同一个人的图像对中相似度小于阈值的图像对比例。
FRR=FN+TPFN?
对于人脸验证任务,FRR = 1 - TAR。
人脸验证的指标主要有三个,分别是 验证准确率(accuracy) 、TAR@FAR、FRR@FAR。
accuracy的计算可以借鉴LFW的评价方式:
- 采用K折交叉验证的思路将所有的验证图像对分为K组,每次选取一组作为测试数据确定最佳阈值,剩下的K-1组作为评估数据;
- 设置阈值的遍历范围,如以0.1的步长遍历0到1的范围,在某一阈值下,确定测试数据的accuracy;
- 根据测试数据集上各阈值下的accuracy确定最佳阈值;
- 计算最佳阈值下评估数据的accuracy;
- 选取另外K-1组的数据中的某一个为测试数据,剩余的做评估数据,重复1 - 4的步骤得到另外K-1个accuracy;
- 求K个accuracy的均值和方差作为最终的accuracy,记作
mean±val的形式,如
99.6±0.12。
TAR@FAR的计算方式为:
- 采用K折交叉验证的思路将所有的验证图像对分为K组,每次选取一组作为测试数据,剩下的K-1组作为评估数据;
- 设置阈值的遍历范围,如以0.1的步长遍历0到1的范围,测试在每一阈值下的TAR和FAR并记录;
- 重复1-2的步骤,得到K组各阈值下的TAR和FAR,TAR是一个K行M列的数组,FAR也是同样的shape,每一行表示每折的结果,每列表示每个阈值下的结果;
- 对TAR和FAR按行求均值,得到最终的TAR@FAR,可以使用该行向量绘制以FAR为横坐标,TAR为纵坐标的ROC曲线;
- 很多情况下是报告FAR=
10?1,?,10?6下的TAR值,记作TAR@FAR=
10?6。
3 1:N Face Recognition
Face Recognition是给定一副测试图像prob,通过Face Recognition给出该人员的身份信息,需要提前设置底库图像集gallary。
根据测试图像是否是gallary内人员的图像又将人脸识别分成了闭集测试和开集测试两种。
3.1 闭集(close-set)测试
闭集测试,是指测试图像prob肯定隶属于底库内的人员,且和已包含在底库内的图像不同。
针对闭集测试,常用的性能指标有 Rank-K@gallary规模。
Rank-K @ 底库规模:
Rank-K是指每幅测试图像按照相似度对识别结果进行排序,前K个结果中包含真实label的比例,常用的K值有1,5,10,100等,当然K值要小于等于底库规模,当K值等于底库规模时,则Rank-K等于1。
以Rank-1为例来说明 Rank-K@底库规模 的计算,假设底库规模为一百万张图像,即
106,对于给定的测试图像,不需要设置相似度阈值,其首位识别正确的图像占所有测试图像的比例即为Rank-1。假设给定了1000幅测试图像,有900张图像的首位识别结果是正确的,则Rank-1为 90%@
106。
K值越大,Rank-K的值也越大。
以K值为横轴,Rank-K值为纵轴,可以绘制CMC曲线。
3.2 开集(open-set)测试
开集测试,是指测试图像对应的人员不一定隶属于底库人员。
开集测试,常用的性能指标有 Rank-K@FAR 和 TAR@FAR。
对于开集测试,测试结果共有五种情况:
库内人员的测试图像,相似度大于阈值,识别结果正确,这样的样本个数记为 IBC (in & bigger & correct);
库内人员的测试图像,相似度大于阈值,识别结果错误,这样的样本个数记为 IBE (in & bigger & error);
库内人员的测试图像,相似度小于阈值,这样的样本个数记为 IS (in & smaller);
库外人员的测试图像,相似度大于阈值,这样的样本个数记为 OB (out & bigger);
库外人员的测试图像,相似度小于阈值,这样的样本个数记为 OS (out & smaller)。
Rank-1@ FAR:
Rank1=总的测试集数量IBC+OS?
RankK=总的测试集数量前K个结果包含正确label的(IBC+OS)?
FAR=库外人员的测试集数量OB?
根据FAR的取值确定阈值,报告各阈值下的Rank-K值。
TAR@FAR:
对于开集测试,需要设置一个相似度阈值,得到TAR@FAR。
TAR=库内人员的测试集总数IBC?
FAR=库外人员的测试集数量OB?
同样根据FAR的取值确定阈值,报告各阈值下的TAR值,FAR依据库外人员的测试集数量一般取
10?6。
FRR@FAR:
通过设置的相似度阈值,还可以得到FRR@FAR,这个指标和其他指标不同,上面其他的指标都是越大越好,这个指标是越小越好。
这个指标反映的是在某个阈值下有多大比例的库内人员没有识别结果。
FRR=库内人员的测试集总量IS?
FAR=库外人员的测试集数量OB?
同样根据FAR的取值确定阈值,报告各阈值下的FRR值,FAR依据库外人员的测试集数量一般取
10?6。
个人认为FRR存在的意义是,
1?FRRTAR? 表示库内人员的测试图像大于阈值的结果中识别正确的图像所占的比例。如果某个系统在FAR很小时
1?FRRTAR?值很大,则表示该系统虽然有很多的库内人员无法识别,但有结果的识别的还是非常可信的,这种情况下可以通过提升测试人员的配合度提升识别效果。FRR部分纯粹是一家之言,欢迎大家批评指正。
4 总结
人脸识别的评价指标很多,需要根据具体的业务场景确定指标。
上面的整理如有错误,欢迎批评指正。