☞ 문서의 내용은 가장 하단 참고문헌 및 사이트를 참고하여 필자가 보기 쉽도록 정리한 내용입니다.
☞ 틀린 내용 및 저작권 관련 문의가 있는 경우 문의하시면 수정 및 삭제 조치하겠습니다.
NMS란?
일반적으로 Input image가 Object detection 알고리즘을 통과하면 Object에 bbox(Bounding box)가 그려지며 어떤 물체일 확률 값(Score)값을 가지게 된다. 이때 아래 그림 처럼 한 가지Object에 많은 bbox가 생긴다. 동일한 Object에 여러개의 bbox가 있다면, 가장 스코어가 높은 박스만 남기고 나머지를 제거하는 것이 NMS(Non-maximum Suppression)라 한다.
NMS
Input :
B - bbox list
S - bbox의 confidence scores
N - 중첩 임계값
Output :
D - 필터링된 bbox list
Algorithm:
-
Confidence가 가장 높은 제안을 선택하고 B에서 제거한 다음 최종 제안 목록 D에 추가합니다.
-
이제 이 제안을 모든 제안과 비교한다. 이 제안의 IOU(Intersection over Union)를 다른 모든 제안과 함께 계산한다. IOU가 임계 값 N보다 큰 경우 B에서 해당 제안을 제거한다.
-
다시 B의 나머지 제안에서 가장 Confidence가 높은 제안을 B에서 제거하고 D에 추가한다.
-
다시 한 번 B의 모든 제안으로 이 제안의 IOU를 계산하고 임계 값 보다 IOU가 높은 상자를 제거한다.
-
이 프로세스는 B에 더 이상 제안이 남지 않을 때까지 반복된다.
NMS 의사코드
Soft-NMS란
위의 알고리즘은 가장 높은 confidence를 가지는 bbox를 찾고, bbox들 중 겹치는 영역이 임계값 이상이며 제거해서 중복을 제거한다. 그러나 이 임계값을 설정하는 것은 매우 까다로우며 mAP가 낮아지는 문제가 있다. 예시로 아래 그림과 같은 상황이 있다. 아래 그림은 말들이 겹쳐져 있다. 이 때 confidence는 0.8 / 0.9 / 0.8 이다. 가장 높은 0.9의 말을 제외하고 0.8의 말은 사라진다.
이런 문제점을 대처하는 방법은 Soft-NMS를 사용하는 것이다. 이 아이디어는 매우 간단하다. 일정 비율 이상으로 겹쳐진 bbox들의 confidence를 0으로 만들어 제거하는 것이 아닌 confidence를 줄여서 유지하는 것이다. 이 방법은 최종 mAP를 향상시킬 수 있다.
Soft-NMS
$S_{i}$: 제안 i의 점수
$b_{i}$ : 제안 i에 해당 하는 상자
$M$ : 최대 신뢰도에 해당하는 상자
$N _{t}$ : IOU임계값
Soft-NMS 알고리즘
참고 자료