Ultralytics YOLO27:

Понимание сквозного обнаружения объектов в 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")  # one-to-many + NMS
metrics = model.val(data="coco.yaml")  # one-to-many + NMS
results = model.predict("image.jpg", nms=False)  # opt into NMS-free inference
results = model.predict("image.jpg", nms=None)  # switch back to one-to-many + NMS

model.export(format="onnx")  # raw one-to-many outputs
model.export(format="onnx", nms=True)  # embed NMS
model.export(format="onnx", nms=False)  # NMS-free one-to-one outputs

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

Обе головы используют общий бэкбон и шейп-нек и оптимизируются во время обучения. Голова «многие к одному» предоставляет несколько кандидатов предсказаний для каждого объекта; 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 даже при квантовании модели.

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

Опубликованные результаты COCO для YOLO26 показывают, что голова «многие к одному» улучшает mAP детекции на 0.6–0.8 пункта для пяти масштабов: например, 40.9 против 40.1 для YOLO26n и 57.5 против 56.9 для YOLO26x. Голова «один к одному» позволяет избежать прохода NMS и повышает скорость. Эти результаты оправдывают выбор по умолчанию, но не гарантируют прирост на каждом датасете.

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

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

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

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

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

Комментарии