Perception/Object Detection

[Object Detection] IoU(Intersection over Union) & NMS(Non-Max Suppression)

고집호랑이 2023. 4. 3. 07:03

이번 포스팅에서는 본격적으로 딥러닝 기반의 Object Detection 알고리즘들을 살펴보기 전에 미리 알아둬야 하는 개념인 IoU와 NMS에 대해서 설명하도록 하겠습니다. 

 

IoU(Intersection over Union)

Classification의 경우 모델이 예측한 class가 맞는지 틀렸는지 쉽게 판단할 수 있습니다. 실제 class와 일치한지, 불일치한지만 보면 되기 때문입니다.   

 

하지만 Bounding Box의 경우 예측된 Bounding Box가 실제 Bounding Box(Ground Truth)와 애초에 100% 일치할 확률이 거의 없습니다.

  

따라서 예측된 Bounding Box는 Ground Truth와 일치하냐 불일치하냐를 보기보다는 두 영역이 얼마나 일치하는지를 평가하는 지표가 필요합니다.

 

그리고 그 지표가 바로 IoU인 것이죠. IoU를 구하는 방법은 아래 그림과 같습니다.

 

IoU 계산 방법

<예측 Bounding Box와 Ground Truth가 겹치는 부분 / 예측 Bounding Box와 Ground Truth를 둘러싼 부분>으로 IoU를 구할 수 있습니다. 쉽게 말해서 두 영역의 <교집합 / 합집합> 인것이죠.

 

따라서 IoU값의 범위도 0(두 영역이 하나도 겹치지 않을 경우) ~ 1(두 영역이 완전히 겹쳐진 경우) 사이의 값이란 것도 알 수 있습니다.

 

IoU가 0.5 정도 이상이면 예측 Bounding Box와 Ground Truth가 $\frac{2}{3}$ 정도 겹치기 때문에 일반적으로 IoU가 0.5 이상이면 예측을 성공했다고 간주합니다. 

 

IoU가 0.5 이상이면 예측 성공으로 간주예측 성공 기준이 되는 IoU

 

이런 IoU는 당장 바로 아래에서 설명할 NMS에서도 사용되는 만큼 여러 Object Detection 알고리즘 과정에 스며들어 사용되고 있으며, Object Detection 알고리즘의 성능을 평가할 때 예측 성공을 판단하는 기준이 됩니다. 

 

NMS(Non-Max Suppression)

일반적으로 입력 이미지가 Object Detection 모델을 통과해 Bounding box regression을 수행하면 하나의 Object에 대해서 여러 개의 Bounding box가 그려지게 됩니다. 바로 아래 그림처럼 말이죠.

 

여러 개의 Bounding box

 

당장 이전 포스팅에서 살펴본 Selective search의 결과만 봐도 object가 있을만한 위치를 나타낸 Bounding box가 무지하게 많았습니다. 하지만 Object의 위치를 나타내는 Bounding box는 하나로 충분하기 때문에 가장 적합한 위치에 있는 Bounding box 하나를 제외하고는 모두 제거해야할 필요가 있습니다. 

 

이렇게 Object Detection 알고리즘이 예측한 여러 Bounding box 중에 신뢰도가 가장 높은 하나의 Bounding box를 제외하고 모두 제거하는 기법NMS(Non-Max Suppression)라고 합니다.

 

NMS의 수행 과정은 다음과 같습니다.

NMS 수행 과정

1. 예측된 모든 Bounding box에 대해서 Confidence score가 특정 Confidence threshold 값보다 낮은 Bounding box를 모두 제거

  • confidence score : 해당 Bounding box 안에 해당 object가 존재할 확률, 0~1 사이의 값을 가지며 일반적으로 <특정 class일 확률(object detection 알고리즘의 결과로 나옴) x Ground truth와의 IoU>로 계산된다.

 

2. 가장 높은 Confidence score를 가진 Bounding box 순으로 내림차순으로 정렬

 

3. 맨 앞에 있는 Bounding box와 나머지 Bounding box와의 IoU를 계산하여 IoU가 특정 threshold 보다 큰 Bounding box는 제거(IoU가 크다는 것은 겹치는 부분이 많다는 뜻이므로 같은 Object를 가르키는 것으로 간주하여 제거한다는 것이다) 

 

4. 3의 과정을 모든 Bounding box에 순차적으로 적용

 

5. 남아있는 Bounding box만을 선택

 

이때 Confidence threshold가 높을수록, IoU threshold가 낮을수록 더 많은 Bounding box가 제거됩니다.

 

예시를 통해서 더 자세히 살펴보도록 합시다. 아래 예시에서 Confidence threshold = 0.5, IoU threshold = 0.4라고 가정합니다.

 

NMS 수행 과정 예시

1. Confidence score가 Confidence threshold = 0.5보다 낮은 Bounding box가 제거 -> 제거된 Bounding box X 

2. 가장 높은 Confidence score를 가진 Bounding box 순으로 내림차순으로 정렬 -> [ 0.9 bb, 0.8 bb, 0.7 bb, 0.65 bb, 0.6 bb(왼쪽), 0.6 bb(오른쪽) ] (bb는 bounding box의 약자)

3.  맨 앞에 있는 Bounding box와 나머지 Bounding box와의 IoU를 계산하여 IoU가 특정 threshold 보다 큰 Bounding box는 제거 -> 0.7 bb, 0.6 bb(오른쪽)가 제거됨 -> [ 0.9 bb, 0.8 bb, 0.65 bb, 0.6 bb(왼쪽) ]

4. 3의 과정을 모든 Bounding box에 순차적으로 적용 -> 이제 0.8 bb에 대해서 3번 과정 진행 -> 0.65 bb, 0.6 bb(왼쪽) 제거됨 ->  [ 0.9 bb, 0.8 bb ]

5. 남아있는 Bounding box만을 선택 -> 최종적으로 그림에서 흰색으로 표시된 0.9 bb와 0.8 bb만 남게됨

 

이러한 과정으로 NMS는 하나의 Object에 하나의 Bounding box만 남기게 됩니다. 

 

하지만 이런 NMS에는 문제점이 존재합니다. 만약 detect 하려는 Object들이 과하게 밀접해 있거나 혹은 완전히 겹쳐있을 경우 IoU 값이 1에 근접하기 때문에 3번 과정에 의해 다른 객체의 Bounding box들도 제거가 됩니다. 

 

이 때문에 아래 왼쪽 그림에서는 두 얼룩말 중에 왼쪽 얼룩말이 검출 되지 않게 되죠.  

 

NMS의 문제점

이를 해결하기 위해서 나온 것이 Soft - NMS입니다. 이에 대한 자세한 내용은 기회가 되면 포스팅하도록 하겠습니다. 

 

다음 포스팅에서는 Object Detection 알고리즘들의 성능을 평가하는 지표인 mAP에 대해서 설명하도록 하겠습니다. 

 

Reference

https://www.baeldung.com/cs/object-detection-intersection-vs-union

 

https://wikidocs.net/142645

 

https://www.inflearn.com/course/딥러닝-컴퓨터비전-완벽가이드/dashboard - 인프런 강의

 

https://openaccess.thecvf.com/content_ICCV_2017/papers/Bodla_Soft-NMS_--_Improving_ICCV_2017_paper.pdf