Industrial Defect Inspection

지도학습(YOLOv8) vs 비지도학습(PatchCore) 산업 결함 검사 비교, pixel 단위 실패 원인 분석까지

YOLOv8 PatchCore MVTec AD Error Analysis
01 Overview
기간2026.08
인원개인
역할전처리, 두 모델 학습·평가, 오탐/미탐 원인 분석 전체
주요 기술Python, PyTorch, anomalib(PatchCore), YOLOv8, OpenCV
GitHubsung-ju-park/industrial-defect-inspection
02 Problem

산업 검사 현장은 "이미 아는 결함"과 "예상 못한 새 이상"을 동시에 잡아내야 합니다

객체탐지 모델은 학습된 결함 유형은 잘 잡지만 본 적 없는 이상은 놓치기 쉽고, 이상탐지 모델은 정상과 다르면 다 잡아내지만 정확히 어디가 왜 문제인지 짚어내기 어렵다는 상반된 한계가 있습니다. 같은 데이터(MVTec AD hazelnut)로 지도학습(YOLOv8)과 비지도학습(PatchCore)을 각각 구현해 직접 비교하고, 두 접근의 실제 강약점을 데이터로 확인하고자 했습니다.

03 My Role

My Contribution

  • CLAHE 기반 조명 보정 전처리 파이프라인 구현
  • PatchCore(anomalib) 학습·평가, coreset ratio(1%/10%) 민감도 검증
  • 마스크 → YOLO bbox 변환, YOLOv8 학습(Colab T4, 100 epoch)
  • pixel 단위 IoU 분석 및 오탐/미탐 원인 로그 분석
  • 두 모델 결과를 종합 비교하는 스크립트 작성
04 Technical Challenge

이미지 단위 정확도만으로는 두 모델의 진짜 차이가 보이지 않았습니다

PatchCore는 image_AUROC 1.000으로 사실상 완벽하게 정상/불량을 구분했습니다. 이 숫자만 보면 "다 잘 된 것"처럼 보이지만, 결함의 정확한 위치까지 맞히는지는 이미지 단위 지표로는 전혀 알 수 없었습니다.

image_AUROC 1.000 확인
→
"완벽하다"고 오판할 위험
→
pixel 단위로 다시 검증 필요
05 Solution

이미지 단위 판정에서 멈추지 않고, pixel 단위 IoU로 다시 뜯어봤습니다. 그 결과 PatchCore는 불량 이미지 70장 평균 IoU 0.193(최저 0.032)로, 결함이 있다는 것은 맞히지만 정확한 위치는 체계적으로 못 짚어낸다는 걸 확인했습니다. 같은 방식으로 YOLOv8도 결함 유형별로 나눠 재평가했습니다.

PatchCore

비지도학습 · 이상탐지
image_AUROC1.000
image_F10.993
pixel_AUROC0.988
pixel_F10.633
평균 pixel IoU (불량 70장)0.193
IoU 최저값0.032 (cut)
VS

YOLOv8

지도학습 · 객체탐지
전체 mAP500.869
cut / hole / print mAP50~0.995
crack recall0.143
종합 F10.714
학습 환경Colab T4 · 100 epoch

두 모델은 정확히 반대 지점에서 약했습니다 — PatchCore는 cut 결함의 위치를 못 짚었고(IoU 0.032), YOLOv8은 가늘고 긴 crack 결함을 거의 놓쳤습니다(recall 0.143). 축 정렬 바운딩박스 구조 자체가 가늘고 긴 형태를 표현하기 어렵다는 것이 원인으로 보입니다.

06 Result

종합 F1 기준으로는 PatchCore(0.993)가 YOLOv8(0.714)보다 높게 나왔지만, 이 숫자 하나로 "PatchCore가 더 낫다"고 결론 내리지 않았습니다. cut/hole/print처럼 형태가 뚜렷한 결함은 YOLOv8이 거의 완벽하게(mAP50 ~0.995) 잡아내는 반면, PatchCore는 정상 여부 판단은 정확해도 위치 특정은 약하다는 것 — 즉 두 모델이 서로 다른 상황에서 강점을 갖는 상호보완적 관계라는 것이 이 프로젝트의 핵심 발견입니다. 추가로 coreset ratio를 1%와 10%로 바꿔 실험한 결과 성능 차이가 거의 없어, 이후 실험은 1%로 반복 속도를 높였습니다.

07 Architecture
MVTec AD (hazelnut) 원본 이미지
↓
CLAHE 기반 조명 보정 전처리
↓ 두 갈래로 분기
anomalib PatchCore 학습 → 이상탐지
마스크→bbox 변환 → YOLOv8 학습 → 객체탐지
↓
image 단위 + pixel 단위 지표로 종합 평가·비교
08 GitHub
View on GitHub