TensorFlow框架做实时人脸识别小项目(三)

本文介绍了一个基于TensorFlow的实时人脸识别项目,利用Facenet生成人脸特征,通过Knn算法进行人脸识别。讨论了Knn算法的工作原理,包括距离计算、最近邻选择和分类过程,并展示了代码实现。项目在有限的训练数据上达到高识别率,但未经优化的代码运行时存在性能问题。
摘要由CSDN通过智能技术生成

第二部分讲到了用facenet将人脸embedding为特征矩阵,这种特征已经具有了相同人对应的向量距离小,不同人对应的向量距离大的特点。接下来,一般的应用有以下几类:

(1)人脸验证(Face ID)。就是检测A,B两个人是否属于同一个人,需要计算两个向量之间的距离,设定合适的报警阈值(threshold)即可。这种应用在手机等电子设备上比较常见,例如现在的手机的人脸解锁功能。

(2)人脸识别(Face Recognition)。给定一张图片,检测数据库中与之最相似的人脸,这个应用相对是较多的。这个问题显然可以被转换为一个求距离最近邻的问题,最适合用Knn算法解决。

(3)人脸聚类(Face Clastering)。目的是在数据库中找出最相似的人脸。直接使用聚类算法对人脸特征进行聚类,例如KMeans等。

这里我们要进行的是人脸识别,就是上面所讲的第二类问题。在小项目里使用的就是Knn算法,这个算法简单快速,准确率还不错。当然这个也不是唯一的,也可以用其他的分类算法,比如SVM等。(但是经过我自己的实验,用SVM的效果并不理想,究竟是为啥原因还有待探讨)接下来说一下Knn在这里是怎样工作的。

knn,即K最近邻(k-NearestNeighbor)分类算法,见名思意:找到最近的k个邻居(样本),在前k个样本中选择频率最高的类别作为预测类别。它是一种有监督的学习算法。算法步骤如下: 

  1)算距离:给定未知对象,计算它与训练集中的每个对象的距离; 
  2)找近邻:圈定距离最近的k个训练对象,作为未知对象的近邻; 
  3)做分类:在这k个近邻中出线次数最多的类别就是测试对象的预测类别。

其中k值的取值很重要,下面借别人的例子来说明这个算法的工作原理。有下面这么一张图,要判断中间的绿点属于哪一类。


若k = 3,那么绿点会被判定属于红色三角;

若k = 5,那么三角会被判定属于蓝色矩形;

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值