Spec-Zone.ru › TensorFlow

tf.image.stateless_sample_distorted_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
)

Аннотации рамок часто предоставляются дополнительно к истинным меткам в задачах распознавания изображений или локализации объектов. Распространённый метод обучения такой системы заключается в случайном искажении изображения при сохранении его содержимого, т.е. усилении данных. Данный оператор, принимая те же seed, детерминированно выводит случайное искажённое расположение объекта, т.е. рамку, учитывая image_size, bounding_boxes и ряд ограничений.

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