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])
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})
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
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])
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
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
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])
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
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])