Ultralytics YOLO27:

Ultralytics YOLO26의 엔드투엔드 Detection 이해하기#

YOLO26one-to-many 헤드와 one-to-one 헤드를 모두 학습합니다. 예측과 검증은 기본적으로 Non-Maximum Suppression (NMS)가 포함된 one-to-many 헤드를 사용합니다. 이는 동일한 학습된 가중치를 사용하여 정확도를 높입니다. 더 빠르고 NMS가 없는 one-to-one 헤드를 대신 사용하려면 nms=False를 설정하세요.

단 하나의 인수가 예측, 검증, 추적, 내보내기, 벤치마킹 전반의 선택을 제어합니다:

nms예측 및 검증내보내기
None (기본값)One-to-many 헤드; Ultralytics가 NMS 실행원시 one-to-many 출력; 소비자가 NMS 실행
TrueNone과 동일지원되는 경우 NMS가 내장된 one-to-many 헤드
FalseIoU 억제가 없는 one-to-one 헤드지원되는 경우 NMS가 없는 one-to-one 출력

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

엔드투엔드 Detection 작동 방식#

두 헤드는 백본과 넥을 공유하며 학습 중에 최적화됩니다. one-to-many 헤드는 객체당 여러 후보 예측을 제공하며, NMS는 겹치는 탐지를 제거합니다. one-to-one 헤드는 객체당 단일 예측을 생성하도록 학습합니다. 추론 경로를 선택해도 이중 헤드 감독이 비활성화되지는 않습니다. 학습 중 검증은 선택된 추론 헤드를 사용하므로, 체크포인트 선택과 조기 종료는 배포와 동일한 예측을 따릅니다.

헤드외부 처리 전 탐지 출력처리
One-to-many (기본값)(N, nc + 4, 8400)신뢰도 필터링 및 NMS
One-to-one(N, 300, 6)신뢰도 필터링; IoU 억제 없음

여기서 N은 배치 크기이고, nc은 클래스 수이며, 8400은 imgsz=640에서의 후보 수입니다. one-to-one 탐지 행에는 [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)Rotation angle

융합은 사용되지 않는 추론 분기를 제거하고 Conv 및 BatchNorm 레이어를 폴딩합니다. 헤드를 전환해야 하는 경우 원래 학습 체크포인트를 유지하세요. 융합은 이미 제거된 분기를 복원할 수 없습니다. one-to-one 헤드만 남은 모델은 해당 사용 가능한 경로를 유지합니다.

내보낸 출력#

YOLOv8, YOLO11 및 YOLO26 탐지 모델은 기본적으로 원시 one-to-many 예측을 내보냅니다. NMS가 없는 탐지를 위해 nms=False으로 YOLO26을 내보내세요.

nms=Nonenms=False
탐지 출력(N, nc + 4, 8400)(N, 300, 6)
박스 형식xywhxyxy
점수후보당 클래스별 하나의 점수탐지당 신뢰도 및 클래스 ID
외부 처리신뢰도 필터링 및 NMS신뢰도 필터링

nms=True 역시 처리된 탐지를 생성하지만, one-to-many 헤드를 사용하고 전통적인 NMS를 내장합니다. 배포 런타임이 자체적으로 억제를 구현하지 않고 탐지를 수신해야 할 때 유용합니다.

내보낸 모델의 그래프가 해당 출력을 결정합니다. 모델을 로드할 때 nms을 전달해도 그래프가 다시 빌드되지는 않습니다. 출력 경로를 선택하려면 원하는 nms 값으로 소스 체크포인트를 내보내세요. Ultralytics는 아티팩트의 메타데이터를 사용하여 NMS가 두 번 적용되는 것을 방지합니다.

Export Format 호환성#

ONNX, TensorRT, CoreML, OpenVINO 및 기타 여러 형식은 NMS가 없는 내보내기를 지원합니다. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU 및 Qualcomm QNN은 연산자가 엔드투엔드 출력을 지원할 수 없는 경우 one-to-one 경로로 대체됩니다. 형식 경고는 대체 이유를 설명합니다.

  • 내장 NMS: nms=True은 각 형식의 태스크, 정밀도 및 동적 형태 제한을 받습니다. 내장 NMS 지원이 없는 형식은 외부 처리를 위해 네이티브 출력을 내보냅니다.
  • CoreML: 내장 NMS는 고정 형태를 가진 detect, segment, pose를 지원합니다. Xcode Preview의 NMS 파이프라인이 필요한 탐지 모델에는 nms=True을 사용하세요.
  • MNN: 내장 NMS는 dynamic=False과 함께 detect 및 pose를 지원합니다.
  • IMX: 탐지, 인스턴스 세분화 및 pose에는 자동으로 선택되는 내장 NMS가 필요합니다.
  • Hailo: YOLO26은 기본적으로 호스트 NMS가 포함된 원시 텐서를 사용하며, nms=False은 one-to-one 경로를 선택합니다. YOLOv8/YOLO11 탐지는 HailoRT NMS를 사용합니다.
  • 양자화: 8.5.0 이전의 TensorRT 버전, JetPack 6의 TensorRT 10.3.0 INT8, 그리고 LiteRT INT8 또는 w8a16은 one-to-many 출력으로 대체됩니다.

하드웨어 요구 사항은 개별 통합 가이드를 참조하세요. 전체 FP16 출력 텐서의 경우 nms=None을 사용하세요. 엔드투엔드 클래스 인덱스는 모델이 양자화된 경우에도 출력 텐서를 FP32로 유지할 수 있습니다.

정확도 및 속도 절충#

공개된 YOLO26 COCO 결과에 따르면 one-to-many 헤드는 다섯 가지 스케일 전반에서 탐지 mAP를 0.6–0.8 포인트 향상시킵니다. 예를 들어 YOLO26n의 경우 40.1 대 40.9, YOLO26x의 경우 56.9 대 57.5입니다. one-to-one 헤드는 NMS 패스를 방지하고 지연 시간을 선호합니다. 이러한 결과는 기본값 설정의 근거가 되며, 모든 데이터셋에서 향상을 보장하지는 않습니다.

공개된 NMS 없는 속도 측정은 nms=False을 사용합니다. 동일한 헤드 선택, 이미지 크기, 정밀도 및 하드웨어를 사용하여 정확도와 지연 시간을 비교하세요.

FAQ#

  • 이 설정은 예측 및 검증에서 반환되는 탐지 수를 제한합니다. 엔드투엔드 및 임베디드 NMS 내보내기의 경우 이 제한이 그래프의 일부이므로 변경하려면 다시 내보내야 합니다. 단, CoreML 탐지 임베디드 NMS는 예외이며 탐지 상한이 없습니다. 이미지의 앵커가 max_det개 미만인 경우 엔드투엔드 출력에 더 적은 수의 후보가 포함될 수 있습니다.

  • 그렇습니다. 기본 탐지 제한이 있는 nms=False 또는 nms=True의 경우 그렇습니다. 형태만으로는 어떤 헤드가 내보내졌는지 식별할 수 없습니다. 대신 기본 원시 COCO 탐지 내보내기는 일반적으로 imgsz=640에서 형태 (1, 84, 8400)를 가집니다.

  • 그렇습니다. 동일한 nms 인수가 detect, 인스턴스 세분화, pose 및 OBB에 사용 가능한 탐지 헤드를 선택합니다. 마스크 재구성, 키포인트 디코딩, 회전된 박스 처리, 분류 확률, 의미론적 클래스 맵 또는 깊이 디코딩을 대체하지는 않습니다.

댓글