mAP

juhee·2025년 5월 6일

AI 엔지니어 이론

목록 보기
7/7

Precision, Recall, AP 개념 정리

1. Precision과 Recall

객체 탐지를 이해하기 위해서는 먼저 정밀도(Precision)재현율(Recall) 개념을 알아야 합니다.

개념수식의미
PrecisionTP / (TP + FP)예측 중 정답인 비율
RecallTP / (TP + FN)실제 객체 중 예측한 비율
  • TP (True Positive): 정확하게 탐지된 객체
  • FP (False Positive): 잘못 탐지한 객체 (오탐)
  • FN (False Negative): 놓친 객체 (미탐)

2. Precision–Recall 곡선 (PR Curve)

모델은 각 예측 박스에 대해 confidence score를 출력합니다.
이 점수를 기준으로 정렬한 후 threshold 값을 변화시키며 Precision과 Recall의 관계를 그리면 PR 곡선이 생성됩니다.

일반적으로 Recall이 증가하면 Precision은 감소하는 경향이 있습니다.

3. AP (Average Precision) 정의

AP는 하나의 클래스에 대해 생성된 Precision–Recall 곡선 아래 면적(Area Under Curve)입니다.

  • AP가 높을수록 해당 클래스에 대한 탐지 성능이 좋다는 의미입니다.
  • AP는 PR 곡선을 다음 방식으로 정리하여 계산합니다:
    • 11-point interpolation (VOC 방식)
    • Integral 방식 (평균 적분) (COCO 방식)

4. 예시 설명

  • 클래스 A에 대해 Precision이 일정하게 높고, Recall이 꾸준히 증가 → AP ↑
  • Precision이 요동치거나 초반에 낮은 경우 → AP ↓

mAP의 정의와 계산 방법

1. mAP란?

mAP (mean Average Precision)는 객체 탐지(Object Detection)에서 모든 클래스에 대한 Average Precision(AP)의 평균값을 의미합니다.

각 클래스마다의 탐지 성능(AP)을 구한 뒤, 그 평균을 내어 모델 전체의 객체 탐지 성능을 평가합니다.

2. mAP 계산 수식

mAP는 아래와 같은 방식으로 계산됩니다:

mAP=1Ni=1NAPi\text{mAP} = \frac{1}{N} \sum_{i=1}^{N} \text{AP}_i
  • NN: 클래스의 총 개수
  • APi\text{AP}_i: 클래스 ( i )에 대한 Average Precision

즉, 모든 클래스의 AP를 평균낸 값이 mAP입니다.

3. IoU (Intersection over Union) 기준

객체 탐지에서 예측이 정답과 얼마나 잘 맞는지를 평가할 때 사용하는 기준은 IoU (Intersection over Union)입니다.

IoU=Area of OverlapArea of Union=BpredBgtBpredBgt\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}} = \frac{B_{\text{pred}} \cap B_{\text{gt}}}{B_{\text{pred}} \cup B_{\text{gt}}}
  • BpredB_{\text{pred}}: 예측한 bounding box
  • BgtB_{\text{gt}}: 실제 정답 bounding box

일반적으로 IoU ≥ 0.5이면 정답(True Positive)으로 간주합니다.

4. VOC vs COCO: mAP 계산 방식 비교

기준설명난이도
VOC mAP@0.5IoU ≥ 0.5일 때 각 클래스별 AP를 평균비교적 간단
COCO mAP@[0.5:0.95]IoU 0.5부터 0.95까지 0.05 간격으로 총 10개의 AP를 평균훨씬 정밀하고 까다로움

COCO 평가 항목 예시

항목설명
mAP@[0.5:0.95]10개 IoU 기준에서 AP를 측정하고 평균
mAP@0.5VOC와 동일한 기준 (IoU ≥ 0.5)
mAP@0.75보다 엄격한 IoU 기준 (IoU ≥ 0.75)
mAP_small / medium / large객체 크기에 따라 성능을 나누어 평가

5. 예시 계산

VOC 방식 예시 (mAP@0.5)

클래스별 AP가 다음과 같을 때:

  • class A: 0.80
  • class B: 0.60
  • class C: 0.70
mAP@0.5=0.80+0.60+0.703=0.70\text{mAP@0.5} = \frac{0.80 + 0.60 + 0.70}{3} = 0.70

COCO 방식 예시 (mAP@[0.5:0.95])

  • 각 클래스에 대해 IoU 기준을 0.5 ~ 0.95까지 0.05 간격으로 총 10개 설정
  • 해당 IoU에서 각각의 AP를 구하고, 그 평균을 내면 mAP@[0.5:0.95]가 됩니다

정리

