Spec-Zone.ru › TensorFlow

tf.image.sample_distorted_bounding_box

Генерирует одну случайно искаженную ограничивающую рамку (bounding box) для изображения.

tf.image.sample_distorted_bounding_box(
    image_size,
    bounding_boxes,
    seed=0,
    min_object_covered=0.1,
    aspect_ratio_range=None,
    area_range=None,
    max_attempts=None,
    use_image_if_no_bounding_boxes=None,
    name=None
)

В задачах распознавания изображений или локализации объектов аннотации ограничивающих рамок часто предоставляются в дополнение к истинным меткам (ground-truth). Распространенным методом обучения такой системы является случайное искажение изображения с сохранением его содержимого, то есть аугментация данных. Эта операция выводит случайно искаженную локализацию объекта, то есть ограничивающую рамку, на основе image_size, bounding_boxes и ряда ограничений.

Результатом этой операции является одна ограничивающая рамка, которую можно использовать для обрезки исходного изображения. Результат возвращается в виде трех тензоров: begin, size и bboxes. Первые два тензора можно передать напрямую в tf.slice для обрезки изображения. Последний можно передать в tf.image.draw_bounding_boxes для визуализации того, как выглядит ограничивающая рамка.

Ограничивающие рамки передаются и возвращаются как [y_min, x_min, y_max, x_max]. Координаты ограничивающей рамки представляют собой числа с плавающей запятой в диапазоне [0.0, 1.0] относительно ширины и высоты исходного изображения.

Например,

# Generate a single distorted bounding box.
begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(
    tf.shape(image),
    bounding_boxes=bounding_boxes,
    min_object_covered=0.1)

# 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.compat.v1.summary.image('images_with_box', image_with_box)

# Employ the bounding box to distort the image.
distorted_image = tf.slice(image, begin, size)

Обратите внимание, что если информация об ограничивающих рамках отсутствует, установка параметра use_image_if_no_bounding_boxes = true приведет к предположению, что существует одна неявная ограничивающая рамка, покрывающая все изображение. Если параметр use_image_if_no_bounding_boxes равен false и ограничивающие рамки не указаны, возникает ошибка.

Для получения детерминированных результатов при заданном значении seed используйте tf.image.stateless_sample_distorted_bounding_box. В отличие от использования параметра seed в операциях tf.image.random_*, операции tf.image.stateless_random_* гарантируют одинаковые результаты при одном и том же значении seed независимо от того, сколько раз вызывается функция, и независимо от глобальных настроек seed (например, tf.random.set_seed).

Args
image_size Tensor. Должен иметь один из следующих типов: uint8, int8, int16, int32, int64. Одномерный (1-D), содержащий [height, width, channels].
bounding_boxes Tensor типа float32. Трехмерный (3-D) с формой [batch, N, 4], описывающий N ограничивающих рамок, связанных с изображением.
seed Необязательный int. По умолчанию 0. Если seed задано ненулевым значением, генератор случайных чисел инициализируется заданным значением seed. В противном случае он инициализируется случайным значением seed.
min_object_covered Tensor типа float32. По умолчанию 0.1. Обрезанная область изображения должна содержать как минимум эту долю любой из предоставленных ограничивающих рамок. Значение этого параметра должно быть неотрицательным. В случае 0 обрезанная область не обязательно должна перекрываться с какой-либо из предоставленных ограничивающих рамок.
aspect_ratio_range Необязательный список floats. По умолчанию [0.75, 1.33]. Обрезанная область изображения должна иметь соотношение сторон (aspect ratio = width / height) в пределах этого диапазона.
area_range Необязательный список floats. По умолчанию [0.05, 1]. Обрезанная область изображения должна содержать долю исходного изображения в пределах этого диапазона.
max_attempts Необязательный int. По умолчанию 100. Количество попыток генерации обрезанной области изображения с заданными ограничениями. После max_attempts неудачных попыток возвращается изображение целиком.
use_image_if_no_bounding_boxes Необязательный bool. По умолчанию False. Управляет поведением, если ограничивающие рамки не предоставлены. Если true, предполагается наличие неявной ограничивающей рамки, покрывающей весь вход. Если false, вызывается ошибка.
name Имя для операции (необязательно).
Returns
Кортеж объектов Tensor (begin, size, bboxes).
begin Tensor. Имеет тот же тип, что и image_size. Одномерный (1-D), содержащий [offset_height, offset_width, 0]. Передается на вход tf.slice.
size Tensor. Имеет тот же тип, что и image_size. Одномерный (1-D), содержащий [target_height, target_width, -1]. Передается на вход tf.slice.
bboxes Tensor типа float32. Трехмерный (3-D) с формой [1, 1, 4], содержащий искаженную ограничивающую рамку. Передается на вход tf.image.draw_bounding_boxes.
Raises
ValueError Если seed не указан и включен детерминизм операций.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/image/sample_distorted_bounding_box

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API