tf.image.sample_distorted_bounding_box(image_size, bounding_boxes, seed=None, seed2=None, min_object_covered=None, aspect_ratio_range=None, area_range=None, max_attempts=None, use_image_if_no_bounding_boxes=None, name=None)
Generate a single randomly distorted bounding box for an image.
Bounding box annotations are often supplied in addition to ground-truth labels in image recognition or object localization tasks. A common technique for training such a system is to randomly distort an image while preserving its content, i.e. data augmentation. This Op outputs a randomly distorted localization of an object, i.e. bounding box, given an image_size, bounding_boxes and a series of constraints.
The output of this Op is a single bounding box that may be used to crop the original image. The output is returned as 3 tensors: begin, size and bboxes. The first 2 tensors can be fed directly into tf.slice to crop the image. The latter may be supplied to tf.image.draw_bounding_box to visualize what the bounding box looks like.
Bounding boxes are supplied and returned as [y_min, x_min, y_max, x_max]. The bounding box coordinates are floats in [0.0, 1.0] relative to the width and height of the underlying image.
For example,
# Generate a single distorted bounding box.
begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(
tf.shape(image),
bounding_boxes=bounding_boxes)
# Draw the bounding box in an image summary.
image_with_box = tf.image.draw_bounding_boxes(tf.expand_dims(image, 0),
bbox_for_draw)
tf.image_summary('images_with_box', image_with_box)
# Employ the bounding box to distort the image.
distorted_image = tf.slice(image, begin, size)
Note that if no bounding box information is available, setting use_image_if_no_bounding_boxes = true will assume there is a single implicit bounding box covering the whole image. If use_image_if_no_bounding_boxes is false and no bounding boxes are supplied, an error is raised.
Args:
-
image_size: ATensor. Must be one of the following types:uint8,int8,int16,int32,int64. 1-D, containing[height, width, channels]. -
bounding_boxes: ATensorof typefloat32. 3-D with shape[batch, N, 4]describing the N bounding boxes associated with the image. -
seed: An optionalint. Defaults to0. If eitherseedorseed2are set to non-zero, the random number generator is seeded by the givenseed. Otherwise, it is seeded by a random seed. -
seed2: An optionalint. Defaults to0. A second seed to avoid seed collision. -
min_object_covered: An optionalfloat. Defaults to0.1. The cropped area of the image must contain at least this fraction of any bounding box supplied. -
aspect_ratio_range: An optional list offloats. Defaults to[0.75, 1.33]. The cropped area of the image must have an aspect ratio = width / height within this range. -
area_range: An optional list offloats. Defaults to[0.05, 1]. The cropped area of the image must contain a fraction of the supplied image within in this range. -
max_attempts: An optionalint. Defaults to100. Number of attempts at generating a cropped region of the image of the specified constraints. Aftermax_attemptsfailures, return the entire image. -
use_image_if_no_bounding_boxes: An optionalbool. Defaults toFalse. Controls behavior if no bounding boxes supplied. If true, assume an implicit bounding box covering the whole input. If false, raise an error. -
name: A name for the operation (optional).
Returns:
A tuple of Tensor objects (begin, size, bboxes).
-
begin: ATensor. Has the same type asimage_size. 1-D, containing[offset_height, offset_width, 0]. Provide as input totf.slice. -
size: ATensor. Has the same type asimage_size. 1-D, containing[target_height, target_width, -1]. Provide as input totf.slice. -
bboxes: ATensorof typefloat32. 3-D with shape[1, 1, 4]containing the distorted bounding box. Provide as input totf.image.draw_bounding_boxes.
Please login to continue.