UniVAD: A Training-free Unified Model for Few-shot Visual Anomaly Detection (CVPR 2025)

Treeboy·2025년 7월 27일

CVPR준비

목록 보기
3/14

저번 포스트에서는 DINOv2 를 활용한 multi-class anomaly detection (MUAD) 의 unified model 인 Dinomaly 를 알아보았습니다. 이번에 소개할 논문도 unified model 을 제시하는데, 이 논문의 특징을 간략히 요약해 보겠습니다.

  • Training-free
    어떠한 gradient step 도 없이 foundation model 을 그대로 갖다 활용합니다.

  • K-references
    Few shot testing 느낌인데, K 개의 normal references 를 필요로 합니다.

그래서 프로젝트 페이지를 들어가 보시면 normal image, query image, 그리고 component mask (아니 이걸 줘야해? ㅋㅋ) 를 입력하면, anomaly mask 를 생성해 주고 detection 결과까지 주는 것을 확인할 수 있습니다.

그럼 간단하게 어떻게 작동하는지만 알아보도록 합시다.

Contextual Component Clustering (C3)

GPT: C3 combines Grounded SAM masks with K‑means clustering to segment components in few‑shot settings.

C3 은 segmentation 하는 녀석입니다. 먼저 Recognize Anything Model (RAM) 과 Grounded SAM 을 활용해서 초기 마스크인 MsamM_{sam}을 만듭니다. 하지만, 이러한 초기 마스크는 굉장히 noisy 하기 때문에 조금 더 큰 semantic component 로 묶기 위해 foundation model encoder (CLIP/DINOv2) 를 활용해서 image 의 feature map 을 추출한 다음, 여기에 K-means clustering 을 활용하여 N 개의 component 를 추출합니다. 다만, K를 어떻게 골랐는지에 대한 이야기는 없는데, 저는 이것이 이 논문의 굉장히 큰 약점이라고 생각합니다.

N개의 component 를 가진 mask 를 추출한 뒤, background mask 를 제외하기 위해 모서리가 이미지의 모서리랑 겹치는 mask 는 제외해주면, N' 개의 유효한 mask MvalidM_{valid} 가 남습니다.

이제 MsamM_{sam} 에서의 각 마스크를 MvalidM_{valid} 의 모든 마스크와 IoU 를 구하고, 가장 IoU가 높은 MvalidM_{valid} 의 라벨 j 를 가져옵니다. 그렇게 MsamM_{sam} 에 라벨을 다시 부여하고 나면 최종 마스크가 완성됩니다.

Q: 잠깐, 왜 M_valid 라벨을 M_sam 으로 가져옴?
A: M_sam 이 segmentation 더 잘해요. M_valid 는 feature map 기반으로 clustering
   한거인지라 ㅋㅋ

Component-Aware Patch Matching (CAPM)

GPT: Patch‑level anomaly scoring within each component, augmented by image‑text similarity.

CAPM 은 패치별로 anomaly score 을 계산하는 녀석입니다.

  1. Pairwise patch distance

먼저 query image 와 normal image 를 각각 encoder 에 넣어서 feature 을 뽑은 뒤, query 의 각 패치 (feature space 상에서의 pixel) 와 normal 의 모든 패치 사이의 cosine distance 를 계산하고, 제일 낮은 cosine distance (즉, 연관성이 높은) 값으로 anomaly map 을 만듭니다.

  1. Component-aware patch distance

하지만, normal 의 모든 패치가 연관이 있진 않을 것이기 때문에, 앞서 구했던 component 를 활용해서 동일한 component 안에서의 패치 사이에서도 거리를 계산합니다. 그렇다면 query 에 있는 component 가 normal 에는 없으면 어떻게 되는건데요?

Answer: 매칭된 컴포넌트가 없으면 스킵합니다. 아래 코드에서 확인할 수 있습니다.

if self.normal_dino_part_patch_features[query_mask_idxs[j]] == []:
    continue
  1. Visual-language distance

