플로노말리는 정상 특징을 한 번의 복원 스텝으로 되돌려 소수 샷 산업 이상 탐지를 수행한다
Flownomaly: Single-Step Conditional-Mean Recovery for Few-Shot Anomaly Detection
무엇인가
이 논문이 푸는 문제는 소수 샷 산업 이상 탐지(FSAD)다. 카테고리마다 결함이 없는 정상 이미지가 1장, 2장, 4장뿐인 상황에서 그 카테고리의 정상성이 어떤 특징 분포를 갖는지 모델링하고, 이미지 수준 이상 점수와 픽셀 수준 위치 지도를 동시에 내야 한다. 저자들은 기존 계열을 네 갈래로 정리하고 각각의 한계를 지적한다. PatchCore나 AnomalyDINO처럼 정상 특징을 저장해 최근접 이웃으로 비교하는 방식은 추론이 유한한 예시 저장소에 묶이고, SubspaceAD처럼 선형 부분공간을 피팅하는 방식은 선형성 가정이 경직되어 있으며, ANoCo 같은 참조 그래프 정렬은 질의 시점 최적화를 요구하고, 재구성 계열은 네트워크가 이상 성분까지 그대로 복제할 위험이 있다.
어떻게 동작하나
제안 방법의 골자는 정상 대응물 복원이다. 질의 토큰을 '정상 쪽으로 편향된 짝'으로 되돌리는 비선형 연산자를 소수 샷 정상 지원 집합만으로 만들고, 원본 토큰과 복원된 토큰의 차이를 이상 신호로 쓴다. 특징은 동결된 DINOv2 ViT-g/14-reg 인코더를 672×672 해상도로 돌려 얻으며, 마지막 층 하나가 아니라 상대 깊이 40~80%에 해당하는 블록 {16, 20, 24, 28, 32}의 토큰을 채널별 통계로 표준화한 뒤 평균해 48×48 격자의 다중 깊이 토큰을 만든다. 표준화를 먼저 하는 이유는 깊이마다 활성값 스케일이 달라 큰 블록이 평균을 지배하는 것을 막기 위해서다. 학습되는 것은 이 동결 특징 위에서 가우시안 노이즈를 정상 토큰으로 운반하는 시간 조건부 속도장 하나이며, 사인파 시간 임베딩을 쓰는 병목 폭 d/2의 잔차 MLP다. 학습 목표는 직선 경로 보간 상태 z_t = t·x + (1-t)·ε에 대해 속도 x-ε를 회귀하는 조건부 플로 매칭 손실이다.
무엇과 다른가
복원 단계가 이 논문의 핵심 주장이다. 제곱 오차 아래에서 모집단 최적 속도장은 조건부 기대값 v*(z,t) = E[X-ε | Z_t=z]가 되고, 여기서 E[X | Z_t=z] = z + (1-t)·v*(z,t)라는 항등식이 유도된다. 즉 궤적을 따라 ODE를 적분할 필요 없이, 중간 시점 t에서 속도장을 한 번만 평가해 깨끗한 정상 토큰의 사후 평균을 추정할 수 있다는 것이다. 저자들은 이를 트위디 공식 및 확산 모델의 속도·노이즈·클린 데이터 예측 변환과 같은 계열의 항등식으로 위치시킨다. 실제 추론에서는 질의 토큰마다 노이즈를 주입해 z = t·x + (1-t)·ε로 섭동시키고, 학습된 속도장으로 복원한 뒤 제곱 잔차를 이상 점수로 삼는다. 모든 질의 토큰을 한 배치로 처리하므로 속도장 순전파는 이미지당 한 번이다. 잔차 맵은 토큰 폭 기준 σ=0.8로 가우시안 스무딩해 업샘플링하고, 이미지 점수는 스무딩하지 않은 맵에서 상위 1%를 평균해 얻는다.
어떻게 쓰나
문제는 운영 시점 t를 어떻게 고르느냐다. t가 0에 가까우면 복원이 질의와 무관해져 정상 전역 평균으로 수렴하고, 1에 가까우면 계수 (1-t)가 갱신을 눌러 복원이 항등에 가까워진다. 양 극단 모두 쓸모가 없으므로 내부에서 골라야 하는데, FSAD에는 이상 검증 샘플이 없어 라벨로 튜닝할 수 없다. 저자들은 정상 보정 뷰만으로 계산하는 야코비안 이득 대 잡음(JGN) 기준을 제안한다. 잔차의 입력 변화에 대한 1차 응답 크기를 신호로, 같은 정상 토큰들이 만든 제곱 잔차의 상위 1% 평균을 잡음 수준으로 두고 그 비율을 최대화하는 시점을 고른다. 후보 격자 {0.05, 0.10, …, 0.95} 위에서 보정 뷰별 중앙값의 중앙값을 최대화하는 가장 작은 t를 선택하며, 이상 샘플이나 테스트 라벨은 전혀 쓰지 않는다. 체크포인트 선택 역시 지원 이미지에서 파생한 별도 증강 스트림으로 만든 검증 풀에서만 이뤄진다. 정상 지원 이미지에는 0~345도 랜덤 회전 30개를 적용해 피팅 풀을 만들고, 검증·보정 풀은 각각 독립적으로 샘플링한 회전 3개를 쓴다. 방향에 민감한 MVTec-AD 트랜지스터 카테고리는 회전 증강에서 제외하되 집계 평가에는 포함한다.
전제와 한계
실험은 MVTec-AD(15개 카테고리), VisA(12개), Real-IAD(30개)에서 이뤄졌다. 1-shot 설정에서 MVTec-AD 이미지·픽셀 AUROC가 97.8%와 98.0%, VisA가 95.3%와 98.7%다. VisA에서는 가장 강한 베이스라인 대비 이미지 AUROC가 1-shot 2.1포인트, 2-shot 2.3포인트, 4-shot 1.1포인트 높다. MVTec-AD에서는 이미지 수준 비교 9개 중 7개에서 앞서거나 동률이고 나머지 둘도 ANoCo에 0.2포인트 이내다. 풀 샷 설정에서는 12개 지표-데이터셋 조합 중 11개에서 최고 또는 동률을 기록했다. Real-IAD의 샘플 샷 프로토콜(물리 샘플 1개당 5개 뷰)에서는 1-샘플 기준 이미지 AUROC가 SubspaceAD의 85.2%에서 88.2%로, 픽셀 F1max가 42.7%에서 50.6%로 올라갔다.
효율과 절제 실험도 논문의 주장을 뒷받침한다. 인코더가 동결이라 카테고리 하나를 피팅하는 데 MVTec-AD 중앙값 24초, VisA 28초, 최대 GPU 메모리 2.6GB가 든다. 추론 시 속도망은 전체 60.9ms 중 2.2ms만 차지하며, 카테고리당 23.2M 파라미터(약 88MiB)로 토큰 메모리 뱅크와 달리 샷 수 k에 따라 커지지 않는다. 오일러 적분으로 속도장 평가 횟수를 1회에서 20회로 늘려도 이미지·픽셀 AUROC 변화는 0.2포인트 이내인 반면 속도망 지연은 13.3배(2.2ms→29.2ms), 전체 지연은 60.9ms에서 87.9ms로 늘어난다. 즉 궤적 적분은 탐지 이득이 사실상 없다. JGN이 고른 시점의 중앙값은 두 데이터셋 모두 0.65였고, 사후 최적 대비 이미지 AUROC 손실은 MVTec-AD 0.06포인트, VisA 0.14포인트에 그쳤다. 복원 잔차를 속도 노름으로 바꾸면 0.9/1.0포인트, 코사인 불일치로 바꾸면 1.1/5.1포인트 떨어진다. 백본을 DINOv2-S에서 g로 키우면 3.1/3.5포인트 오르지만 지연은 18.1ms에서 60.9ms가 되고, DINOv3-7B는 이 설정에서 DINOv2-g를 넘지 못했다.
개발자 관점에서 이 방법의 매력은 파이프라인이 단순하다는 점이다. 카테고리마다 정상 이미지 몇 장으로 작은 MLP 하나만 학습하고, 추론은 동결 인코더 1회전에 MLP 순전파 1회를 더하는 것이 전부다. 최근접 이웃 검색도, 질의 시점 최적화도, 합성 이상쌍이나 교사 증류, 픽셀 디코더, 보조 분할 헤드도 필요 없다. 라벨 없는 캘리브레이션 규칙이 있어 이상 검증셋을 따로 확보하기 어려운 현장에서 운영 시점을 정상 데이터만으로 정할 수 있다는 것도 실무적으로 크다. 다만 도입 전에 확인할 것은 세 가지다. 첫째, 성능이 특정 백본(DINOv2 ViT-g/14-reg, 672 해상도, 블록 5개 조합)에 묶여 있으므로 자신의 도메인에서 백본 스케일과 지연 예산을 다시 재야 한다. 둘째, 회전 증강이 기본 전제라 방향이 중요한 제품군에서는 카테고리별로 증강을 꺼야 한다. 셋째, 카테고리별로 별도 피팅이 필요하므로 카테고리가 수백 개로 늘어나는 환경에서는 피팅 시간과 카테고리당 88MiB 상주 메모리가 누적 비용이 된다.
저자들이 명시한 한계는 분명하다. 토큰 단위 잔차 점수는 전역 구조적 제약을 명시적으로 강제하지 않기 때문에, 부품 개수가 틀리거나 조립 순서가 어긋난 것 같은 논리적 이상(logical anomaly)은 여전히 어렵다고 밝힌다. 또한 식 (5)의 항등식은 정상 토큰 손상 모델 아래에서의 조건부 평균을 보장할 뿐, 실제로 결함 없는 대응물을 복원하거나 이상이 잘 분리된다는 것까지 보장하지는 않는다고 스스로 단서를 붙인다. JGN 역시 카테고리별 테스트 라벨 최적점의 추정기가 아니라 정상 데이터만으로 시점을 고르는 규칙이라는 점을 강조한다. 향후 과제로는 카테고리 무관 복원 장, 이런 전역 제약의 명시적 모델링, 더 컴팩트한 특징 추출기를 제시한다.