Ultralytics YOLO27:
Get Started

Ultralytics YOLO26의 엔드투엔드 탐지 이해하기#

YOLO26은 일대다 헤드와 일대일 헤드를 모두 학습합니다. 기본적으로 예측과 검증은 비최대 억제(NMS)를 적용하는 일대다 헤드를 사용합니다. 이는 동일한 학습 가중치로 정확도를 높이는 방식입니다. 더 빠른 NMS 없는 일대일 헤드를 사용하려면 nms=False를 설정하세요.

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

nms예측 및 검증내보내기
None(기본값)일대다 헤드; Ultralytics에서 NMS를 실행합니다일대다 원시 출력; 소비 측에서 NMS를 실행합니다
TrueNone과 동일합니다지원되는 경우 NMS가 내장된 일대다 헤드
FalseIoU 억제를 적용하지 않는 일대일 헤드지원되는 경우 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)회전 각도

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

내보낸 출력#

YOLOv8, YOLO11 및 YOLO26 감지 모델은 기본적으로 원시 one-to-many 예측을 내보냅니다. NMS가 필요 없는 감지를 사용하려면 YOLO26을 nms=False으로 내보내세요.

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

nms=True도 처리된 감지 결과를 생성하지만, one-to-many 헤드를 사용하고 기존 NMS를 포함합니다. 배포 런타임에서 suppression을 직접 구현하지 않고 감지 결과를 받도록 할 때 유용합니다.

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

내보내기 형식 호환성#

ONNX, TensorRT, CoreML, OpenVINO 및 여러 다른 형식은 NMS가 필요 없는 내보내기를 지원합니다. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU 및 Qualcomm QNN은 해당 연산자가 엔드투엔드 출력을 지원하지 못하는 경우 one-to-many 경로로 대체됩니다. 형식 경고에 대체 동작이 설명됩니다.

  • 내장 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.9 대 40.1, YOLO26x는 57.5 대 56.9입니다. one-to-one 헤드는 NMS 단계를 생략해 지연 시간에 유리합니다. 이러한 결과는 기본 설정의 근거가 되지만, 모든 데이터셋에서 성능 향상을 보장하지는 않습니다.

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

자주 묻는 질문#

  • 예측 및 검증에서 반환되는 감지 결과 수를 제한합니다. 엔드투엔드 및 내장 NMS 내보내기에서는 제한값이 그래프에 포함되므로, 이를 변경하려면 다시 내보내야 합니다. CoreML 감지의 내장 NMS는 예외이며 감지 개수 제한이 없습니다. 이미지에 max_det개보다 적은 앵커가 포함된 경우 엔드투엔드 출력의 후보 수가 더 적을 수 있습니다.

  • 기본 감지 제한값을 사용하는 nms=False 또는 nms=True의 경우 맞습니다. 셰이프만으로는 어떤 헤드가 내보내졌는지 확인할 수 없습니다. 기본 원시 COCO 감지 내보내기의 셰이프는 일반적으로 imgsz=640에서 (1, 84, 8400)입니다.

  • 예. 동일한 nms 인수로 detect, 인스턴스 세그멘테이션, pose 및 OBB에 사용할 수 있는 감지 헤드를 선택합니다. 이 인수는 마스크 재구성, 키포인트 디코딩, 회전 박스 처리, 분류 확률, 시맨틱 클래스 맵 또는 깊이 디코딩을 대체하지 않습니다.

댓글