怎么识别两张图片是不是一个人,怎么判断两个照片是不是同一个人

首页 > 实用技巧 > 作者:YD1662024-02-26 18:46:47

导读

随着硬件性能的提升和人脸数据量的增大,人脸识别也越来越成熟,商业应用也越来越多。经常看到很多文章说,人脸识别算法做了什么什么改进在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),比对两张图片是否为同一个人,常见的应用有火车站人脸闸机实名验证、手机人脸解锁等。通过判断比对图片的相似度是否大于阈值,常用的性能评估指标有如下几个

怎么识别两张图片是不是一个人,怎么判断两个照片是不是同一个人(1)

关于详细的混淆矩阵(TP、TN、FP、FN)说明,请参考我的另一篇文章

怎么识别两张图片是不是一个人,怎么判断两个照片是不是同一个人(2)

怎么识别两张图片是不是一个人,怎么判断两个照片是不是同一个人(3)

在一些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分为PnPg​,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也称为top match

对于刷脸支付就是一个top1的open-set identification,人脸身份验证就是一个topk的open-set identification。

闭集识别

闭集识别(close-set identification):闭集识别需要解决的问题是,在gallery中找到probePj​,Pj​属于gallery中。与开集识别一样,闭集识别关心的也是在topk中是否包含正确的识别结果。

评估指标

下面的评估指标在开集识别和闭集识别中都适用

DIR(Detection and Identification Rate):指Pj​∈Pg​与G中的真实的结果s∗之间的相似度大于τ且大于其他所有与Pj​不是同一个人的相似度在Pg​中所占的比例,DIR衡量的是库内人员的通过性能。计算公式如下

怎么识别两张图片是不是一个人,怎么判断两个照片是不是同一个人(4)

下面我们来举例说明一下

假设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(False Alarm Rate):指Pj​∈Pn​与G中最相似的人相似度大于τPn​中所占的比例,FAR衡量的是对库外人脸的拒绝性能也是人脸识别系统安全性的保证。计算公式如下

怎么识别两张图片是不是一个人,怎么判断两个照片是不是同一个人(5)

对于1:N的人脸搜索来说,当FAR越低的情况下,DIR越高时,表示模型的性能越好,下面我们通过一个例子来说明一下,这两个评估指标是如何计算的

怎么识别两张图片是不是一个人,怎么判断两个照片是不是同一个人(6)

上表展示了Pg​(照片在G中)和Pn​(照片不在G中)在gallery(G)中的测试结果,a、b、c在G中分别对应A、B、C,d、e、f均不在G中。阈值τ取0.7时,我们来计算一下DIR和FIR

  1. a与A的相似度最高,且SaA​>τ,所以匹配成功
  2. 虽然b与B的相似度SbB​>τ,但SbB​<SbA​,所以匹配错误
  3. c与C的相似度最高,但ScC​<τ,所以匹配错误

所以DIR=1/3≈33.33%

  1. d与A的相似度最高,且SdA​<τ,因为d不在库中,所以匹配正确
  2. e与C的相似度最高,且SeC​>τ,因为c不在库中,所以匹配错误
  3. f与C的相似度最高,且SfC​<τ,因为f不在库中,所以匹配正确

所以FAR=1/3≈33.33%

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.