Spec-Zone.ru › TensorFlow

tf.image.stateless_sample_distorted_bounding_box

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

tf.image.stateless_sample_distorted_bounding_box(
    image_size,
    bounding_boxes,
    seed,
    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) в задачах распознавания изображений или локализации объектов. Распространенным методом обучения таких систем является случайное искажение изображения с сохранением его содержимого, то есть аугментация данных. Данная операция (Op) при одном и том же seed детерминированно возвращает случайно искаженную локализацию объекта, то есть ограничивающую рамку, на основе переданных 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] относительно ширины и высоты исходного изображения.

Гарантируется, что выходные данные этой операции будут одинаковыми при одинаковом значении seed, и не зависят от того, сколько раз вызывается функция, а также от глобальных настроек сида (например, tf.random.set_seed).

Пример использования:

image = np.array([[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]])
bbox = tf.constant(
  [0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4])
seed = (1, 2)
# Generate a single distorted bounding box.
bbox_begin, bbox_size, bbox_draw = (
  tf.image.stateless_sample_distorted_bounding_box(
    tf.shape(image), bounding_boxes=bbox, seed=seed))
# Employ the bounding box to distort the image.
tf.slice(image, bbox_begin, bbox_size)
<tf.Tensor: shape=(2, 2, 1), dtype=int64, numpy=
array([[[1],
        [2]],
       [[4],
        [5]]])>
# Draw the bounding box in an image summary.
colors = np.array([[1.0, 0.0, 0.0], [0.0, 0.0, 1.0]])
tf.image.draw_bounding_boxes(
  tf.expand_dims(tf.cast(image, tf.float32),0), bbox_draw, colors)
<tf.Tensor: shape=(1, 3, 3, 1), dtype=float32, numpy=
array([[[[1.],
         [1.],
         [3.]],
        [[1.],
         [1.],
         [6.]],
        [[7.],
         [8.],
         [9.]]]], dtype=float32)>

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

Аргументы
image_size Tensor. Должен быть одного из следующих типов: uint8, int8, int16, int32, int64. Одномерный (1-D), содержащий [height, width, channels].
bounding_boxes Tensor типа float32. Трехмерный (3-D) с формой [batch, N, 4], описывающий N ограничивающих рамок, связанных с изображением.
seed Тензор формы [2], сид для генератора случайных чисел. Должен иметь dtype int32 или int64. (При использовании XLA разрешен только int32.)
min_object_covered Тензор типа float32. По умолчанию 0.1. Обрезанная область изображения должна содержать как минимум эту долю любой из предоставленных ограничивающих рамок. Значение этого параметра должно быть неотрицательным. В случае 0 обрезанная область не обязательно должна перекрываться с какой-либо из предоставленных ограничивающих рамок.
aspect_ratio_range Необязательный список floats. По умолчанию [0.75, 1.33]. Обрезанная область изображения должна иметь соотношение сторон (aspect ratio) 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 Имя для операции (необязательно).
Возвращает
Кортеж из объектов 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.

© 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/stateless_sample_distorted_bounding_box

Spec-Zone.ru

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