#python #tensorflow #keras #tensorflow.js #tensorflowjs-converter
Вопрос:
Я пытаюсь преобразовать модель Keras в модель tensorflow, а затем загрузить ее в собственное приложение React. Однако после преобразования часть веса, по-видимому, отсутствует. Создание модели и сохранение кода:
import os
#from face_recognition import FaceRecognition
import keras_vggface
from mtcnn.mtcnn import MTCNN
from PIL import Image
from keras_vggface.utils import preprocess_input
from matplotlib import pyplot
from numpy import asarray
from keras_vggface.vggface import VGGFace
from scipy.spatial.distance import cosine
from tensorflow.keras.models import load_model
def get_embeddings(filenames):
# extract faces
faces = [extract_face(f) for f in filenames]
# convert into an array of samples
samples = asarray(faces, 'float32')
# prepare the face for the model, e.g. center pixels
samples = preprocess_input(samples, version=2)
# create a vggface model
model = VGGFace(model='resnet50', include_top=False, input_shape=(224, 224, 3), pooling='avg')
# perform prediction
yhat = model.predict(samples)
return yhat, model
def is_match(known_embedding, candidate_embedding, thresh=0.5):
# calculate distance between embeddings
score = cosine(known_embedding, candidate_embedding)
if score <= thresh:
print('>face is a Match' % (score, thresh))
else:
print('>face is not a match' % (score, thresh))
if __name__ == '__main__':
filenames = ["test1.jpg", "test2.jpg", "test3.jpg", "test4.jpg"]
embeddings, model = get_embeddings(filenames);
ahmed_id = embeddings[1];
is_match(embeddings[0], embeddings[1])
is_match(embeddings[2], embeddings[3])
is_match(embeddings[1], embeddings[2])
model.save("model", include_optimizer=True)
Модель хорошо работает на Python и точно предсказывает. Затем я использую tensorflowjs_wizard, чтобы преобразовать его в Javascript. Команда такова:
tensorflowjs_converter --input_format=keras_saved_model --metadata= --quantize_uint8=* C:UsersuserDocumentsFace_Recognition_Tensorflowmodel .
В результирующей модели отсутствуют веса для определенных слоев. Когда я пытаюсь загрузить его в приложение React Native, я получаю следующую ошибку:
[Unhandled promise rejection: Error: 212 of 265 weights are not set: conv1/7x7_s2/bn/gamma,conv1/7x7_s2/bn/beta, ...
Если я действительно открою файл model.json, я увижу, что в разделе определено 265 слоев model_config
, но в разделе представлены только метаданные, относящиеся к 53 из них weightsManifest
.
Есть какие-нибудь идеи о том, что я здесь делаю не так? Thanls
Комментарии:
1. Для всех, кто попадает на этот пост, я не полностью решил проблему, но мне удалось проследить ее до того факта, что
resnet50
модель содержит некоторые пользовательские слои, которые, похоже, не сохраняются должным образом. Возможно, информация на этой странице может быть использована для правильного сохранения модели. Я обошел проблему, используя вместо этого модель vgg16.