논문읽기

MuSc: Zero-Shot Industrial Anomaly Classification and Segmentation with Mutual Scoring of the Unlabeled Images(ICLR 2024)

언시 2025. 5. 14. 16:13

전체 흐름

이제 논문 읽는 방법이 좀 정돈된 것 같다.

원래는 그냥 line by line으로 딥다 읽었는데, 이건 좀 비 효율적인 방법임을 느꼈다. 개인적으로 추천하는 방법은 다음과 같다.

abstract -> method -> abstract -> related word -> introduction -> implementation detail -> ablation study -> conclusion

 

오늘은 논문이 잘 읽히지 않아서 내일 해야겠다

 

3줄 요약

1. 어떤 클래스에 대한 이상치 탐지는, 같은 클래스의 서로 다른 이미지와 비교하여 찾을 수 있다.

2. 이미지를 병렬로 처리하여 해당 이미지가 같은 클래스의 다른 이미지와 얼마나 다른지/같은지를 모델링 하여 AC/AC를 수행함.

3. 프롬프트, 이미지 레벨 레이블, 추가 학습 없이 베이스라인(full-shot 기반)과 비교하여 더 높은 성능을 냄.

 

ABSTRACT

  • 라벨링 되어있지 않은 normal/abnormal 데이터가 있다고 가정하자. (class 라벨링은 되어있다.)
  • 그리고 해당 이미지들을 patch로 잘랐다고 가정하자.
  • 정상 패치는 다른 비슷한 패치들이 많을 것이다. 비정상 패치는 정상 패치보다 상대적으로 적을 것이다.
  • 앞서 설명한 상황을 바탕으로 zero-shot AC/AS를 진행한다. 
  • 해당 논문에서는 LNAMD, MSM, RsCIN 총 3가지 method가 존재하는데 이는 methology에서 다룬다.

1 INTRODUCTION

기존 연구들의 문제점과 해결책

  • 기존의 연구들에서 Zero-shot을 다루긴 했지만,full-shot이 주를 이루었다.
  • 기존 연구의 문제점은 다음과 같다.
  • 1. memory bank 기반 AC/AS : full-shot에 의존함. 너무 많은 라벨링 된 학습 데이터가 필요함
  • 2. CLIP 기반 AC/AS : few-shot/zero-shot 둘 다 존재하지만, 많은 수의 prompt에 의존함
  • 3. MuSc : 라벨링 되지 않은 적은 수의 데이터를 기반으로 zero-shot AC/AS를 진행한다.
  • 핵심은 어떤 클래스에 대한 이상치 탐지는 같은 클래스의 다른 이미지와 비교를 통해 진행될 수 있다.
  • 아래 글을 읽어보면 더 쉽게 와닫는다.

논문의 핵심.

  • 전체적인 method 흐름은 다음과 같다.
  • 1. 이미지를 패치 레벨에서 피처를 추출한다. 이는 다양한 사이즈의 defect를 찾을 수 있게 한다.(LNAMD :  Local Neighborhood Aggregation with Multiple Degrees)
  • 2. 패치 레벨 피처를 활용하여 anomaly score를 측정한다. (MSM :  Mutual Scoring Mechanism)

2 RELATED WORKS

  • 여기서 읽어볼 부분은 manifold learning이다.
  • GPT에게 물어본 결과 manifold learning은 고차원의 데이터를 저차원으로 축소하여 분석하는 기법이라고 한다. 
  • 이게 쓰일 곳을 좀 생각해보니까 bank기반의 AD에서 고차원의 임베딩 벡터들의 거리를 측정할 때 사용될 것 같다는 생각이 든다.

3 METHOD

3.1 LOCAL NEIGHBORHOOD AGGREGATION WITH MULTIPLE DEGREES

  • 1. 같은 클래스의 여러 이미지가 주어진다.
  • 2. vit로 feature를 추출하면 M,C의 feqture가 만들어진다. 예를 들어 100,768이라 하자.
  • 3. 100, 768 피처를 10,10,768로 reshape 한다.

