본문 바로가기

논문읽기

Text-Guided Variational Image Generation for Industrial Anomaly Detecti

 
Text-Guided Variational Image Generation for Industrial Anomaly Detection and Segmentation
 
핵심 : anomaly detection에 사용될 깨끗한 이미지를 얻고싶다.

why : NFM-AD를 위한 깨끗한 이미지를 얻고싶다.

what : GAN 기반 이미지 생성

how : gan기반으로 이미지를 생성하고, 생성 이미지를 prompt-image-align을 통해 검수함.



 
해당 모델의 역할 : We propose a text-guided variational image generation
method to address the challenge of getting clean data for
anomaly detection in industrial manufacturing. 
 
입력 이미지로부터 깨끗한(non-defect)이미지를 생성하는데, 이 생성된 이미지는 text-image로 drived된 사전지식을 토대로 일정한 분포에 있다.
(물병은 물병끼리, 옷은 옷 끼리)
 
기존의 방법들은 정상 데이터를 훈련해서 ODD 데이터를 anomaly로 판단하는 방법을 사용했음
 
근데 데이터를 준비하는데 문제가 있음

  1. 데이터에서 defect데이터는 거의 없거나 있어도 정상과 비슷하거나 허용 가능한 사소한 defect들만 몇 장 있는 경우가 왕왕 있음
  2. 외관적 defect는 사용하는 기계, 공정에 따라 매우 달라질 수 있음
  3. defect가 있는 데이터를 잘못 라벨링할 수 있음.

 
위와 같은 문제가 있지만 극복할거임!
 

  • 사전에 미리 텍스트를 학습하고, 입력 이미지랑 같이 활용해서 입력 이미지랑 비슷한 깨끗한 이미지를 만듦.
  • 데이터 분포는 image generator에 의해 조정됨
  • 사전에 학습한 텍스트-이미지 기반 데이터를 통해 얻은 non-defect데이터의 분포를 유지하면서 이미지를 생성한다.
  • keyword-to-prompt generator : 입력 이미지 기반 최적의 프롬프트 생성기를 도입함
  • 이미지-텍스트 모델간의 semantic gap은 text-guided knowledge integrator method를 도입해서, 이미지 생성할 때 latent feature랄 text embedded vector랑 aligned 하게 만듦

 
결론적으로 : 한 장, 또는 단 몇 장의 이미지들만 있으면 데이터 증강을 통해 데이터를 만들고, 이를 통해 기존에 존재하는 알고리즘에 적용해봤더니 sota가 나온다.
 
기존에도 gan 계열의 IAD가 있었지만, 이는 reconstruction을 통한 detection이었고, 또 이미지 생성에서는 달리가 있는데 이건 텍스트만 받잖아.
딱 생각해보면 IAD랑을 어울리지 않지
 
keyword-to-prompt generator : 그 생성 이미지가 잘 만들어질 수록 correlation이 올라가고 correlation이 올라갈수록 모델의 성능이(생성된 이미지로 IAD 했을 때) 올라간다. 입력단어를 기준으로 여러 프롬프트를 생성하고 가장 fit한 프롬프트를 하나 선택
 
-> L2(image latent, prompt set) -> remove outlier -> 이후에 cos sim이 가장 높은 프롬프트 사용 : clip 사용해서 함
 
variance-aware image generator : 입력 이미지를 기반으로 ~N(mu,sigma^2)에 인코딩 해서 분산을 유지한다.(이미지의 다양성을 유지시킨다. -> 입력 이미지를 latent-z에 인코딩 했을 때 해당 이미지의 다양성이 충분히 임베딩 되어있게 만듦.)
 
text-guided knowledge integrator : 생성 이미지를 임베딩 한 벡터와 텍스트 임베딩 벡터의 유사도 높게 유지

 

    1. 정상 데이터를 많이 얻고 싶음-> 왜? OOD task에서 정상 데이터와의 distance를 통해 anomaly데이터를 특징함, 근데 이러한 정상 데이터가 많이(충분히) 존재하지 않음
    2. gan을 통해 데이터를 (non-defect데이터를) 만들건데 이미지간의 correlation, varience가 좋아야 성능이 좋음(저자 왈 경험적으로 알고있음, Hypothesis 라고 함.)
    3. 2개의 path로 진행됨
      1. 최적의 프롬프트를 만들고(l2 loss를 활용한 out lier 제거 후, clip을 활용하여 입력 이미지와 cos sim을 확인 후 max 프롬프트를 추출) 이를 latent space에 embedding 함. 이때 모든 프롬프트에 대해서 <image,prompt>>0.5를 만족.
      2. 생성된 이미지를 다시 latent space에 임베딩 함, 이후 
        max(for all image<latent_P, latent_I>)를 구해서 품질 좋은 이미지를 선별함.
    4. 선별 이미지를 bank에 저장하고 iteration.

varience가 좋아야 한다(normal-dist를 따라야 한다)의 예.

이렇게 하니까 K-shot에서 patch-core같은 base-line모델들이 새로운 SOTA를 달성함.
but, real-world에서의 작동은 훨신 복합함, real-world에서 작동하는지 확인해야함(robustness를 확보한다 함.)
robustness함을 증명하기 위해 MVTec-LOCO AD 데이터셋을 사용했는데 여전히 높은 성능 개선을 보여줌

framework의 robustness를 보장한다. 복잡한 데이터를 증강시켜도 여전히 성능이 좋다.

여기서는 정성적 평가를 했는데 살짝 애매모호하게 들릴 수 있지만 내가 이해한 내용은 아래와 같음.
일단 핵심 목표는 데이터를 증강시키는거임. 근데 robustness를 확보하면서 데이터를 증강하고 싶음.
그래서 MVTec-LOCO AD같이 복잡함 real-world 데이터랑 가까운 데이터셋을 사용함.
논문에서 제시하는 것 처럼 데이터를 증강하고 해당 데이터로 데스트 해보니 음식의 배치가 바뀐것 까지 인지함.
 
장점 :
1. 단 한 장의 정상 이미지로 데이터를 복제해도 성능이 좋아짐.
2. 이미지를 생성할 때 latent-v ~N(normal-dist)를 따르게 만들면 눈으로 보기에도 더 풍부한 이미지가 만들어짐
3. 생성 이미지를 검수할 때 clip을 통해 프롬프트와 이미지 임베딩 벡터의 cos sim을 사용하는데, 그냥 프롬프트가 아닌 keyword-to-prompt generator를 이용하면 더 품질 좋은 데이터를 생성할 수 있음.
4. robustness를 보장하며 데이터를 증강함.(복잡한 데이터 증강에도 효과적.)
단점 : 
1. 이미지를 생성할수록 linear하게 성능 좋아지는 게 아님. 대략 15프로 정도 증가하고 이후 saturation.