이건 normal image 를 전혀 사용하지 않고, query 와 normal image 의 text description 을 text embedder (CLIP) 으로 만든 embedding 을 visual projection 하여 image-text similarity 를 계산합니다 (anomaly_map_vls).

Graph-Enhanced Component Modeling (CECM)

GPT: Builds a graph over component features (deep + geometric) and uses graph attention to detect logical anomalies.

위에서 설명한 CAPM 이 structural anomaly 를 탐지하는 모듈이였다면, CECM 은 logical anomaly 를 탐지하는 모듈입니다.

기본 개념은 단순합니다. 먼저 query 와 normal 의 image feature 을 뽑은 뒤, component 의 mask 를 활용해서 average pooling 을 하여 FqcRNQ×CF_{qc}\in \R ^{N_Q\times C}FncRK×Nn×CF_{nc}\in \R ^{K\times N_n\times C} 를 만듭니다. 그 다음, 각 component 간의 similarity 계산한 adjacency matrix 를 만들어서 FqcF_{qc}FncF_{nc} 에 곱해줍니다.

이런 식으로요. 논문에서는 FqF'_q 대신에 EqE_q 라고 써놓긴 했는데, 드럽게 복잡하게 써놓은거 치곤 별거 아닙니다. 전 솔직히 이걸 왜 graph attention 이라고 불러야 하는지도 잘 모르겠는데, 그렇다고 하니까 넘어갑시다.

EqE_qEnE_n 을 구했으면, EqE_q 의 각 component 와 EnE_n 의 모든 component 와 distance 를 계산해서, distance 가 일정 threshold 이상이면 그 component 안의 픽셀을 전부 anomaly (binary 입니다. 0은 normal 1은 abnormal) 로 만들어버립니다.

여기에 한술 더 떠서 geometric anomaly score 라는 것 까지 추가하는데, 이건 각 component 별로 area, color (평균 RGB ㅋㅋㅋ), 그리고 position (bounding box 4개의 점) 을 활용해서 feature 을 만드는겁니다.

최종적으로, 아래와 같이 CAPM 과 CECM 을 평균내서 anomaly map 을 만듭니다.

anomaly_map_ret_all = (
    (anomaly_map_ret + anomaly_map_ret_dino)/2
  + (anomaly_map_ret_part + anomaly_map_ret_dino_part)/2
  + anomaly_map_vls
)/3
+ anomaly_map_dist/2

Experiments

Dataset

실험을 정말 많이 하긴 했습니다.

  • Industrial: MVTec-AD and VisA
  • Logical: MVTec LOCO
  • Medical: BrainMRI, liverCT, RetinalOCT, ChestXray, HIS, OCT17

Results

먼저 각 데이터셋별로 정리한 성능입니다. MVTec-AD, VisA 에서 Image-level AUC 가 97.8, 93.5 로 제일 높았습니다. 다만, 이건 1-normal-shot setting 이고, 저번 포스트에서 dinomaly 는 성능이 각각 99.6, 98.7 이였습니다. 추가적인 fine-tuning 없이는 아직 전혀 성능을 따라가지 못합니다.

Ablation Study

GECM 의 각 component 를 활용한 ablation study 입니다. GECM 은 logical anomaly detection 을 잘 하려고 도입된 디자인이다 보니 MVTec LOCO 에서 실험을 진행한 것을 볼 수 있습니다. Baseline 에서 Image-AUC 가 64.1 이였는데, Geo feat., Deep feat., CFA 를 모두 추가했을 71.0 (+6.9) 가 오른 것을 볼 수 있습니다. 근데 그래봤자 MVTec LOCO 의 SOTA 는 대충 검색해도 96.7이 나오는데, 정말이지 한참 떨어지는 성능이라고 생각합니다.

마치며

UniVAD 는 training-free anomaly detection 을 한다는 점에서 novelty 가 있다고 보며, 굉장히 extensive 한 engineering 을 한 노력이 보입니다. 하지만, 성능이 training 한 모델에 접근조차 못한 모습을 보며, 이 논문은 그저 연구로만 보는 것이 맞다고 생각합니다.

profile
지식이 모자라서 논문리뷰를...

0개의 댓글