아래 average pooling에 대한 예시 그림이다. 해당 과정을 모든 vit의 transformer block 마다 진행한다.

  • 4. average pooling을 사용하는데 neighbothood를 결정하는 kernel size는 1, 3, 5로 수행한다.
  • r 값을 변경하면서 쓰는 이유 다양한 크기의 defect를 찾기 위해서다. 또한 r=1에서는 노이즈가 심한 반면 r=5는 노이즈가 적다. 즉, 노이즈에 대한 저항성을 키우기 위해 사용한다.

3.2 MUTUAL SCORING MECHANISM OF THE UNLABELED IMAGES

  • r(1, 3, 5) x K(image set) x L(vit stage) 개의 anomaly map이 존재하게 된다.
  • K에 대하여 L2 norm의 최소값을 선택한다.
  • 직관적으로 해석하면, 같은 클래스의 여러 이미지가 존재하는데 각 이미지들 끼리 벡터의 거리를 계산하고 그 거리의 최소값을 사용한다는 것이다.

anomaly score 공
normal patch의 점수는 매우 높은 반면에 abnormal patch는 점수가 낮다. 즉, abnormal patch는 어떤 r 값으로 봐도 서로 비슷하게 생겼다는 것이다.

  • 해당 과정은 K 개의 이미지를 병렬로 수행하는데, 위 방식으로 anomaly score의 평균을 낸다.
  • 즉 L(vit stage) x K(같은 클래스의 이미지 set) x r(1, 3, 5)의 L2 norm anomaly map이 있는데 이를 K에 대해 평균을 내면 vit stage L에 해당하는 L 개의  r(1, 3, 5) x anomaly score map이 만들어진다. 
  • 이를 r과 l에 대하여 평균을 또 낸다. 아래 수식 참고.

image-wise 하게 평균을 내고 r과 l에 대하여 평균을 낸다.

 

3.3 CLASSIFICATION RE-SCORING WITH CONSTRAINED IMAGE-LEVEL NEIGHBORHOOD

실험적으로 cls token으로 image-level AC를 진행하는 것이 노이즈에 강하다는 것을 알아냄.

 

  • AC에서는 vit의 cls token을 사용하여 코사인 유사도를 구한다. 그래프 기반 최적화는 처음 접해보아서 온전히 이해하지는 못했지만, 직관적으로 수식을 보고 이해한 것을 바탕으로 설명을 첨부하자면 다음과 같다.
  • 모든 병렬 이미지와 코사인 유사도를 통해 AC를 진행하면 성능이 떨어진다.
  • 그래서 해당 CLS 벡터의 최근접 이웃으로 AC 점수를 계산한다. 글로는 설명이 잘 안 되는 것 같아 아래 사진도 같이 첨부한다.

전체 흐름

4 EXPERIMENTS

- Implementation Details :  ViT-L/14-336 pre-trained by OpenAI

- Datasets : MVTec AD, VisA

- Evaluation Metrics : CS : AUROC, AP, F1-score || SA : AUROC, F1-MAX, AP, PRO

- Baselines : winclip, april-gan, reg-ad, patch-core, graphcore, acr

 

4.1 QUANTITATIVE AND QUALITATIVE RESULTS

살짝 애매한게 .. 필자의 생각엔 이건 few-shot느낌의 zero-shot이라 생각함.

이유는 다음과 같음

1. few-shot : 1:few 느낌으로 하나의 이미지가 들어왔을 때 여러 이미지들을 참고하여 AD를 수행함.

2. 내가 아는 zero-shot : 한 장의 이미지를 독립적으로 수행함.

3. 논문에서 말하는 제로샷의 뉘양스 : 여러 테스트 데이터의 집합 간의 상호작용으로, 테스트 데이터셋 전체를 한 번에 처리함. auxiliary dataset이 없음.

정리하면 auxiliary dataset이 없는 점에서 생각하면 zero-shot이 맞는데, 근데 결국 다른 데이터와 상호작용을 하냐? 의 측면에서 보면 이건 few-shot인데 또 auxiliary data는 train으로부터 오는데 이 논문은 test데이터 간의 상호작용이니까 아! 이해했다 제로샷이 맞다.

 

5 CONCLUSION

- 프롬프트, image level 라벨링(세그멘테이션 마스크), 추가 학습 없이 zero-shot AS/AC를 base line 대비 높은 성능을 보임.