tkwoo / anogan-keras

Unsupervised anomaly detection with generative model, keras implementation
178 stars 61 forks source link

결과 이미지를 보고 해석 방법?? #10

Open edwardcho opened 4 years ago

edwardcho commented 4 years ago

또 질문 드리네요..

anomaly 이미지를 생성했고 이에 대한 score 를 봤는데요.. anomaly 이미지에서 어떤 부분이 anomaly score 에 높게 반영 되는지 알고 싶습니다.

파란색 부분?? 빨간색 부분?? 아님 다른 곳??

감사합니다..

tkwoo commented 4 years ago

Please, Take a look at this slide.. https://www.slideshare.net/TaeKangWoo/unsupervised-anomaly-detection-with-generative-model

Anomaly score is determined by reconstruction loss and discriminator loss. generally, reconstruction loss gets higher weight than discriminator loss. So, I think carefully both red and blue pixels that are different of normal distribution are likely to be reflected in the anomaly score.

edwardcho commented 4 years ago

좋은 자료 감사합니다.. 제가 MNIST 데이터에서 class 하나씩 training / test 를 해 봤는데요.. (예 : training : 손글씨 0번 이미지의 train 이미지 test : 손글씨 모든 class 의 test 이미지 (각 2개씩) )

image

손글씨 0번 1번, 6번, 7번 model 은.. test 데이터 입력 시, 각 class 의 anomaly score 가 가장 적게 나왔는데.. 다른 class 는 그러지가 않네요..

그리고. 다음과 같은 test에 넣고, anomaly score 를 체크했습니다/ image

image

이상하게도... 모든 class 에서 anomaly score 가 적게 나왔습니다. 흐미..

어떻게 판단해야 하나요?? 다음에 무엇을 해야 할런지.. 도움 부탁 드립니다.

tkwoo commented 4 years ago

오.. 굉장히 의미 있는 실험을 해보셨네요. test 에 각 클래스가 두번씩 나오는 이유는 실험을 두 번 했다는 말인가요?

질문에 답변을 드리자면,

  1. 왜 같은 클래스일때 anomaly score 가 최저값이 나오지 않는가? -> generator 의 latent 가 training class 의 distribution 전체를 학습하지 못했기 때문입니다. 7로 학습한 generator 는 이론적으로 7만 생성해야하는데 latent space 중 학습이 덜 된 공간이 존재할 수 있고 이 때 1과 비슷하게 생긴 모양을 나타낼 수도 있습니다.
  2. random image 를 넣었는데 anomaly score 값이 작게 나오는 이유 -> 위에서 서술한 것과 원리는 비슷할 것 같습니다. 0, 255 로 거의 나누어지는 MNIST 데이터가 아닌 중간에 애매한값 ( 127 등등.. ) 이 latent 에 포함되어 있다고 생각하시는게 좋을 것 같습니다. 또 이런 경우가 더 생성하기 쉽다 라는 의미도 있을 것 같아요.

AnoGAN 에서 반드시 해결해야하는 문제는 latent 의 overfitting 문제를 해결하는 것입니다. latent vector 의 크기를 줄이는 방법만으로 첫 시도를 해볼 수 있고 제가 알지 못하는 테크닉 들이 있을 것 같습니다. MNIST 가 아닌 일반 이미지를 대상으로 학습하면 입력 데이터의 분산이 MNIST 보다 훨씬 크기 때문에 현재 latent vector 사이즈가 작아 underfitting 될 수도 있습니다.

이런 관점에서 보면 MNIST 도메인에 조금 더 최적화 하기 위해서 generator 입력 벡터 (latent vector) 크기를 줄여보실 수 있겠습니다.

edwardcho commented 4 years ago

네..말씀 감사합니다.. 클래스가 두번씩 나오는 이유는.. 하나의 model 에 대해서, 각 class 에 해당하는 이미지 2개를 테스트 했다는 의미 입니다.

제가 MNIST 로 테스트 한 이유는, 제공해주신 github 의 사이트에 sample data-set 이 MNIST 이기 때문입니다. 사실 저는 gray-scale 이미지나 rgb 이미지 등을 대상으로 합니다.

위에 글에서 말씀주신 것을 읽어봤을 때.... 위 1번 글에서 제가 든 생각은, epoch 을 충분히 하거나 데이터를 더 확보해서 training 해보라... (latent space 가 크니깐..) 위 2번 글에서 제가 든 생각은, MNIST 데이터가 0, 255 로만 생성하려고 하기 때문에 더 어렵다.. random image 같은 것이 더 생성하기 쉬울 수 있기 때문에.. 실제 사용하는 이미지로 테스트해 봐야 한다...

그리고 latent vector 를 조절하여 테스트 하여야 한다. 이미지에서 information 이 많으면 latent vector 를 늘리는 방향으로 해 보고.. information 이 적으면(MNIST 같은 경우) 는 latent vector 를 줄여서 해 봐야 한다...

제가 이해한것이 맞는지요?? 응답 주셔서 너무 감사합니다.