,

[문서 탐지] 시험지 OCR에서 TP/FP/FN 계산 기준 — 전체 객체 수 보존 관점

결론 — “전체 객체 수 보존”이 핵심 기준이다

시험지 OCR에서 TP/FP/FN을 계산할 때 가장 중요한 원칙은:

“총합 문제 수가 일치되어야 정확하다”

부분 검출을 성공으로 인정하고, 전체 객체 수가 보존되는지를 기준으로 평가하면 혼란이 해소된다.

예시: GT(정답) = 문제 10개, 해설 0개

모델이 문제 9개를 정확히 찾고, 문제 1개를 “해설”로 잘못 분류한 경우:

클래스 TP FP FN 해석
문제 9 1 0 9개 정확 탐지 + 1개를 해설로 잘못 분류(FP)
해설 0 0 1 실제 해설 0개인데, 문제 1개가 해설로 빠져나감(FN)

검증: 전체 객체 수 = TP + FN = 9 + 0 + 0 + 1 = 10 ✓ (GT와 일치)

이 관점에서 보면:

  • 문제 클래스 FP(잘못 찾은 것) = 해설 클래스 FN(찾지 못한 것)
  • 한쪽의 FP는 다른 쪽의 FN으로 이동한 것이다
  • 전체 합이 보존되므로 평가 체계가 일관적

“전체 객체 수 보존” 관점이 시험지 OCR에 적합한 이유

시험지 OCR은 단순 Detection(박스 찾기)이 아니라 문서 구조 복원이다. 핵심 목표는:

  • 문제가 몇 개인지 정확히 파악
  • 각 문제의 지문·선택지·해설이 올바르게 연결
  • 읽기 순서가 보존

따라서 “박스를 몇 개 맞혔는가?”보다 “전체 문제 수가 일치하는가?”가 더 중요한 지표다.

관점 질문 적합한 상황
Detection 관점 박스를 몇 개 맞혔나? 일반 Object Detection (YOLO 등)
구조 복원 관점 전체 문제 수가 맞는가? 시험지 OCR, 문서 AI

문제 상황 — “이어지는 문단”을 하나로 볼 것인가?

시험지에서 하나의 문제 지문이:

  • 왼쪽 컬럼에서 시작되고
  • 오른쪽 컬럼으로 이어지는 경우

이때 핵심 질문:

이어지는 문단을 하나의 객체로 볼 것인가? 아니면 두 개의 객체로 볼 것인가?

이 기준이 정해지지 않으면 TP/FP/FN 계산 자체가 불가능하다.


평가 이전에 결정해야 할 것: Annotation Policy(라벨링 정책)

TP/FP/FN을 계산하기 전에 “무엇을 하나의 객체로 정의할 것인가?”를 먼저 고정해야 한다.

방식 1: 시각적 블록 기준 (Visual Block Detection)

규칙 장점 단점
화면상 분리된 박스 = 각각 별도 객체 Detection 모델에 적합, 좌표 기반 평가 단순, Annotation 쉬움 의미론적으로 같은 문단이 분리됨

예: 왼쪽 문단 + 오른쪽 이어진 문단 = 객체 2개

방식 2: 논리적 문단 기준 (Logical Paragraph)

규칙 장점 단점
논리적으로 이어지는 문단 = 하나의 객체 문서 구조 복원에 적합, 읽기 순서 보존 Annotation 복잡, 모델 학습 어려움

예: 컬럼 넘어 이어지는 문단 = 객체 1개

목적별 권장 기준

목적 권장 기준
일반 Object Detection 시각 블록 기준
OCR 문서 복원 논리 문단 기준
LayoutLM / Donut 논리 구조 기준
시험지 OCR 논리 구조 기준

시험지 OCR에서 논리 구조 기준이 중요한 이유

시험지 OCR은 단순 Detection보다 다음이 더 중요하기 때문:

  • 문제 구조 복원
  • 지문 연결
  • 해설 연결
  • 읽기 순서
  • 검색/토큰화

즉: “읽을 수 있게 복원되었는가?”가 핵심이다.

권장 객체 정의

객체 정의
문제 번호 개별
선택지 개별
문제 지문 이어지는 문단 포함 → 하나
해설 문단 단위 또는 전체 → 하나

부분 검출(Partial Detection) 처리 방식

