def test_get_spatial_image_size_from_aspect_preserving_resizer_dynamic(
         self):
     image_resizer_config = image_resizer_pb2.ImageResizer()
     image_resizer_config.keep_aspect_ratio_resizer.min_dimension = 100
     image_resizer_config.keep_aspect_ratio_resizer.max_dimension = 600
     image_shape = config_util.get_spatial_image_size(image_resizer_config)
     self.assertAllEqual(image_shape, [-1, -1])
 def testGetSpatialImageSizeFromAspectPreservingResizerConfig(self):
     image_resizer_config = image_resizer_pb2.ImageResizer()
     image_resizer_config.keep_aspect_ratio_resizer.min_dimension = 100
     image_resizer_config.keep_aspect_ratio_resizer.max_dimension = 600
     image_resizer_config.keep_aspect_ratio_resizer.pad_to_max_dimension = True
     image_shape = config_util.get_spatial_image_size(image_resizer_config)
     self.assertAllEqual(image_shape, [600, 600])
示例#3
0
 def _resized_image_given_text_proto(self, image, text_proto):
   image_resizer_config = image_resizer_pb2.ImageResizer()
   text_format.Merge(text_proto, image_resizer_config)
   image_resizer_fn = image_resizer_builder.build(image_resizer_config)
   image_placeholder = tf.placeholder(tf.uint8, [1, None, None, 3])
   resized_image, _ = image_resizer_fn(image_placeholder)
   with self.test_session() as sess:
     return sess.run(resized_image, feed_dict={image_placeholder: image})
示例#4
0
 def _shape_of_resized_random_image_given_text_proto(
         self, input_shape, text_proto):
     image_resizer_config = image_resizer_pb2.ImageResizer()
     text_format.Merge(text_proto, image_resizer_config)
     image_resizer_fn = image_resizer_builder.build(image_resizer_config)
     images = tf.to_float(tf.random_uniform(
         input_shape, minval=0, maxval=255, dtype=tf.int32))
     resized_images = image_resizer_fn(images)
     with self.test_session() as sess:
         return sess.run(resized_images).shape
示例#5
0
    def _resized_image_given_text_proto(self, image, text_proto):
        image_resizer_config = image_resizer_pb2.ImageResizer()
        text_format.Merge(text_proto, image_resizer_config)
        image_resizer_fn = image_resizer_builder.build(image_resizer_config)

        def graph_fn(image):
            resized_image, _ = image_resizer_fn(image)
            return resized_image

        return self.execute_cpu(graph_fn, [image])
示例#6
0
def build_input():
  image_tensor = image_ph = tf.placeholder(dtype=tf.uint8, shape=[None, None, 3], name='image_ph')
  image_resizer_text_proto = """
    keep_aspect_ratio_resizer {
      min_dimension: 800
      max_dimension: 1365
    }
  """
  image_resizer_config = image_resizer_pb2.ImageResizer()
  text_format.Merge(image_resizer_text_proto, image_resizer_config)
  image_resizer_fn = image_resizer_builder.build(image_resizer_config)
  resized_image_tensor, _ = image_resizer_fn(image_tensor)
  resized_image_tensor = tf.cast(resized_image_tensor, dtype=tf.uint8)
  resized_image_tensor = tf.expand_dims(resized_image_tensor, 0)

  return image_ph, resized_image_tensor
示例#7
0
    def _shape_of_resized_random_image_given_text_proto(
            self, input_shape, text_proto):
        image_resizer_config = image_resizer_pb2.ImageResizer()
        text_format.Merge(text_proto, image_resizer_config)
        image_resizer_fn = image_resizer_builder.build(image_resizer_config)

        def graph_fn():
            images = tf.cast(tf.random_uniform(input_shape,
                                               minval=0,
                                               maxval=255,
                                               dtype=tf.int32),
                             dtype=tf.float32)
            resized_images, _ = image_resizer_fn(images)
            return resized_images

        return self.execute_cpu(graph_fn, []).shape
