Ultralytics YOLO27: Вступи в список ожидания.
Лицензия YOLO
Назад к глоссарию Ultralytics

Non-Maximum Suppression (NMS)

Подавление немаксимумов (NMS) удаляет дублирующиеся перекрывающиеся рамки, оставляя для каждого объекта одну детекцию. Разбираем принцип работы, настройку и модели без NMS.

Подавление немаксимумов (NMS) — этап постобработки, который преобразует исходные перекрывающиеся прогнозы детектора в одну рамку на объект. Плотная модель обнаружения объектов оценивает тысячи возможных ограничивающих рамок на изображении, и несколько соседних вариантов обычно срабатывают на одном и том же объекте, немного различаясь положением и оценками. NMS оставляет рамку с наибольшей уверенностью в каждой группе перекрывающихся рамок и подавляет остальные, используя пересечение над объединением (IoU), чтобы определить, достаточно ли рамки перекрываются и считать ли их дубликатами.

Как работает подавление немаксимумов#

Жадный NMS, стандартный вариант алгоритма, сначала удаляет кандидатов с оценкой ниже порога уверенности и сортирует остальные по оценке. Затем он оставляет рамку с наибольшей оценкой, удаляет все оставшиеся рамки, у которых IoU с ней превышает порог IoU, и повторяет шаги со следующей рамкой с наибольшей оценкой, пока не останется кандидатов. Обычно детекторы запускают алгоритм отдельно для каждого класса, поэтому рамка человека не подавляет перекрывающуюся рамку велосипеда.

nms из torchvision реализует жадный NMS для одного класса и возвращает индексы оставленных рамок, отсортированные по оценке.

import torch
from torchvision.ops import nms

# Кандидатные рамки в формате [x1, y1, x2, y2], каждая с одной оценкой уверенности
boxes = torch.tensor(
    [
        [100, 100, 200, 200],  # A
        [105, 105, 195, 195],  # B: почти дубликат A (IoU 0.81)
        [300, 300, 400, 400],  # C: отдельный объект
    ],
    dtype=torch.float32,
)
scores = torch.tensor([0.90, 0.80, 0.95])

# Подавить любую рамку, IoU которой с рамкой с более высокой оценкой и оставленной рамкой превышает 0.5
keep = nms(boxes, scores, iou_threshold=0.5)
print(keep.tolist())

Результат — [2, 0]: первой остаётся рамка C, поскольку у неё самая высокая оценка; рамка A остаётся, поскольку не перекрывается с C; рамка B удаляется, поскольку её IoU с A равен 0.81.

Настройка порогов#

Порог уверенности удаляет слабых кандидатов до начала подавления. Порог IoU задаёт величину перекрытия, при которой рамки считаются дубликатами. Если он слишком низкий, два реальных объекта, стоящих близко друг к другу, например люди в толпе, сливаются в одно обнаружение, и полнота падает. Если он слишком высокий, сохраняются рамки-дубликаты, и точность падает. NMS без учёта классов позволяет любой рамке подавлять другую независимо от класса, что устраняет дублирующиеся метки, если модель присвоила одному объекту два похожих класса, например «автомобиль» и «грузовик».

Ограничения NMS#

  • Переполненные сцены: Один фиксированный порог IoU не позволяет отличить рамку-дубликат от второго объекта, который действительно перекрывает первый, поэтому сильно закрытые объекты подавляются.
  • Фиксированная эвристика: Порог выбирают вручную, он находится вне обученной сети и не выводится из данных.
  • Задержка и развёртывание: Жадный цикл запускается после сети, а его стоимость растёт вместе с числом кандидатов, что увеличивает задержку инференса. Форматы экспорта, которые не могут включить NMS в граф модели, выдают исходные варианты, и приложение должно запускать NMS самостоятельно.

Варианты NMS и обнаружение без NMS#

Soft-NMS не удаляет перекрывающиеся рамки, а снижает их оценки в зависимости от степени перекрытия, благодаря чему в толпе удаётся восстановить больше объектов. DIoU-NMS, предложенный вместе с функцией потерь Distance-IoU, также учитывает расстояние между центрами рамок, поэтому рамки с далеко расположенными центрами реже подавляются.

