跑通FaceNet人脸识别

原创:杨其泓

一、前言

FaceNet是一个十分经典的人脸识别模型,并且具有较好的性能,但要实现使用自己的数据进行人脸识别,还需要对模型进行重新训练。本文将介绍跑通一个简单FaceNet的全部流程,以及踩坑记录。

二、方案技术路线

  1. 人脸检测:使用 Dlib 中预先训练的模型检测面部;
  2. 人脸校准:使用 Dlib 的实时姿势估计与 OpenCV 的仿射变换来尝试使眼睛和下唇在每个图像上出现在相同位置;
  3. 卷积网络:使用深度神经网络把人脸图片映射为 128 维单位超球面上的一个点;
  4. 分类:使用三元损失函数对每张图片对应的超球面的点(128维向量)比较相似度以此进行分类。

图片来源:https://cmusatyalab.github.io/openface/

三、参考

3.1 论文

FaceNet: A Unified Embedding for Face Recognition and Clustering.

论文链接:https://arxiv.org/abs/1503.03832

3.2 代码

Github代码链接:https://github.com/foamliu/FaceNet

3.3 数据

  • 训练集

CelebFaces Attributes Dataset (CelebA) 是一个大型的人脸数据集,有10,177个身份和202,599张人脸图像。

 数据链接:

http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html

Celeba数据集是香港中文大学的公开数据集,所以支持百度网盘下载!选择Baidu Drive即可将数据集转存至自己的网盘,Celeba数据集大约有22个G(解压后24左右),所以最好要弄个百度网盘SVIP账号再下。

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Facenet是一种基于深度学习人脸识别算法,其代码实现可以使用TensorFlow框架。以下是一个简单的Facenet人脸识别代码示例: ```python import tensorflow as tf import numpy as np import cv2 import os # 加载模型 model_path = 'models/20180402-114759.pb' model = tf.Graph() with model.as_default(): graph_def = tf.GraphDef() with tf.gfile.GFile(model_path, 'rb') as f: serialized_graph = f.read() graph_def.ParseFromString(serialized_graph) tf.import_graph_def(graph_def, name='') # 获取输入和输出张量 input_name = 'input:0' embeddings_name = 'embeddings:0' phase_train_name = 'phase_train:0' with model.as_default(): input_tensor = model.get_tensor_by_name(input_name) embeddings_tensor = model.get_tensor_by_name(embeddings_name) phase_train_tensor = model.get_tensor_by_name(phase_train_name) # 加载人脸检测器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 加载人脸图像 img_path = 'test.jpg' img = cv2.imread(img_path) # 检测人脸 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 提取人脸特征 with tf.Session(graph=model) as sess: sess.run(tf.global_variables_initializer()) for (x, y, w, h) in faces: face_img = img[y:y+h, x:x+w] face_img = cv2.resize(face_img, (160, 160)) face_img = cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB) face_img = np.expand_dims(face_img, axis=0) feed_dict = {input_tensor: face_img, phase_train_tensor: False} embeddings = sess.run(embeddings_tensor, feed_dict=feed_dict) print(embeddings) # 相关问题:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值