def _export_saved_model(self):
   tmp_dir = self.get_temp_dir()
   checkpoint_path = os.path.join(tmp_dir, 'model.ckpt')
   self._save_checkpoint_from_mock_model(checkpoint_path)
   output_directory = os.path.join(tmp_dir, 'output')
   saved_model_path = os.path.join(output_directory, 'saved_model')
   tf.io.gfile.makedirs(output_directory)
   with mock.patch.object(
       model_builder, 'build', autospec=True) as mock_builder:
     mock_builder.return_value = FakeModel(num_classes=5)
     pipeline_config = pipeline_pb2.TrainEvalPipelineConfig()
     pipeline_config.eval_config.use_moving_averages = False
     detection_model = model_builder.build(pipeline_config.model,
                                           is_training=False)
     outputs, placeholder_tensor = exporter.build_detection_graph(
         input_type='tf_example',
         detection_model=detection_model,
         input_shape=None,
         output_collection_name='inference_op',
         graph_hook_fn=None)
     output_node_names = ','.join(outputs.keys())
     saver = tf.train.Saver()
     input_saver_def = saver.as_saver_def()
     frozen_graph_def = exporter.freeze_graph_with_def_protos(
         input_graph_def=tf.get_default_graph().as_graph_def(),
         input_saver_def=input_saver_def,
         input_checkpoint=checkpoint_path,
         output_node_names=output_node_names,
         restore_op_name='save/restore_all',
         filename_tensor_name='save/Const:0',
         output_graph='',
         clear_devices=True,
         initializer_nodes='')
     exporter.write_saved_model(
         saved_model_path=saved_model_path,
         frozen_graph_def=frozen_graph_def,
         inputs=placeholder_tensor,
         outputs=outputs)
     return saved_model_path