항목설명
mAP전체 클래스의 AP 평균값
IoU예측 박스와 정답 박스의 겹침 정도
VOC mAP@0.5IoU ≥ 0.5에서 AP 측정
COCO mAP@[0.5:0.95]10개 IoU 기준에서 평균 AP 측정 (더 정밀함)

PR 곡선 시각화와 mAP 해석 방법

1. Precision–Recall 곡선이란?

Precision–Recall(PR) 곡선은 객체 탐지 모델의 정확도(Precision)재현율(Recall) 사이의 관계를 시각적으로 나타낸 곡선입니다.

  • x축: Recall (실제 객체 중 탐지된 비율)
  • y축: Precision (탐지한 객체 중 정답 비율)
  • PR 곡선 아래의 면적이 Average Precision (AP) 이며, 이 면적이 클수록 탐지 성능이 좋음을 의미합니다.

2. PR 곡선 시각화 예시 (Python 코드)

예측 결과를 기반으로 PR 곡선을 시각화하려면 다음과 같은 과정을 거칩니다.

from sklearn.metrics import precision_recall_curve
import matplotlib.pyplot as plt

# 예측 결과와 정답 레이블
y_true = [0, 1, 1, 0, 1, 1, 0, 0]         # 실제 값
y_scores = [0.1, 0.9, 0.8, 0.3, 0.75, 0.65, 0.2, 0.05]  # 예측 confidence score

# PR 곡선 계산
precision, recall, thresholds = precision_recall_curve(y_true, y_scores)

# 시각화
plt.plot(recall, precision, marker='.')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision–Recall Curve')
plt.grid(True)
plt.show()

이 곡선은 confidence threshold(신뢰도 임계값)를 조절할 때 모델의 탐지 성능이 어떻게 변화하는지를 시각적으로 보여줍니다.

3. 좋은 PR 곡선의 특징

곡선 형태의미
곡선이 높고 완만함높은 precision을 유지하며 recall 증가 → 좋은 탐지기
급격한 하강confidence score가 불안정하거나 FP가 많음
넓은 면적AP 높음
좁은 면적AP 낮음, 불안정

PR 곡선이 천천히 떨어질수록 모델이 다양한 threshold에서도 성능이 안정적이라는 뜻입니다.

4. mAP 해석 방법

mAP는 클래스별 AP를 평균한 값이기 때문에, PR 곡선이 얼마나 안정적으로 유지되었는가에 대한 총평입니다.

mAP가 높은 경우

  • 대부분의 클래스에서 precision–recall 곡선이 안정적
  • 다양한 IoU 기준에서도 성능이 고르게 높음

mAP가 낮은 경우

  • 일부 클래스에서 precision 하락이 빠름
  • FP가 많거나, confidence score가 불안정함

5. 예시 비교

모델AP@0.5PR 곡선 형태해석
모델 A0.85완만한 하강높은 정밀도, 안정적인 탐지
모델 B0.52급격한 하강threshold에 민감, 탐지 불안정
모델 C0.30낮은 precision 유지탐지는 많으나 정답률 낮음 (FP↑)

정리

항목설명
PR 곡선Precision과 Recall의 관계를 시각화
APPR 곡선 아래 면적 (클래스별 성능 척도)
mAP전체 클래스의 AP 평균
좋은 PR 곡선높은 Precision을 유지하며 완만하게 감소
해석mAP은 탐지 정확도 + 안정성을 동시에 평가하는 지표

mAP 계산 코드 & COCO/VOC 평가 툴 사용법

1. mAP 직접 계산 로직 (PyTorch 기반, VOC 스타일)

mAP@0.5를 간단하게 구현하려면 다음과 같은 절차를 따릅니다

mAP@0.5 간단 구현 절차

  1. 예측 박스와 정답 박스 수집
  2. IoU 계산
  3. TP / FP 결정
  4. Precision–Recall 곡선 생성
  5. AP 계산 → 클래스별 평균 → mAP 산출
from sklearn.metrics import average_precision_score

# 예시: binary classification 기반 AP 계산
y_true = [0, 1, 1, 0, 1]  # ground truth (0: background, 1: object)
y_scores = [0.1, 0.8, 0.9, 0.4, 0.75]  # prediction confidence

ap = average_precision_score(y_true, y_scores)
print(f"AP: {ap:.4f}")

이 방식은 VOC 스타일의 mAP@0.5 단일 IoU 기준 평가와 유사합니다.

2. IoU 계산 함수 예시 (예측 vs 정답 박스)

def compute_iou(box1, box2):
    # box: [x1, y1, x2, y2]
    x1 = max(box1[0], box2[0])
    y1 = max(box1[1], box2[1])
    x2 = min(box1[2], box2[2])
    y2 = min(box1[3], box2[3])

    inter_area = max(0, x2 - x1) * max(0, y2 - y1)
    box1_area = (box1[2] - box1[0]) * (box1[3] - box1[1])
    box2_area = (box2[2] - box2[0]) * (box2[3] - box2[1])

    iou = inter_area / float(box1_area + box2_area - inter_area + 1e-6)
    return iou

