opencv python 人脸识别 相似度_OpenCV+Tensorflow实现实时人脸识别演示

本文介绍了如何利用Facenet网络进行人脸识别。Facenet是一个直接在欧几里得空间生成人脸特征的模型,简化了验证、聚类任务。文章通过加载预训练的facenet模型,计算512维的embedding数据,采用余弦相似度计算人脸相似度。代码实现了OpenCV实时摄像头调用,结合MTCNN进行人脸检测,并展示了运行效果。
摘要由CSDN通过智能技术生成

原标题:OpenCV+Tensorflow实现实时人脸识别演示

Facenet网络介绍

FaceNet是谷歌提出的人脸识别模型,它跟其他人脸识别模型最大的一个不同就是它不是一个中间层输出,而是直接在欧几里德低维空间嵌入生成人脸特征,这个对以后的各种识别、分类、相似度比较都非常方便。相比其他的深度学习方法,FaceNet仅需要128个字节来表示一张脸。FaceNet网络设计目标任务有如下

1.验证-验证是否为同一张脸

3.聚类-发现人脸具有相同之处的人

关于什么是神经网络嵌入,这个解释比较复杂,简单的说神经网络的嵌入学习可以帮助我们把离散变量表示为连续的向量,在低维空间找到最近邻,tensorflow中的word2vec就是用了嵌入。一旦嵌入神经网络训练好以后,目标任务就变得很简单:

人脸验证 – 就变成相似度比较问题

人脸识别 – 就变成KNN分类问题

人脸聚类 – 就变成通过K-Means可以完成的问题

相比其它的人脸识别网络,通过添加分类层实现人脸识别,在分类层之前输出的人脸特征数据动则就几千个维度数据,而且不能很好表达一张新的人脸。FaceNet使用三元损失函数基于LMNN训练输出128维的连续向量。三元损失包含了两个匹配人脸的指纹与一个不匹配的人脸指纹,损失函数训练的目标是训练它在匹配人脸指纹与不匹配人脸指纹之间距离margin足够大为止。人脸指纹来自人脸区域图像,没有经过对齐,只是结果简单的几何变换。整个网络架构与三元表示如下:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值