示例#8
0
def build_input(tfrecord_paths):
  """Builds the graph's input.

  Args:
    tfrecord_paths: List of paths to the input TFRecords

  Returns:
    serialized_example_tensor: The next serialized example. String scalar Tensor
    image_tensor: The decoded image of the example. Uint8 tensor,
        shape=[1, None, None,3]
  """
  filename_queue = tf.train.string_input_producer(
      tfrecord_paths, shuffle=False, num_epochs=1)

  tf_record_reader = tf.TFRecordReader()
  _, serialized_example_tensor = tf_record_reader.read(filename_queue)

  # *** MODIFIED
  prefetch_queue = prefetcher.prefetch({'serialized_example_tensor': serialized_example_tensor}, 100)
  dequeue = prefetch_queue.dequeue()
  serialized_example_tensor = dequeue['serialized_example_tensor']

  # *** MODIFIED ENDS



  features = tf.parse_single_example(
      serialized_example_tensor,
      features={
          standard_fields.TfExampleFields.image_encoded:
              tf.FixedLenFeature([], tf.string),
      })
  encoded_image = features[standard_fields.TfExampleFields.image_encoded]
  image_tensor = tf.image.decode_image(encoded_image, channels=3)
  image_tensor.set_shape([None, None, 3])
  # image_tensor = tf.expand_dims(image_tensor, 0)

  # # *** MODIFIED
  # batch = tf.train.batch(
  #   [serialized_example_tensor, image_tensor],
  #   batch_size=24,
  #   enqueue_many=False,
  #   num_threads=6,
  #   capacity=5 * 24)
  # return batch[0], batch[1]
  image_resizer_text_proto = """
    keep_aspect_ratio_resizer {
      min_dimension: 800
      max_dimension: 1365
    }
  """
  image_resizer_config = image_resizer_pb2.ImageResizer()
  text_format.Merge(image_resizer_text_proto, image_resizer_config)
  image_resizer_fn = image_resizer_builder.build(image_resizer_config)
  resized_image_tensor, _ = image_resizer_fn(image_tensor)
  # resized_image_tensor = tf.image.convert_image_dtype(resized_image_tensor, dtype=tf.uint8)
  resized_image_tensor = tf.cast(resized_image_tensor, dtype=tf.uint8)
  resized_image_tensor = tf.expand_dims(resized_image_tensor, 0)

  # # *** MODIFIED ENDS


  return serialized_example_tensor, resized_image_tensor#image_tensor
 def test_get_spatial_image_size_from_fixed_shape_resizer_config(self):
     image_resizer_config = image_resizer_pb2.ImageResizer()
     image_resizer_config.fixed_shape_resizer.height = 100
     image_resizer_config.fixed_shape_resizer.width = 200
     image_shape = config_util.get_spatial_image_size(image_resizer_config)
     self.assertAllEqual(image_shape, [100, 200])