Сквозные детекторы полностью исключают этот этап. DETR обучается с венгерским сопоставлением предсказаний и меток один-к-одному, поэтому каждому объекту соответствует ровно одно предсказание; YOLOv10 добавила голову один-к-одному в YOLO-модели реального времени. YOLO26 обучает оба типа головы и по умолчанию применяет NMS, поскольку её голова один-ко-многим показывает немного более высокий результат: 40,9 против 40,1 mAP50-95 на COCO для YOLO26n. Передача nms=False выбирает голову один-к-одному, которая выдаёт не более 300 итоговых рамок на изображение без этапа NMS, как показано в руководстве по сквозной детекции для предсказания и экспорта.

Изучи решения

Компьютерное зрение в спорте

Компьютерное зрение в спорте

Узнай, как Ultralytics YOLO обеспечивает компьютерное зрение в спорте: отслеживание игроков и мяча, аналитика результатов, полезные выводы для тренеров и реабилитация спортсменов.
Подробнее
Компьютерное зрение для аэросъёмки

Компьютерное зрение для аэросъёмки

Превращай снимки с дронов и аэрофотоснимки в полезные данные в реальном времени для сельского хозяйства, аквакультуры, охраны природы и геопространственного анализа с Ultralytics YOLO.
Подробнее
Компьютерное зрение в аэрокосмической отрасли

Компьютерное зрение в аэрокосмической отрасли

Применяй компьютерное зрение в аэрокосмической отрасли с Ultralytics YOLO: для осмотра самолётов, обнаружения посторонних предметов на взлётно-посадочных полосах, наземного обслуживания аэропортов и выявления дефектов композитных материалов.
Подробнее
Компьютерное зрение в сфере безопасности

Компьютерное зрение в сфере безопасности

Защити любой объект с помощью моделей Ultralytics YOLO. ИИ на базе компьютерного зрения обеспечивает мониторинг периметра, обнаружение угроз, распознавание номерных знаков и безопасность на рабочем месте.
Подробнее
Компьютерное зрение в робототехнике

Компьютерное зрение в робототехнике

Создавай более интеллектуальные машины с моделями Ultralytics YOLO. ИИ на базе компьютерного зрения в робототехнике обеспечивает автономную навигацию, восприятие, отслеживание объектов и управление в реальном времени.
Подробнее
Компьютерное зрение в логистике

Компьютерное зрение в логистике

Оптимизируй логистику с моделями Ultralytics YOLO. Визуальный AI обеспечивает проверку посылок, сортировку, отслеживание транспорта и мониторинг безопасности на складе в реальном времени.
Подробнее
Компьютерное зрение в розничной торговле

Компьютерное зрение в розничной торговле

Переосмысли розничную торговлю с моделями Ultralytics YOLO. Визуальный AI обеспечивает отслеживание запасов, мониторинг полок, управление очередями и более глубокое понимание поведения покупателей.
Подробнее
Компьютерное зрение в здравоохранении

Компьютерное зрение в здравоохранении

Создавай решения для здравоохранения с моделями Ultralytics YOLO. Визуальный AI в здравоохранении ускоряет медицинскую визуализацию, улучшает диагностику и мониторинг пациентов.
Подробнее
Компьютерное зрение в производстве

Компьютерное зрение в производстве

Оптимизируй производство с моделями Ultralytics YOLO. Компьютерное зрение на базе ИИ обеспечивает контроль качества, обнаружение дефектов, контроль использования СИЗ и автоматизацию сборочных линий.
Подробнее
Компьютерное зрение в автомобильной отрасли

Компьютерное зрение в автомобильной отрасли

Применяй компьютерное зрение в автомобильной отрасли с моделями Ultralytics YOLO. Компьютерное зрение на базе ИИ повышает безопасность дорожного движения, улучшает помощь водителю и автоматизацию автомобилей, делая дороги умнее.
Подробнее
Компьютерное зрение в сельском хозяйстве

Компьютерное зрение в сельском хозяйстве

Внедряй ИИ для компьютерного зрения в умное сельское хозяйство с моделями Ultralytics YOLO. Используй их для мониторинга посевов, отслеживания скота и точного земледелия, чтобы повысить урожайность и эффективность.
Подробнее

Давай вместе строить будущее ИИ!

Начни свой путь в будущее машинного обучения