3분
PatchCore: 정상 패치 도감으로 이상을 찾는다
Day 4: 이상 탐지 (비지도 학습)
PatchCore: 정상 패치 도감으로 이상을 찾는다
비전 AI 외관검사 > Day 4: 이상 탐지 (비지도 학습)
학습 목표
- PatchCore의 핵심 아이디어(메모리 뱅크)를 이해한다
- anomalib 라이브러리의 활용법을 파악한다
- PatchCore가 Autoencoder보다 우수한 이유를 설명할 수 있다
PatchCore: 정상 패치 도감으로 이상을 찾는다
핵심 아이디어
[PatchCore 동작 원리]
학습 단계:
1. 정상 이미지들을 사전학습 CNN(ImageNet)에 통과
2. 중간 층의 패치별 특징 벡터 추출
3. 메모리 뱅크에 저장 (코어셋 서브샘플링)
추론 단계:
1. 새 이미지를 같은 CNN에 통과
2. 패치별 특징 벡터 추출
3. 메모리 뱅크에서 가장 가까운 정상 패치와의 거리 계산
4. 거리가 크면 → 이상!
직관적 설명:
"정상 패치 도감을 만들어 놓고,
새 패치가 도감에 없으면 이상."[PatchCore vs Autoencoder]
Autoencoder PatchCore
학습 방식 신경망을 역전파로 학습 사전학습 특징을 저장만 한다
학습 시간 에포크 수에 비례 특징 추출 한 번 + 서브샘플링
정확도 구현·하이퍼파라미터에 아래 벤치마크 표 참고
따라 크게 흔들린다
하이퍼파라미터 많다(구조·잠재 차원· 적다(백본·층·코어셋 비율)
학습률·에포크)
설명 가능성 재구성 오차 맵 패치별 거리 맵
메모리 사용 모델 가중치만 메모리 뱅크 크기에 비례학습 시간과 정확도의 구체적인 값은 백본·이미지 장수·하드웨어에 따라 달라진다. 아래 벤치마크는 MVTec AD 에서 보고된 값이고, 우리 제품의 값은 직접 재야 안다.
MVTec 벤치마크 성능
| 방법 | Image AUROC | Pixel AUROC |
|---|---|---|
| PaDiM | 95.3% | 97.5% |
| PatchCore | 99.1% | 98.1% |
MVTec AD 15개 카테고리 평균이고 각 방법의 원 논문에서 보고한 값이다. Autoencoder·VAE 는 구조와 학습 설정에 따라 결과가 크게 흔들려 "AE 는 몇 %"라고 한 줄로 적을 수 있는 값이 없다. 그래서 표에서 뺐다.
이 표를 우리 제품에 그대로 옮기지 마라. 카테고리마다 값이 크게 다르고 (평균이 99% 라도 어려운 카테고리는 훨씬 낮다), 우리 결함은 MVTec 에 없다.
anomalib: 이상 탐지 라이브러리
Intel이 만든 오픈소스 라이브러리. PatchCore 포함 10+ 알고리즘을 통합 제공.
# 설치는 두 단계다. 두 번째를 빠뜨리면 임포트가 깨진다.
pip install "anomalib>=2.0"
anomalib install
from anomalib.models import Patchcore
from anomalib.data import MVTecAD # 예전 이름 MVTec 은 MVTecAD 로 바뀌었다
from anomalib.engine import Engine
datamodule = MVTecAD(root="./datasets/MVTecAD", category="bottle")
model = Patchcore()
engine = Engine()
engine.fit(model=model, datamodule=datamodule)
anomalib 은 인터페이스가 자주 바뀐다. 위 코드는 2.x 기준이고,
임포트가 실패하면 pip show anomalib 로 버전을 확인한 뒤 그 버전의 문서를 본다.
anomalib 지원 알고리즘
| 알고리즘 | 유형 | 성능 | 속도 |
|---|---|---|---|
| PatchCore | 메모리 뱅크 | 최고 | 중간 |
| PaDiM | 분포 추정 | 높음 | 빠름 |
| STFPM | Teacher-Student | 높음 | 빠름 |
| FastFlow | Normalizing Flow | 높음 | 빠름 |
| EfficientAD | 경량화 | 높음 | 매우 빠름 |
제조 추천: PatchCore (정확도 최우선) 또는 EfficientAD (속도 중시)
AI로 학습하기 — 꿀팁
PatchCore 메모리 뱅크 동작 원리 검증AI 학습 팁
PatchCore의 핵심 아이디어인 코어셋 서브샘플링과 메모리 뱅크 검색이 어떻게 작동하는지 잘못 설명되는 경우가 많아 정확한 이해가 필요하다.
PatchCore 알고리즘에 대한 다음 설명들이 맞는지 자동차 부품 표면 이상 탐지 맥락에서 검증해줘: 1) 'PatchCore는 정상 이미지의 모든 패치를 메모리 뱅크에 저장한다', 2) 'PatchCore의 코어셋 서브샘플링은 중복된 정상 패치를 제거해 메모리와 추론 속도를 최적화한다', 3) 'PatchCore는 anomalib 없이 순수 PyTorch만으로 구현하면 성능이 크게 저하된다', 4) 'PatchCore의 이상 점수는 테스트 패치와 가장 유사한 메모리 뱅크 패치 사이의 거리이므로, 점수가 높을수록 더 이상하다', 5) 'PatchCore는 새로운 불량 유형이 발생해도 재학습 없이 자동으로 탐지할 수 있다'. 각 설명의 맞음/틀림과 함께 실제 anomalib 구현 기준으로 올바른 설명을 해줘.
이 팁이 도움이 됐나요?
핵심 포인트
- • PatchCore는 정상 패치의 메모리 뱅크를 구축하여 이상을 탐지한다
- • 역전파 학습 없이 사전학습 특징을 저장하는 것만으로 MVTec AD 평균 Image AUROC 99.1% 가 보고되었다(원 논문 기준, 15개 카테고리 평균)
- • anomalib 라이브러리로 3줄 코드에 PatchCore 학습 가능
- • 정확도를 우선하면 PatchCore, 속도를 우선하면 더 가벼운 계열을 본다. 어느 쪽이든 우리 데이터로 한 번씩 돌려 시간과 성능을 직접 재고 정한다