T
- data type for begin()
output@Operator(group="image") public final class SampleDistortedBoundingBox<T extends Number> extends PrimitiveOp
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.Modifier and Type | Class and Description |
---|---|
static class |
SampleDistortedBoundingBox.Options
Optional attributes for
SampleDistortedBoundingBox |
operation
Modifier and Type | Method and Description |
---|---|
static SampleDistortedBoundingBox.Options |
areaRange(List<Float> areaRange) |
static SampleDistortedBoundingBox.Options |
aspectRatioRange(List<Float> aspectRatioRange) |
Output<Float> |
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 Number> |
create(Scope scope,
Operand<T> imageSize,
Operand<Float> boundingBoxes,
Operand<Float> minObjectCovered,
SampleDistortedBoundingBox.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) |
equals, hashCode, op, toString
public static <T extends Number> SampleDistortedBoundingBox<T> create(Scope scope, Operand<T> imageSize, Operand<Float> boundingBoxes, Operand<Float> minObjectCovered, SampleDistortedBoundingBox.Options... options)
scope
- current scopeimageSize
- 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 valuespublic static SampleDistortedBoundingBox.Options seed(Long seed)
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)
seed2
- A second seed to avoid seed collision.public static SampleDistortedBoundingBox.Options aspectRatioRange(List<Float> aspectRatioRange)
aspectRatioRange
- The cropped area of the image must have an aspect ratio =
width / height within this range.public static SampleDistortedBoundingBox.Options areaRange(List<Float> areaRange)
areaRange
- The cropped area of the image must contain a fraction of the
supplied image within this range.public static SampleDistortedBoundingBox.Options maxAttempts(Long maxAttempts)
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 useImageIfNoBoundingBoxes(Boolean useImageIfNoBoundingBoxes)
useImageIfNoBoundingBoxes
- Controls behavior if no bounding boxes supplied.
If true, assume an implicit bounding box covering the whole input. If false,
raise an error.public Output<T> begin()
public Output<T> size()
Copyright © 2022. All rights reserved.