Spec-Zone.ru › TensorFlow 2.9

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 ложно, и рамки не предоставлены, возникает ошибка.

Аргументы
image_size A Tensor. Должен быть одного из следующих типов: uint8, int8, int16, int32, int64. 1-мерный, содержащий [height, width, channels].
bounding_boxes A Tensor типа float32. 3-мерный с формой [batch, N, 4] описывающий N рамок, связанных с изображением.
seed A тензор формы [2], семя для генератора случайных чисел. Должен иметь тип int32 или int64. (При использовании XLA, разрешён только int32)
min_object_covered A тензор типа 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. Управляет поведением, если рамки не предоставлены. Если истинно, то предполагается неявная рамка, охватывающая весь вход. Если ложно, то возникает ошибка.
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/versions/r2.9/api_docs/python/tf/image/stateless_sample_distorted_bounding_box

Spec-Zone.ru

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