검사의 세 세대
| 1세대 · 규칙 기반 | 2세대 · 지도학습 | 3세대 · 정상 학습 | |
|---|---|---|---|
| 학습 데이터 | 없음 (사람이 규칙 설계) | 불량 이미지 수천 장 + 라벨 | 정상 이미지 수십~수백 장, 라벨 불필요 |
| 처음 보는 불량 | 규칙에 없으면 통과 | 학습 때 못 본 유형에 약함 | '정상과 다르다'로 검출 |
| 셋업 기간 | 수 주 (전문가 튜닝) | 수 주~수 개월 (불량 확보) | 수 일 |
제조 현장에서 불량률은 보통 낮습니다. 불량 이미지를 수천 장 모으려면 오래 기다려야 하고, 모으는 동안에도 새로운 유형이 생깁니다. 이상 탐지는 이 문제를 뒤집습니다. 정상만 충분히 보여 주고, 정상에서 벗어난 것을 모두 이상으로 봅니다. 적게는 정상 2~30장으로 시작하는 few-shot 방식도 있습니다.
공통 처리 흐름
fineAi AD Workbench의 11개 알고리즘은 모두 같은 틀을 따릅니다. 알고리즘마다 다른 것은 ③과 ④뿐입니다.
PatchCore — 정상 조각들의 기억
PatchCore는 정밀도가 높아 AD Workbench가 기본으로 권장하는 알고리즘입니다. 원리는 의외로 단순합니다.
학습 — 정상 패치를 모은다
- 대규모 이미지로 미리 학습된 신경망(WideResNet50-2)에 정상 이미지를 넣고, 중간 층(layer2, layer3)의 특징 지도를 꺼냅니다. 특징 지도의 한 칸은 원본 이미지의 작은 조각(패치) 하나를 숫자 벡터로 요약한 것입니다.
- 모든 정상 이미지의 모든 패치 벡터를 메모리 뱅크에 모읍니다.
- 뱅크가 너무 크면 검색이 느리므로, 전체 분포를 대표하는 일부만 고릅니다(coreset 샘플링).
신경망 가중치를 새로 학습하지 않습니다. 정상 이미지를 한 번 훑어 모으기만 하므로 학습이 수 초~수 분이면 끝납니다.
검사 — 가장 가까운 정상과의 거리
- 새 이미지에서도 같은 방식으로 패치 벡터를 뽑습니다.
- 각 패치마다 메모리 뱅크에서 **가장 가까운 정상 패치 k개(k=3)**를 찾아 거리를 잽니다.
- 정상과 비슷한 패치는 거리가 작고, 긁힘이 있는 패치는 비슷한 정상 패치가 없어 거리가 큽니다. 이 거리가 그 위치의 이상도입니다.
- 패치별 이상도를 원본 크기로 키우고 부드럽게 하면 히트맵이 되고, 히트맵의 최댓값(또는 상위 몇 %의 평균)을 0~1로 정규화한 것이 이미지 점수입니다.
임계값과 Gray 구간
점수가 나오면 임계값과 비교해 판정합니다. 임계값을 낮추면 불량을 놓치는 일(미검)은 줄지만 정상을 불량으로 잡는 일(과검)이 늘고, 높이면 반대가 됩니다. 이 균형은 모델 평가와 현장 운영 강의에서 다룹니다.
fineAi는 이중 임계값을 씁니다.
- 점수가 낮은 임계값보다 작으면 OK
- 높은 임계값보다 크면 NG
- 그 사이는 Gray — 사람이 확인합니다.
Gray 이미지에 사람이 내린 판정은 다시 학습 데이터가 됩니다. 운영할수록 Gray가 줄어드는 구조입니다.
이상 탐지가 잘 안 맞는 경우
- 정상 자체의 편차가 큰 대상 — 모양이 제각각인 농산물처럼 '정상'의 범위가 넓으면 결함과 구분이 어렵습니다.
- 결함의 이름과 위치가 필요할 때 — 이상 탐지는 "어디가 이상하다"까지는 알려 주지만 "이것은 긁힘이다"라고 분류하지는 않습니다. 이때는 객체 탐지를 함께 씁니다.
11개 알고리즘 중 무엇을 고를지는 다음 강의 이상 탐지 알고리즘 고르기에서 다룹니다.