我试图使用来自 Keras-Openface 项目的预训练模型来实现面部识别,并且在这里由 Martin Krasser 进行了惊人的解释和实施
OpenFace 项目提供了使用公共人脸识别数据集 FaceScrub 和 CASIA-WebFace 训练的预训练模型。Keras-OpenFace 项目将预训练的 nn4.small2.v1 模型的权重转换为 CSV 文件,然后在此处将其转换为可由 Keras 使用 load_weights 加载的二进制格式
代码很简单:
nn4_small2_pretrained = create_model()
nn4_small2_pretrained.load_weights('weights/nn4.small2.v1.h5')
在查看错误以更深入地了解 create_model() 中发生的情况之前,您可以在此处浏览代码
现在我需要nn4_small2_pretrained在我的predict.py文件中(它最初是 train.py 的一部分来训练我的自定义图像),但如果我这样做
from train import nn4_small2_pretrained
或者写代码
nn4_small2_pretrained = create_model()
nn4_small2_pretrained.load_weights('weights/nn4.small2.v1.h5')
从头再来,然后预测文件需要大量时间来编译,因为它再次经历了整个过程。因此,为了解决这个问题,我尝试将模型转储到 pickle 文件中,如下所示
# Save the nn4 pretrained model to pickle file
f = open('pretrained_model.pickle', 'wb')
pickle.dump(nn4_small2_pretrained, f)
当我运行代码时,它给了我这个错误
File "train.py", line 24, in <module>
pickle.dump(nn4_small2_pretrained, f)
TypeError: can't pickle _thread.lock objects
我最近开始使用 Deel 学习模型和 Pickle,但我不知道出了什么问题。任何帮助将非常感激。
谢谢。