[17′ IPMI] AnoGAN : Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery

This entry is part 8 of 40 in the series Anomaly Detection

내용 요약

기존의 Anomaly Detection 방법들은 대부분 supervised learning 방법을 사용합니다. 하지만 이는 labeling cost가 크다는 단점이 있습니다. 이에 저자들은 unsupervised learning 방식의 AnoGAN을 제안합니다. AnoGAN은 GAN구조를 사용했습니다. 학습은 정상 이미지를 사용하여 일반적인 GAN과 동일한 방법으로 사용합니다. 테스트 단계에서는 반대로 x -> z mapping을 찾아내어 입력으로 들어온 이미지와의 차이를 근거로 anomal score를 판단합니다. AnoGAN은 의료용 데이터셋을 통해 기존 방식을 뛰어넘는 성능을 증명했습니다. Anomaly Detection에 관한 기본적인 내용은 Anomaly Detection에 관한 모든 것 글을 참고해주세요.

1. 기존 방법의 문제점

2017년도 당시 Anomaly Detection은 대부분 supervised learning 방식을 사용했습니다. Supervised learning 방식은 데이터셋이 충분히 확보된다면 높은 성능이 나온다는 장점이 있습니다. 하지만 학습을 위한 labeling dataset을 제작하기 위한 비용이 많이 필요하다는 단점이 있죠. AnoGAN은 특히 의료용 데이터셋에서의 Anomaly Detection에 타깃을 맞추고 있습니다. 의료용 데이터는 labeling 작업을 위해 의사 등 의학 전문 지식을 갖춘 사람이 필요하기에 제작 비용이 더 많이 든다는 특징이 있습니다. 따라서 저자들은 unsupervised learning 방식의 Anomaly Detection 방법론의 필요성을 강조합니다.

2. 제안 방법

이에 저자들은 AnoGAN이라는 unsupervised learning 방식의 Anomaly Detection 방법을 제안합니다.

2-1. 큰 그림

AnoGAN은 GAN을 사용하는 Anomaly Detection 방법입니다. GAN을 사용하여 Anomaly Detection을 하려면 어떤 방식을 사용해야 할까요?

1.정상 이미지로 GAN 학습하기
그림1. 정상 이미지로 GAN 학습하기

우선 GAN을 사용하여 학습용 정상 이미지를 학습할 겁니다. 이렇게 학습한 GAN의 Generator는 정상 이미지에 대해서만 학습했으므로 학습 데이터의 distribution에서 크게 벗어나지 않는 이미지만을 생성할 수 있게 될 겁니다.

그럼 테스트 단계에서는 이렇게 학습한 GAN을 어떻게 Anomaly Detection용 네트워크로 사용할 수 있을까요? Generator가 정상 데이터의 distribution과 유사한 이미지만 생성할 수 있다는 점을 이용할 겁니다. 테스트 단계에서 입력으로 들어온 이미지가 있다고 상상해 볼게요. 우리는 이제 Generator한테 이 입력 이미지와 가장 유사한 이미지를 만들라고 시킬 겁니다. Generator는 latent vector z로부터 이미지 G(z)를 만들어내는 모듈이잖아요? 따라서 만들어진 G(z)가 입력으로 받은 이미지와 비슷해질 때까지 z를 변경시켜보는 겁니다. 그렇게 해서 입력으로 받은 이미지와 가장 유사하게 만들어낸 이미지를 찾았다고 해보죠.

2.두 이미지의 차이로 anomal score 측정하기
그림2. 두 이미지의 차이로 anomal score 측정하기

그렇다면 입력으로 받은 이미지 (파란색)와 Generator가 만들어낸 이미지 (검은색)의 차이는 두 이미지 간의 차이를 의미할 겁니다. 이 차이는 만약 입력 이미지가 정상이었다면 작을 것이고, 반대로 불량이라면 클 것입니다. 왜냐하면 Generator는 정상 이미지에 대해서만 학습했기 때문에, 아무리 z를 이리저리 바꿔가면서 이미지를 만들어봐도 불량 이미지와는 비슷하게 만들어내지는 못할 것이기 때문입니다.

2-2. Train 단계

그럼 위에서 살펴본 큰 그림을 자세히 단계별로 살펴보겠습니다.

먼저 학습 단계는 GAN을 학습하는 단계입니다.

3.학습 단계
그림3. 학습 단계

학습 데이터로는 학습용 정상 이미지만을 사용할 겁니다. 일반적인 GAN의 방법론을 따라 학습을 진행합니다. Generator는 latent vector z로부터 이미지를 생성합니다. Discriminator는 입력으로 받은 이미지가 실제 정상 이미지인지, Generator가 만들어낸 이미지인지를 구분하도록 학습합니다. 이를 수식으로 표현하면 다음과 같습니다.

