티스토리 뷰

Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide MArker Discovery 일명 "AnoGAN"에 대한 paper을 읽고 정리한 공부자료 입니다.

 


기본개념


GAN이란?

GAN의 학습 과정은, Discriminator가 Real과 Fake를 잘 맞추도록 훈련을 한 다음, Generator가 만들어낸 Fake image가 Discriminator에서 Real로 나오도록 하는 학습 과정입니다.

DCGAN

- CNN vs MLP

MLP : 3차원 데이터를 1개의 Vector로 풀어서 인식한다. 그로인해 단점은 이미지의 위치 정보를 무시하게 된다(feature loss발생)

CNN : 3차원 데이터 입력을 그대로 사용한다(위치 정보 반영)

 

- 일반적인 CNN의 "Discriminator"

Convolution 연산을 통해서 데이터의 차원을 줄이는 과정이다.

출처 : http://bitly.kr/zf41gnT

예를 들어보자면.. Cifar10으로 10개의 class를 분류하는 classification CNN 모델이 있다고 하자. 여기서 Input과 output은

input : 3차원 이미지(RGB , 3channels)
output : 각 class에 해당하는 확률 (1 x 10)

여기서 input data와 output data를 비교해보면 차원이 감소한것을 볼 수 있다. (3차원 -> 1차원)

- Generator가 차원을 확장시키는 방법.

Deconvolution 방식을 사용한다(=Transpose Convolution) ==> 이 방법은, 입력의 차원을 확장시켜준다.

DCGAN의 Generator Architecture

- DCGAN의 특징

1) Generator는 이미지를 외워서 보여주는 것이 아니다. (Memorization이 일어나는게 아니다)

GAN이 학습을 했다고 보여줘야 한다. 
학습을 했다라고 보여준다 라는 의미는, 논문에서 "latent vector를 조금씩 변경하면 이미지도 조금씩 변경된다"라고 나와있다.
(관련 내용은 3번 "walking in the latent space")

2) Memorization이 일어난 경우는 어떤 경우인가?

Generator가 유의미한 특징들을 학습하지 않고, Overfitting이 발생되서 1:1로 데이터와 매칭하는 mapping을 학습하게 된다. 
따라서 이 경우는 model이 제대로 학습 했다 라고 말을 할 수 없다.

3) "Walking in the latent space"

latent vector를 조금씩 바꾸면 부드럽게 그림들이 변경되는것을 확인할 수 있다.

walking in the latent space (DCGAN)

AnoGAN


1. Abstract

의료데이터에서, disease progression과 treatment monitoring에 관련된 labeling된 이미지를 잡아내는 model를 구하는 것은 어려운 일이다. 기존 모델은 automating detection을 위해 maker에 annotation이 된(labeling이 되고, 이 질병이 어떤 질병인지 설명된 데이터) 많은 양의 데이터를 기반으로 진행한다.이 방법은 annotation(라벨링 작업)과 이미 알려진 것들에 대해서만 detection이 이루어진다는 점은 단점으로 작용하게 된다. 그래서 이 논문에서는, Unsupervised Learning을 이용해서 image 안에서 anomaly를 찾는 방법을 수행한다. 우리가 제안한 AnoGAN은 다양한 Nomal data(정상 데이터)로 학습한 DCGAN과 Image space 안에서 latent space의 mapping을 기반으로 anomaly score를 계산한다. 새로운 데이터가 들어오게 되면 model은 anomaly한 부분에 labeling을 하게 되고, training된 distribution에 적합한지 image patches에 anamaly score를 나타낸다. 이 방식은 망막의 광학 단층 촬영 영상에 적용한 결과, 망막 유체 또는 반사성 초점을 포함하는 이미지와 같은 변칙적인 영상(Anomaly)을 정확하게 식별함을 확인하였다.

2. AnoGAN이 등장하게 된 이유는?

이 논문에서 사용된 데이터는 의료 데이터이다. 의료 데이터를 기준으로 말을 하자면, 우선 보통 normal한 데이터는 많지만 abnormal한 데이터는 부족한 경우가 많다. 또한 보통 cancer과 같은 질병들을 인공지능으로 구분하고자 하는 방법은 Supervised Learning 방법을 사용하며, data들은 labeling된 데이터(annotation된 데이터)들이 많이 존재해야한다. 이러한 기존 방법의 장.단점은 아래와 같다.

