본문 바로가기

논문읽기

AdaCLIP: Adapting CLIP with Hybrid Learnable Prompts for Zero-Shot Anomaly Detection (ECCV 2024)

3줄 요약

prompt 생성 과정

  1. auxiliary data를 통한 adaptation을 진행한다. 실험적으로 알게 된 사실은 데이터에 무관하게 normal data는 비슷한 분포를 따르고, abnormal data는 그 defect class에 맞게 특징적인 분포를 따른다. "벽" 클래스에 해당하는 보조 데이터셋으로 학습했다 가정하면, 매끈한 벽이 normal data일 것이다. 그럼 해당 모델은 매끈한 기판도 normal로 인식 할 것이다. 만약 스크레치가 난 벽이나 기판을 만난다면, CosSim을 통해 defect로 판정할 것이다. 
    • dynamic + static learnable prompt가 이미지, 텍스트 임베딩 레이어에 붙는다. 해당 프롬프트는 이미지를 기반으로 생성된다.
    • dynamic : DPG의 출력, 이미지의 cls 정보 같은 것임.
    • static : template level prompt
  2. 이후 생성된 anomaly mask map을 활용하여 image level AD를 진행할 때 KNN을 활용하여 anomaly score가 높은 부분의 점수를 활용한다.

keywords : anomaly detection prompt learning zero-shot learning

 

abstract

  • learnable prompt를  auxiliary dataset으로 훈련시키고 이를 활용하여 zero-shot anomaly detection을 진행한다.
  • static and dynamic prompt가 있다. static prompt는 한국어로 설명하면 어색해서 영어로 작성하겠다. Static prompts are shared across all images, serving to preliminarily adapt CLIP for ZSAD. 동적 프롬프트는 이와 반대로 이미지별 프롬프트를 제공한다.
  • ada clip에서는 두 프롬프트를 합친 하이브리드 프롬프트를 사용하는데 이는  ZSAD성능을 향상시킨다.

1. introduction : intro가 좀 길다 ㅎㅎ

f1-max를 대표 평가지표로 삼는 논문은 오랜만이다.

  • 기존의 semi or unsupervised learning의 경우에는 훈련 데이터가 필수적이다. 하지만, 해당 카테고리, 예를 들어 "물병" 과같은 특정 카테고리의 데이터가 부족한 경우에는 훈련이 불가능하다.
  • ZSAD는 unseen category detection을 수행하며 위 문제를 해결했다.
  • ZSAD는 이미지 임베딩과 프롬프트의 코사인 유사도를 통해 normal-abnormal을 판단한다.
  • 기존의 CLIP은 대부분 정상적인 사진들로 학습되었고, 이는 anomaly detection에 특화된 학습을 진행하지 못한 상태다.
  • 이를 통해 domain adaptation을 VLM(CLIP)에 적용한 모델들이 주 페러다임으로 자리잡았다.
  • adaptation의 "의의"는 불량에 대한 패턴이 비슷할 것이라는 추측에 있다. 벽에 생긴 스크레치의 전체적인 패턴이 기판에 생긴 스크레치의 패턴과 비슷할거고, 이를 통해 학습한 VLM은 다른 카테고리의 scratch를 잘 찾을 것이다 라는 것을 전제로 한다.
  • 이러한 ZSAD를 위해 ada-clip을 소개하는데 해당 clip은 projection and prompting layers가 추가된다.
  • projection layers : image-text embedding vector alignment를 담당.
  • prompting layers : prompt learning을 담당.
  • 해당 prompting layers에는 static, dynamic prompt가 존재하는데 static은 템플릿 레벨의 프롬프트를, dynamic은 cls와 같은 프롬프트를 제공한다.

2. related work 

   2.1 Traditional Anomaly Detection

 

      - Unsupervised Anomaly Detection

  • normal image embedding vector를 bank에 저장하고, test이미지가 bank의 분포를 벗어나는지 확인함.

      - Semi-supervised Anomaly Detection 

  • anotated abnormal sample을 직접 학습한다.

   2.2 Zero-shot Anomaly Detection

  • winclip같은 모델의 백본은 IAD에 적합하지 않은 데이터로 학습되었기에 성능이 떨어진다. 이를 극복하고자 auxiliary data로 adaptation을 진행하는 모델이 나왔다.
  • anomalyclip이 그 경우인데 anomalyclip은 unsupervised setting이다.(비정상 데이터는 학습에 사용되지 않음.)
  • 해당 논문에서는 비정상 데이터도 학습에 참여한다.

   2.3 Prompt Learning

  • template level + cls level prompt의 조합으로 멀티모달의 능력을 끌어 올릴 것이다.

3. Problem Formulation

음 이건 그냥 ZSAD에 대한 또또또 설명 unseen category detection을 할거다~ 라는 말이다.

