GAN을 이용한 효율적인 Anomaly Detection 방법 [f-AnoGAN vs MemAE]
- 이번 포스팅은 티스토리에서 깃블로그로 이사 후 티스토리에 정리했던 내용에서 내용을 추가해서 작성한 글 입니다. 이전 글은 Tistory에서 보실 수 있습니다.
Unsupervised Learning 방법으로 GAN을 이용한 Anomaly Detection 방법 중 Encoder 부분을 이용한 f-AnoGAN 방법이 있습니다. 이 방법은 효율적으로 Anomaly Detection을 잘 하지만 미세한 결함을 제대로 검출하기 힘들다는 한계점이 있습니다. 본 글에서는 f-AnoGAN의 특징들과 단점에 대해 간략히 소개를 하고 그 해결책에 대한 내용을 간략하게 정리해보기 위한 글 입니다.
비교를 할 논문은 아래와 같습니다.
- f-AnoGAN:Fast unsupervised anomaly detection with generative adversarial networks
- MemAE:Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised Anomaly Detection
f-AnoGAN
참고 링크
- blog.promedius.ai/f-anogan-fast-unsupervised-anomaly-detection-with-gan/
Github tutorial
- github.com/mulkong/f-AnoGAN_with_Pytorch
f-AnoGAN의 학습 방법은 GAN 학습, Encoder 학습으로 총 2가지 step으로 이루어집니다.
GAN 학습
정상 데이터로만 GAN 학습을 진행합니다. GAN이 잘 학습이 되었다면 정상 데이터에 대한 학습 분포를 기반으로 학습이 이루어져 정상 이미지만을 생성할 가능성이 높아집니다.
Encoder 학습
GAN이 잘 학습 된 상태라면 이제 입력된 query data에 대해 Latent space mapping을 위한 Encoder 모델 학습을 진행합니다.
이와 같은 방식으로 진행한 이유는 query data(정상/비정상) 중 정상 데이터가 입력되면 Encoder을 통해서 정상 query data에 대해 latent space mapping된 Z값을 이용하여 Generator에 Z가 입력되게 됩니다. 그러면 Generator는 query data에 대한 정상 데이터를 생성하게 됩니다.
반면 비정상 query data가 입력으로 주어지면 Encoder는 query data에 대한 Feature을 추출해서 Z값으로 만든 후 비정상 query data의 Feature을 Generator에 입력으로 주어지면 query data을 기반으로 한 이미지가 생성됩니다.
GAN은 정상 이미지로만 학습이 진행되어 정상 이미지만을 생성하려고 할 것 입니다. 따라서 비정상 query data의 모양, 질감, 형태와 동일하지만 정상 상태로 이미지를 생성하게 되어 이상 탐지(anomaly detecTion)을 수행합니다.
단점
일반적으로 AutoEncoder을 이용한 Anomaly Detection을 진행하다보면 AutoEncoder의 특성상 일반화(Generalization)을 너무 잘 해서 정상만 생성하도록 해야하는데 비정상까지 재구성하게 되어 미세한 결함을 제대로 찾기 힘들다는 단점이 존재합니다.
해결책
memory module을 사용하여 AutoEncoder을 augment(보강)하는 MemAE(memory-augmented autoencoder) 방법을 사용.
MemAE
MemAE의 핵심 내용은 AutoEncoder가 너무 general하게 학습 되는 경우가 발생하여 정상 뿐만 아니라 간혹 비정상의 결함 부분 까지 포함하여 생성하게 된다는 단점이 존재하니 이를 해결하기 위해 정상 데이터을 Encoding할 때 정상 데이터에 대한 memory을 얻은 후 이를 기반으로 해서 정상 데이터를 생성하는 방법입니다.
학습 단계에서 memory는 정상 데이터에 가장 관련성이 높은 메모리 항목을 검색하며 데이터를 생성(재구성)하게 됩니다. 테스트 과정시 정상 데이터에 가장 관련성이 높은 메모리를 고정시킨 후 query data가 입력으로 주어지면 query data을 기반으로 한 정상 데이터를 메모리 기록으로 부터 검색을한 후 이를 기반으로 생성(재구성)이 이루어지게 됩니다.
다음 포스팅할 글은 MemAE 논문에 대해 정리한 글을 작성하도록 하겠습니다.