3. COCO 평가 툴(py-cocotools) 사용법

설치

!pip install pycocotools

필요 파일 구조

  • annotations/instances_val2017.json: COCO 포맷 정답 파일
  • results.json: 모델이 예측한 결과 (COCO 포맷)

사용 예시 (mAP@.5:.95 계산)

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval

annFile = 'annotations/instances_val2017.json'
resFile = 'results.json'

coco_gt = COCO(annFile)
coco_dt = coco_gt.loadRes(resFile)

coco_eval = COCOeval(coco_gt, coco_dt, iouType='bbox')
coco_eval.evaluate()
coco_eval.accumulate()
coco_eval.summarize()

출력 결과에는 mAP@[.5:.95], mAP@0.5, mAP_small, mAP_medium, mAP_large 등 다양한 평가 지표가 포함됩니다.

4. VOC 평가 코드 사용법 (Pascal VOC Toolkit)

VOC mAP 계산은 Pascal VOC에서 제공한 Python 평가 코드를 활용할 수 있습니다.
• 평가 대상은 voc_format: XML or .txt 기반 라벨링
• 클래스별로 예측과 정답을 비교하여 mAP@0.5 계산

https://github.com/Cartucho/mAP (가장 널리 쓰이는 오픈소스 구현)

정리

항목설명
직접 구현sklearn.metrics와 IoU 계산으로 간단한 mAP 측정 가능
VOC 평가단일 IoU@0.5 기준, 빠르고 직관적, 구현 간단
COCO 평가다양한 IoU(0.5~0.95) 기준에서 평가, 더욱 정밀
추천 툴pycocotools (COCO 공식), Cartucho/mAP (VOC 오픈소스)

mAP 성능 향상 전략

1. mAP 향상을 위한 주요 전략 개요

mAP은 단순한 수치이지만, 실제로는 모델의 구조, 학습 방식, 후처리 등 다양한 요소가 영향을 미칩니다.

2. 데이터 증강 (Data Augmentation)

기법설명효과
Random Flip / Scale / Crop다양한 시야 제공위치 다양성 확보
Color Jitter / HSV shift밝기, 채도 변화조명 변화 대응
Mosaic Augmentation여러 이미지를 하나로 합침 (YOLOv4+)작은 객체 탐지 향상
MixUp / CutMix두 이미지를 혼합하여 새로운 샘플 생성regularization + 일반화 능력 향상

3. 앵커 박스 최적화 (Anchor Box Tuning)

  • 대부분의 모델(YOLO, RetinaNet 등)은 anchor box를 기반으로 탐지함
  • k-means clustering 또는 AutoAnchor 기능으로 anchor 크기를 최적화
  • 실제 데이터의 객체 크기 분포에 맞게 anchor를 조정하면 mAP 크게 향상 가능

4. 모델 구조 개선

전략설명
Backbone 변경더 강력한 feature extractor 사용 (e.g., CSPDarknet → EfficientNet)
FPN, PAN 추가multi-scale feature 통합으로 작은 객체 탐지 개선
Attention 모듈CBAM, SE-block 등으로 중요한 영역 강조
Re-parameterization훈련 시 복잡 → 추론 시 단순화하여 성능 유지 + 속도 향상

5. 후처리(Post-processing) 튜닝

기법설명효과
NMS (Non-Max Suppression)겹치는 박스 제거FP 감소
Soft-NMS점수 감쇠 방식으로 박스 제거 완화recall 증가
Score threshold 조정confidence가 낮은 박스 제거noise 제거 + precision 증가

6. 학습/최적화 기법 개선

  • Focal Loss: class imbalance가 심한 경우 (특히 작은 객체) 성능 향상
  • Learning Rate Scheduler: cosine, step decay 등 적절히 조절
  • Warm-up, Label smoothing, Gradient clipping 등 안정적인 학습을 위한 테크닉 적용

정리

영역전략 예시
데이터 증강Mosaic, CutMix, Flip, HSV
앵커 박스AutoAnchor, k-means clustering
모델 구조FPN, Attention, Efficient Backbone
후처리NMS, Soft-NMS, threshold 조절
최적화Focal loss, LR decay, label smoothing

결론

  • mAP은 단순히 모델이 좋아야만 높아지는 것이 아니라 데이터 구성, 학습 전략, 후처리의 정교한 조합이 필요합니다.
  • 높은 mAP을 얻기 위해선 탐지의 정확도(precision)재현율(recall) 사이 균형을 잘 맞추는 것이 핵심입니다.

0개의 댓글