tf.raw_ops.StatelessSampleDistortedBoundingBox
Генерирует случайно искажённую рамку для изображения детерминированным образом.
tf.raw_ops.StatelessSampleDistortedBoundingBox(
image_size,
bounding_boxes,
min_object_covered,
seed,
aspect_ratio_range=[0.75, 1.33],
area_range=[0.05, 1],
max_attempts=100,
use_image_if_no_bounding_boxes=False,
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-D, содержащий [height, width, channels]. |
bounding_boxes | A Tensor типа float32. 3-D с формой [batch, N, 4] описывает N рамок, связанных с изображением. |
min_object_covered | A Tensor типа float32. Область обрезки изображения должна содержать не менее этой доли любой предоставленной рамки. Значение этого параметра должно быть неотрицательным. В случае 0, область обрезки не обязана перекрываться с предоставленными рамками. |
seed | A Tensor. Должно быть одним из следующих типов: int32, int64. 1-D с формой [2]. Зерно для генератора случайных чисел. Должно иметь тип данных int32 или int64. (При использовании XLA, допускается только int32.) |
aspect_ratio_range | Необязательный список floats. По умолчанию [0.75, 1.33]. Область обрезки изображения должна иметь соотношение сторон = ширина / высота в этом диапазоне. |
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 | A Tensor. Имеет тот же тип, что и image_size. |
size | A Tensor. Имеет тот же тип, что и image_size. |
bboxes | A Tensor типа float32. |
© 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/raw_ops/StatelessSampleDistortedBoundingBox