一、facenet对数据集的要求
数据格式:
文件夹名/文件名_文件名
- 同一个人的人脸图片放在一个文件夹,文件夹命名为该人的ID
- 文件夹对每个人脸图片的命名为文件夹名_文件名jpg或png
注意:这里文件名通常采用4为长度的数字,例如这个文件夹里有3张图片,我们分别命名为
0001
0002
0003
在facenet中,会根据提供的格式自动解析图片完成模型训练,不需要再打包tf-record数据。
二、数据集的准备
这里我们使用FLW数据集
1.数据集下载

LFW数据集是由美国马赛诸塞大学阿姆斯特分校计算机实验室整理的人脸检测数据集,是评估人脸识别算法效果的公开测试数据集。LFW数据集共有13233张jpeg格式图片,属于5749个不同的人,其中有1680人对应不止一张图片,每张图片尺寸都是250×250,并且被标示出对应的人的名字。LFW数据集中每张图片命名方式为"lfw/name/name_xxx.jpg",这里"xxx"是前面补零的四位图片编号。例如,前美国总统乔治布什的第十张图片为"lfw/George_W_Bush/George_W_Bush_0010.jpg"。
下载网址:http://vis-www.cs.umass.edu/lfw
也可以直接点击下载
下载后打开查看

2.处理数据集
进入facenet目录,输入命令处理图片
python3 src/align/align_dataset_mtcnn.py /media/gqw/Sduty/Linux_tensorflow/LFW /media/gqw/Sduty/Linux_tensorflow/LFW-160 --image_size 160 --margin 32 --random_orde --gup_memory_fraction 0.25
LFW对应的路径:/media/gqw/Sduty/Linux_tensorflow/LFW
存放的路径:/media/gqw/Sduty/Linux_tensorflow/LFW-160
图片保留尺寸:image_size 160 (网络中预训练尺寸为160)
扩充图片:margin 32
打乱样本数据:random_order
配置GPU占用量:gpu_memory_fraction 0.25
报错1

Traceback (most recent call last):
File "src/align/align_dataset_mtcnn.py", line 159, in <module>
main(parse_arguments(sys.argv[1:]))
File "src/align/align_dataset_mtcnn.py", line 55, in main
pnet, rnet, onet = align.detect_face.create_mtcnn(sess, None)
File "/media/gqw/Sduty/Linux_tensorflow/facenet-master/src/align/detect_face.py", line 283, in create_mtcnn
pnet.load(os.path.join(model_path, 'det1.npy'), sess)
File "/media/gqw/Sduty/Linux_tensorflow/facenet-master/src/align/detect_face.py", line 85, in load
data_dict = np.load(data_path, encoding='latin1').item() #pylint: disable=no-member
File "/home/gqw/anaconda3/envs/tf1.7/lib/python3.6/site-packages/numpy/lib/npyio.py", line 440, in load
pickle_kwargs=pickle_kwargs)
File "/home/gqw/anaconda3/envs/tf1.7/lib/python3.6/site-packages/numpy/lib/format.py", line 727, in read_array
raise ValueError("Object arrays cannot be loaded when "
ValueError: Object arrays cannot be loaded when allow_pickle=False
原因:
在新版本中这个参数的默认值由True变成了False,
解决:
方案一:
可以安装旧版本
pip install numpy==1.16.2
方案二:
allow_pickle参数修改为True
方案三:
定位到python3.6/site-packages/numpy/lib/format.py注释掉此语句
我们采取方案三
报错2

File "src/align/align_dataset_mtcnn.py", line 34, in <module>
import facenet
ModuleNotFoundError: No module named 'facenet'
怀疑的环境变量的问题,查看后发现环境变量中找不到。
原因
利用 export添加的环境变量是临时的,只在当前终有用,我们在上篇博文介绍的添加环境变量,在这里失去了作用,具体解释,可以查看此篇博文
解决
重新创建临时变量或者创建永久变量
我们这里选择新建path文件
再次运行
报错3

Traceback (most recent call last):
File "src/align/align_dataset_mtcnn.py", line 159, in <module>
main(parse_arguments(sys.argv[1:]))
File "src/align/align_dataset_mtcnn.py", line 83, in main
img = misc.imread(image_path)
AttributeError: module 'scipy.misc' has no attribute 'imread'
原因:
查找资料得知是scipy版本太高,需要降级到scipy==1.2.1
解决
查看当前是1.5版本

安装scipy==1.2.1
再次运行
报错4

2020-12-13 14:00:05.107431: E tensorflow/stream_executor/cuda/cuda_dnn.cc:396] Loaded runtime CuDNN library: 7605 (compatibility version 7600) but source was compiled with 7102 (compatibility version 7100). If using a binary install, upgrade your CuDNN library to match. If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
2020-12-13 14:00:05.108638: F tensorflow/core/kernels/conv_ops.cc:712] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo<T>(), &algorithms)
原因
根据错误提示得知当前的CuDNN=7.6,版本太高,要降级到CuDNN=7.1
解决
conda install cudnn=7.1
注意安装时是一个等号,否则可能告知镜像里不存在
安装成功后再次运行
成功
查看LFW-160
上篇:Anaconad+Ubuntu16.4下tensorflow+facenet人脸识别(一)facenet环境搭建
下篇:Anaconad+Ubuntu16.4下tensorflow+facenet人脸识别(三)训练模型