mAP (mean Average Precision) ?
이번 포스트에서 다뤄볼 개념은 mAP라고 불리우는 mean Average Precision 입니다.
mAP는 mAP, mAP@0.5 혹은 mAP@0.5-0.95 등의 이름으로 불리우고 있습니다.
Object Detection 과제에서, 객체의 위치 추정과 검출 성능을 평가하기 위해 주로 사용됩니다.
OD 과제에서 주로 사용된다는 것은 많은 사람들이 알고있지만, 실제 어떻게 계산되는지 명확히 알기 어렵습니다.
그렇기에 예제와 함께 mAP를 계산해가며, mAP를 어떻게 측정할 수 있는지 설명하고자 합니다.
Object Detection Outputs
가장 먼저 다뤄볼 내용으론 Object Detection 모델이 내뱉는 결과에 대해서입니다.
YOLO와 같은 OD 모델은 입력에 대한 출력으로 Bounding Box의 좌표, Confidence score, Class score를 도출합니다.
Bounding Box의 좌표는 객체가 존재할 것 같은 위치의 좌표이며, YOLO의 경우 (x1, y1, x2, y2)의 형태입니다.
이 부분은 모델마다 다른 포맷을 가지며 (x, y, w, h) 등과 같이 다양한 포맷이 존재합니다.
Confidence score는 확률과 유사한 특정 객체가 존재할 것이라고 확신하는 수치라고 볼 수 있습니다.
예를 들어, 이미지 내 예측된 어떠한 Box에 대해, Box안에 객체가 존재하는지 확신하는 수치라 할 수 있습니다.
OD 모델의 성능을 평가할 때, 위의 값들이 매우 중요하게 사용되기 때문에, 가장 먼저 다뤄보았습니다.
다음 내용으로 넘어가보겠습니다!
IoU (Intersection over Union)
Object Detection 과제에서 Bounding Box Regreesion 성능을 평가하기 위해 IoU라는 공식을 사용합니다.

이는 Ground Truth로 정의되는 정답 Box와 모델을 통해 추정된 Box가 얼마나 겹쳐있는지 계산합니다.
만약 객체의 위치가 잘 추정되었다면, 정답 Box와 예측 Box가 많이 겹쳐 높은 IoU를, 아니라면 낮은 IoU를 갖습니다.
공식에서도 알 수 있다시피, IoU 값은 정답 Box와 예측 Box 하나 당, 0에서 1사이의 값을 도출합니다.
그렇다면, 이러한 IoU 값을 통해 모델이 도출한 결과에 대해 어떠한 지표를 생성할 수 있을까요?
바로 분류 모델의 성능 평가에 사용되는 Confusion Matrix이며, 해당 Matrix가 mAP의 핵심이라 할 수 있습니다.
Object Detection 과제에선, 어떻게 Confusion Matrix를 계산할 수 있을까요?
Confusion Matrix (feat. IoU Threshold)
이전 분류 모델에서 도출된 확률과 임계값을 기반으로 0 혹은 1의 값으로 산출한 뒤, Matrix를 구해본 기억이 있습니다.
Object Detection 과제에서도, Box의 겹침 정도인 IoU와 IoU 임계값을 통해 Matrix를 산출할 수 있습니다!

단, Object Detection 과제에서 사용되는 Confusion Matrix는 일반 분류에서 사용되는 Matrix와 약간 다릅니다.
1. A 객체 Box를 A 객체 Box라고 잘 예측했으면서, IoU가 임계값보다 크다면, True Positive
2. A 객체 Box를 A 객체 Box라고 잘 예측했지만, IoU가 임계값보다 작다면, False Positive
3. A 객체 Box를 B 객체 Box라고 전혀 다르게 예측한 경우엔, False Negative
약간 다르지만 개념은 어느정도 유사하고, 가장 크게 다른 점이라면 OD에선, True Negative 케이스가 없습니다.
True Negative란 결국 BackGround(배경)를 의미하기에, Box가 존재할 수도 예측할 수도 없기 때문입니다.
이렇게 3가지 TP, FP, FN 지표에 대해 IoU와 Box Class를 통해 Matrix를 산출하는 것이 핵심이라고 할 수 있습니다.
이후 ROC curve에서 Threshold를 바꿔가며, Recall / Precision / FPR을 계산했던 것처럼, mAP도 동일합니다.
하지만 동일하면서도 약간 다른데, 어떻게 계산해나갈 수 있을까요?
PR curve와 AP score (feat. Confidence score)
이전 분류 기반의 Confusion Matrix에서 ROC curve를 그리기 위해서, 모든 확률값을 임계값으로 사용했었습니다.
Object Detection에선 약간 다르게, Confidence score를 임계값으로 Recall, Precision을 계산합니다.
설명을 위한 상황으로, 10개의 샘플에 객체가 하나씩 존재하며, IoU threshold가 0.5라 가정하겠습니다.

