【人脸识别】【python】Object arrays cannot be loaded when allow_pickle=False解决方案

2023-11-09

2020年2月11日 0次阅读 共1625个字 0条评论 0人点赞 QueenDekimZ
mtcnn debug

用mtcnn对LFW人脸数据集进行人脸检测与关键点对齐,并裁剪到160*160维,为后续facenet训练作training set。

python src/align/align_dataset_mtcnn.py lfw lfw_160 --image_size 160
–margin 32 --random_order --gpu_memory_fraction 0.25

报错:

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 = detect_face.create_mtcnn(sess, None)
File "D:\authentic_learningvideo\facenet-master\src\align\detect_face.py", line 283, in create_mtcnn
pnet.load(os.path.join(model_path, 'det1.npy'), sess)
File "D:\authentic_learningvideo\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 "D:\CODE_TOOLS\VisualStudio\shared\Anaconda3_64\envs\tflearn-gpu\lib\site-packages\numpy\lib\npyio.py", line 453, in load
pickle_kwargs=pickle_kwargs)
File "D:\CODE_TOOLS\VisualStudio\shared\Anaconda3_64\envs\tflearn-gpu\lib\site-packages\numpy\lib\format.py", line 739, in read_array
raise ValueError("Object arrays cannot be loaded when "
ValueError: Object arrays cannot be loaded when allow_pickle=False

原因是自Numpy 1.16.3版本发行之后,函数 numpy.load() 和 numpy.lib.format.read_array() 采用allow_pickle关键字,现在默认为False以响应CVE-2019-6446 < nvd.nist.gov/vuln/detail / CVE-2019-6446 >。

网上论坛解决方案一般是通过pip install numpy==1.16.2来回退numpy版本,不过这样可能会造成环境版本不稳定。

我发现了另一种简便的解决方案:

  1. 找到所在出错.py文件中的所在行,我这里是File
    “D:\authentic_learningvideo\facenet-master\src\align\detect_face.py”,
    line 85;
  2. 将np.load(path) 改为np.load(path,
    allow_pickle=True),我这里是将np.load(data_path,
    encoding=‘latin1’)改为np.load(data_path, encoding=‘latin1’,
    allow_pickle=True)
  3. 保存,重新运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【人脸识别】【python】Object arrays cannot be loaded when allow_pickle=False解决方案 的相关文章