Non-Maximum Suppression (NMS)
Узнай, как немаксимальное подавление (NMS) устраняет дублирующиеся BBox в детектировании объектов. Открой для себя, как Ultralytics YOLO26 обеспечивает встроенное сквозное NMS.
Non-Maximum Suppression (NMS) — это метод постобработки, используемый в обнаружении объектов для уточнения исходных предсказаний модели. Когда модель обнаружения объектов анализирует изображение, она часто создает несколько перекрывающихся ограничивающих рамок для одного объекта, каждая из которых имеет связанную оценку достоверности. Эти избыточные предсказания возникают потому, что модель может обнаруживать один и тот же признак в немного разных масштабах или позициях. NMS фильтрует этот вывод, сохраняя только самую точную ограничивающую рамку для каждого объекта и отбрасывая остальные, гарантируя, что конечный результат будет чистым, точным и свободным от дубликатов.
Как работает Non-Maximum Suppression#
Алгоритм NMS работает со списком кандидатных ограничивающих рамок и соответствующими им показателями уверенности. Цель состоит в том, чтобы выбрать лучшую рамку для объекта и подавить (удалить) любые другие рамки, которые значительно перекрываются с ней, так как они, скорее всего, являются дубликатами обнаружения одного и того же объекта. Процесс обычно состоит из следующих шагов:
-
Фильтрация: Удали все ограничивающие рамки с показателями уверенности ниже определенного порога (например, 0,25), чтобы немедленно отсеять слабые предсказания.
-
Сортировка: Отсортируй оставшиеся рамки в порядке убывания на основе их показателей уверенности.
-
Выбор: Выбери рамку с наивысшим показателем уверенности в качестве достоверного обнаружения.
-
Сравнение: Сравни эту выбранную рамку со всеми остальными оставшимися рамками с помощью метрики Intersection over Union (IoU), которая измеряет перекрытие между двумя рамками.
-
Подавление: Если IoU между выбранной рамкой и другой рамкой превышает предопределенный порог (например, 0,45), рамка с более низким баллом считается дубликатом и удаляется.
-
Итерация: Повторяй процесс со следующей рамкой с наивысшим баллом, которая еще не была подавлена или выбрана, пока все рамки не будут обработаны.
Реальные приложения#
NMS необходим в сценариях, где точность имеет первостепенное значение, а дублирующиеся обнаружения могут сбить с толку последующие системы.
- Автономное вождение: В системах беспилотных автомобилей камеры обнаруживают пешеходов, другие транспортные средства и дорожные знаки. Модель может предсказать три немного разные рамки для одного пешехода. 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 против комплексного (End-to-End) обнаружения#
Традиционно NMS была обязательным шагом «очистки», который находится за пределами основной нейронной сети, добавляя задержку вывода. Тем не менее, эта сфера развивается в сторону архитектур end-to-end.
- Стандартный NMS: Эвристический процесс, требующий ручной настройки порога IoU. Если порог слишком низкий, действительные объекты, находящиеся близко друг к другу, могут быть пропущены (низкая полнота). Если слишком высокий, остаются дубликаты (низкая точность).
- Модели End-to-End: Модели нового поколения, такие как YOLO26, спроектированы так, чтобы быть изначально end-to-end. Они учатся предсказывать ровно одну рамку на объект во время обучения, эффективно интернализируя процесс NMS. Это устраняет необходимость в внешней постобработке, что приводит к более высокой скорости вывода и более простым конвейерам развертывания на платформе Ultralytics.
Связанные концепции#
- Soft-NMS: Вариация, при которой перекрывающиеся рамки не удаляются строго, а их оценки достоверности снижаются. Это позволяет некоторым перекрывающимся объектам (например, людям в толпе) все равно быть обнаруженными, если их оценки остаются достаточно высокими после затухания.
- Якорные рамки: Предопределенные формы рамок, используемые многими детекторами для оценки размера объекта. NMS применяется к конечным предсказаниям, уточненным на основе этих якорей.
- Intersection over Union (IoU): Математическая формула, используемая NMS для определения степени перекрытия двух рамок, выступающая в качестве порогового значения решения для подавления.