示例#10
0
def eval_input(eval_config,
               eval_input_config,
               model_config,
               model=None,
               params=None):
    """Returns `features` and `labels` tensor dictionaries for evaluation.

  Args:
    eval_config: An eval_pb2.EvalConfig.
    eval_input_config: An input_reader_pb2.InputReader.
    model_config: A model_pb2.DetectionModel.
    model: A pre-constructed Detection Model.
      If None, one will be created from the config.
    params: Parameter dictionary passed from the estimator.

  Returns:
    A tf.data.Dataset that holds (features, labels) tuple.

    features: Dictionary of feature tensors.
      features[fields.InputDataFields.image] is a [1, H, W, C] float32 tensor
        with preprocessed images.
      features[HASH_KEY] is a [1] int32 tensor representing unique
        identifiers for the images.
      features[fields.InputDataFields.true_image_shape] is a [1, 3]
        int32 tensor representing the true image shapes, as preprocessed
        images could be padded.
      features[fields.InputDataFields.original_image] is a [1, H', W', C]
        float32 tensor with the original image.
    labels: Dictionary of groundtruth tensors.
      labels[fields.InputDataFields.groundtruth_boxes] is a [1, num_boxes, 4]
        float32 tensor containing the corners of the groundtruth boxes.
      labels[fields.InputDataFields.groundtruth_classes] is a
        [num_boxes, num_classes] float32 one-hot tensor of classes.
      labels[fields.InputDataFields.groundtruth_area] is a [1, num_boxes]
        float32 tensor containing object areas.
      labels[fields.InputDataFields.groundtruth_is_crowd] is a [1, num_boxes]
        bool tensor indicating if the boxes enclose a crowd.
      labels[fields.InputDataFields.groundtruth_difficult] is a [1, num_boxes]
        int32 tensor indicating if the boxes represent difficult instances.
      -- Optional --
      labels[fields.InputDataFields.groundtruth_instance_masks] is a
        [1, num_boxes, H, W] float32 tensor containing only binary values,
        which represent instance masks for objects.

  Raises:
    TypeError: if the `eval_config`, `eval_input_config` or `model_config`
      are not of the correct type.
  """
    params = params or {}
    if not isinstance(eval_config, eval_pb2.EvalConfig):
        raise TypeError('For eval mode, the `eval_config` must be a '
                        'train_pb2.EvalConfig.')
    if not isinstance(eval_input_config, input_reader_pb2.InputReader):
        raise TypeError('The `eval_input_config` must be a '
                        'input_reader_pb2.InputReader.')
    if not isinstance(model_config, model_pb2.DetectionModel):
        raise TypeError('The `model_config` must be a '
                        'model_pb2.DetectionModel.')

    if eval_config.force_no_resize:
        arch = model_config.WhichOneof('model')
        arch_config = getattr(model_config, arch)
        image_resizer_proto = image_resizer_pb2.ImageResizer()
        image_resizer_proto.identity_resizer.CopyFrom(
            image_resizer_pb2.IdentityResizer())
        arch_config.image_resizer.CopyFrom(image_resizer_proto)

    if model is None:
        model_preprocess_fn = INPUT_BUILDER_UTIL_MAP['model_build'](
            model_config, is_training=False).preprocess
    else:
        model_preprocess_fn = model.preprocess

    def transform_and_pad_input_data_fn(tensor_dict):
        """Combines transform and pad operation."""
        num_classes = config_util.get_number_of_classes(model_config)

        image_resizer_config = config_util.get_image_resizer_config(
            model_config)
        image_resizer_fn = image_resizer_builder.build(image_resizer_config)

        transform_data_fn = functools.partial(
            transform_input_data,
            model_preprocess_fn=model_preprocess_fn,
            image_resizer_fn=image_resizer_fn,
            num_classes=num_classes,
            data_augmentation_fn=None,
            retain_original_image=eval_config.retain_original_images,
            retain_original_image_additional_channels=eval_config.
            retain_original_image_additional_channels)
        tensor_dict = pad_input_data_to_static_shapes(
            tensor_dict=transform_data_fn(tensor_dict),
            max_num_boxes=eval_input_config.max_number_of_boxes,
            num_classes=config_util.get_number_of_classes(model_config),
            spatial_image_shape=config_util.get_spatial_image_size(
                image_resizer_config))
        return (_get_features_dict(tensor_dict), _get_labels_dict(tensor_dict))

    dataset = INPUT_BUILDER_UTIL_MAP['dataset_build'](
        eval_input_config,
        batch_size=params['batch_size'] if params else eval_config.batch_size,
        transform_input_data_fn=transform_and_pad_input_data_fn)
    return dataset
示例#11
0
 def testGetSpatialImageSizeFromConditionalShapeResizer(self):
     image_resizer_config = image_resizer_pb2.ImageResizer()
     image_resizer_config.conditional_shape_resizer.size_threshold = 100
     image_shape = config_util.get_spatial_image_size(image_resizer_config)
     self.assertAllEqual(image_shape, [-1, -1])