|还在被人脸识别准确率指标欺骗吗?
导读
随着硬件性能的提升和人脸数据量的增大 , 人脸识别也越来越成熟 , 商业应用也越来越多 。 经常看到很多文章说 , 人脸识别算法做了什么什么改进在LFW上的识别准确率达到99.6%以上 。
实际上 , 仅仅一个准确率指标是无法衡量一个模型的性能 , 准确率无法体现出人脸识别中最重要的指标通过率和拒绝率 , 通过率包含两种情况同一个人通过的概率和不同人通过的概率 , 拒绝率包含两种情况不同人被拒绝的概率和同一个人被拒绝的概率 , 通常我们希望模型在不同人通过率越低的情况下同一个人通过率越高越好 , 下面的评估指标主要也是基于这两个进行演化的 。
人脸识别
现在人脸识别的应用多种多样 , 如人脸考勤、实名验证、身份验证、人脸支付以及天网系统等 。 实际上底层的实现技术主要还是依靠人脸验证和人脸搜索 , 人脸验证也称为1:1人脸匹配 , 人脸搜索也称为1:N人脸匹配 。
首先我们从包含人脸的图片中通过人脸检测提取出人脸的位置信息以及人脸关键点 , 然后通过仿射变换结合人脸关键点进行人脸对齐 , 获取到对齐后的人脸图片 。 再将人脸图片通过人脸识别模型进行人脸特征提取 , 提取出来的特征是一个高维向量 , 这个向量的维度通常是128、256、512、1024甚至更高 。
判断两张人脸图片是否相似的度量主要有两个指标欧式距离和余弦相似度 。 先通过人脸识别模型将人脸图片转换为特征向量 。 欧式距离顾名思义就是计算两个向量的欧式距离 , 所以两个向量的欧式距离越小表示他们越相似 。 余弦相似度就是计算两个向量的夹角的余弦值 , cosθ的取值范围在[?1,1] , 我们可以对其进行归一化操作到[0,1]通过0.5+0.5?cosθ来实现 , 余弦相似度越大表示是同一个人的概率越大 。
无论是1:1人脸匹配还是1:N人脸匹配 , 我们都需要先确定一个阈值(欧式距离或相似度) , 通常人脸相似的度量指标都是用的相似度 , 我们后面所说的阈值其实也就是一个相似度阈值 。 通过人脸数据集根据指定通过率或拒绝率来确定阈值 , 大于这个阈值表示为同一个人否则不是同一个人 。
人脸验证
1:1人脸验证(verification) , 比对两张图片是否为同一个人 , 常见的应用有火车站人脸闸机实名验证、手机人脸解锁等 。 通过判断比对图片的相似度是否大于阈值 , 常用的性能评估指标有如下几个
- FARFAR(False Accept Rate)认假率 , 表示错误的接受比例 , 与FPR(False Positive Rate)假正例率等价 , 指不是同一个人却被错误的认为是同一个人占所有不是同一个人比较的次数 , 计算公式如下
本文插图
关于详细的混淆矩阵(TP、TN、FP、FN)说明 , 请参考我的另一篇文章分类算法中常用的评估指标
- TARTAR(True Accept Rate)表示正确的接受比例 , 与TPR(True Positive Rate)真正率等价 , 指是同一个人且被正确的认为是同一个人占所有同一个人比较的次数 , 计算公式如下
本文插图
- FRRFRR(False Reject Rate)错误拒绝率 , 与FNR(False Negative Rate)假负率 , 指是同一个人但被认为不是同一个人占所有是同一个人比较的次数 , 计算公式如下
本文插图
在一些1:1的人脸识别比赛中 , 也会有一些其它的评估指标 , FMR(false match rate)和FNMR(false non-match rate) 。 FMR指错误匹配率等价于FAR , FNMR指错误的不匹配率等价于FRR 。
有时候还会看见类似于FNMR @ FMR = 0.000001 , 这种表达式所指示的是先在数据集上计算出FMR = 0.000001时的阈值 , 然后再根据这个阈值计算FNMR 。 类似于这种TAR=0.998@FAR=1e-6 , 表示的是当不是同一个人通过率为1e-6时 , 相同人的通过率为99.8% 。 对于1:1人脸验证来说当FAR越低的情况下 , TAR越高越好
人脸搜索
1:N人脸识别评估分为两种情况开集识别(open-set identification)和闭集识别(close-set identification) 。
在评估1:N的人脸识别时我们需要三组图像 , galleryG(底库 , 已注册的人脸库) , probe(探针 , 待识别的人脸图像) , probe分为Pn和Pg? , Pn?中的人脸照片不在gallery中 , 被称为imposter , Pg?中的人脸照片在gallery中 , 被称为genius 。
开集识别
开集识别(open-set identification):开集识别需要解决的问题是判断一个probePj?在不在gallery中 , 如果在这个人是谁 。 Pj?可以在gallery中 , 也可以不在 。
假设galleryG={g1?,g2?.....gn?} , gi?表示gallery中的一个人 , 待测人脸Pj?与每个gi?计算一个相似度 , 用Sji?表示 , Sji?表示两张人脸图片是同一个人的概率 。 我们将G中的每一个人与Pj?计算相似度 , 得到一个集合S{sj1?,sj2?.....sjn?} , 对集合S进行由大到小的排序(用的欧式距离就是从小到大排序) 。 假定与Pj?在gallery中对应人的是g? , 定义rank(Pj?)=n表示Pj?与g?的相似度排在第n位 , rank1也称为topmatch 。
对于刷脸支付就是一个top1的open-set identification , 人脸身份验证就是一个topk的open-set identification 。
闭集识别
闭集识别(close-set identification):闭集识别需要解决的问题是 , 在gallery中找到probePj? , Pj?属于gallery中 。 与开集识别一样 , 闭集识别关心的也是在topk中是否包含正确的识别结果 。
评估指标
下面的评估指标在开集识别和闭集识别中都适用
- DIR
本文插图
下面我们来举例说明一下
假设G中有A、B、C三个人的人脸信息每个人有一张照片 , Pj是属于C的另一张人脸照片 , 如果Pj与A、B、C的相似度分别为0.5、0.6、0.9 , τ为0.7 , 那么此时才算是匹配正确 。 如果Pj与C的相似度为0.68<τ , 会被认为是库外人员从而导致漏匹配 。 如果Pj与A、B、C的相似度为0.6、0.8、0.78 , 那么此时Pj的top1匹配应该是B , 因为C与Pj的相似度排在第二位是rank(Pj)=2 , 此时Pj匹配上了错误的人 。
- FAR
本文插图
对于1:N的人脸搜索来说 , 当FAR越低的情况下 , DIR越高时 , 表示模型的性能越好 , 下面我们通过一个例子来说明一下 , 这两个评估指标是如何计算的
本文插图
上表展示了Pg?(照片在G中)和Pn?(照片不在G中)在gallery(G)中的测试结果 , a、b、c在G中分别对应A、B、C , d、e、f均不在G中 。 阈值τ取0.7时 , 我们来计算一下DIR和FIR
- a与A的相似度最高 , 且SaA?>τ , 所以匹配成功
- 虽然b与B的相似度SbB?>τ , 但SbB?<SbA? , 所以匹配错误
- c与C的相似度最高 , 但ScC?<τ , 所以匹配错误
- d与A的相似度最高 , 且SdA?<τ , 因为d不在库中 , 所以匹配正确
- e与C的相似度最高 , 且SeC?>τ , 因为c不在库中 , 所以匹配错误
- f与C的相似度最高 , 且SfC?<τ , 因为f不在库中 , 所以匹配正确
推荐阅读
- 这款抹茶麻薯软欧,简单好做,满满坚果馅,好吃还不腻
- 1碗面粉,不加水,锅里蒸一蒸,做香甜可口的发糕,比蛋糕还香
- 番茄炒鸡蛋先炒番茄还是先炒鸡蛋?其实都不对,正确方法送给你
- 这几道菜在我家太受欢迎, 做法还很简单!
- 做蛋炒饭,先炒蛋呢还是先炒饭呢很多人做的不对,难怪不好吃
- 天冷了,怎能不吃此菜?十分钟就上桌,香辣可口还美味,贼香
- 火星|拍摄11064张照片后,火星毅力号看到了什么?这次还真看到了
- 猴面包树|这种树“能吃能喝还能住”,养活无数非洲人,引进中国后画风变了
- 水煮鱼到底怎么做即简单还好吃呢?下面三款家常做法你觉得怎样?
- 春天,吃鱼吃肉不如吃它,8块钱炒一盘,鲜香营养,好吃还不发胖
