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