[18′ ACCV] GANomaly : Semi-Supervised Anomaly Detection via Adversarial Training

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

내용 요약

Supervised learning 방법의 Anomaly Detection은 여러 치명적인 단점이 존재합니다. 따라서 성능이 좋은 unsupervised learning 방식의 Anomaly Detection 방법론이 필요합니다. AnoGAN 등의 방법이 제안되었지만 2단계로 나누어 학습해야 한다는 치명적인 단점이 있습니다. 이를 해결하기 위해 저자들은 1단계로 학습할 수 있는 GANomaly라는 방법론을 제안합니다. 여러 데이터셋을 사용하여 GAN 구조를 사용하는 Anomaly Detection 방법들 중 가장 성능이 좋음을 보였습니다. 이번 글은 독자들이 Anomaly Detection의 기본적인 내용을 알고 있다고 가정하고 있습니다. Anomaly Detection에 관한 기본적인 내용은 Anomaly Detection에 관한 모든 것을 참고해주세요.

1. 기존 방식의 문제점

1-1. Supervised Learning 방식의 문제점

GANomaly는 2018년도에 제안된 unsupervised learning 방식을 사용하는 Anomaly Detection 방법론입니다. 당시까지만 해도 Anomaly Detection 방법론들은 대부분 supervised learning 방식을 사용했습니다. Supervised learning 방식을 사용하는 Anomaly Detection 방법들은 dataset에 존재하는 불량들을 잘 찾아낸다는 장점이 있습니다. 하지만 두 가지 치명적인 단점으로 인해 unsupervised learning 방법론의 필요성이 대두되었죠.

첫 번째 단점은 labeling cost입니다.
Supervised learning 방식을 사용하기 위해서는 labeling datset을 제작해야 합니다. Labeling cost는 어떤 분야의 데이터셋인가에 따라 천차만별입니다. 누구나 할 수 있는 단순 작업이라면 단가가 저렴하지만, 의료 데이터셋처럼 전문 지식이 필요하다면 단가가 높다는 단점이 있습니다. 하지만 Anomaly Detection이 실제로 적용되어야 하는 특성상 스마트 팩토리나 의료 환경 등 labeling을 위해서는 전문 지식이 필요한 경우가 많죠.

두 번째 단점은 데이터셋에 존재하지 않는 불량은 못 찾아낸다는 것입니다.
Supervised learning으로 Anomaly Detection을 수행하면 불량 데이터에 대해서 ‘이것이 불량이야.’라고 모델을 학습합니다. 이는 다른 말로 하면 ‘이런 특성을 가질 때만 불량이야.’라고 학습하는 것과 같죠. 따라서 데이터셋에 포함되지 않은 불량 특성은 검출하지 못하게 됩니다. 하지만 실제 환경에서는 예상하지 못한 불량이 많이 발생하곤 하죠.

이 두 가지 치명적인 단점으로 인해 저자들은 unsupervised learning 방식의 Anomaly Detection 방법론의 필요성을 주장합니다.

1-2. Unsupervised Learning 방식의 문제점

그럼 기존의 unsupervised learning Anomaly Detection 방법들의 단점은 무엇일까요?
GANomaly 이전에 이미 AnoGAN이라는 unsupervised learning 방식의 Anomaly Detection 방법론이 제안되었습니다. AnoGAN은 GAN을 사용하여 정상 데이터를 학습하고, 테스트 단계에서는 테스트 이미지와 Generator가 생성한 이미지의 차이를 기준으로 anomal score를 측정하는 방법입니다. 거의 최초의 GAN을 사용한 unsupervised learning 방식의 Anomaly Detection 방법론이라고 할 수 있죠.

AnoGAN의 자세한 내용은 해당글을 참고해 주세요.

하지만 AnoGAN에도 단점은 존재합니다. 바로 2 stage로 학습해야 한다는 점입니다.
1단계에서는 우선 정상 이미지 데이터를 사용하여 Generator와 Discriminator를 학습합니다. 이 단계는 latent space -> image space의 mapping을 배우는 단계로, Generator는 정상 이미지의 distribution을 학습합니다.
2단계에서는 반대로 image space -> latent space mapping을 찾아가는 단계입니다. 입력으로 받은 테스트 이미지와 가장 비슷하게 생긴 이미지를 생성하는 단계죠.
그리고 나서야 비로소 테스트 이미지와 생성한 이미지의 차이를 근거로 anomal score를 판단할 수 있습니다. 이렇게 2단계로 이루어지는 학습 방법은 불량 검출을 매우 번거롭게 만든다는것이 단점입니다.

2. 제안 방법

따라서 GANomaly 저자들은 1 stage로 간단하게 학습하고 바로 anomal score를 측정할 수 있는 방법을 제안합니다.
AnoGAN과 마찬가지로 GAN구조를 사용하기 때문에 GAN을 사용하는 Anomaly Detection 방법론이라는 의미로 GANomaly라고 이름 붙였습니다. 자세한 내용을 살펴보겠습니다.

2-1. GANomaly와 AnoGAN의 비교

