FaceNet(A Unified Embedding for Face Recognition and Clustering)是一种基于深度学习的人脸识别技术,能够将人脸图像转化为高维特征向量,并通过计算特征向量之间的距离关系来进行准确的人脸比对和识别。本教程着重在于如何使用FaceNet来训练自己的数据集(以本人识别为例),并进行简单的测试。有关原理在之后课程介绍。使用FaceNet训练自己的数据集要经过以下步骤:
一、环境配置
配置环境方面采用keras=2.3.0、mtcnn=0.1.1、sklearn.anaconda选择的是python3.6版本。安装过程直接用pip命令:
Pip install keras==2.3.0
Pip install mtcnn
Pip install sklearm
注:其他缺失包自行下载!!!
二、下载源代码
链接:https://pan.baidu.com/s/1KU_HhdIQXpNAtfkuIbGBMg
提取码:LLYH。
下载压缩文件后,保存在一个专门的文件夹中。
这里就直接在我的网盘上下载,下载后的文件结构为:
三、收集数据集
(1)下载源码后打开工程文件,首先打开src文件里save_data.py文件。(这里我使用的是pycharm打开)
(2)在工程中新建data文件夹,用来保存人脸的数据集,在运行代码前需要对代码文件的参数进行修改。
(3)对识别名进行设置。将ap.add_argument中default改为你待检测的识别名。(这里以我LQX为例)。
(4)对采集到的图片保存路径进行设置。path_to_save设置为’../data/’。
(5)开始运行。这里获取图片具体数量因人而异,代码里设置了图片的最大数量为50张,故在50张时程序会自动退出,当然如果你不需要这么多图(可以按’q’提前结束程序)。
(6)根据自己的需求来修改图片数,具体修改如图:
(7)运行完后data文件里会生成一个名为识别名的文件,里面是刚保存的50张图片(我这里用的50张)。
四、用自己的数据集训练模型
(1)打开train_embs.py文件并修改待处理图片路径。对图片进行预处理并将处理后的图片数据保存在pickel文件。
(2)设置pickel文件名及保存路径:
(3)运行train_embs.py文件,在output文件中会生成相应的pickle文件。成功会出现如下结果:
(4)打开train_class.py文件,修改pickle文件的打开路径,设置模型保存路径
,运行运行train_classify.py程序开始训练:
(5)运行成功后会在models文件中会生成.h5文件。如图:
五、模型测试
(1)打开video_recognition.py文件,修改模型参数。运行效果如图:
到此,就已经实现了facenet训练自己的数据集并进行测试,50张图片训练效果还不错,大家可以自行采集更多不同的数据集来训练。