Как работает сквозное обнаружение объектов в 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=None | nms=False | |
|---|---|---|
| Выходные данные детекции | (N, nc + 4, 8400) | (N, 300, 6) |
| Формат рамок | xywh | xyxy |
| Оценки | Одна оценка для каждого класса и каждого кандидата | Уверенность и 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. Он не заменяет восстановление маски, декодирование ключевых точек, обработку повёрнутых рамок, вероятностей классов при классификации, семантических карт классов или декодирование глубины.