Yolo 비전 선전
선전
지금 참여하기
용어집

비최대 억제NMS

비최대 억제(NMS)가 객체 탐지에서 중복 경계 상자를 제거하는 방법을 알아보세요. Ultralytics 어떻게 네이티브 엔드투엔드 NMS 제공하는지 확인하세요.

비최대 억제(NMS)는 객체 탐지에서 모델이 생성한 원시 예측을 정제하기 위해 사용되는 후처리 기법입니다. 객체 탐지 모델이 이미지를 분석할 때, 단일 객체에 대해 중복되는 여러 경계 상자를 생성하는 경우가 많으며, 각 상자에는 신뢰도 점수가 부여됩니다. 이러한 중복 예측은 모델이 detect 약간 다른 크기나 위치에서 detect 수 있기 때문에 발생합니다. NMS 각 객체에 대해 가장 정확한 경계 상자만 유지하고 나머지는 제거함으로써 이러한 출력을 NMS 최종 결과가 깔끔하고 정확하며 중복 없이 처리되도록 보장합니다.

Non-Maximum Suppression 작동 방식

NMS 후보 경계 상자 목록과 해당 신뢰도 점수를 기반으로 작동합니다. 목표는 객체에 대해 최적의 상자를 선택하고, 동일한 객체의 중복 탐지일 가능성이 높은 상당히 중첩되는 다른 상자들을 억제(제거)하는 것입니다. 이 과정은 일반적으로 다음 단계를 따릅니다:

  1. 필터링: 특정 임계값(예: 0.25) 미만의 신뢰도 점수를 가진 모든 바운딩 박스를 제거하여 약한 예측을 즉시 배제합니다.
  2. 정렬: 남은 상자들을 신뢰도 점수 기준 내림차순으로 정렬하십시오.
  3. 선택: 유효한 탐지로 가장 높은 신뢰도 점수를 가진 상자를 선택하십시오.
  4. 비교: 선택된 이 박스와 나머지 모든 박스를 합집합 대비 교집합(IoU)을 사용하여 비교합니다. 이는 두 박스 간의 중첩 정도를 측정하는 지표입니다.
  5. 억제: 선택된 박스와 다른 박스 IoU 사전 정의된 임계값(예: 0.45)을 초과할 경우 점수가 낮은 박스는 중복으로 간주되어 제거됩니다.
  6. 반복: 아직 억제되거나 선택되지 않은 상자 중 점수가 가장 높은 상자로 프로세스를 반복합니다. 모든 상자가 처리될 때까지 계속합니다.

실제 애플리케이션

정밀도가 최우선인 시나리오에서는 중복 탐지가 하류 시스템을 혼란스럽게 할 수 있으므로 NMS .

  • 자율주행: 자율주행차 시스템에서 카메라는 detect , 다른 차량 및 교통 표지판을 detect . 단일 보행자에 대해 모델이 세 개의 약간 다른 상자를 예측할 수 있습니다. NMS 차량의 계획 시스템이 해당 보행자에 대해 하나의 좌표만 수신하도록 NMS "유령" 장애물로 인한 불규칙한 제동이나 경로 계획 오류를 방지합니다.
  • 소매 재고 관리: 컴퓨터 비전을 활용해 선반 위 제품을 계수할 때, 상품들은 종종 밀집되어 포장됩니다. NMS(네비게이션 매진 솔루션) 없이서는 예측이 겹치는 바람에 단일 음료 캔이 두 번 계수될 수 있으며, 이로 인해 재고 수준이 부정확해집니다. NMS 이러한 탐지 결과를 NMS 재고 계수가 실제와 일치하도록 보장합니다.

PyTorch 이용한 NMS

많은 현대적 프레임워크가 NMS 처리하지만, 구현 방식을 이해하면 매개변수 조정에 도움이 됩니다. 다음 예시는 PyTorch NMS 적용하는 방법을 보여줍니다:

import torch
import torchvision.ops as ops

# Example bounding boxes: [x1, y1, x2, y2]
boxes = torch.tensor(
    [
        [100, 100, 200, 200],  # Box A
        [105, 105, 195, 195],  # Box B (High overlap with A)
        [300, 300, 400, 400],  # Box C (Distinct object)
    ],
    dtype=torch.float32,
)

# Confidence scores for each box
scores = torch.tensor([0.9, 0.8, 0.95], dtype=torch.float32)

# Apply NMS with an IoU threshold of 0.5
# Boxes with IoU > 0.5 relative to the highest scoring box are suppressed
keep_indices = ops.nms(boxes, scores, iou_threshold=0.5)

print(f"Indices to keep: {keep_indices.tolist()}")
# Output will likely be [2, 0] corresponding to Box C (0.95) and Box A (0.9),
# while Box B (0.8) is suppressed due to overlap with A.

NMS 종단 간 탐지

전통적으로 NMS 주요 신경망 외부에서 수행되는 필수적인 "정리" 단계로, 추론 지연 시간을 추가해 NMS . 그러나 이 분야는 종단 간 아키텍처로 진화하고 있습니다.

  • 표준 NMS: IoU 수동으로 조정해야 하는 경험적 과정입니다. 임계값이 너무 낮으면 서로 가까운 유효한 객체가 누락될 수 있습니다(낮은 리콜). 너무 높으면 중복이 남습니다(낮은 정밀도).
  • 엔드투엔드 모델: YOLO26과 같은 차세대 모델은 기본적으로 엔드투엔드로 설계되었습니다. 이들은 훈련 과정에서 개체당 정확히 하나의 박스를 예측하도록 학습하여 NMS 효과적으로 내재화합니다. 이로 인해 외부 후처리 작업이 불필요해져 더 빠른 추론 속도와 Ultralytics 간소화된 배포 파이프라인을 실현합니다.

관련 개념

  • NMS: 겹치는 박스를 엄격히 제거하지 않고 신뢰도 점수를 감소시키는 변형 방식입니다. 이를 통해 일부 겹치는 객체(예: 군중 속 사람들)도 감쇠 후 점수가 충분히 높게 유지되면 여전히 탐지될 수 있습니다.
  • 앵커 박스: 객체 크기를 추정하기 위해 많은 탐지기가 사용하는 사전 정의된 박스 형태입니다. 이러한 앵커에서 정제된 최종 예측값에는 NMS (최소 제곱 평균 제곱근)가 NMS .
  • 교차율(IoU): NMS 두 박스의 중첩 정도를 NMS 사용하는 수학적 공식으로, 억제 결정의 기준값 역할을 합니다.

Ultralytics 커뮤니티 가입

AI의 미래에 동참하세요. 글로벌 혁신가들과 연결하고, 협력하고, 성장하세요.

지금 참여하기