이전 ROC curve와 동일한 표로 봤을 때, 가장 먼저 Confidence score를 기준으로 모든 데이터를 정렬합니다.
이후 IoU threshold를 기준으로 모든 샘플 데이터에서의 TP, FP, FN을 계산합니다.
여기서 강조되어 표시된 Confidence score의 역할은 무엇일까요?
Confidence score는 또 하나의 임계값으로 Box의 존재 여부를 결정하는 역할을 수행합니다.
조금 더 쉽게 설명해보자면, 가장 높은 Confidence score를 기준으로 threshold를 설정한 경우를 예로 들겠습니다.
Box의 존재 여부를 결정하는 threshold로써, 위의 경우에선 나머지 9개의 Box가 모두 사라진 것처럼 계산하게 됩니다.
그렇기에 위의 Box를 제외한 모든 Box는 False Negative 케이스로 취급되어, Recall에만 관여하게 됩니다.
이후, 해당 위치에서의 Precision과 Recall을 계산합니다.

다음으로, 두번째 샘플의 Confidence score를 활용하는 경우를 보겠습니다.
두 샘플 모두 Confidence score와 IoU가 threshold 이상이기에 True Positve 케이스로 취급됩니다.
당연하게도, 다른 샘플들은 모두 False Negative 케이스로 취급되며, 현재 위치에서의 Precision, Recall을 계산합니다.

이번에도 동일하게, threshold를 기준으로 데이터를 나눈 뒤, Precision과 Recall을 계산합니다.
이러한 방식을 모든 샘플의 Confidence score를 통해 계산하게 된다면?

최종 결과는 위 표와 같이 나타나게 됩니다.
Confidence score와 IoU threshold를 기반으로, 모든 위치에서의 Precision, Recall의 값을 구할 수 있게됩니다.
이를 통해 Precision-Recall curve의 모양을 유추할 수 있게됩니다.
Precision을 y축 Recall을 x축이라고 할 때, Precision이 점점 감소하는 형태의 그림이 될 것으로 예상됩니다.

실제 Precision-Recall curve를 살펴보았을 때, 위 이미지에서 파란색 그래프의 형태로 나타나게 됩니다.
PR curve에서의 Average Precision 값은, ROC curve에서의 AUC score와 동일하게 계산할 수 있습니다.
하지만 PR curve에서 Average Precision을 계산하는 과정에서, 크게 불편한 포인트가 하나 있습니다.
이는 Precision이 Confidence score로 인해 결정되긴 하지만, TP/FP를 결정하는 기준이 IoU이기 때문입니다.
그렇기에 TP/FP가 반복적으로 섞여 나타나면서, 그래프의 모양이 ROC curve와는 다르게 그려지게 됩니다.
이렇게 삐쭉한 형태에서는 curve 아래 면적을 구하기 어렵습니다. 그렇기에 interpolation(보간법)을 사용합니다.
보통 11 point interpolation 방법을 사용하며, Recall의 값을 구간으로 나누어 Precision을 평균내는 방법입니다.
Interpolation을 통해 파란 선이 빨간 점선처럼 표현될 수 있고, 이를 통해 면적을 쉽게 계산할 수 있게됩니다.
이렇게 PR curve에서 interpolation 처리 후 계산된 아래 면적의 합을 AP(Average Precision)라고 합니다.
mAP, mAP@0.5, mAP@0.5-0.95의 의미
앞서 PR curve 아래 면적 값인 Average Precision 값을 산출하는 방법에 대해 알아보았습니다.
그렇다면 이번 포스트의 주제인 mAP란 무엇일까요? 이는 아주 간단합니다!
구해진 AP 값은 어떤 하나의 객체 클래스에 대한 성능입니다. (동물 카테고리에서 "강아지만" 계산한 성능을 의미)
그렇다면 mAP란 무엇일까요? 짐작하셨겠지만, 내 데이터의 모든 객체 클래스에서 도출된 AP의 평균입니다.
전체 클래스 수가 10개든 20개든 1000개든 모두 mAP 지표로 평가하며, 이는 클래스 별 AP의 평균 값입니다.
조금 더 깊게 들어가서 mAP@0.5란? 맞추신분들이 있으실 수 있지만, 이는 IoU threshold를 의미합니다.
Confusion Matrix의 TP, FP, FN을 결정하는 IoU threshold에 따라 달라지며, 일반적으론 0.5를 사용합니다.
그렇다면 mAP@0.5-0.95란? 단 하나의 IoU threshold로 평가되는 mAP@0.5의 문제를 보완한 지표입니다.
0.5부터 0.95까지 모든 IoU에 대해 mAP를 계산한 뒤, 이를 다시 한번 평균낸 값을 의미합니다.
조금 풀어 설명하자면 mAP를 다시 한번 평균내어 계산했다고 할 수 있겠네요!
이렇게 Object Detection 과제 대표 성능 지표인 mAP에 대해 다뤄보았습니다. 잘 이해 되셨을까요?
긴 글 읽어주셔서 감사합니다. 틀린 부분 혹은 궁금한 부분에 대해서는 언제든 피드백과 질문 부탁드립니다.