1

stackoverflow에 대한 여러 게시물을 살펴본 결과 며칠 동안은 계속되었지만 슬프게도 tensorflow 서비스를 통해 개체 검색 모델을 제대로 제공 할 수 없습니다.저장된 모델의 Tensorflow 검색 ssd_mobilenet_v1_coco

나는 다음과 같은 링크를 방문 : How to properly serve an object detection model from Tensorflow Object Detection API?

https://github.com/tensorflow/tensorflow/issues/11863

가 여기에 내가 한 일입니다. 저장된 디렉토리 ssd_mobilenet_v1_coco_11_06_2017에서 (내가 성공적으로 SavedModel에 frozen_inference_graph.pb을 변환 할 수 있었다 다음 스크립트를 사용하여

frozen_inference_graph.pb 
graph.pbtxt 
model.ckpt.data-00000-of-00001 
model.ckpt.index 
model.ckpt.meta 

/: 나는 다음과 같은 파일이 들어있는 ssd_mobilenet_v1_coco_11_06_2017.tar.gz을 다운로드 한

)

import tensorflow as tf 
from tensorflow.python.saved_model import signature_constants 
from tensorflow.python.saved_model import tag_constants 
import ipdb 

# Specify version 1 
export_dir = './saved/1' 
graph_pb = 'frozen_inference_graph.pb' 

builder = tf.saved_model.builder.SavedModelBuilder(export_dir) 

with tf.gfile.GFile(graph_pb, "rb") as f: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(f.read()) 

sigs = {} 

with tf.Session(graph=tf.Graph()) as sess: 
    # name="" is important to ensure we don't get spurious prefixing 
    tf.import_graph_def(graph_def, name="") 
    g = tf.get_default_graph() 
    ipdb.set_trace() 
    inp = g.get_tensor_by_name("image_tensor:0") 
    outputs = {} 
    outputs["detection_boxes"] = g.get_tensor_by_name('detection_boxes:0') 
    outputs["detection_scores"] = g.get_tensor_by_name('detection_scores:0') 
    outputs["detection_classes"] = g.get_tensor_by_name('detection_classes:0') 
    outputs["num_detections"] = g.get_tensor_by_name('num_detections:0') 

    output_tensor = tf.concat([tf.expand_dims(t, 0) for t in outputs], 0) 
    # or use tf.gather?? 

    # out = g.get_tensor_by_name("generator/Tanh:0") 

    sigs[signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY] = \ 
     tf.saved_model.signature_def_utils.predict_signature_def(
      {"in": inp}, {"out": output_tensor}) 

    sigs["predict_images"] = \ 
     tf.saved_model.signature_def_utils.predict_signature_def(
      {"in": inp}, {"out": output_tensor}) 

    builder.add_meta_graph_and_variables(sess, 
             [tag_constants.SERVING], 
             signature_def_map=sigs) 

builder.save() 

나는 다음과 같은 오류 얻을 :

bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server 
--port=9000 --model_base_path=/serving/ssd_mobilenet_v1_coco_11_06_2017/saved 

2017-09-17 22:33:21.325087: W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:268] No versions of servable default found under base path /serving/ssd_mobilenet_v1_coco_11_06_2017/saved/1 

예측을 수행하려면 서버에 연결하기 위해 클라이언트가 필요하다는 것을 알고 있습니다. 그러나 모델을 올바르게 제공 할 수조차 없습니다.

답변

3

원본 게시물의 내용과 약간 다른 내보내기 서명을 변경해야합니다. 이 스크립트는 필요한 당신을 위해 변경을 수행합니다 프로그램이 무엇을하고 있는지에 대한 자세한 내용은

$OBJECT_DETECTION_CONFIG=object_detection/samples/configs/ssd_mobilenet_v1_pets.config 

$ python object_detection/export_inference_graph.py \ --input_type encoded_image_string_tensor \ --pipeline_config_path ${OBJECT_DETECTION_CONFIG} \ --trained_checkpoint_prefix ${YOUR_LOCAL_CHK_DIR}/model.ckpt-${CHECKPOINT_NUMBER} \ --output_directory ${YOUR_LOCAL_EXPORT_DIR} 

를 참조하십시오

https://cloud.google.com/blog/big-data/2017/09/performing-prediction-with-tensorflow-object-detection-models-on-google-cloud-machine-learning-engine

관련 문제