[장점] : labeling된 class에 대한 데이터들이 들어오게 되면 잘 찾을 수 있다.
[단점] : labeling이 안된 새로운 데이터가 들어오게 되면 supervised learning으론 찾기 힘들며, labeling 하는 과정 중, 전문인력들이 시간을 공들여서 이탈리아 장인이 한땀한땀 옷을 만들듯이 전문가들이 하나하나 labeling을 그려야 하므로 엄청난 인력과 시간과 자금이 들어가게 된다는 단점이 있다.

그래서 이 논문에서는, supervised Learning으로 접근을 하기 보다는, Unsupervised Learning 방법으로 문제를 해결하고자 했다.

 

좀 더 쉽게 정리를 해보자면,

Discriminator는, input image가 진짜(True)인지 가짜인지(False) 확률을 구하는 classifier이다.(값이 크면 그만큼 Real일 확률이 크다는 의미) 만약, 의료 데이터를 기준으로 Discriminator에서 실제 Normal한 영상 데이터 이지만, Discriminator를 훈련할때 훈련이 안된 데이터들은 모두 Fake라고 말을 하지 않을까? 라는 의문점에서 나오게된 방법이 AnoGAN이라고 생각을 한다. 논문 제목에서도 알 수 있듯이 'Anomaly Detection' 직역을 해보면 "다른 데이터 검출"이다. AnoGAN이 의미있는 것 중 하나가 바로 outlier detection을 목적으로 처음 사용한 GAN Paper라는 것이다.

 

즉, 이 paper는 여러가지 병변들이 존재하지만, 이 병변들이 어떤 병변이다 라고 알려주기 보다는, 이 이미지에서는 정상은 아니고 정확하게 어떤 질환은 아니지만 정상 데이터는 아닌거 같다 라고 알려주고 어느 부분이 의심 스러운지, Anomly 한 부분인지 Detection을 해주는 것이다.

 

블로그를 볼때 짜잘짜잘한 글들은 눈에 잘 한들어오니 핵심적인 것만 요약을 하자면.

2-1. Data Imbalance Problem

의료 데이터는 normal한 데이터는 많지만 abnormal한 데이터는 부족하다. 기존 Supervised Learning을 이용한 data imbalance problem은 간단하게 Upsampling, Down Sampling으로 해결을 했지만, AnoGAN은 이 문제를 Unsupervised Learning으로 해결해보고자 나온 모델이다.

 

2-2. Labeling 작업에 대한 엄청난 노력이 필요.

의료 데이터를 기준으로, 비전문가들은 의학적 지식이 없으니 전문가(의사)들이 의학적 지식을 바탕으로 labeling을 해야한다.(ex, segmentation) labeling을 해보시는 분들은 아시겠지만. 엄청나게 많은 시간과 노력을 들여야하며 이걸 또 대충대충하다보면 좋은 데이터로 모델을 학습을 할때랑 그렇지 않은 데이터로 학습을 할때랑 성능 차이가 많이 나서 제대로 해야한다는 것을 아실것이다. 그래서 이러한 labeling을 하나하나 하지 말고 그냥 다 넣어버려서 outlier인 부분을 찾는것을 목표로 한다.

 

3. AnoGAN 동작 원리

Step1

출처 : 내가 그린거임!!

우선 일반적으로 GAN이 어떤식으로 학습을 하는지는 이전 게시글에 나름 잘(?) 정리를 해두었으니 해당 게시물을 참고하면 좋을거 같습니다. AnoGAN은 일반적으로 GAN이 학습하는 방법과는 조금 다름니다. GAN은 normal이든 abnormal이든 다 상관없이 그냥 실제 real image와 동일하게 Generator가 생성을 해내느냐 라고 말을 한다면, AnoGAN은 학습을 할때 사용되는 데이터는 Normal 한 데이터로만 DGCAN을 학습 시킴니다.

 

일반적인 GAN이 학습한다 라는 의미를 알아보도록 하겠습니다.

 

Discriminator 학습

 

Discriminator에 Real Sample image를 넣어주어서 "True"라고 먼저 학습을 시켜줍니다. (그래야 Fake data가 들어오게 되면 False라고 자신있게 말해줄 수 있으니까요.) --> AnoGAN에서는 Normal한 이미지만 넣어주는 것 입니다.
그리고 G(z)에서 나온 Fake image를 넣어주어서 "False"라고 학습을 시켜줍니다. --> AnoGAN은 해당 학습은 진행하지 않습니다.

DCGAN에서 Discriminator를 학습시키는 코드 일부.(AnoGAN 코드랑은 다름니다.)

Generator 학습

 

Latent Space에서 Random Sampling을 해준 Z값을 G에 넣어서 Fake Image를 생성을 해준다. 이제 그것을 D에 넣어주어서 True가 나오게끔 학습을 시켜준다.

DCGAN에서 Generator를 학습 시키는 코드 일부.(AnoGAN 코드랑은 다름니다.)

이러한 과정들을 거치면서 나오는 Feature 값들이 있는데. 그 Feature값들이 metric를 통해서 나오 loss값이 최소화가 되도록 학습을 진행하는 방법이 일반적인 GAN이 학습하는 방법입니다.

 

이제 AnoGAN 관점에서 GAN이 학습이 잘 되었다는 의미를 알아보도록 하겠습니다.

 

Discriminator 학습

 

우선 Normal한 데이터(정상 데이터)로 "얘는 정상인 이미지야"라고 학습을 시켜줍니다.

Generator 학습

 

nomal data의 Manifold를 Generator가 학습을 하게 합니다.
* Manifold : embeding된 data를 원래 데이터를 잘 표현하는 저차원 공간을 학습하는 것.
* embeding : 고차원 -> 저차원 으로 차원 축소.

따라서 AnoGAN 관점에서 잘 학습된 GAN이라고 하면, x가 정상 데이터의 latent space 또는 Manifold에 잘 mapping 된거라고 볼 수 있습니다. 그렇게 된다면, Generator model이 정상 데이터 x와 비슷하게 이미지를 만들게 됩니다.(이때 사용되는 latent vector z는, Uniform Distribution을 사용한 Pz에서 Random하게 z값을 뽑아서 사용한 것 입니다.)

 

일반적인 GAN vs AnoGAN

 

일반적인 GAN : Generator가 Fake image를 만들면, Discriminator는 그게 Real image인지 Fake Image인지 맞추는 것.

AnoGAN : latent space는 normal data feature들을 가지고 있는 vector들이다. 그래서 Generator는 Fake image이지만, abnormal한 데이터 말고 normal한 데이터를 생성해 내려고 계속 학습을 진행한다.(따라서 학습 할때는 Normal Data로만 학습을 한다)
G_loss = log(D(G(z)))
D_loss = lossD(x) + log(1 - D(G(z)))

GAN은, z -> x G(z)를 통해서 가능하며 이러한 과정은 Fake image를 만들어 내는 과정입니다. 그렇지만 x -> z는 D와 G만 사용해서는 불가합니다. 그래서 나온 해결책이 x -> z로 바로 안가고 최대한 x와 비슷한 이미지를 만들어 내도록 z를 이용해서 만듬니다. 그렇게 하려면 정상 이미지와 미슷한 이미지를 만드는 최적의 z값을 알아야 합니다.

 

그 다음 과정은 어떻게 최적의 z를 알게 되는지 알아보는 과정입니다.

Step2

[전재조건]

  • 정상 데이터로만 학습을 한 DCGAN이 존재를 해야함.(x가 latent space, Manifold에 잘 mapping이 되어있어야 한다.)
  • GAN이 잘 학습되었따고 하면 이제 G와 D의 parameter들은 고정시켜주고 최적의 z값을 찾도록 학습을 진행한다.

Generator과 Discriminator의 Parameter를 더이상 update해주지 않고 Fix시킨 상태로, Latent Vector Z1을 Random Sampling을 시켜주고 그 Z1을 Generator에 입력을 해준다 G(z1). 그러면 Generator의 출력 값은 normal image가 나온다. (왜냐하면, Latent Space는 Normal data feature 들을 가지고 있는 Vector이기 때문이다.)

 

Step 3 (Residual Loss)