먼저 GANomaly의 큰 그림을 살펴보겠습니다.

1.AnoGAN과 GANomaly의 비교
그림1.그림AnoGAN과 GANomaly의 비교

AnoGAN과 비교해보면 저자들의 생각을 쉽게 이해할 수 있습니다. 먼저 AnoGAN 그림을 보겠습니다.
AnoGAN은 학습 단계에서 정상 이미지를 사용하여 GAN을 학습합니다. 그리고 테스트 단계에서는 입력받은 테스트 이미지와 가장 비슷한 이미지를 생성한 뒤 이 둘의 차이를 근거로 anomal score를 측정합니다. 두 이미지의 차이가 클수록 불량으로 측정하는 것이죠.

이번에는 GANomaly 그림을 보겠습니다.
GANomaly의 저자들은 AnoGAN의 치명적 단점이 2 stage로 구성된 학습 단계라고 했었죠? AnoGAN이 2stage 학습 단계를 구성해야만 했던 이유는 x->z mapping을 찾아야 했기 때문입니다. GAN을 학습하여 정상 이미지의 z->x mapping은 찾았지만, anomal score를 찾으려면 입력 이미지와 가장 유사한 이미지를 생성해야만 하고 따라서 x->z mapping을 찾는 과정을 따로 추가해줘야만 했죠. GANomaly 저자들은 이러한 AnoGAN을 보며 이런 생각을 한 것 같습니다.
“그럼 그냥 x->z와 x->z mapping을 직렬로 연결해서 한 번에 학습하면 되겠네.”

GANomaly 그림을 볼까요?
먼저 정상 이미지를 사용하여 z로 encoding 해줍니다. 이번에는 이 z를 사용하여 다시 이미지 x^를 생성할 겁니다. 다시 한번 더 x^를 encoding 하여 z^로 압축해 줍니다. 즉 x -> z -> x^ -> z^ 구조를 하고 있습니다. 이렇게 되면 anomal score를 측정하기 위해 비교할 수 있는 대상이 2개가 있습니다. 이미지끼리 (x, x^) 또는 압축 정보끼리 (z, z^) 비교할 수 있죠. GANomaly는 이 중 압축정보끼리 비교하는 방법을 사용합니다. 즉 z와 z^의 차이를 근거로 anomal score를 측정합니다.

2-2. 큰 그림

왜 이미지가 아닌 압축 정보를 근거로 anomal score를 판단할까요?
이렇게 한번 생각해 볼까요? 이미지는 데이터양이 아주 많은 고차원 정보고, 압축 정보는 데이터량이 적어진 정보잖아요? 압축 정보를 ‘언어’라고 해보겠습니다. 다음과 같은 예시를 들 수 있겠네요.

2.고차원 정보와 압축 정보의 예시
그림2. 고차원 정보와 압축 정보의 예시

강아지 그림을 보며 불량 정도를 판단한다고 가정해 봅시다.
첫 번째 방법은 강아지 그림을 입력으로 받아 판단하는 겁니다. 두 번째 방법은 이 그림을 설명한 글을 보고 판단하는 겁니다. 뭐가 더 쉬울까요?

여기서 잊지 말아야 하는 건, 우리가 그림을 보는 게 아닌 컴퓨터가 그림을 보고 판단한다는 겁니다. 즉 모든 픽셀값을 받아 계산해야 한다는 거죠. 컴퓨터 입장에서 이미지 정보는 noise가 많은 정보입니다. 모든 픽셀값을 고려해야 하기 때문에 작은 noise에도 크게 반응할 수 있죠. 우리 눈에는 뿔이 두 개 달린 모습이 바로 눈에 띄지만 컴퓨터 눈에는 뿔 외에도 배경에 포함된 의미 없는 점들도 불량으로 보일 겁니다.

반면 글로 판단하는 건 훨씬 압축된 정보만 입력받기에 상대적으로 쉬울 겁니다. 일단 판단해야 하는 정보의 개수 자체가 훨씬 적어지겠죠. 또한 정보 하나하나가 압축된 의미를 갖기에 noise 정보는 제외된다는 장점도 있을 겁니다.
이러한 장점을 이용하기 위해 GANomaly에서는 이미지 정보가 아닌 압축 정보를 사용하여 anomal score를 측정한 것으로 추정됩니다.

2-2. 구조

이제 GANomaly의 구조를 상세히 들어가 볼까요?
GANomaly의 구조는 다음과 같습니다.

3.GANomaly 구조
그림3. GANomaly 구조

저자들은 크게 세 가지의 구조로 나누어 설명합니다.

첫 번째는 Auto Encoder입니다.
입력 이미지에 대해 z로 압축한 뒤 다시 x^로 복원하는 Auto Encoder의 모습을 볼 수 있습니다.

두 번째는 Encoder입니다.
Auto Encoder를 통해 복원된 이미지 x^를 다시 latent space로 압축하여 z^로 mapping 하는 모습을 볼 수 있습니다.

