Skip to main content

탐지 평가 지표

학습 목표

  • IoU(Intersection over Union)의 정의와 계산법을 설명할 수 있다
  • Precision-Recall Curve를 해석할 수 있다
  • mAP@50과 mAP@50:95의 차이를 이해하고 해석할 수 있다
  • Ultralytics의 평가 결과를 분석할 수 있다

왜 중요한가

탐지 모델은 “어디에, 무엇이 있는가”를 예측하므로, 분류의 Accuracy와는 다른 평가 체계가 필요합니다. 위치 정확도(IoU)와 클래스 정확도를 모두 고려하는 mAP가 표준 지표입니다. mAP 수치를 올바르게 해석해야 모델 개선 방향을 설정할 수 있습니다.

IoU (Intersection over Union)

예측 박스와 정답 박스의 겹침 정도를 0~1 사이 값으로 나타냅니다.
IoU = 교집합 면적 / 합집합 면적
IoU 값해석
0.0겹침 없음
0.5보통 수준 (COCO 기본 임계값)
0.75높은 정밀도
1.0완벽한 겹침
def calculate_iou(box1, box2):
    """두 바운딩 박스의 IoU를 계산합니다. (xyxy 형식)"""
    x1 = max(box1[0], box2[0])
    y1 = max(box1[1], box2[1])
    x2 = min(box1[2], box2[2])
    y2 = min(box1[3], box2[3])

    intersection = max(0, x2 - x1) * max(0, y2 - y1)
    area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
    union = area1 + area2 - intersection

    return intersection / union if union > 0 else 0.0

TP/FP/FN 판정

IoU 임계값을 기준으로 탐지 결과를 분류합니다.
판정조건의미
TP (True Positive)IoU >= 임계값, 클래스 일치올바른 탐지
FP (False Positive)IoU < 임계값, 또는 중복 탐지오탐지 (잘못된 알림)
FN (False Negative)정답은 있으나 탐지 못함미탐지 (놓침)

Precision-Recall Curve

신뢰도 임계값을 변화시키면서 Precision과 Recall의 관계를 그린 곡선입니다.
  • Precision = TP / (TP + FP): 탐지 결과 중 맞은 비율
  • Recall = TP / (TP + FN): 전체 정답 중 탐지한 비율

AP와 mAP

AP (Average Precision)

하나의 클래스에 대한 Precision-Recall Curve 아래의 면적입니다.

mAP (mean Average Precision)

모든 클래스의 AP를 평균한 값입니다.
지표IoU 임계값설명
mAP@500.50IoU 50% 이상이면 TP. 대략적 위치 평가
mAP@750.75엄격한 위치 정확도 평가
mAP@50:950.50~0.95 (0.05 간격)10개 IoU에서 평균. COCO 공식 지표
mAP@50은 위치가 대략 맞으면 인정하고, mAP@50:95는 위치 정밀도까지 종합적으로 평가합니다. COCO 벤치마크에서는 mAP@50:95를 주요 지표로 사용합니다.

Ultralytics 평가 결과 해석

from ultralytics import YOLO

model = YOLO('best.pt')
metrics = model.val(data='dataset.yaml')

# 주요 지표 접근
print(f"mAP@50:     {metrics.box.map50:.4f}")
print(f"mAP@50:95:  {metrics.box.map:.4f}")
print(f"Precision:  {metrics.box.mp:.4f}")
print(f"Recall:     {metrics.box.mr:.4f}")

# 클래스별 AP
for i, name in enumerate(metrics.names.values()):
    ap50 = metrics.box.ap50[i]
    print(f"  {name}: AP@50 = {ap50:.4f}")

실무 해석 기준

mAP@50:95수준조치
0.60 이상우수배포 가능
0.40~0.60양호데이터/하이퍼파라미터 개선
0.20~0.40부족데이터 품질 재검토 필요
0.20 미만미흡데이터셋이나 태스크 재정의 필요
모델이 객체를 대략 찾고는 있지만 바운딩 박스 위치가 정밀하지 않다는 의미입니다. 데이터 라벨링의 일관성을 점검하고, 이미지 해상도를 높이거나 더 큰 모델을 사용해 보세요.
해당 클래스의 학습 데이터가 부족하거나, 다른 클래스와 시각적으로 유사하여 혼동될 수 있습니다. 해당 클래스의 데이터를 증강하거나, 라벨링 품질을 재점검하세요.

체크리스트

  • IoU의 정의와 계산법을 이해했다
  • TP, FP, FN의 판정 기준을 안다
  • Precision과 Recall의 트레이드오프를 이해했다
  • mAP@50과 mAP@50:95의 차이를 설명할 수 있다
  • Ultralytics 평가 결과를 해석할 수 있다

다음 문서