РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
563 of 824 menu

Функция image.combined_non_max_suppression

Функция combined_non_max_suppression применяется к данным детекции объектов и выполняет не-максимальное подавление (combined non-max suppression) для пакета изображений и множества классов одновременно. Первым параметром передаётся тензор рамок формы [batch_size, num_boxes, q, 4], вторым - тензор оценок формы [batch_size, num_boxes, num_classes]. Параметр max_output_size_per_class задаёт максимальное число рамок на класс, max_total_size - общее максимальное число рамок на изображение. Параметры iou_threshold и score_threshold управляют порогами пересечения и уверенности. Функция возвращает кортеж из четырёх тензоров: отфильтрованные рамки, оценки, индексы классов и количество валидных детекций.

Синтаксис

tf.image.combined_non_max_suppression( boxes, scores, max_output_size_per_class, max_total_size, iou_threshold=0.5, score_threshold=float('-inf'), pad_per_class=False, clip_boxes=True, name=None )

Пример

Давайте создадим две рамки для одного изображения и оценки для двух классов, а затем выполним подавление:

import tensorflow as tf boxes = tf.constant([[ [0.0, 0.0, 1.0, 1.0], [0.1, 0.1, 0.9, 0.9] ]]) scores = tf.constant([[ [0.9, 0.1], [0.8, 0.2] ]]) res = tf.image.combined_non_max_suppression( boxes, scores, max_output_size_per_class=2, max_total_size=2 ) print(res[0]) print(res[1]) print(res[2]) print(res[3])

Результат выполнения кода:

tf.Tensor( [[[0. 0. 1. 1. ] [0.1 0.1 0.9 0.9]]], shape=(1, 2, 4), dtype=float32) tf.Tensor([[0.9 0.8]], shape=(1, 2), dtype=float32) tf.Tensor([[0 0]], shape=(1, 2), dtype=int32) tf.Tensor([2], shape=(1,), dtype=int32)

Пример

Давайте отфильтруем рамки с низкой уверенностью, установив порог score_threshold:

import tensorflow as tf boxes = tf.constant([[ [0.0, 0.0, 1.0, 1.0], [0.1, 0.1, 0.9, 0.9] ]]) scores = tf.constant([[ [0.9, 0.1], [0.3, 0.2] ]]) res = tf.image.combined_non_max_suppression( boxes, scores, max_output_size_per_class=2, max_total_size=2, score_threshold=0.5 ) print(res[0]) print(res[1]) print(res[3])

Результат выполнения кода:

tf.Tensor( [[[0. 0. 1. 1.] [0. 0. 0. 0.]]], shape=(1, 2, 4), dtype=float32) tf.Tensor([[0.9 0. ]], shape=(1, 2), dtype=float32) tf.Tensor([1], shape=(1,), dtype=int32)

Пример

Давайте обработаем пакет из двух изображений с двумя классами и выведем количество валидных детекций:

import tensorflow as tf boxes = tf.constant([ [ [0.0, 0.0, 1.0, 1.0], [0.1, 0.1, 0.9, 0.9] ], [ [0.2, 0.2, 0.8, 0.8], [0.0, 0.0, 0.5, 0.5] ] ]) scores = tf.constant([ [ [0.9, 0.1], [0.8, 0.2] ], [ [0.7, 0.6], [0.4, 0.3] ] ]) res = tf.image.combined_non_max_suppression( boxes, scores, max_output_size_per_class=2, max_total_size=2 ) print(res[3])

Результат выполнения кода:

tf.Tensor([2 2], shape=(2,), dtype=int32)

Смотрите также

  • функцию non_max_suppression,
    которая выполняет подавление для одного класса
  • функцию draw_bounding_boxes,
    которая рисует рамки на изображении
  • функцию crop_to_bounding_box,
    которая обрезает изображение по рамке
  • функцию pad_to_bounding_box,
    которая дополняет изображение до рамки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить