|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| """Provides utilities to preprocess images in CIFAR-10.
|
|
|
| """
|
|
|
| from __future__ import absolute_import
|
| from __future__ import division
|
| from __future__ import print_function
|
|
|
| import tensorflow.compat.v1 as tf
|
|
|
|
|
| _PADDING = 4
|
|
|
|
|
| def preprocess_for_train(image,
|
| output_height,
|
| output_width,
|
| padding=_PADDING,
|
| add_image_summaries=True,
|
| use_grayscale=False):
|
| """Preprocesses the given image for training.
|
|
|
| Note that the actual resizing scale is sampled from
|
| [`resize_size_min`, `resize_size_max`].
|
|
|
| Args:
|
| image: A `Tensor` representing an image of arbitrary size.
|
| output_height: The height of the image after preprocessing.
|
| output_width: The width of the image after preprocessing.
|
| padding: The amound of padding before and after each dimension of the image.
|
| add_image_summaries: Enable image summaries.
|
| use_grayscale: Whether to convert the image from RGB to grayscale.
|
|
|
| Returns:
|
| A preprocessed image.
|
| """
|
| if add_image_summaries:
|
| tf.summary.image('image', tf.expand_dims(image, 0))
|
|
|
|
|
| image = tf.to_float(image)
|
| if use_grayscale:
|
| image = tf.image.rgb_to_grayscale(image)
|
| if padding > 0:
|
| image = tf.pad(image, [[padding, padding], [padding, padding], [0, 0]])
|
|
|
| distorted_image = tf.random_crop(image,
|
| [output_height, output_width, 3])
|
|
|
|
|
| distorted_image = tf.image.random_flip_left_right(distorted_image)
|
|
|
| if add_image_summaries:
|
| tf.summary.image('distorted_image', tf.expand_dims(distorted_image, 0))
|
|
|
|
|
|
|
| distorted_image = tf.image.random_brightness(distorted_image,
|
| max_delta=63)
|
| distorted_image = tf.image.random_contrast(distorted_image,
|
| lower=0.2, upper=1.8)
|
|
|
| return tf.image.per_image_standardization(distorted_image)
|
|
|
|
|
| def preprocess_for_eval(image,
|
| output_height,
|
| output_width,
|
| add_image_summaries=True,
|
| use_grayscale=False):
|
| """Preprocesses the given image for evaluation.
|
|
|
| Args:
|
| image: A `Tensor` representing an image of arbitrary size.
|
| output_height: The height of the image after preprocessing.
|
| output_width: The width of the image after preprocessing.
|
| add_image_summaries: Enable image summaries.
|
| use_grayscale: Whether to convert the image from RGB to grayscale.
|
|
|
| Returns:
|
| A preprocessed image.
|
| """
|
| if add_image_summaries:
|
| tf.summary.image('image', tf.expand_dims(image, 0))
|
|
|
| image = tf.to_float(image)
|
| if use_grayscale:
|
| image = tf.image.rgb_to_grayscale(image)
|
|
|
|
|
| resized_image = tf.image.resize_image_with_crop_or_pad(image,
|
| output_width,
|
| output_height)
|
| if add_image_summaries:
|
| tf.summary.image('resized_image', tf.expand_dims(resized_image, 0))
|
|
|
|
|
| return tf.image.per_image_standardization(resized_image)
|
|
|
|
|
| def preprocess_image(image,
|
| output_height,
|
| output_width,
|
| is_training=False,
|
| add_image_summaries=True,
|
| use_grayscale=False):
|
| """Preprocesses the given image.
|
|
|
| Args:
|
| image: A `Tensor` representing an image of arbitrary size.
|
| output_height: The height of the image after preprocessing.
|
| output_width: The width of the image after preprocessing.
|
| is_training: `True` if we're preprocessing the image for training and
|
| `False` otherwise.
|
| add_image_summaries: Enable image summaries.
|
| use_grayscale: Whether to convert the image from RGB to grayscale.
|
|
|
| Returns:
|
| A preprocessed image.
|
| """
|
| if is_training:
|
| return preprocess_for_train(
|
| image,
|
| output_height,
|
| output_width,
|
| add_image_summaries=add_image_summaries,
|
| use_grayscale=use_grayscale)
|
| else:
|
| return preprocess_for_eval(
|
| image,
|
| output_height,
|
| output_width,
|
| add_image_summaries=add_image_summaries,
|
| use_grayscale=use_grayscale)
|
|
|