Tensorflow никакой версии наблюдаемы нашли под базовый путь
Я следовал этому учебнику, чтобы использовать tensorflow serving
, используя мою модель обнаружения объектов. Я используюTensorflow object detection для генерации модели. Я создал замороженную модель, используяЭтот экспортер (сгенерированная замороженная модельработает с использованием скрипта python).
Каталог замороженного графа имеет следующее содержание (ничего в каталоге variables
)
Переменные/
Saved_model.pb
Теперь, когда я пытаюсь служить модель, использующая следующую команду,
tensorflow_model_server --port=9000 --model_name=ssd --model_base_path=/serving/ssd_frozen/
Он всегда показывает мне
...
Tensorflow_serving / model_servers/server_core. cc: 421] (повторное)добавление модель: ssd 2017-08-07 10: 22: 43.892834: W tensorflow_serving / sources / storage_path/file_system_storage_path_source. cc: 262] В разделе base path /serving/ssd_frozen нет версий обслуживаемых ssd/ 2017-08-07 10: 22: 44.892901: W tensorflow_serving / sources / storage_path/file_system_storage_path_source. cc: 262] Нет версий наблюдаемы ССД нашли под базовый путь /обслуживающих/ssd_frozen/
...
2 ответа:
У меня была та же проблема, причина в том, что api обнаружения объектов не назначает версию вашей модели при экспорте вашей модели обнаружения. Однако для обслуживания tensorflow требуется назначить номер версии модели обнаружения, чтобы можно было выбрать различные версии моделей для обслуживания. В вашем случае вы должны поместить свою модель обнаружения(.файл pb и папка переменных) под папкой: / сервировка / ssd_frozen / 1/. Таким образом, вы назначите свою модель версии 1 и tensorflow служба автоматически загрузит эту версию, так как у вас есть только одна версия. По умолчанию Tensorflow serving будет автоматически обслуживать последнюю версию (т. е. наибольшее количество версий).
Обратите внимание, что после создания папки 1 / путь model_base_path по-прежнему должен быть установлен в --model_base_path=/serving/ssd_frozen/.
Для новой версии TF serving, как вы знаете, он больше не поддерживает формат модели, используемый для экспорта SessionBundle, но теперь сохраненный в SavedModelBuilder.
Я полагаю, что лучше восстановить сеанс из старого формата модели, а затем экспортировать его с помощью SavedModelBuilder. С его помощью вы можете указать версию своей модели.
def export_saved_model(version, path, sess=None): tf.app.flags.DEFINE_integer('version', version, 'version number of the model.') tf.app.flags.DEFINE_string('work_dir', path, 'your older model directory.') tf.app.flags.DEFINE_string('model_dir', '/tmp/model_name', 'saved model directory') FLAGS = tf.app.flags.FLAGS # you can give the session and export your model immediately after training if not sess: saver = tf.train.import_meta_graph(os.path.join(path, 'xxx.ckpt.meta')) saver.restore(sess, tf.train.latest_checkpoint(path)) export_path = os.path.join( tf.compat.as_bytes(FLAGS.model_dir), tf.compat.as_bytes(str(FLAGS.version))) builder = tf.saved_model.builder.SavedModelBuilder(export_path) # define the signature def map here # ... legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op') builder.add_meta_graph_and_variables( sess, [tf.saved_model.tag_constants.SERVING], signature_def_map={ 'predict_xxx': prediction_signature }, legacy_init_op=legacy_init_op ) builder.save() print('Export SavedModel!')
Вы можете найти основную часть кода выше в Примере обслуживания tf. Наконец, он будет генерировать SavedModel в формате, который может быть обслуженный.