SampleDistortedBoundingBox

public final class SampleDistortedBoundingBox

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_boxes 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.summary.image('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.

Nested Classes

class SampleDistortedBoundingBox.Options Optional attributes for SampleDistortedBoundingBox  

Constants

String OP_NAME The name of this op, as known by TensorFlow core engine

Public Methods

static SampleDistortedBoundingBox.Options
areaRange(List<Float> areaRange)
static SampleDistortedBoundingBox.Options
aspectRatioRange(List<Float> aspectRatioRange)
Output<TFloat32>
bboxes()
3-D with shape `[1, 1, 4]` containing the distorted bounding box.
Output<T>
begin()
1-D, containing `[offset_height, offset_width, 0]`.
static <T extends TNumber> SampleDistortedBoundingBox<T>
create(Scope scope, Operand<T> imageSize, Operand<TFloat32> boundingBoxes, Operand<TFloat32> minObjectCovered, Options... options)
Factory method to create a class wrapping a new SampleDistortedBoundingBox operation.
static SampleDistortedBoundingBox.Options
maxAttempts(Long maxAttempts)
static SampleDistortedBoundingBox.Options
seed(Long seed)
static SampleDistortedBoundingBox.Options
seed2(Long seed2)
Output<T>
size()
1-D, containing `[target_height, target_width, -1]`.
static SampleDistortedBoundingBox.Options
useImageIfNoBoundingBoxes(Boolean useImageIfNoBoundingBoxes)

Inherited Methods

Constants

public static final String OP_NAME

The name of this op, as known by TensorFlow core engine

Constant Value: "SampleDistortedBoundingBoxV2"

Public Methods

public static SampleDistortedBoundingBox.Options areaRange (List<Float> areaRange)

Parameters
areaRange The cropped area of the image must contain a fraction of the supplied image within this range.

public static SampleDistortedBoundingBox.Options aspectRatioRange (List<Float> aspectRatioRange)

Parameters
aspectRatioRange The cropped area of the image must have an aspect ratio = width / height within this range.

public Output<TFloat32> bboxes ()

3-D with shape `[1, 1, 4]` containing the distorted bounding box. Provide as input to tf.image.draw_bounding_boxes.

public Output<T> begin ()

1-D, containing `[offset_height, offset_width, 0]`. Provide as input to tf.slice.

public static SampleDistortedBoundingBox<T> create (Scope scope, Operand<T> imageSize, Operand<TFloat32> boundingBoxes, Operand<TFloat32> minObjectCovered, Options... options)

Factory method to create a class wrapping a new SampleDistortedBoundingBox operation.

Parameters
scope current scope
imageSize 1-D, containing `[height, width, channels]`.
boundingBoxes 3-D with shape `[batch, N, 4]` describing the N bounding boxes associated with the image.
minObjectCovered The cropped area of the image must contain at least this fraction of any bounding box supplied. The value of this parameter should be non-negative. In the case of 0, the cropped area does not need to overlap any of the bounding boxes supplied.
options carries optional attributes values
Returns
  • a new instance of SampleDistortedBoundingBox

public static SampleDistortedBoundingBox.Options maxAttempts (Long maxAttempts)

Parameters
maxAttempts Number of attempts at generating a cropped region of the image of the specified constraints. After `max_attempts` failures, return the entire image.

public static SampleDistortedBoundingBox.Options seed (Long seed)

Parameters
seed If either `seed` or `seed2` are set to non-zero, the random number generator is seeded by the given `seed`. Otherwise, it is seeded by a random seed.

public static SampleDistortedBoundingBox.Options seed2 (Long seed2)

Parameters
seed2 A second seed to avoid seed collision.

public Output<T> size ()

1-D, containing `[target_height, target_width, -1]`. Provide as input to tf.slice.

public static SampleDistortedBoundingBox.Options useImageIfNoBoundingBoxes (Boolean useImageIfNoBoundingBoxes)

Parameters
useImageIfNoBoundingBoxes Controls behavior if no bounding boxes supplied. If true, assume an implicit bounding box covering the whole input. If false, raise an error.