Ultralytics YOLO27:
Get Started

Как работает сквозное обнаружение объектов в Ultralytics YOLO26#

YOLO26 обучает и голову с множеством соответствий, и голову с одним соответствием. По умолчанию для предсказания и валидации используется голова с множеством соответствий и подавление немаксимумов (NMS). Такой подход обеспечивает высокую точность на тех же обученных весах. Установи nms=False, чтобы вместо нее использовать более быструю голову с одним соответствием, не требующую NMS.

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

nmsПредсказание и валидацияЭкспорт
None (по умолчанию)Голова с множеством соответствий; Ultralytics выполняет NMSНеобработанные выходы головы с множеством соответствий; NMS выполняется на стороне потребителя
TrueТо же, что и NoneГолова с множеством соответствий и встроенной NMS, если она поддерживается
FalseГолова с одним соответствием без подавления по IoUВыходы головы с одним соответствием без NMS, если они поддерживаются

None означает, что в модель не встроена дополнительная постобработка. Это не отключает обычную обработку, которая преобразует выходы модели в результаты предсказаний или метрики валидации. Классификация, семантическая сегментация, оценка глубины и модели без переключаемых голов обнаружения сохраняют стандартное поведение для своей задачи.

Выбери путь формирования выходных данных
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model.predict("image.jpg")  # голова с множеством соответствий + NMS
metrics = model.val(data="coco.yaml")  # голова с множеством соответствий + NMS
results = model.predict("image.jpg", nms=False)  # включить вывод без NMS
results = model.predict("image.jpg", nms=None)  # вернуться к голове с множеством соответствий + NMS

model.export(format="onnx")  # необработанные выходы головы с множеством соответствий
model.export(format="onnx", nms=True)  # встроить NMS
model.export(format="onnx", nms=False)  # выходы головы с одним соответствием без NMS

Как работает сквозное обнаружение объектов#

Обе головы используют общие основную и соединительную части и оптимизируются во время обучения. Голова с множеством соответствий формирует несколько кандидатных предсказаний для каждого объекта; NMS удаляет перекрывающиеся детекции. Голова с одним соответствием обучается формировать одно предсказание для каждого объекта. Выбор пути инференса не отключает обучение с надзором для обеих голов. Во время обучения при валидации используется выбранная голова инференса, поэтому выбор чекпойнта и ранняя остановка основываются на тех же предсказаниях, что и развернутая модель.

ГоловаВыход обнаружения до внешней обработкиОбработка
С множеством соответствий (по умолчанию)(N, nc + 4, 8400)Фильтрация по уверенности и NMS
С одним соответствием(N, 300, 6)Фильтрация по уверенности; подавление по IoU не выполняется

Здесь N — размер батча, nc — число классов, а 8400 — число кандидатов при imgsz=640. Строки детекций с одним соответствием содержат [x1, y1, x2, y2, confidence, class_id]. Для других задач обнаружения предусмотрены дополнительные выходные данные:

ЗадачаСквозной выходДополнительные данные
Обнаружение(N, 300, 6)—
Сегментация экземпляров(N, 300, 6 + nm) и (N, nm, H, W)Коэффициенты маски и прототипы
Оценка позы(N, 300, 57)17 ключевых точек × 3 значения
OBB(N, 300, 7)Угол поворота

Слияние удаляет неиспользуемые ветви инференса, а также объединяет слои Conv и BatchNorm. Если тебе нужно переключать головы, сохрани исходный чекпойнт обучения: после удаления ветвь восстановить невозможно. В модели, где осталась только одно-к-одному голова, этот доступный путь сохраняется.

Экспортируемые выходные данные#

Модели детекции YOLOv8, YOLO11 и YOLO26 по умолчанию экспортируют необработанные предсказания один-ко-многим. Экспортируй YOLO26 с nms=False, чтобы получить детекции без NMS.

nms=Nonenms=False
Выходные данные детекции(N, nc + 4, 8400)(N, 300, 6)
Формат рамокxywhxyxy
ОценкиОдна оценка для каждого класса и каждого кандидатаУверенность и ID класса для каждой детекции
Внешняя обработкаФильтрация по уверенности и NMSФильтрация по уверенности

nms=True также формирует обработанные детекции, но использует голову один-ко-многим и встраивает стандартный NMS. Это удобно, когда среда выполнения при развертывании должна получать детекции без самостоятельной реализации подавления.

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

Совместимость форматов экспорта#

ONNX, TensorRT, CoreML, OpenVINO и некоторые другие форматы поддерживают экспорт без NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU и Qualcomm QNN при невозможности поддержать сквозной вывод переключаются на путь один-ко-многим. Предупреждения о формате объясняют это переключение.

  • Встроенный NMS: nms=True зависит от ограничений каждого формата на задачи, точность и динамические формы. Форматы без поддержки встроенного NMS экспортируют собственные выходные данные для внешней обработки.
  • CoreML: встроенный NMS поддерживает детекцию, сегментацию и позу со статическими формами. Используй nms=True для моделей детекции, которым нужен конвейер NMS в Xcode Preview.
  • MNN: встроенный NMS поддерживает детекцию и позу с dynamic=False.
  • IMX: для детекции, сегментации экземпляров и позы требуется встроенный NMS, который выбирается автоматически.
  • Hailo: YOLO26 по умолчанию использует необработанные тензоры с NMS на хосте; nms=False выбирает путь один-к-одному. Для детекции в YOLOv8/YOLO11 используется HailoRT NMS.
  • Квантование: версии TensorRT до 8.5.0, TensorRT 10.3.0 INT8 на JetPack 6 и LiteRT INT8 или w8a16 переключаются на выходные данные один-ко-многим.

См. требования к оборудованию в отдельных руководствах по интеграции. Чтобы получить выходные тензоры FP16, используй nms=None; индексы классов в сквозном выводе могут оставлять выходные тензоры в FP32, даже если модель квантована.

Компромисс между точностью и скоростью#

Опубликованные результаты YOLO26 на COCO показывают, что голова один-ко-многим повышает mAP детекции на 0,6–0,8 пункта для всех пяти масштабов: например, 40,9 против 40,1 для YOLO26n и 57,5 против 56,9 для YOLO26x. Голова один-к-одному позволяет пропустить этап NMS и ориентирована на снижение задержки. Эти результаты обосновывают выбор по умолчанию, но не гарантируют прирост на каждом наборе данных.

Опубликованные измерения скорости детекции без NMS используют nms=False. Сравнивай точность и задержку при одинаковых настройках головы, размере изображения, точности и оборудовании.

Часто задаваемые вопросы#

  • Этот параметр ограничивает число детекций, возвращаемых при предсказании и валидации. В экспортированных моделях со сквозным выводом и встроенным NMS ограничение входит в граф, поэтому для его изменения нужно выполнить экспорт заново; исключение — встроенный NMS для детекции в CoreML, где ограничения на число детекций нет. Сквозной вывод может содержать меньше кандидатов, если на изображении меньше max_det опорных точек.

  • Да, для nms=False или nms=True при заданном по умолчанию ограничении на число детекций. По одной только форме нельзя определить, какая голова была экспортирована. Стандартный экспорт детекции COCO с необработанными выходными данными обычно имеет форму (1, 84, 8400) при imgsz=640.

  • Да. Один и тот же аргумент nms выбирает доступную голову детекции для задач детекции, сегментации экземпляров, позы и OBB. Он не заменяет восстановление маски, декодирование ключевых точек, обработку повёрнутых рамок, вероятностей классов при классификации, семантических карт классов или декодирование глубины.

Комментарии