Немаксимальное подавлениеNMS)
Узнайте, как Non-Maximum Suppression (NMS) устраняет дублирующиеся ограничительные рамки при обнаружении объектов. Узнайте, как Ultralytics обеспечивает нативную сквозную NMS.
Немаксимальное подавление (NMS) — это метод постобработки, используемый в
обнаружении объектов для уточнения исходных прогнозов,
сделанных моделью. Когда модель обнаружения объектов анализирует изображение, она часто генерирует несколько перекрывающихся
ограничительных рамок для одного объекта, каждая из которых имеет
связанный с ней показатель достоверности. Эти избыточные прогнозы
возникают из-за того, что модель может detect в слегка разных масштабах или положениях. NMS этот результат,
сохраняя только самую точную ограничительную рамку для каждого объекта и отбрасывая остальные, обеспечивая чистоту, точность и отсутствие дубликатов в окончательном
результате.
Как работает немаксимальное подавление
NMS работает со списком кандидатов в ограничивающие прямоугольники и соответствующими им оценками достоверности. Цель
заключается в выборе лучшего прямоугольника для объекта и подавлении (удалении) любых других прямоугольников, которые значительно перекрываются с ним, так как
они, вероятно, являются дубликатами обнаружений одного и того же объекта. Процесс обычно состоит из следующих шагов:
-
Фильтрация: удалите все ограничительные рамки с показателями достоверности ниже определенного порога (например,
0,25), чтобы сразу удалить слабые прогнозы.
- Сортировка: отсортируйте оставшиеся ящики в порядке убывания по их показателям достоверности.
- Выбор: выберите ячейку с наивысшим показателем достоверности в качестве действительного обнаружения.
-
Сравнение: сравните выбранную рамку со всеми остальными рамками с помощью
Intersection over Union (IoU) —
метрики, которая измеряет пересечение между двумя рамками.
-
Подавление: если IoU выбранным прямоугольником и другим прямоугольником превышает заранее заданный порог
(например, 0,45), прямоугольник с более низким баллом считается дубликатом и удаляется.
-
Итерация: Повторите процесс со следующим ящиком с наибольшим количеством баллов, который еще не был подавлен или
выбран, пока все ящики не будут обработаны.
Применение в реальном мире
NMS в ситуациях, когда точность имеет первостепенное значение, а дублирующиеся обнаружения могут сбить с толку последующие системы.
-
Автономное вождение: в системах самоуправляемых автомобилей камеры detect , другие транспортные средства и
дорожные знаки. Модель может предсказать три слегка отличающихся друг от друга прямоугольника для одного пешехода. NMS , что
система планирования автомобиля получает только одну координату для этого пешехода, предотвращая непредсказуемое торможение или ошибки планирования траектории,
вызванные «фантомными» препятствиями.
-
Управление запасами в розничной торговле: при использовании
компьютерного зрения для подсчета продуктов на полке
товары часто упакованы плотно друг к другу. Без NMS одна банка газировки может быть подсчитана дважды из-за перекрывающихся
прогнозов, что приводит к неточным данным об уровне запасов. NMS эти обнаружения, чтобы обеспечить соответствие подсчета запасов
реальности.
NMS с помощью PyTorch
Хотя многие современные фреймворки обрабатывают NMS , понимание реализации помогает в настройке параметров.
Следующий пример демонстрирует, как применить NMS PyTorch :
import torch
import torchvision.ops as ops
# Example bounding boxes: [x1, y1, x2, y2]
boxes = torch.tensor(
[
[100, 100, 200, 200], # Box A
[105, 105, 195, 195], # Box B (High overlap with A)
[300, 300, 400, 400], # Box C (Distinct object)
],
dtype=torch.float32,
)
# Confidence scores for each box
scores = torch.tensor([0.9, 0.8, 0.95], dtype=torch.float32)
# Apply NMS with an IoU threshold of 0.5
# Boxes with IoU > 0.5 relative to the highest scoring box are suppressed
keep_indices = ops.nms(boxes, scores, iou_threshold=0.5)
print(f"Indices to keep: {keep_indices.tolist()}")
# Output will likely be [2, 0] corresponding to Box C (0.95) and Box A (0.9),
# while Box B (0.8) is suppressed due to overlap with A.
NMS сквозного обнаружения
Традиционно NMS обязательным этапом «очистки», который находится вне основной нейронной сети, увеличивая
задержку вывода. Однако эта область развивается
в сторону сквозных архитектур.
-
Стандартный NMS: эвристический процесс, требующий ручной настройки IoU . Если
порог слишком низкий, могут быть пропущены действительные объекты, расположенные близко друг к другу (низкая
точность). Если слишком высокий, остаются дубликаты ( низкая
точность).
-
Модели «от начала до конца»: Модели нового поколения, такие как
YOLO26, разработаны как модели «от начала до конца». Они учатся
предсказывать точно одно поле на объект во время обучения, эффективно интернализируя NMS . Это устраняет
необходимость во внешней постобработке, что приводит к более быстрой скорости вывода и более простым конвейерам развертывания на
Ultralytics .
Связанные понятия
-
NMS:
вариант, при котором перекрывающиеся прямоугольники не удаляются полностью, а их оценки достоверности снижаются. Это позволяет
обнаруживать объекты, которые частично перекрываются (например, людей в толпе), если их оценки остаются достаточно высокими после
снижения.
-
Ячейки-якоря: заранее определенные формы ячеек,
используемые многими детекторами для оценки размера объекта. NMS к окончательным прогнозам, уточненным на основе этих якорей.
-
Пересечение над объединением (IoU):
Математическая формула, используемая NMS определения степени пересечения двух прямоугольников, выступающая в качестве порогового значения для
подавления.