Anaconad+Ubuntu16.4下tensorflow+facenet人脸识别(二)数据集准备

一、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人脸识别(三)训练模型


版权声明:本文为qq_30336973原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。