示例#2
0
  def test_write_saved_model(self):
    tmp_dir = self.get_temp_dir()
    trained_checkpoint_prefix = os.path.join(tmp_dir, 'model.ckpt')
    self._save_checkpoint_from_mock_model(trained_checkpoint_prefix,
                                          use_moving_averages=False)
    output_directory = os.path.join(tmp_dir, 'output')
    saved_model_path = os.path.join(output_directory, 'saved_model')
    tf.gfile.MakeDirs(output_directory)
    with mock.patch.object(
        model_builder, 'build', autospec=True) as mock_builder:
      mock_builder.return_value = FakeModel(add_detection_masks=True)
      pipeline_config = pipeline_pb2.TrainEvalPipelineConfig()
      pipeline_config.eval_config.use_moving_averages = False
      detection_model = model_builder.build(pipeline_config.model,
                                            is_training=False)
      outputs, placeholder_tensor = exporter._build_detection_graph(
          input_type='tf_example',
          detection_model=detection_model,
          input_shape=None,
          output_collection_name='inference_op',
          graph_hook_fn=None)
      output_node_names = ','.join(outputs.keys())
      saver = tf.train.Saver()
      input_saver_def = saver.as_saver_def()
      frozen_graph_def = exporter.freeze_graph_with_def_protos(
          input_graph_def=tf.get_default_graph().as_graph_def(),
          input_saver_def=input_saver_def,
          input_checkpoint=trained_checkpoint_prefix,
          output_node_names=output_node_names,
          restore_op_name='save/restore_all',
          filename_tensor_name='save/Const:0',
          clear_devices=True,
          initializer_nodes='')
      exporter.write_saved_model(
          saved_model_path=saved_model_path,
          frozen_graph_def=frozen_graph_def,
          inputs=placeholder_tensor,
          outputs=outputs)

    tf_example_np = np.hstack([self._create_tf_example(
        np.ones((4, 4, 3)).astype(np.uint8))] * 2)
    with tf.Graph().as_default() as od_graph:
      with self.test_session(graph=od_graph) as sess:
        meta_graph = tf.saved_model.loader.load(
            sess, [tf.saved_model.tag_constants.SERVING], saved_model_path)

        signature = meta_graph.signature_def['serving_default']
        input_tensor_name = signature.inputs['inputs'].name
        tf_example = od_graph.get_tensor_by_name(input_tensor_name)

        boxes = od_graph.get_tensor_by_name(
            signature.outputs['detection_boxes'].name)
        scores = od_graph.get_tensor_by_name(
            signature.outputs['detection_scores'].name)
        classes = od_graph.get_tensor_by_name(
            signature.outputs['detection_classes'].name)
        masks = od_graph.get_tensor_by_name(
            signature.outputs['detection_masks'].name)
        num_detections = od_graph.get_tensor_by_name(
            signature.outputs['num_detections'].name)

        (boxes_np, scores_np, classes_np, masks_np,
         num_detections_np) = sess.run(
             [boxes, scores, classes, masks, num_detections],
             feed_dict={tf_example: tf_example_np})
        self.assertAllClose(boxes_np, [[[0.0, 0.0, 0.5, 0.5],
                                        [0.5, 0.5, 0.8, 0.8]],
                                       [[0.5, 0.5, 1.0, 1.0],
                                        [0.0, 0.0, 0.0, 0.0]]])
        self.assertAllClose(scores_np, [[0.7, 0.6],
                                        [0.9, 0.0]])
        self.assertAllClose(classes_np, [[1, 2],
                                         [2, 1]])
        self.assertAllClose(masks_np, np.arange(64).reshape([2, 2, 4, 4]))
        self.assertAllClose(num_detections_np, [2, 1])
    def test_write_saved_model(self):
        tmp_dir = self.get_temp_dir()
        trained_checkpoint_prefix = os.path.join(tmp_dir, 'model.ckpt')
        self._save_checkpoint_from_mock_model(trained_checkpoint_prefix,
                                              use_moving_averages=False)
        output_directory = os.path.join(tmp_dir, 'output')
        saved_model_path = os.path.join(output_directory, 'saved_model')
        tf.gfile.MakeDirs(output_directory)
        with mock.patch.object(model_builder, 'build',
                               autospec=True) as mock_builder:
            mock_builder.return_value = FakeModel(add_detection_keypoints=True,
                                                  add_detection_masks=True)
            pipeline_config = pipeline_pb2.TrainEvalPipelineConfig()
            pipeline_config.eval_config.use_moving_averages = False
            detection_model = model_builder.build(pipeline_config.model,
                                                  is_training=False)
            outputs, placeholder_tensor = exporter._build_detection_graph(
                input_type='tf_example',
                detection_model=detection_model,
                input_shape=None,
                output_collection_name='inference_op',
                graph_hook_fn=None)
            output_node_names = ','.join(outputs.keys())
            saver = tf.train.Saver()
            input_saver_def = saver.as_saver_def()
            frozen_graph_def = exporter.freeze_graph_with_def_protos(
                input_graph_def=tf.get_default_graph().as_graph_def(),
                input_saver_def=input_saver_def,
                input_checkpoint=trained_checkpoint_prefix,
                output_node_names=output_node_names,
                restore_op_name='save/restore_all',
                filename_tensor_name='save/Const:0',
                clear_devices=True,
                initializer_nodes='')
            exporter.write_saved_model(saved_model_path=saved_model_path,
                                       frozen_graph_def=frozen_graph_def,
                                       inputs=placeholder_tensor,
                                       outputs=outputs)

        tf_example_np = np.hstack(
            [self._create_tf_example(np.ones((4, 4, 3)).astype(np.uint8))] * 2)
        with tf.Graph().as_default() as od_graph:
            with self.test_session(graph=od_graph) as sess:
                meta_graph = tf.saved_model.loader.load(
                    sess, [tf.saved_model.tag_constants.SERVING],
                    saved_model_path)

                signature = meta_graph.signature_def['serving_default']
                input_tensor_name = signature.inputs['inputs'].name
                tf_example = od_graph.get_tensor_by_name(input_tensor_name)

                boxes = od_graph.get_tensor_by_name(
                    signature.outputs['detection_boxes'].name)
                scores = od_graph.get_tensor_by_name(
                    signature.outputs['detection_scores'].name)
                classes = od_graph.get_tensor_by_name(
                    signature.outputs['detection_classes'].name)
                keypoints = od_graph.get_tensor_by_name(
                    signature.outputs['detection_keypoints'].name)
                masks = od_graph.get_tensor_by_name(
                    signature.outputs['detection_masks'].name)
                num_detections = od_graph.get_tensor_by_name(
                    signature.outputs['num_detections'].name)

                (boxes_np, scores_np, classes_np, keypoints_np, masks_np,
                 num_detections_np) = sess.run([
                     boxes, scores, classes, keypoints, masks, num_detections
                 ],
                                               feed_dict={
                                                   tf_example: tf_example_np
                                               })
                self.assertAllClose(
                    boxes_np, [[[0.0, 0.0, 0.5, 0.5], [0.5, 0.5, 0.8, 0.8]],
                               [[0.5, 0.5, 1.0, 1.0], [0.0, 0.0, 0.0, 0.0]]])
                self.assertAllClose(scores_np, [[0.7, 0.6], [0.9, 0.0]])
                self.assertAllClose(classes_np, [[1, 2], [2, 1]])
                self.assertAllClose(keypoints_np,
                                    np.arange(48).reshape([2, 2, 6, 2]))
                self.assertAllClose(masks_np,
                                    np.arange(64).reshape([2, 2, 4, 4]))
                self.assertAllClose(num_detections_np, [2, 1])