3

我正在使用this教程使用tensorflow serving使用我的對象檢測模型。我正在使用tensorflow object detection來生成模型。我使用this導出器創建了一個冷凍模型(生成的冷凍模型使用python腳本工作)。Tensorflow服務沒有可用的版本<MODEL>在基本路徑下找到

冷凍圖表目錄有以下內容(上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年8月7日10:22:43.892834:W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:262] 在基路徑/ serving/ssd_frozen/ 2017-08-07 10:22:44.892901:W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc下找不到可用的ssd版本:262] 在基路徑/ serving/ssd_frozen/

下找不到可用ssd的版本

...

請幫助我。我已經花了很多時間。

回答

6

我有同樣的問題,原因是因爲在導出檢測模型時,對象檢測api不會分配您的模型的版本。但是,tensorflow服務需要您指定檢測模型的版本號,以便您可以選擇要提供的不同版本的模型。在你的情況下,你應該把你的檢測模型(.pb文件和變量文件夾)放在文件夾下: /serving/ssd_frozen/1 /。通過這種方式,您可以將模型分配到版本1,並且張量流服務將自動加載此版本,因爲您只有一個版本。默認情況下,張量流服務將自動提供最新版本(即最大版本數量)。

請注意,在創建1 /文件夾後,model_base_path仍需要設置爲--model_base_path =/serving/ssd_frozen /。

+0

非常感謝您的幫助。解決了這個問題。 :) – Ultraviolet

2

對於新版本的tf服務,如您所知,它不再支持用於由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。

enter image description here

+0

謝謝。看起來像'tensorflow模型'回購已經經歷了一個重大變化。 – Ultraviolet