4.GAN loss
그림4. GAN loss

이렇게 학습이 완료된 Generator는 정상 이미지와 유사한 distribution을 갖는 이미지를 만들어낼 수 있게 됩니다.

2-3. Inference 단계

이번에는 inference 단계를 살펴보겠습니다.

위에서 학습한 GAN을 Anomaly Detection에 사용하기 위해서는 추가적인 단계가 필요합니다. 왜냐하면 단순히 정상 이미지를 생성하는 네트워크를 사용해서는 불량 유무를 판단할 수 없기 때문입니다. 불량 유무를 판단하기 위해서는 입력으로 받은 이미지와 가장 유사한 이미지를 Generator가 만들어내야 합니다. 큰 그림에서 살펴봤듯, 이 두 이미지의 차이를 근거로 anomal score를 판단할 것이기 때문이죠.

5.테스트 단계
그림5. 테스트 단계

그럼 입력으로 받은 이미지와 가장 유사한 이미지를 생성해내는 과정을 살펴보겠습니다. 학습 단계에서 학습한 Generator는 latent vector z를 입력으로 받아 이미지 G(z)를 생성합니다. 지금 우리에게 필요한 것은 이렇게 생성된 G(z)가 입력으로 받은 이미지 x와 비슷해야 한다는 것이죠. 즉, G(z)와 x가 가장 유사해지는 z를 찾는 것입니다. 시작은 Z space에서의 random sampling 하여 만든 z1에서 시작합니다. 그리고 z를 두 이미지가 유사해지는 방향으로 설정한 loss function에 따라 업데이트할 겁니다. 이때 loss function으로는 두 가지를 사용합니다.

첫 번째 loss는 생성한 이미지와 입력받은 이미지가 image level에서 같아지도록 유도해주는 loss입니다.
이를 residual loss라고 부릅니다. 수식으로는 다음과 같습니다.

6.residual loss
그림6. residual loss

두 번째 loss는 생성한 이미지와 입력받은 이미지가 Discriminator의 feature level에서 같아지도록 유도해주는 loss입니다.
이를 Discrimination loss라고 부릅니다. 수식으로는 다음과 같습니다.

7.discrimination loss
그림7. discrimination loss

최종 loss는 residual loss와 discrimination loss의 가중합으로 구성해 줍니다. 수식으로는 다음과 같습니다.

8.final loss
그림8. final loss

이렇게 설정한 loss function이 작아지는 방향으로 𝚪번의 iteration을 돌며 z를 찾아줍니다. 이때 중요한 건 loss function이 Generator나 Discriminator의 가중치를 업데이트하는 것이 아니라는 점입니다. 큰 그림의 흐름을 따라오면 GAN의 학습은 학습 단계에서 끝이고, 이후 단계에서는 z를 찾기 위한 과정임을 이해할 수 있습니다.

2-3. Anomal score

지금까지의 논리를 그대로 따라온다면 위에서 사용한  𝚪번의 iteration을 돌며 찾은 z로부터 나온 loss function은 그대로 anomal score로도 사용될 수 있음을 알 수 있습니다. 왜냐하면 이때의 loss function 값은 입력받은 이미지와 Generator가 만들어낸 이미지의 차이중 가장 작은 값을 의미하기 때문이죠. 수식으로는 다음과 같습니다.

9.anomal score
그림9. anomal score

즉 loss가 클수록 불량으로 판단하겠다는 의미입니다.

3. 실험 결과

AnoGAN의 성능을 확인해 보겠습니다.

3-1. SD-OCT retina scans 데이터셋

3-1-1. 정량적 분석

의료 데이터셋인 retina scans 데이터셋을 사용한 Anomaly Detection 성능을 살펴보겠습니다.

먼저 다른 방법들과의 성능 비교 결과는 다음과 같습니다.

8.retina scan 데이터셋 성능 비교
그림10. retina scan 데이터셋 성능 비교

비교 방법들을 살펴보겠습니다.
첫 번째의 aCAE는 AnoGAN과 동일 구조, 동일 방식으로 학습을 하되 GAN이 아닌 AutoEncoder를 사용한 방법입니다. 이를 통해 GAN과 AutoEncoder 중 어떤 방식이 더 우수한지를 비교해볼 수 있습니다.
두 번째의 PD는 GAN의 방법대로 학습한 뒤, Discriminator output을 그대로 anomal score로 사용한 방법입니다. 기존의 GAN은 Discriminator로부터 real / fake의 확률값이 나오므로 이를 그대로 anomal score로 사용할 수 있습니다. 이를 통해 GAN과 AnoGAN 방식 중 어떤 방식이 더 우수한지를 비교해볼 수 있습니다.
세 번째의 GANR은 AnoGAN의 학습 파라미터를 그대로 사용합니다. 다만 anomaly score의 discriminator loss를 변형합니다. Discriminator loss로 “Semantic Image Inpainting with Perceptual and Contextual Losses”의 contextual loss를 사용합니다. 이를 통해 discriminator loss와 contextual loss의 성능을 비교해볼 수 있습니다.

