성능 지표 이해
Object Detection 모델을 올바르게 평가하려면 각 지표의 정의와 상호 관계를 명확히 이해해야 한다. 특히 철도와 같은 안전 critical 도메인에서는 지표 해석이 시스템 설계와 직결된다.
핵심 요약
| 지표 | 정의 | 범위 | 철도 적용 우선순위 |
|---|---|---|---|
| IoU | 예측-실제 박스 겹침 비율 | 0 ~ 1 | 임계값 기준 (0.5 표준) |
| Precision | 탐지한 것 중 맞은 비율 | 0 ~ 1 | 오탐 비용 높을 때 |
| Recall | 실제 중 탐지한 비율 | 0 ~ 1 | 최우선 (미탐 방지) |
| F1 Score | Precision·Recall 조화평균 | 0 ~ 1 | 균형 평가 시 |
| mAP@50 | IoU=0.5에서 클래스별 AP 평균 | 0 ~ 1 | 일반 성능 비교 |
| mAP@50-95 | IoU 0.5~0.95 평균 mAP | 0 ~ 1 | COCO 표준, 위치 정밀도 |
문서 탐색
IoU (Intersection over Union)
IoU는 예측 바운딩 박스(Predicted Box)와 실제 바운딩 박스(Ground Truth Box) 간의 겹침 정도를 측정하는 지표이다.
수식
특성
- 범위: 0 (전혀 겹치지 않음) ~ 1 (완전히 일치)
- 임계값 역할: IoU ≥ 임계값이면 True Positive(TP), 미만이면 False Positive(FP)로 판정
- 표준 임계값: 0.5 (PASCAL VOC 기준), 0.5~0.95 (COCO 기준)
시각적 이해
┌──────────────────────────────┐
│ │
│ Ground Truth Box │
│ ┌─────────────────┐ │
│ │ │ │
│ │ 교집합 │ │
│ │ ┌───────┐ │ │
│ │ │■■■■■■│ │ │
│ └────┼───────┼───┘ │
│ │ │ Predicted │
│ └───────┘ Box │
│ │
│ IoU = 교집합 / 합집합 │
│ = ■■■■■■ / (GT + Pred - ■■) │
└──────────────────────────────┘
IoU 임계값별 판정 예시
| IoU 값 | 판정 (임계값 0.5) | 의미 |
|---|---|---|
| 0.95 | TP (True Positive) | 매우 정확한 탐지 |
| 0.70 | TP | 양호한 탐지 |
| 0.50 | TP (경계) | 최소 허용 기준 |
| 0.45 | FP (False Positive) | 임계값 미달 → 오탐 처리 |
| 0.10 | FP | 위치 매우 부정확 |
| 0.00 | FP | 완전히 다른 위치 |
Precision vs Recall
혼동 행렬(Confusion Matrix) 기반 정의
실제
Pos Neg
예측 Pos │ TP │ FP │
Neg │ FN │ TN │
TP: 실제 객체를 올바르게 탐지
FP: 없는 객체를 있다고 탐지 (오탐)
FN: 실제 객체를 탐지 못함 (미탐)
TN: 없는 객체를 올바르게 탐지 안 함
비교표
| 항목 | Precision | Recall |
|---|---|---|
| 수식 | TP / (TP + FP) | TP / (TP + FN) |
| 의미 | 탐지한 것 중 얼마나 맞았나 | 실제 중 얼마나 탐지했나 |
| 높을 때 | 오탐이 적다 | 미탐이 적다 |
| 낮을 때 | 오탐이 많다 | 미탐이 많다 |
| 중요한 경우 | 오탐 비용이 높을 때 (불필요한 경보 방지) | 미탐 비용이 높을 때 (안전 critical) |
Precision-Recall 트레이드오프
신뢰도 임계값(confidence threshold)을 낮추면 Recall이 높아지고 Precision이 낮아진다. 반대로 임계값을 높이면 Precision이 높아지고 Recall이 낮아진다.
Confidence 임계값 조정에 따른 변화:
임계값 낮춤 (예: 0.1)
→ 더 많이 탐지 → Recall ↑, Precision ↓
→ 오탐 증가, 미탐 감소
임계값 높임 (예: 0.9)
→ 확실한 것만 탐지 → Recall ↓, Precision ↑
→ 오탐 감소, 미탐 증가
F1 Score
F1 Score는 Precision과 Recall의 조화평균(harmonic mean)이다. 두 지표 중 하나가 0에 가까우면 F1도 낮아지는 특성 덕분에 단순 평균보다 균형 잡힌 평가가 가능하다.
클래스 불균형 데이터에서의 유용성
철도 데이터셋은 정상 상태(배경) 대비 결함·지장물 이미지 비율이 매우 낮아 클래스 불균형이 심각하다. 이때 Accuracy(전체 정확도)는 왜곡되지만, F1 Score는 소수 클래스 성능을 민감하게 반영한다.
| 예시 | Precision | Recall | F1 Score | 해석 |
|---|---|---|---|---|
| 균형 탐지 | 0.85 | 0.85 | 0.85 | 이상적 |
| Recall 우선 | 0.60 | 0.95 | 0.74 | 미탐 최소화, 오탐 허용 |
| Precision 우선 | 0.95 | 0.60 | 0.74 | 오탐 최소화, 미탐 허용 |
| 극단적 불균형 | 0.20 | 0.99 | 0.33 | F1로 실제 문제 드러남 |
mAP 상세
AP (Average Precision) 계산 과정
- 신뢰도 기준으로 탐지 결과 정렬 (내림차순)
- 각 임계값에서 Precision과 Recall 계산
- PR 곡선(Precision-Recall Curve) 생성
- 곡선 아래 면적(AUC) = AP
mAP (mean AP)
mAP는 모든 클래스에 대한 AP의 평균이다.
mAP@50 vs mAP@50-95
| 항목 | mAP@50 | mAP@50-95 |
|---|---|---|
| IoU 기준 | 0.5 고정 | 0.5, 0.55, 0.60, …, 0.95 평균 |
| 표준 | PASCAL VOC | COCO |
| 난이도 | 상대적 쉬움 | 상대적 어려움 (위치 정확도 요구) |
| 활용 | 빠른 성능 비교 | 최종 성능 보고 표준 |
| 동일 탐지 결과 | mAP@50 > mAP@50-95 항상 성립 | — |
| 철도 용도 | 논문 비교, 모델 선택 | 최종 시스템 평가 |
Confusion Matrix 해석법
Object Detection의 Confusion Matrix는 클래스별로 다음과 같이 해석한다.
예측
cls_A cls_B Background
실제 cls_A │ TP │ FP(오분류) │ FN(미탐) │
cls_B │ FP │ TP │ FN │
BG │ FP │ FP │ TN │
주요 해석 패턴
| 패턴 | 위치 | 의미 | 대응 방법 |
|---|---|---|---|
| 대각선 높음 | Matrix 대각 | 올바른 탐지 많음 | 현재 상태 유지 |
| FP 많음 | 배경 → 클래스 | 오탐 과다 | 신뢰도 임계값 높임 |
| FN 많음 | 클래스 → 배경 | 미탐 과다 | 신뢰도 임계값 낮춤, 데이터 보강 |
| 클래스간 혼동 | 비대각 클래스 셀 | 유사 클래스 구분 어려움 | 클래스별 특징 강화 학습 |
철도 분야 지표 해석
안전 Critical 원칙
철도는 미탐(FN)이 오탐(FP)보다 훨씬 치명적이다. 지장물을 탐지 못하면 열차 충돌로 이어지지만, 오탐은 불필요한 경보에 그친다.
철도 지표 우선순위:
1순위: Recall (미탐 최소화 — 절대 기준)
2순위: F1 Score (오탐·미탐 균형)
3순위: Precision (운영 효율성)
4순위: mAP@50-95 (위치 정밀도)
분야별 권장 임계값
| 점검 분야 | 신뢰도 임계값 | 목표 Recall | 목표 Precision |
|---|---|---|---|
| 지장물 탐지 | 0.25 ~ 0.35 | ≥ 0.97 | ≥ 0.70 |
| 레일 균열 | 0.30 ~ 0.40 | ≥ 0.95 | ≥ 0.75 |
| 체결장치 이상 | 0.35 ~ 0.45 | ≥ 0.93 | ≥ 0.80 |
| 전차선 이상 | 0.25 ~ 0.35 | ≥ 0.97 | ≥ 0.70 |
| 시설물 일반 점검 | 0.40 ~ 0.55 | ≥ 0.90 | ≥ 0.85 |
지장물 탐지와 전차선 이상의 신뢰도 임계값을 낮게 설정하는 이유: 오탐보다 미탐의 위험이 훨씬 크므로 Recall을 최대화한다.
성능 평가 코드
from ultralytics import YOLO
model = YOLO("best.pt")
# 검증 데이터셋 평가
metrics = model.val(
data="railway.yaml",
imgsz=640,
conf=0.30, # 신뢰도 임계값
iou=0.50, # IoU 임계값
device=0,
)
# 지표 출력
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, class_name in enumerate(metrics.names.values()):
print(f" {class_name}: AP50 = {metrics.box.ap50[i]:.4f}")문서 탐색
참고 자료
- COCO 평가 기준 공식 문서
- PASCAL VOC 평가 기준
- Ultralytics 성능 평가 문서
- SAHI GitHub
- Padilla, R. et al. “A Survey on Performance Metrics for Object-Detection Algorithms.” IWSSIP 2020.