unseen category detection을 할거다~

 

4. AdaCLIP

   4.1 Overview

  • 이미지 텍스트 임베딩 레이어에 learnable prompt가 존재한다.
  • DPG에서 static/dynamic prompt를 만든다.
  • HSF에서 image level anomaly detection을 수행한다.

   4.2 Prompting Layers

  • 이는 transformer layer고 이미지/텍스트 임베더 둘 다 learnable prompt가 존재한다. learnable prompt가 concat되는 방식인데, self-attention 과정에서 해당 프롬프트가 출력에 반영된다.
  • 그 learnable prompt가 P로 노테이션 되어있는 DPG의 출력이다.(dynamic)

   4.3 Hybrid Learnable Prompts

  • dynamic : DPG의 출력, 이미지의 cls 정보 같은 것임.
  • static : template level prompt
  • DPG는 CLIP의 vision model을 사용하여 cls토큰을 추출한다.
  • static + dynamic prompt의 concat이 image-text encoder(transformer)에서 learnable parameter로 사용된다.

   4.4 Projection Layer

  • embedding vector의 dim을 맞춰준다.

   4.5 Pixel-Level Anomaly Localization

1번 : pixel level AD 2번 : image level AD

   4.6 Hybrid Semantic Fusion Module &    4.7 Image-Level Anomaly Detection

  • 기존의 image level AD에서는 pixel level AD의 MAX value를 사용했지만, 이는 노이즈에 매우 취약했음.
  • 다음의 스텝으로 함.
  • 1. feature level의 patch의 위치에 대응하는 anomaly map patch의 평균AD 값을 계산함.
  • 2. 그 중 가장 높은 값을 선택함
  • 이게 보면 뭔말인가 싶은데 잠깐 생각하면 쉬움
1 2 3
4 5 6
7 8 9

[feature patch]

avg=1 avg=4 avg=2
avg=2 avg=7 avg=2
avg=2 avg=3 avg=1

[M]

5번 patch의 avg가 가장 높으니 5번 셀이 이상하구나! 이렇게 됨. 그럼 해당 셀의 벡터와 abnormal text embedding vector와 코사인 유사도를 통해 최종 값이 도출됨.


3개의 feature를 aggregation 해서 하나의 feature로 만듦 이게 M임. 위 설명을 보고 그림을 보면 이해가 쉬움.

 

 

5. Experiments

   5.1 Experimental Setup

      - Datasets

  • 산업 : MVTec AD, VisA , MPDD, BTAD, KSDD, DAGM, and DTD-Synthetic
  • 의료 : HeadCT, BrainMRI, Br35H, skin cancer detection dataset ISIC, colon polyp
    detection datasets ClinicDB, and ColonDB, as well as thyroid nodule detection dataset TN3K

      - Evaluation Metrics : AUROC, max-F1

      - Implementation Details : CLIP (ViT-L/14@336px), auxiliary : MVTec, ClinicDB - VisA, ColonDB

   5.2 Main Experimental Results

      - Comparison Methods :  SAA, winclip, clip, april-gan, anomaly clip, DINOV2 -> linear layer를 붙여 세그멘테이션 헤드를 추가함.

      - Zero-shot Anomaly Detection in the Industrial Domain

      - Zero-shot Anomaly Detection in the Medical Domain

   5.4 Analysis

      - Rationale behind the ZSAD Scheme with Auxiliary Data

  • 왜 auxiliary data가 ZSAD에서 잘 되는지 보기 위해 patch embedding vector를 t-SNE을 통해 projection 했는데 논문에서 말하길, MVTec과 VISA의 정상에 해당하는 데이터 분포는 데이터에 상관없이 비슷한 분포를 따르고, 비정상은 독특한 자신만의 분포를 갖는다고 한다. 사진을 보면 적극 동감된다.

MVTec, VisA에서 데이터셋에 차이 없이, 정상에 해당하는 데이터의 분포는 서로 포개져 있고, 비정상만 독특한 분포를 띈다.

      - Enhancing ZSAD Performance through Prompt Optimization

  • V2은 static prompt를 사용한 모델이고, V4는 static + dynamic prompt를 모두 사용한 모습이다. patch embedding과 prompt의 코사인 유사도를 통해 나오는 M을 보았을 때 직관적으로 V4가 가장 높은 성능을 보임을 알 수 있다.

V2은 static prompt를 사용한 모델이고, V4는 static + dynamic prompt를 모두 사용한 모습이다.

6 Conclusion

   - Discussion and Limitations : 구조적 결함을 해결하지 못했다. 배치 순서가 잘못된 경우를 표현하기 위해서는 더 정교한 텍스트 프롬프트가 필요할 것이로 예상된다.

실패 케이스