세 번째는 Discriminator입니다.
기존 GAN에서의 discriminator는 실제 이미지와 생성 이미지를 구분하는 역할을 합니다. GANomaly에서의 discriminator는 단순히 구분하는 작업이 아닌, feature extractor로서의 역할을 합니다. 입력 이미지와 생성 이미지의 feature를 추출하여 feature level에서 비교하는 역할을 합니다.

2-3. Loss function

이번에는 큰 그림을 유념하면서 loss function을 살펴보겠습니다.

큰 그림을 다시 한번 생각해 보겠습니다. 우리가 만들어야 하는 구조는 이렇습니다. 입력으로 받을 정상 이미지에 대해서 이것과 동일하게 생긴 이미지를 만들어내도록 학습해야 합니다.

4.GANomaly의 loss function들
그림4. GANomaly의 loss function들

이를 위한 첫 번째 loss function은 adversarial loss입니다.
입력으로 받은 이미지와 생성한 이미지가 feature level에서 서로 같아지도록 유도해주는 역할을 합니다. 수식으로는 다음과 같습니다.

5.adversarial loss
그림5. adversarial loss

Discriminator를 통해 나온 feature들의 차이가 같아지도록 학습을 유도합니다.

두 번째 loss function은 contextual loss입니다.
Adversarial loss만 적용하면 contextual 정보에 대해서는 학습이 안 되겠죠. Feature level에서 보는 정보와 image level에서 보는 정보는 다를 테니까요. 따라서 image level에서도 같아지게 만들어줄 loss가 필요합니다. 수식으로는 다음과 같습니다.

6.contextual loss
그림6. contextual loss

L2 distance를 사용하지 않고 L1 distance를 사용하는 이유는 L1 distance를 사용할 때 덜 blurry 하기 때문입니다.

세 번째 loss function은 encoder loss입니다.
위의 두 개 loss를 사용하면 현실적이면서도 context들까지 반영한 이미지를 만들어낼 수 있을 겁니다. 저자들은 여기에 압축 정보들끼리도 같아지도록 loss를 추가해 줍니다. Feature level, image level에서 뿐만 아니라 압축된 단계에서도 서로 같아지도록 유도해주는 것이죠. 수식으로는 다음과 같습니다.

7.encoder loss
그림7. encoder loss

최종 loss function은 위의 세 가지 loss를 조합하여 구성해 줍니다.

8.final loss
그림8. final loss

2-4. Anomal score

이번에는 학습이 완료된 뒤 anomal score를 측정하는 방법을 살펴보겠습니다.

큰 그림에서 살펴봤듯이 압축 정보들끼리의 차이를 사용하여 anomal score를 측정할 겁니다. 수식으로는 다음과 같습니다.

9.anomal score
그림9. anomal score

이렇게 나온 모든 테스트 샘플의 점수들을 다 모아서 0~1 값으로 normalization 하면 최종 anomal score가 나오게 됩니다.

3. 실험 결과

이번에는 다양한 데이터셋을 사용하여 GANomaly의 성능을 살펴보도록 하겠습니다.

3-1. MNIST, CIFAR10

먼저 MNIST와 CIFAR10 데이터셋에 대한 성능을 살펴보겠습니다.

10.MNIST, CIFAR10 데이터셋 성능
그림10. MNIST, CIFAR10 데이터셋 성능

GAN 구조를 사용하는 여러 방법들과 Variational Auto Encoder (VAE)를 사용한 방법의 성능을 비교하고 있습니다. 모든 클래스에 대해 GANomaly의 성능이 가장 좋은 모습을 볼 수 있습니다. 특히 유사한 철학을 갖고 있는 AnoGAN과 비교했을 때 성능이 많이 향상된 모습을 볼 수 있습니다. GANomaly는 AnoGAN을 1 stage로 구성하고 압축 정보를 토대로 anomal score를 측정하는 방법으로 변경한 점을 생각해보면 압축 정보로 anomal score를 판단하는 방법이 효과가 컸을 것으로 생각됩니다.

3-2. UBA, FFOB

다음은 UBA와 FFOB 데이터셋에 대한 성능을 살펴보겠습니다.

11.UBA, FFOB 데이터셋 성능
그림11. UBA, FFOB 데이터셋 성능

AnoGAN과의 성능을 살펴보겠습니다.
Knife를 제외하고는 모든 클래스에서 성능이 더 좋은 모습입니다. 저자들은 이에 대해 knife는 모양이 단순하기 때문에 overfitting 된 것 같다고 말합니다.

4. 결론

GANomaly는 AnoGAN의 2 stage 학습 구조를 개선하여 1 stage로 변경한 방법론입니다. 이를 위해 encoder – decoder – encoder architecture라는 새로운 구조를 제안합니다. 다양한 데이터셋에서 GAN, Auto Encoder 방식의 Anomaly Detection 방법론들 중 가장 성능이 좋음을 보였습니다.

Series Navigation<< [17′ IPMI] AnoGAN : Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery[20′ ECCV] Attention Guided Anomaly Localization in Images (CAVGA) 핵심 리뷰 >>
0 0 votes
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