문단 전체를 찾지는 못했지만 일부는 검출된 경우:

방식 기준 판정
Strict 문단 전체 복원 실패 FN
Lenient 일부라도 충분히 검출 TP
Coverage (권장) 검출 영역 / GT 영역 ≥ 0.7 TP (미만이면 FN)

본 프로젝트에서는 Coverage 기준(부분 검출 성공 인정)을 채택한다. 이유:

  • 컬럼을 넘는 문단에서 70% 이상 검출되면 구조 복원에 충분
  • 전체 객체 수 보존 원칙과 자연스럽게 양립

Confusion Matrix — 클래스별 계산 예시

상황: GT = 문제 10개, 해설 0개

모델 결과: 문제 9개 정확 탐지, 문제 1개를 해설로 잘못 분류

GT \ Pred 문제 해설
문제 9 (TP) 1 (misclass)
해설 0 0

문제 클래스 기준

  • TP = 9: 문제를 문제로 정확히 탐지
  • FP = 1: 문제가 아닌 것(해설)을 문제로 예측한 경우… 가 아니라, 여기서는 문제를 해설로 잘못 분류한 것이므로 FP가 아님
  • 정정: FP = 0 (해설을 문제로 잘못 찾은 경우 없음)
  • FN = 1: 문제인데 찾지 못함 (해설로 빠져나감)

해설 클래스 기준

  • TP = 0: 실제 해설이 없으므로
  • FP = 1: 문제인데 해설로 잘못 예측
  • FN = 0: 실제 해설이 없으므로 놓칠 것도 없음

전체 객체 수 검증

문제: TP(9) + FN(1) = 10 ✓ (GT 문제 수와 일치)
해설: TP(0) + FN(0) = 0  ✓ (GT 해설 수와 일치)
전체 탐지 수: 문제 TP(9) + 해설 FP(1) = 10 ✓ (보존)

Detection 평가와 구조 복원 평가는 분리해야 한다

시험지 OCR에서는 평가를 두 레이어로 나누는 것이 실무적이다:

Layer 1: Detection Metric

박스 단위의 엄밀한 평가:

  • TP / FP / FN
  • IoU (Intersection over Union)
  • Precision / Recall / F1

Layer 2: Structural Reconstruction Metric

문서 복원 품질 평가:

Metric 의미
Problem Count Accuracy 문제 수 일치 여부
Explanation Count Accuracy 해설 수 일치 여부
Paragraph Recovery 문단 복원율
Reading Order Accuracy 읽기 순서 정확도

핵심: 글자 하나 OCR 틀림보다 문제 하나 누락이 훨씬 치명적이다. 따라서 총 문제 수 consistency를 별도 지표로 관리해야 한다.


추천하는 최종 파이프라인

1단계 — Detection

시각 박스 검출 (YOLO, Faster R-CNN 등)

2단계 — Merge

다음 조건을 만족하면 병합:

  • 동일 클래스
  • 읽기 순서 연결
  • 컬럼 연결
  • 거리 threshold 이하

3단계 — Logical Region 평가

최종적으로 논리 객체 기준으로 평가:

  • 문제 지문 1개 (이어진 문단 포함)
  • 해설 1개
  • 전체 객체 수 보존 확인

정리

원칙 내용
객체 정의 논리 구조 기준 (이어지는 문단 = 1개)
부분 검출 Coverage ≥ 70%이면 TP
핵심 검증 전체 객체 수 보존 (GT 수 = TP + FN)
평가 분리 Detection Metric + Structural Reconstruction Metric
최우선 지표 총 문제 수 일치 (Problem Count Accuracy)

결론: “박스를 몇 개 맞혔는가?”보다 “문서를 얼마나 읽을 수 있게 복원했는가?”가 시험지 OCR의 진짜 평가 기준이다. 그리고 그 출발점은 “전체 객체 수가 보존되는가?”이다.


실측 채점 결과

전체 채점 진행 결과 - TP/FP/FN, Precision, Recall, F1
전체 채점 진행 결과 (채점된 페이지: 856 / 938, Macro F1: 0.497)


이어서 읽기

탐지 기준을 세우고 나면 남는 것은 처리 속도다. 같은 시험지 파이프라인에서 PDF 렌더링 구간을 벤치마크하고 필요한 쿠버네티스 사양을 산정한 기록이 아래에 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다