일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- BFS
- 세그먼트 트리
- 다익스트라
- Overfitting
- 너비 우선 탐색
- 크루스칼
- lazy propagation
- 이분 탐색
- 알고리즘
- NEXT
- 미래는_현재와_과거로
- tensorflow
- 조합론
- 플로이드 와샬
- dfs
- 백트래킹
- 가끔은 말로
- 자바스크립트
- 분할 정복
- 문자열
- 회고록
- pytorch
- 2023
- 가끔은_말로
- 우선 순위 큐
- dropout
- DP
- object detection
- c++
- back propagation
- Today
- Total
Doby's Lab
mAP (mean Average-Precision)에 대하여 본문
일반적으로 Object Detector의 성능이 얼마나 좋은지에 대한 지표로는 mAP가 널리 쓰이고 있습니다.
오늘은 mAP는 어떻게 도출되는 결과인지에 대해 알아보겠습니다.
✅ Precision(정확도), Recall(검출율, 재현율)
우선 Precision과 Recall에 대해 알고 있어야 합니다. 그리고, Precsion과 Recall에 대해 알기 위해서는 Confusion Matrix에 대한 개념을 알고 있어야 합니다.
위 그림이 Confusion Matrix입니다.
예를 들어, Detector가 Positive라고 판단했을 때, 이것은 Detector의 입장일 뿐입니다. 실제로 이것이 Positive인지 Negative인지는 모릅니다.
그런데 이것이 실제라고 했을 때는 Positive가 맞다는 의미로 TP(True Positive)가 됩니다. Positive가 아니었다면, FP(False Positivie)가 되는 것입니다.
이처럼 Detector가 판단한 것에 대한 여부의 진실을 가리는 지표가 Confusion Matrix라고 할 수 있습니다.
그래서 Detector의 성능을 파악할 수 있는 지표 중에는 Precision과 Recall이 있습니다.
📄 Precision (정확도)
Precision이란 말 그대로 Detector(Model)이 맞추었다고 하는 것 중 실제로 얼마나 맞추었는가에 대한 지표입니다.
즉, Positive라고 판단한 것 중 TP인 것입니다.
$$ Precision = \frac{TP}{TP+FP} = \frac{TP}{All\;Detections} $$
📄 Recall (검출율, 재현율)
Recall은 Detector가 Positive라고 판단한 것 중이 아닌 실제로 Positive인 것 중 Positive를 얼마나 검출했는지를 나타내는 지표입니다.
즉, 실제로 Positive인 TP + FN 중 TP인 것입니다.
$$ Recall = \frac{TP}{TP+FN} = \frac{TP}{All\;Ground\;Truth} $$
📄 알아두면 좋을 점
Precision과 Recall은 일반적으로 반비례의 관계를 갖는다는 것입니다.
꼭 알아야 할 필요는 없지만, 밑에 나올 PR Curve의 모양이 일반적으로 왜 이런 모양을 갖는지는 이해가 될 것입니다.
왜 반비례가 되는지는 예시를 들어보면, Precision이 높아진다고 가정해 봅시다.
Precison이 높아진다는 것은 FP가 낮아지는 것과 같습니다.
FP가 낮아진다는 것은 Positive가 아닌 Negative로 판단할 경우의 수가 많아진다는 뜻입니다.
이로 인해 Negative로 판단하는 경우의 수가 많아짐으로써 FN의 수가 늘어나고, 결론적으로 Recall이 낮아집니다.
✅ PR Curve (Precision-Recall Curve)
Precision과 Recall이라는 지표 둘 다 모델의 성능을 나타내기엔 좋아 보입니다. 하지만, 둘 중 어느 것을 사용해야 할지는 판단이 잘 서지를 않습니다. 더군다나 둘은 일반적으로 반비례의 관계를 가지고 있습니다.
이에 따라 둘 다 사용한 PR Curve라는 개념이 등장합니다.
PR Curve라는 개념을 다루기 위해서는 Confidence와 Threshold에 대해 알고 있어야 합니다.
📄 Confidence, Threshold
Confidence란 Detector가 어떤 것에 대해 판단을 했을 때, 얼마나 정확하다고 생각하는지에 대해 알려주는 값입니다.
즉, 모델이 얼마나 자신의 판단에 대해 자신감(Confidence)을 가지는지 볼 수 있는 것입니다.
그리고, Confidence가 높다고 해서 정확한 것은 절대 아니란 것을 알고 있어야 합니다.
Threshold란 임계값이란 뜻 그대로입니다. Confidence에 Threshold를 적용하며 Confidence가 Threshold보다 낮으면 그 판단은 무시해 버립니다.
예를 들어, 어떤 Object에 대해 Confidence가 0.1, 0.2, 0.3인데 Threshold가 0.4라면, 판단을 무시해 버리는 것입니다.
왜냐하면, 모델이 판단은 했지만 자신이 없기 때문에 정확하지 않겠다고 판단하여 적절한 Threshold를 설정하는 과정을 거칩니다.
📄 PR Curve
10개의 차가 존재하는 데이터셋이 있다고 가정해 봅시다. 이 중 7개의 차를 검출되었다고 가정해 보겠습니다.
그럼 검출된 Object들에 대해 Confidence와 TP or FP를 가릴 수 있습니다.
Detections | Confidence | TP or FP |
A | 48% | TP |
B | 68% | TP |
C | 97% | TP |
D | 14% | TP |
E | 35% | FP |
F | 56% | FP |
G | 82% | TP |
여기서 Threshold에 대해 변화를 준다면 모델의 Precision과 Recall이 달라질 것입니다.
이를 편하게 보기 위해 Confidence가 높은 순으로 정렬해 봅시다.
Detections | Confidence | TP or FP |
C | 97% | TP |
G | 82% | TP |
B | 68% | TP |
F | 56% | FP |
A | 48% | TP |
E | 35% | FP |
D | 14% | TP |
여기서 Confidence에 따라 Threshold가 그에 따라서 낮아질 때(97%, 82%, ..., 14%)의 Precision과 Recall을 봅시다.
Detections | Confidence | TP or FP | 누적 TP | 누적 FP | Precision | Recall |
C | 97% | TP | 1 | 0 | 1/1=1 | 1/10=0.1 |
G | 82% | TP | 2 | 0 | 2/2=1 | 2/10=0.2 |
B | 68% | TP | 3 | 0 | 3/3=1 | 3/10=0.3 |
F | 56% | FP | 3 | 1 | 3/4=0.75 | 3/10=0.3 |
A | 48% | TP | 4 | 1 | 4/5=0.80 | 4/10=0.4 |
E | 35% | FP | 4 | 2 | 4/6=0.66 | 4/10=0.4 |
D | 14% | TP | 5 | 2 | 5/7=0.71 | 5/10=0.5 |
위 테이블을 Recall(X axis)에 따른 Precision(Y axis)로 나타낸 것을 PR Curve라고 합니다.
PR Curve를 보았을 때, Precision이 잘 내려가지 않는다면 좋은 성능을 띈다고 볼 수 있습니다.
✅ AP (Average Precision), mAP (mean Average Precision)
PR Curve로 Detector가 어느 정도의 성능을 가졌겠구나 라는 판단을 할 수는 있겠지만, 다른 Detector와 비교를 할 때는 두 Detector의 PR Curve만 보았을 때, 어느 정도인지 파악을 하기 어렵습니다.
그래서 PR Curve를 비교를 위해 하나의 값으로 나타낸 것이 AP(Average Precision)입니다.
AP를 구하는 방법은 PR Curve를 구하여 그래프를 단조적인 그래프로 바꾸어주고,
그래프 아래에 해당하는 면적을 구한 값이 AP가 됩니다. (주황색 라인)
왜냐하면, Recall이 상승함에 있어서도 Precision이 계속 높은 값으로 유지되는 것이 좋다고 판단이 됩니다.
그래서 위에서도 PR Curve가 내려가지 않는 것이 좋다고 말한 것이었습니다.
여기서 AP의 값은 0.3 + 0.16 + 0.071 = 0.531이 됩니다.
📄 mAP (mean Average Precision)
하지만, 여기까지 구한 AP는 하나의 클래스에만 해당하는 값입니다.
여러 클래스가 존재할 경우에는 각 클래스마다 AP를 구하여 mean(평균)을 구해주면,
모델의 총 mAP를 구하여 성능에 대한 지표로 사용할 수 있습니다.
✅ References
'Computer Vision (CV)' 카테고리의 다른 글
DropBlock, 당신은 최근 Vision 모델에서 Dropout을 본 적이 있는가 (2) | 2024.02.08 |
---|---|
Selective Search에 대하여, Region Proposal (0) | 2023.02.09 |
Non-maximum Suppresion(비 최대 억제)에 대하여 (0) | 2023.02.05 |
IoU(Intersection over Union) 평가 지표에 대하여 (0) | 2023.02.05 |
Interpolation, cv2.resize() (Image Resize #2) (0) | 2022.12.27 |