결과를 살펴보겠습니다.
먼저 AutoEncoder보다 GAN을 사용했을 때 성능이 더 좋은 모습을 볼 수 있습니다.
두 번째로 GAN을 그대로 사용하는 것보다 AnoGAN 방식의 성능이 더 좋은 모습을 볼 수 있습니다.
세 번째로 contextual loss보다 discriminator loss의 성능이 더 좋은 모습을 볼 수 있습니다.

다음은 ROC curve를 통해 성능을 비교해 보겠습니다.

11.retina scan 데이터셋 ROC curve 비교
그림11. retina scan 데이터셋 ROC curve 비교

먼저 그림 a를 보겠습니다.
AutoEncoder 방식보다 AnoGAN의 AUROC가 더 큰 모습을 볼 수 있습니다. 또한 GAN 방식보다 AnoGAN 방식의 AUROC가 더 큰 모습을 볼 수 있습니다.

다음은 그림 b를 보겠습니다.
제안 방법인 residual loss(R)과 discriminator loss(D)는 비교적 anomal image를 잘 검출하는 모습을 볼 수 있습니다. 반면 contextual loss를 사용한 D^로는 anomal image를 잘 검출하지 못하는 모습을 볼 수 있습니다.

다음은 그림 c를 보겠습니다.
그림 c는 residual loss만을 사용했을 때 각 데이터의 score 분포를 나타냅니다. Residual loss만으로도 불량을 잘 구분하는 능력이 있음을 볼 수 있습니다.

다음은 그림 d를 보겠습니다.
그림 d는 discriminator loss만을 사용했을 때 각 데이터의 score 분포를 나타냅니다. Discriminator loss만으로도 불량을 잘 구분하는 능력이 있음을 볼 수 있습니다.

3-1-1. 정성적 분석

다음은 이미지 샘플들을 살펴보겠습니다.

12.retinal scan 데이터셋 이미지 샘플 비교
그림12. retinal scan 데이터셋 이미지 샘플 비교

먼저 첫 번째 블록의 이미지들은 학습용 정상 이미지들입니다.
두 번째 블록의 이미지들은 테스트용 정상 이미지들입니다.
세 번째 블록의 이미지들은 테스트용 비정상 이미지들입니다.
첫 번째 행은 입력으로 들어간 이미지입니다.
두 번째 행은 이러한 입력과 유사하게 AnoGAN이 만들어낸 이미지입니다.
세 번째 행은 이 두 이미지의 차이인 residual image입니다.
네 번째 행은 입력 이미지에 대한 anomal 부분의 ground truth입니다.

결과를 살펴보겠습니다.
먼저 첫 번째, 두 번째 블록의 정상 이미지들을 보겠습니다.
입력 이미지에 대해 거의 비슷한 이미지를 생성해내는 모습을 볼 수 있습니다.
따라서 residual image의 차이가 거의 없는 모습입니다.
반면 세 번째 블록의 비정상 이미지들을 보겠습니다.
입력 이미지와 많이 다른 이미지를 생성해내는 모습을 볼 수 있습니다.
따라서 residual image에서의 차이가 큰 모습을 볼 수 있습니다.
이를 통해 비정상을 잘 검출할 수 있는 능력을 잘 학습했다고 결론 내릴 수 있습니다.

4. 결론

GAN 구조를 사용한 unsupervised learning 방식의 Anomaly Detection 방법론인 AnoGAN을 살펴봤습니다. AnoGAN은 GAN을 그대로 사용하지 않고 Anomaly Detection에 맞도록 구조를 변형한 방법론입니다. 정상 데이터를 사용하여 GAN을 먼저 학습합니다. 이후 입력 이미지와 생성 이미지 간의 차가 가장 작은 z를 찾아 이 차이를 근거로 anomal score를 측정합니다. 실험을 통해 Unsupervised learning 방식으로도 비정상 부분을 잘 찾아낼 수 있음을 증명했습니다. 특히 의료 데이터에서 좋은 성능을 보임을 증명했습니다. AnoGAN은 이후 GANomaly 등 GAN을 사용하는 Anomaly Detection 연구에 영감을 주었습니다.

Series Navigation<< [Reconstruction 방식의 Anomaly Detection][18′ ACCV] GANomaly : Semi-Supervised Anomaly Detection via Adversarial Training >>
5 1 vote
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top