mean Average Precision(mAP) 계산하기
이전 글에서 mAP에서 객체 탐지 모델의 성능비교를 위해 사용한 mAP에 대해 좀 예제를 통해 알아보고자 한다.
1. Data
다음을 여러개의 객체가 존재하는 데이터에서 '개'와 '고양이'를 탐지한 결과라고 가정하고 진행해 보자.
위와 같이 데이터내 대상 객체는 총 20개이다.
2. 정확도, 정밀도, 재현률
Confusion matrix (contigency table or error matrix)
정확도 - Accuracy
얼마나 잘 맞췄는가?
전체 데이터에 대한 올바른 결과의 비율$Accuracy = \frac{TP + TN}{TP + FN + FP + TN}$
정밀도 - Precison
탐지된 결과가 얼마나 맞는가?
전체 탐지된 결과 중 올바르게 탐지된 결과의 비율$Precision = \frac{TP}{TP + FP}$
- $TP + FP$ : 추론의 Positive 개수, 즉 탐지된 전체 수
재현률 - Recall
얼마나 잘 탐지했는가?
전체 탐지되어야 할 대상 중 실제 탐지된 대상의 비율$Recall = \frac{TP}{TP + FN}$
- $TP + FN$ : 실측의 Positive 개수, 즉 탐지되어야 할 전체 수
샘플 데이터로 계산해 보면 아래와 같다.
- (개)
- $Accuracy = \frac{7 + 6}{7 + 4 + 3 + 6} = 0.65$
- $Precision = \frac{7}{7 + 4} \approx 0.64$
- $Recall = \frac{7}{7 + 3} = 0.7$
- (고양이)
- $Accuracy = \frac{6 + 7}{6 + 3 + 4 + 7} = 0.65$
- $Precision = \frac{6}{6 + 3} \approx 0.67$
- $Recall = \frac{6}{6 + 4} = 0.6$
구분 | 개 | 고양이 |
---|---|---|
정확도(Accuracy) | 0.65 | 0.65 |
정밀도(Precision) | 0.64 | 0.67 |
재현률(Recall) | 0.7 | 0.6 |
또한 일반적으로 분류 모델의 경우, 신뢰도(confidence)를 바탕으로 예측결과를 결정하기 되므로, 신뢰도의 임계치(threshold)를 조절하여 정밀도와 재현률을 서로 교환(tradeoff)할 수 있다.
즉, 샘플 데이터의 경우, 기준(threshold > 40)보다 낮은 임계치(threshold > 20)를 설정하면 재현률은 높아지지만 정밀도가 낮아진다.
임계치를 낮춘 경우
구분 | 개 | 고양이 |
---|---|---|
정확도(Accuracy) | 0.6 | 0.7 |
정밀도(Precision) | 0.56 | 0.625 |
재현률(Recall) | 1 | 1 |
반대로 기준보다 높은 임계치(threshold > 80)을 설정하면 재현률이 낮아지지만 정밀도가 높아진다.
임계치를 높힌 경우
구분 | 개 | 고양이 |
---|---|---|
정확도(Accuracy) | 0.7 | 0.7 |
정밀도(Precision) | 1 | 1 |
재현률(Recall) | 0.4 | 0.4 |
모델에 있어 정밀도 혹은 재현률은 해당 모델이 적용되어야 하는 상황에 따라 그 중요도가 결정된다. 예를 들면,
정밀도가 높아아 햐는 경우
: FP가 감소, 즉, 잘못 탐지한 케이스가 작아야 한다.
예를 들면, 도둑을 감지하여 자동으로 테이져건을 발사하는 AI가 있다고 해보자. 이 AI의 경우, 확!실!하!게! 도둑일 때에만(높은 임계치) 테이져건을 발사해야만 한다.재현률이 높아야 하는 경우
: FN이 감소, 즉, 탐지 못하는 케이스가 작아야 한다.
예를 들면, 생물한 연구소에서 누출 탐지를 수행하는 AI가 있다고 해보자. 이 AI의 경우, 누출을 막기 위해 약간의 징후라도 보이면(낮은 임계치) 탐지해야 하는 것이 맞다.
3. 정밀도-재현률 곡선 (Precision-Recall Curve)
샘플데이터를 신뢰도를 기준으로 내림차순 정렬한 후, X축을 재현률/Y축을 정밀도로 하는 그래프를 그린다. 이것이 PR 곡선(정밀도-재현률 곡선)이다.
개
PR 곡선
고양이
PR 곡선
참고로 F1 점수도 구해보자.
$F1 = 2 \times \frac{precision\times recall}{precision + recall}$
개 | 고양이 | |
---|---|---|
F1 | 0.66 | 0.64 |
4. mAP 계산
위에서 얻은 PR 곡선을 단계적으로 감소하는 방향으로 만든다.
PR 곡선
위 그래프에서 붉은색 굵은 점선과 같이 그래프를 계단식으로 만들고, 그래프가 만드는 각각의 사각형의 면적의 합(붉은색 면적 + 초록색 면적)이 AP가 된다.
'개'의 경우 AP는
$AP = 붉은면적 + 초록면적 = (0.6 - 0.1) \times 1 + (0.7 - 0.6) \times 0.636364 =0.5636364$
PR 곡선
'고양이'의 경우, 붉은색 점선이 맞는지 파란색 점선이 맞는지 정확히 모르겠다. (아시는 분 댓글좀 부탁드립니다. 여기서는 붉은 점선 기준으로 진행)
$AP = (0.6 - 0.1) \times 1 + (0.7 - 0.6) \times 0.666667 = 0.5666667$
mAP는 각각의 분류에 대한 AP의 평균을 구하면 된다.
$mAP = \frac{1}{2} \times (0.5636364 + 0.5666667) = 0.56515135 \approx 0.57 %$