mAP는 Object Detection 알고리즘들의 성능을 평가하는 지표입니다. 가장 처음에 나온 딥러닝 기반 Object Detection 알고리즘인 R-CNN부터 최근에 나온 YOLOv8까지 이 mAP로 성능을 평가하기 때문에 중요한 지표라고 할 수 있죠.
이번 포스팅에서는 이 mAP에 대해서 설명하도록 하겠습니다. mAP를 이해하기 위해서는 먼저 Precision(정밀도), Recall(재현율) 그리고 AP(Average Precision)에 대해서 알아야합니다.
Precision(정밀도) & Recall(재현율)
정밀도(Precision)는 예측을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율을 뜻합니다. Object Detection에서는 검출 알고리즘이 검출 예측한 결과가 실제 Object들과 얼마나 일치하는지를 나타내는 지표입
니다.
재현율(Recall)은 실제 값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율을 뜻합니다. Object
Detection에서는 검출 알고리즘이 실제 Object들을 빠뜨리지 않고 얼마나 정확히 검출 예측하는지를 나타내는 지표입
니다.
이 두 지표는 오차행렬을 통해서 표현할 수 있습니다. 오차행렬이란 이진 분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표 입니다.
오차행렬의 구성은 다음과 같습니다.
TP(True Positive) : 예측을 Positive로 했고 실제로도 Positive - 검출되어야 할 것이 올바르게 검출됨
FP(False Positive): 예측을 Positive로 했지만 실제로는 Negative - 검출되지 말아야할 것이 검출됨
TN(True Negative): 예측을 Negative로 했고 실제로도 Negative - 검출되지 말아야 할 것이 검출 안됨
FN(False Negative): 예측을 Negative로 했지만 실제로는 Positive - 검출되어야 할 것이 검출 안됨
뒤에 있는 P와 N은 검출 알고리즘이 예측을 했는지(P) 안했는지(N)를 나타내며, 앞에 있는 T와 F는 결과적으로 예측이 실제와 일치하여 예측 오류가 나지 않았는지(T) 예측과 실제가 달라 예측 오류가 났는지(F)를 나타낸다고 생각하면 이해하기 쉬울 겁니다.
Object Detection에서는 객체의 Classification과 Localization이 둘 다 이루어지기 때문에 검출 예측이 실제와 같다는 것을 확인하려면 class label과 bounding box 둘 다 고려해줘야 합니다.
이때 예측 bounding box와 실제의 일치 여부는 이전 포스팅에서 배운 IoU threshold(임계값)에 따라서 결정됩니다. 다음 그림은 TP, FP, FN 각각의 예시를 나타낸 것입니다.
- TP - 검출 예측을 했으며(P) 실제와 같아 예측 오류가 없음(T) (class label 동일, 실제 bounding box와의 IoU가 threshold인 0.5보다 큼)
- FP - 검출 예측을 했지만(P) 실제와 달라 예측 오류가 있음(F) (class label이 다르거나 IoU가 threshold인 0.5보다 작음)
- FN - 검출 예측을 하지 않았지만(N) 실제는 검출해야함. 즉 예측과 실제가 달라 예측 오류가 있음(F)
그래서 정밀도와 재현율이 오차행렬로 어떻게 표현되는데요??!!
서두가 길었지만 정밀도(Precision)는 검출 알고리즘이 예측한 것 중 실제 object와 일치한 비율이므로 $\frac{TP}{TP + FP}$로, 재현율(Recall)은 실제 object들 중에 검출 알고리즘이 예측한 비율이므로 $\frac{TP}{TP + FN}$로 표현할 수 있습니다.
$$Precision = \frac{TP}{TP + FP} = \frac{TP}{All Detection}$$
$$Recall = \frac{TP}{TP + FN} = \frac{TP}{Ground Truth}$$
정밀도와 재현율의 트레이드오프
정밀도와 재현율은 어느 하나도 낮아서는 안될 중요한 지표이지만 두 지표는 서로 상호 보완적이기 때문에 동시에 높일 수는 없습니다.
Object Detection에서 정밀도 또는 재현율을 높이기 위해서는 Confidence threshold(임계값)을 조절해야합니다.
이전 포스팅에서 NMS 수행 과정의 첫 번째가 <Confidence score가 특정 Confidence threshold 값보다 낮은 Bounding box를 모두 제거>였다는 것을 기억하시나요?
즉 만약 Confidence threshold 값이 낮아진다면 찾는 object일 가능성이 낮은 물체의 bounding box까지 남아있어 많은 예측 bounding box가 존재할 것입니다. 그렇다면 FP는 증가하고 FN은 감소할 것이기 때문에 정밀도는 낮아지고 재현율은 높아질 것입니다.
반대로 Confidence threshold 값이 높아진다면 찾는 object일 가능성이 높은 물체의 bounding box만을 남길 것이므로 남아있는 예측 bounding box가 적을 것입니다. 그렇다면 FP는 감소하고 FN은 증가할 것이기 때문에 정밀도는 높아지고 재현율은 낮아지게 되죠.
이처럼 아래 그림과 같이 정밀도와 재현율은 동시에 높일 수 없습니다. 하나의 지표를 강제로 높이면 다른 지표는 떨어지기 마련이죠.
따라서 object detection이 사용될 용도와 상황에 따라 적절하게 두 지표 값을 조절해야 할 필요가 있습니다.
mAP(mean Average Precision)
어찌됐든 object detection 알고리즘의 성능은 정밀도와 재현율을 통해서 평가할 수 있습니다.
이를 위해서 정밀도 재현율 곡선(Precision-Recall curve)을 이용하는데, 정밀도 재현율 곡선이란 confidence threshold를 조절하면서 얻어진 Recall 값의 변화에 따른 Precision 값을 나타낸 그래프입니다.
예를 들어 어떠한 image에 검출해야 할 15개의 객체가 있다고 가정해봅시다. 아래 프는 confidence threshold를 낮추면서 검출되는 객체의 TP, FP 여부와 정밀도, 재현율을 나타낸 표입니다.
confidence threshold가 85%(=0.85)일 때 총 검출된 객체는 I, E, D번으로 총 3개이고 실제와 동일하여 모두 TP이므로 정밀도(precision) = 3/3 = 1이고, 총 15개의 객체 중 3개만 예측했므로 재현율(Recall) = 3/15 = 0.2가 됩니다.
이 표를 정밀도 재현율 곡선(Precision-Recall curve)으로 그리면 다음과 같죠.
이 정밀도 재현율 곡선에서 얻어진 정밀도(precision) 값의 평균을 AP(Average Percision)라고 하고 일반적으로 정밀도 재현율 곡선의 아래 면적 값으로 계산됩니다.
보통 아래 면적을 계산 전에 정밀도 재현율 곡선을 아래 그림과 같이 단조적으로 감소하는 그래프로 변경해줍니다. (오른쪽 최대 precision 값을 연결)
따라서 최종적으로 위 예시에서는 AP = 1 x (0.33) + 0.88 x (0.47 - 0.33) = 0.4532 가 됩니다.
그렇다면 우리가 알아야 하는 mAP는 무엇일까? AP가 한 개의 객체에 대한 성능 수치였다면 mAP는 여러 객체들의 AP를 평균한 값입니다.
아래 그림은 여러 object detection의 mAP를 계산한 결과인데요. 자전거에 대한 AP, 버스에 대한 AP 등 검출할 수 있는 각 객체의 AP를 계산하여 평균을 내서 mAP(mean Average Precision)를 계산한 것입니다.
이 mAP는 여러 object detection 알고리즘의 성능을 평가하는 중요한 지표가 되는데 최근에 나온 YOLOv8의 성능도 이 mAP를 보고 얼마나 좋아졌는지 알 수 있습니다.
위 그림을 보면 알 수 있드시 YOLOv8의 mAP가 이전 YOLO 버전의 mAP보다 높은 것을 확인할 수 있습니다. 그만큼 성능이 좋아졌다는 의미이겠죠!
다음 포스팅부터는 본격적으로 Object Detection 알고리즘들을 하나씩 살펴보도록 하겠습니다!
Reference
● https://www.inflearn.com/course/딥러닝-컴퓨터비전-완벽가이드/dashboard - 인프런 강의
'Perception > Object Detection' 카테고리의 다른 글
[Object Detection] SPP(Spatial Pyramid Pooling)Net (0) | 2023.05.12 |
---|---|
[Object Detection] R-CNN (0) | 2023.04.13 |
[Object Detection] IoU(Intersection over Union) & NMS(Non-Max Suppression) (0) | 2023.04.03 |
[Object Detection] Selective Search (선택적 탐색) (0) | 2023.04.01 |
[Object Detection] Sliding Window (0) | 2023.03.04 |