전체 목차 열기 · 10부 35장

PART 09 / CHAPTER 33

33 · 공간 분할·IoU·오류 지도

가까운 영상 조각의 정보 누수를 피하고 범주별 오류를 평가합니다.

이 페이지에서

학습 목표: 가까운 영상 조각의 정보 누수를 피하고 범주별 오류를 평가합니다.

준비: 실행 환경 · 도구와 용어. 예제 자료는 별도 표시가 없는 한 합성 자료입니다.

개념

공간적으로 인접한 영상은 지표와 촬영 조건이 비슷합니다. 같은 원영상의 겹치는 타일을 무작위로 훈련·시험에 섞으면 새 지역에 대한 성능을 과대평가할 수 있습니다. 지역·원영상·촬영 시기를 기준으로 분리하고 시험 영역을 모델 선택에 사용하지 않습니다.

IoU는 예측과 참조의 교집합을 합집합으로 나눈 값입니다. 픽셀 정확도만 높아도 작은 녹지 범주는 잘 못 찾을 수 있어 범주별 IoU와 혼동행렬을 함께 봅니다.

왜 필요한가

도심 영상에서 학습한 모델이 신도시·산지에서도 잘 작동하는지는 별도 검증해야 합니다. 설계에 쓸 녹지 면적이나 연결성 지표가 오류에 얼마나 민감한지도 확인하세요.

핵심 API

NumPy 불리언 연산으로 TP·FP·FN 및 IoU를 계산합니다. 기준 범주가 없는 시험자료에서 분모가 0이면 이를 1로 처리할지 제외할지 규칙을 사전에 정합니다. 아래 코드는 공간 분리 ID와 작은 분류 결과를 함께 검증합니다.

최소 실행 예제

import numpy as np

train_regions = {"city_A", "city_B"}
test_regions = {"city_C"}
assert train_regions.isdisjoint(test_regions)
truth = np.array([1,1,0,0,255])
pred = np.array([1,0,1,0,1])
valid = truth != 255
tp = int(((truth == 1) & (pred == 1) & valid).sum())
fp = int(((truth != 1) & (pred == 1) & valid).sum())
fn = int(((truth == 1) & (pred != 1) & valid).sum())
union = tp + fp + fn
iou = tp / union if union else float("nan")
assert (tp,fp,fn) == (1,1,1)
assert np.isclose(iou, 1/3)
print("green IoU:", iou, "valid pixels:", int(valid.sum()))

조경·도시 실무 예제

합성 예제의 녹지 IoU는 1/3입니다. 실제 결과에는 지역별·계절별·범주별 지표, 유효 픽셀 수, 라벨의 불확실성, 공간 오차 지도를 함께 보고합니다. 인접 지역이 나뉘어도 같은 건물의 겹치는 타일이 섞였는지 검사하세요.

시각화와 결과 읽기

맞춘 녹지, 놓친 녹지, 녹지로 잘못 분류한 곳을 서로 다른 색으로 표시하고, 배경 영상에서 원인을 읽습니다.

흔한 오류

라벨 경계 위치가 어긋나면 작은 물체에서 IoU가 크게 낮아집니다. NoData는 평가 대상에서 제외합니다. 최고 성능이 나온 시험지역 설정을 선택하면 시험자료가 다시 검증자료가 됩니다.

연습문제

예측의 세 번째 값을 0으로 바꿔 precision과 IoU가 어떻게 개선되는지 계산하세요.

전체 예제 내려받기 · 실행: python chapter33.py

다음 단계

34 · GIS와 IFC/BIM의 좌표·속성 연결로 이어집니다.

출처

scikit-learn Jaccard/IoU 정의, PyTorch 데이터 다루기. 확인 2026-09-30.