Real Image(nornal + abnormal)와 G(z1)을 통해서 나온 Fake Normal image를 다른 부분이 있는지 비교를 하게 된다. 그럼 비슷한  이미지가 생성이 되었다면 normal이고 다른게 나오면 abnormal일 것 이다. 이 과정은 compare부분에서 진행을 하게 된다. 여기서는 '학습'이라는것을 진행을 해줘야하기 때문에 loss값을 최대한 줄여주는 것을 목표로 해야한다. 여기서도 loss값이 있다. 이때 사용되는 loss는 Residual Loss라 불린다.

 

Residual Loss

Residual loss = (우리가 판단하고자 하는 query 데이터 즉, Normal Real Sample의 Manifold X) - (완벽하게 normal 데이터를 생성해 내는 G(z))

 

Step4 (Discrimination Loss)

Residual Loss만 구해주면 모델일 섭섭해하니까 Discriminator부분에서도 Loss를 한번 더 구해준다.

원래 Discriminator는, 들어온 데이터가 진짜인지(True)/가짜인지(False) 판단하는 것이다. 이 것을 좀 더 다르게 생각을 해보면 들어오는 입력 데이터들의 probability distribution을 파악해서 진짜인지 가짜인지 파악을 하는 것이다.

 

즉, Discrimination Loss는 z값에 의해 만들어 내는 이미지 G(Zr)dl Manifold 또는 Data distribution에 잘 mapping되도록 패널티를 부과하는 loss라고 생각을 하면 될거 같습니다.

 

Discrimination Loss

Discrimination loss가 나오게된 아이디어는, G(Zr)과 x가 비슷하다면, 굳이 마지막 최종 출력단에서 0 ~ 1 사이의 Sclar값을 사용 안하고 중간 Activation function 계층의 값을 사용해도 비슷한 값이 나오지 않을까? 라는 생각에 나온 Loss이다. 따라서 이러한 과정을 Feature Matching이라고 불리며, Discriminator 중간 layer(논문에서 중간층이 더 많은 표현력을 갖고 있다고 나와있습니다.)에서 Feature를 뽑은 값을 사용하게 된다.

Step5

Residual Loss + Discriminator Loss인 total loss를 구하게 된다.

total loss(람다 : 0.1)

이 과정이 latent vector Z1에 대한 total loss를 구하는 과정이다. 이런 과정을 G와 D의 weight들을 여전히 Fix시켜주고 total loss가 최소화가 되도록 latent vector를 Gradent Descent 과정을 통해서 조정을 시켜준다.

그래서 Z1 -> Z2 -> Z3 -> ...Z500 (이 논문에서는 500번 반복을 진행함) 을 해서 latent vector를 조정해준다.

Normal한 Real Image가 들어오면 : Total Loss의 값은 작음
Abnormal한 Real Image가 들어오면 : Total Loss의 값은 큼

따라서 해당 논문에서는, Loss Function 자체를 Anomaly Score로 잡아서 판단의 기준으로 사용한다. 최종적으로 Anomaly한 부분을 visulization을 시켜준다 (자세한 내용은 코드를 보면 직관적으로 이해할 수 있을거 같습니다.)

 

결론적으로, query data(질병 여부가 궁금한 데이터)가 정상이라면 latent space로 mapping이 가능하겠지만, 정상인 데이터가 아니라면 mapping이 제대로 안이루어진다.

 

4. Archiecture

4-1. DCGAN

gray-scale일때의 DCGAN Architecture

RGB(3채널)일때랑은 다르게 입력 이미지가 해당 논문에서는 Gray-Scale(1채널)이다. 그래서 그에 맞게끔 hidden layer의 수도 변경을 해주어서 사용한거 밖에 없다.

4-2. AnoGAN

 

5. conclusion

AnoGAN 과정을 요약을 해보자면

  1. normal data로 DCGAN을 학습 시킨다.
  2. Pz에서 z값을 Random Sampling한다.
  3. z1 계수에서 normal 데이터랑 비슷하게 나오도록 계속 업데이트를 진행한다.
  4. 어느정도 DCGAN이 학습이 되었다고 생각이 될때 Zn으로 부터 query data x가 잘 만들어 지는지 확인한다.
    • 이 과정은, normal data의 latent space로 적절하게 mapping이 되어있는지 여부를 통해서 normal 인지 abnormal인지 판단을 하는 것이다.
  5. 최종적으로 abnormal한 부분을 시각화 시켜준다.
Comments