Функция image.non_max_suppression
Функция image.non_max_suppression применяется к набору ограничивающих рамок
и удаляет перекрывающиеся рамки с низкими оценками. Первым параметром
передается тензор с рамками, вторым - тензор с оценками. Третьим параметром
можно передать максимальное количество рамок, которые нужно оставить.
Четвертым параметром задается порог пересечения по объединению (IoU),
выше которого рамки считаются дублирующими.
Синтаксис
tf.image.non_max_suppression(
boxes,
scores,
max_output_size,
iou_threshold=0.5,
score_threshold=float('-inf')
)
Пример
Давайте создадим набор из четырех ограничивающих рамок и применим к ним подавление немаксимумов:
import tensorflow as tf
boxes = tf.constant([
[0.0, 0.0, 1.0, 1.0],
[0.0, 0.0, 0.9, 0.9],
[0.0, 0.0, 0.5, 0.5],
[5.0, 5.0, 6.0, 6.0]
])
scores = tf.constant([0.9, 0.8, 0.7, 0.6])
selected = tf.image.non_max_suppression(
boxes, scores, max_output_size=2
)
print(selected)
Результат выполнения кода:
tf.Tensor([0 3], shape=(2,), dtype=int32)
Пример
Давайте увеличим максимальное количество оставляемых рамок и понизим порог IoU, чтобы оставить больше перекрывающихся рамок:
import tensorflow as tf
boxes = tf.constant([
[0.0, 0.0, 1.0, 1.0],
[0.0, 0.0, 0.9, 0.9],
[0.0, 0.0, 0.5, 0.5],
[5.0, 5.0, 6.0, 6.0]
])
scores = tf.constant([0.9, 0.8, 0.7, 0.6])
selected = tf.image.non_max_suppression(
boxes, scores, max_output_size=4, iou_threshold=0.9
)
print(selected)
Результат выполнения кода:
tf.Tensor([0 2 3], shape=(3,), dtype=int32)
Пример
Давайте зададим порог оценки, чтобы отбросить рамки с низкими значениями:
Результат выполнения кода:
tf.Tensor([0 1], shape=(2,), dtype=int32)
Смотрите также
-
функцию
combined_non_max_suppression,
которая выполняет подавление немаксимумов для нескольких классов -
функцию
draw_bounding_boxes,
которая рисует ограничивающие рамки на изображении -
функцию
crop_to_bounding_box,
которая обрезает изображение по ограничивающей рамке -
функцию
pad_to_bounding_box,
которая дополняет изображение до размеров ограничивающей рамки