https://github.com/davidsandberg/facenet
https://blog.csdn.net/u013044310/article/details/79556099 https://github.com/boyliwensheng/understand_facenet(配套源码地址)
https://blog.csdn.net/huangshaoyin/article/details/81034551
https://github.com/VisualComputingInstitute/triplet-reid
预模型
的下载https://blog.csdn.net/MrCharles/article/details/80360461模型下载链接:https://pan.baidu.com/s/1aiSq7wGpdHIe6MUKPnXgrA 密码:4dcn
20170512-110547(MS-Celeb-1M数据集训练的模型文件,微软人脸识别数据库,名人榜选择前100万名人,搜索引擎采集每个名人100张人脸图片。预训练模型准确率0.993+-0.004)
ModuleNotFoundError: No module named 'facenet'
异常程序中神经网络使用的是谷歌的“inception resnet v1”网络模型,这个模型的输入时160x160的图像,而我们下载的LFW数据集是250x250限像素的图像,所以需要进行图片的预处理。
data/lfw/raw :D:\Python\Work\face-system\face-net\facenet-master\data\ifw\raw data/lfw/lfw_160:D:\Python\Work\face-system\face-net\facenet-master\data\ifw\ifw_160
shell
# 运行脚本,记得将图片文件夹修改为自己的文件夹目录
python src\align\align_dataset_mtcnn.py data/lfw/raw data/lfw/lfw_160 --image_size 160 --margin 32
facenet提供了两个预训练模型,分别是基于CASIA-WebFace和MS-Celeb-1M人脸库训练的,不过需要去谷歌网盘下载,这里给其中一个模型的百度网盘的链接:
https://pan.baidu.com/s/1LLPIitZhXVI_V3ifZ10XNg#list/path=%2F 密码: 12mh
模型放在data文件夹下,没有就创建
shell
# 运行脚本,同样的,目录改为自己的
data\lfw\lfw_160:D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\ifw\\ifw_160
src\models\20180408-102900:D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\models\\20180408-102900
Python src\validate_on_lfw.py data\lfw\lfw_160 src\models\20180408-102900
shell
运行脚本,同样的,目录改为自己的
data\lfw\lfw_160:D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\ifw\\ifw_160
src\models\20180408-102900:D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\models\\20180408-102900
data/pairs.txt:D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\pairs.txt
Python src\validate_on_lfw.py data\lfw\lfw_160 src\models\20180408-102900 --lfw_pairs=data/pairs.txt
shell
2020-04-17 00:27:11.307949: W tensorflow/core/graph/graph_constructor.cc:1272] Importing a graph with a lower producer version 24 into an existing graph with producer version 27. Shape inference will have run different parts of the graph with different producer versions.
Traceback (most recent call last):
facenet.py
代码中找到create_input_pipeline
再添加一行语句with tf.name_scope("tempscope"):
就可以完美解决(貌似Tensorflow 1.10及以上版本才修复这个bug)。
FaceNet可以对比两张人脸图片,可以得出他们的经过网络映射之后的欧式距离,相同的人脸的距离越小。
shell
# 参数:第一个参数为预模型的地址,第二个和第三个参数为图片的地址
python src\compare.py
D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\models\\20180408-102900
D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\ifw\\ifw_160\\Aaron_Eckhart\\Aaron_Eckhart_0001.png
D:\\Python\\Work\\face-system\\face-net\\facenet-master\\data\\ifw\\ifw_160\\Aaron_Guiel\\Aaron_Guiel_0001.png
在
detect_face.py
中加入下面的配置,防止出现GPU内存不足报错,放在代码靠前的位置
python
config = tf.ConfigProto(allow_soft_placement=True)
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.5) #此处调整GPU的利用率
config.gpu_options.allow_growth = True
代码:
facenet/contributed/cluster.py
(facenet/contributed/clustering.py
实现了相似的功能,只是没有mtcnn
进行检测这一步)
主要功能:
mtcnn
进行人脸检测并对齐与裁剪
facenet
进行embedding
embedding
的特征向量使用欧式距离进行聚类
代码:
facenet/contributed/predict.py
主要功能:
mtcnn
进行人脸检测并对齐与裁剪
facenet
进行embedding
predict.py
进行人脸识别(需要训练好的svm模型)
代码:facenet/contributed/export_embeddings.py
主要功能:
embeddings.npy
;labels.npy
;label_strings.npy