논문읽기

Unsupervised Continual Anomaly Detection with Contrastively-learned Prompt

언시 2025. 5. 27. 22:20

3줄 요약

  1.  class-wias하게, class에 맞춤으로 모델을 훈련시키면, 새로운 class가 들어왔을 때 다시 학습을 진행해야 하고 이는 컴퓨팅 자원의 남비와 비 효율성으로 이어진다. 이를 continual learning으로 해결한다.
  2. learnable query를 vision encoder에 concat한다. 이후 SAM을 통해 이미지의 주요 element를 추출하여 element wise 하게 contrastive learning을 하고, 이를 통해 query bank를 구성한다.
  3. 테스트 이미지가 들어오면, 해당 테스트 이미지의 identity key를 추출하여(index 처럼 작용) query bank에 해당 identity key에 해당하는 부분을 사용하여 AD를 진행한다.

Limitation of Previous Studies

a는 기존의 task independent하게 모델을 학습 시키는 모습이다. 반면 b는 continuous learning의 형태를 한 모습이다.

기존의 연구는 다음의 문제가 있었다.

1. 하나의 클래스에 fit 하게 개별 모델을 훈련한다. -> catastophic forgetting&heavy computational burden을 유발한다.

2. supervised (라벨링 된)데이터에 의존한다. -> 데이터가 부족한 현실의 시나리오를 반영하지 못했다.

 

이전 연구에서는 크게 2가지 method가 있었다.

1. 개별 클래스에 맞춤 모델 훈련.

2. 다중 클래스에서 작동하는 모델 훈련.

 

1번 method는 개별 클래스에 맞춤으로 모델을 만드는 방법인데 이는 클래스 수가 많아지면 컴퓨팅 파워의 소모가 심했다. 또한 다른 클래스에 대해 탐지를 진행하기 위해서는 모조건적 사전 학습이 필요로 했다. 해당 학습은 또한 많은 수의 정상 데이터에 의존한다.

 

2번 method는 다중 클래스에서 작동하는 모델이다. 해당 모델은 많은 수의 레이블링 데이터를 필요로 한다. 하지만 현실 시나리오를 생각해보면 오히려 1번이 현실 시나리오와 더 fit하다. 공장에서는 부품이 순서대로 만들어진다. 이런 순서를 무시하고 전부 이미 충분히 만들어졌다고 가정하고 해당 데이터를 준비한 다음, 모델을 훈련 시키는 것은 현실 시나리오와 맞지 않다.

 

2번 method에서 현실 시나리오를 반영하기 위해 순차적 class data로 학습 시키면, 과거 정보를 잊어버리는 문제가 발생한다.

 

앞서 언급한 문제를 해결하는 방법은 continual learning이 있는데 이는 model switching 정도로 필자는 이해했다. task ID가 존재하여 해당 task에 맞춰 모델을 학습하는 방식이다.

하지만, 해당 방법이 항상 가능한 것이 아니다.

이에 본 논문에서는 task agnostic CL을 활용하여 위 문제를 해결하려 한다.

Observations & Motivations

앞서 서술한 문제를 해결하기 위해 Unsupervised continual anomaly detection(UCAD)를 제안한다. 해당 method는 다음의 구성 요소들로 이루어진다.

  • Continual prompting module(CPM) : query bank인데 모델이 저장할 쿼리를 자동으로 선택한다. 이는 모델이 특정 클래스에 대한 사전 지식을 담아두는 역할을 한다.
  • Structure-based contrastive learning(SCL) : SAM을 활용하여 dominant feature을 뽑는 역할을 한다.

Method

method over-view

모델은 여러번의 sub train을 거치게 된 후 전체 데이터셋으로 평가를 진행하게 된다.

continual Prompting Module

continual learning을 unsupervised ad에 적용할 때 문제는 다음과 같다.

  1. 어디까지를 기준으로 task identity를 잡을 것인가? : 필자의 생각을 보태서 설명하자면 다음과 같다. CL, continual learning에서는 특정 분기점을 주고 연속해서 학습하는 것을 의미한다. 예를 들어 개 '만' 학습 시키고 그 다음 훈련에서는 '고양이' 만 학습시켜서 개 + 고양이를 학습한 모델을 얻는 것이다. 그런데 CL을 AD에 적용하려 하니 class wise하게 task identity를 잡는 것이 좋은지 아니면 데이터셋 별로 task identity를 잡는 것이 좋을지 정하기 어렵다는 말이라 생각한다.
  2. 어떻게 모델을 unsupervised AD 에서 피팅시킬 것인가? : unsupervised AD는 "정상" 데이터만 사용해야 한다. 정상 데이터만 사용해서 CL을 이용한 unsupervised AD model을 어떻게 훈련시키는 것이 좋은지 결정하기 어렵다는 말이라 생각한다.

이를 극복하고자 CPM(continual prompting module)을 만들었다.

CPM은 1. task identification phase 와 2. task adaptation phase로 나뉜다.

 

1. task identification phase

CL에서는 본인의 task를 아는 것이 중요하다. 예를 들어 고양이를 학습했을 때, 강아지를 학습했을 때 각각의 task identity를 찾는 것이 중요하다. 이를 위해 key; K로 부르는 task identity를 구하는 방법은 다음과 같다.

  • 이미지가 vision encoder에 입력되고 출력으로 나온다.
  • 이후 key(K_e)가 선택된다. 논문에서 K_e는 vit의 5th encoder의 출력이라 설명한다. N개의 이미지에 대해 임베딩 벡터를 얻으면 N, P, D(P : patch num, D : embedding dim)이다. 여기서 하나만 선택한다. 그렇다면 key는 P, D가 된다.
  • 1997년도에 발표된 farthest point sampling을 사용하여 여러개의 이미지 임베딩 벡터 중 하나의 이미지에 대한 임베딩 벡터만 선택하고 이를 task identity로 사용한다.

2. task adaptation phase

  • learnable prompt p를 vision encoder의 각각의 레이어의 입력 피처에 concat한다.
  • 이후 coreset을 구성한다. 이때 coreset sampling을 거쳐 bank를 경량화 한다.

근데 논문의 설명과 그림이 맞지 않는다. 인터넷의 모든 자료를 찾아보아도 아래 다시 재구성한 그림이 맞는 것 같다.

 

structure based contrastive learning은 아래 그림으로 설명을 대신한다.

인터넷 자료와 논문 설명을 토대로 필자가 다시 구성한 그림이다. 해당 그림이 논문의 설명과 일치한다고 생각한다.

inference

 

+

그만 읽으려 한다.

1. 그림이랑 설명이랑 맞지 않는다.

2. 수식의 노테이션을 후반에는 설명하지 않아서 계속 처음으로 올라가서 다시 확인해야 하는데 결국 NN을 확인한다는 말이었다.

다른 논문을 읽어야 겠다.

 

Experiments

data : MVTec AD, VISA

Pros & Cons

Pros

  • continual learning을 AD에서 적용할 수 있었고, 기존의 query bank 계열의 모델보다 높은 성능을 보인다.

Cons

  • 논문의 설명과 그림이 맞지 않는다. 처음에는 필자가 이해를 잘 못하는 것이라 생각하여 서울대 연구실의 동영상을 보았지만, 해당 영상에서도 필자의 생각과 동일하게 그림을 수정하여 사용하였다.