Object Detection 모델의 출력 결과에 사용되는 NMS 방법에 대한 정리
NMS (Non Maximum Suppression)
개요
- detection 모델이 object라고 예측한 bounding box들이 하나의 오브젝트에 대해 경계박스가 겹치는 경우, 그중에 가장 신뢰도가 높은 box를 선택하도록 하는 후처리 기법.
- 대표적인 object detection 모델인 R-CNN, YOLO 계열에서 사용된다.
- confidence socre threshold 가 높을 수록, IoU threshold가 낮을 수록 더 많은 box가 제거 된다.
과정
1. 추정된 객체 Bounding Box 정보
- 모델은 추정된 각 객체 클래스에 대한 위치와 확률값을 반환한다.
2. 정렬 및 확률값 필터링
- 각 객체 클래스에 대한 모든 추정된 box 정보를 확률값 를 기준으로 내림차순 정렬하고, confidence threshold 이하의 box는 모두 제거한다.
- 일차적으로 confidence score가 일정 수준 이하인 box에 대해 필터링을 거치는 과정.
3. IoU 비교 및 필터링
- 내림차순 정렬된 box 정보들 중 가장 score가 높은 box를 대상으로, 나머지 모든 box들과 IoU 값을 계산하여 IoU threshold 이상인 box들은 모두 제거함.
- box들 끼리 많이 겹쳐질수록, 같은 물체를 검출하고 있다고 판단함.
- 해당 과정을 남은 box들에 대해서, score가 높은 순서대로 반복함.
4. 1~3번 과정 반복
- 모든 추정된 객체 클래스에 대하여 위 과정을 반복함.
일반적인 NMS의 단점
임계값 설정의 어려움
- IoU threshold에 따라 결과가 민감하게 변함.
- IoU threshold를 너무 높게 설정하면 중복 박스가 많이 남고, 너무 낮게 설정하면 객체를 놓칠 수 있다.
겹치는 객체 처리
- 현실에서는 같은 클래스의 객체가 겹쳐 있는 경우가 매우 많으며, 일반적인 NMS의 방법은 IoU threshold 값이 높음에도 불구하고 일부가 제거될 수 있다.
NMS의 응용 기법
Soft-NMS
- 중복된 박스(높은 IoU와 높은 confidence score)를 완전히 제거하지 않고, IoU에 따라 신뢰도(confidence)를 점진적으로 낮추는 방법.
Cluster-NMS
- 비슷한 박스를 그룹화한 뒤, 그룹 내에서 가장 적합한 박스를 선택함.
Adaptive NMS
- 박스가 밀집된 정도에 따라 IoU 임계값을 동적으로 조정함.
Class-Agnostic NMS
- 클래스를 무시하고 모든 박스에 대해 NMS 수행.
Class-Aware NMS
- 다른 클래스 박스끼리 IoU 비교를 하지 않는다. (가장 일반적임)
DIoU-NMS (Distance-IoU NMS)
- 바운딩 박스의 중심거리를 추가로 고려한다.
YOLO 모델의 NMS 세팅
- YOLO 모델의 버전별 프레임워크 및 NMS 세팅.
- 대부분의 YOLO 버전은 기본적으로 class-aware NMS를 사용함.
- YOLOv5 까지는
IoU threshold = 0.45
, YOLOv8에서는IoU threshold = 0.7
로 상향됨. - YOLOv8에서는 기본적으로
max_det = 3000
으로 confidence score에 따라max_det
만큼만 정렬됨.
YOLO 버전 | NMS 방식 | Confidence Threshold (conf) | IoU Threshold (iou) |
---|---|---|---|
YOLOv3 (Darknet) | Class-aware NMS | 0.25 | 0.45 |
YOLOv4 (Darknet, AlexeyAB) | Class-aware NMS (옵션: DIoU-NMS, Soft-NMS) | 0.25 | 0.45 |
YOLOv5 (Ultralytics) | Class-aware NMS (옵션: Class-agnostic) | 0.25 | 0.45 |
YOLOv6 (Meituan) | Class-aware NMS | 0.25 | 0.45 |
YOLOv7 (WongKinYiu) | Class-aware NMS (옵션: Soft-NMS) | 0.25 | 0.45 |
YOLOv8 (Ultralytics) | Class-aware NMS (옵션: Class-agnostic) | 0.25 | 0.7 ← 변화됨 |
성능측정 시 NMS 세팅
- 일반적으로 사용되는 객체 탐지 모델의 성능측정 지표인 mAP는 모든 가능한 confidence threshold에 대해 precision-racall curve를 계산함.
- 따라서, 가능한 모든 예측을 고려해야 하므로 NMS의 confidence threshold를 0으로 설정하거나 아주 낮은 값(0.001)으로 설정함.
- IoU threshold 값은 mAP@0.5, mAP@0.5~0.95 등 지표에 따라 설정함.