tf.keras.layers.RandomPerspective

A preprocessing layer that applies random perspective transformations.

Inherits From: Layer, Operation

This layer distorts the perspective of input images by shifting their
corner points, simulating a 3D-like transformation. The amount of distortion
is controlled by the `factor` and `scale` parameters.

Note: This layer is safe to use inside a <a href="../../../tf/data"><code>tf.data</code></a> or `grain` pipeline
(independently of which backend you're using).

Args:
    factor: A float or a tuple of two floats.
        Represents the probability of applying the perspective
        transformation to each image in the batch.

        - `factor=0.0` ensures no transformation is applied.
        - `factor=1.0` means the transformation is always applied.
        - If a tuple `(min, max)` is provided, a probability is randomly
          sampled between `min` and `max` for each image.
        - If a single float is given, the probability is sampled between
          `0.0` and the provided float.
        Default is 1.0.
    scale: A float defining the relative amount of perspective shift.
        Determines how much the image corners are displaced, affecting
        the intensity of the perspective effect.
    interpolation: Interpolation mode. Supported values: `"nearest"`,
        `"bilinear"`.
    fill_value: a float represents the value to be filled outside the
        boundaries when `fill_mode="constant"`.
    seed: Integer. Used to create a random seed.

Example:
layer = keras.layers.RandomPerspective(bounding_box_format="xyxy")
images = np.random.randint(0, 255, (4, 224, 224, 3), dtype="uint8")

bounding_boxes = {
    "boxes": np.array([
        [[10, 20, 100, 150], [50, 60, 200, 250]],
        [[15, 25, 110, 160], [55, 65, 210, 260]],
        [[20, 30, 120, 170], [60, 70, 220, 270]],
        [[25, 35, 130, 180], [65, 75, 230, 280]],
    ], dtype="float32"),
    "labels": np.array([[0, 1], [1, 2], [2, 3], [0, 3]], dtype="int32")
}

labels = keras.ops.one_hot(
    np.array([0, 1, 2, 3]),
    num_classes=4
)

segmentation_masks = np.random.randint(0, 3, (4, 224, 224, 1), dtype="uint8")

output = layer(
    {
        "images": images,
        "bounding_boxes": bounding_boxes,
        "labels": labels,
        "segmentation_masks": segmentation_masks
    },
    training=True
)

input Retrieves the input tensor(s) of a symbolic operation.

Only returns the tensor(s) corresponding to the first time the operation was called.

output Retrieves the output tensor(s) of a layer.

Only returns the tensor(s) corresponding to the first time the operation was called.

Methods

convert_weight

View source

Convert the weight if it is from the a different backend.

from_config

View source

Creates an operation from its config.

This method is the reverse of get_config, capable of instantiating the same operation from the config dictionary.

if "dtype" in config and isinstance(config["dtype"], dict):
    policy = dtype_policies.deserialize(config["dtype"])

Args
config A Python dictionary, typically the output of get_config.

Returns
An operation instance.

get_random_transformation

View source

transform_bounding_boxes

View source

transform_images

View source

transform_labels

View source

transform_segmentation_masks

View source

transform_single_bounding_box

View source

transform_single_image

View source

transform_single_label

View source

transform_single_segmentation_mask

View source