Search

'gan'에 해당되는 글 2건

  1. 2019.10.30 2019 ICCV 논문 아이디어 정리
  2. 2019.06.25 Anomaly Detection with GAN : AnoGAN

2019 ICCV 논문 아이디어 정리

카테고리 없음 2019. 10. 30. 16:50 Posted by 우딘
본 게시물은 필자가 2019년 10월 27일부터 진행되었던 ICCV를 참관하고 난 후 인상깊었던 논문 및 아이디어를 포스팅 한 것입니다. 논문 저자가 발표한 presentation 자료에 있었던 그림을 첨부했으며 문제가 될 시 삭제하도록 하겠습니다. 

 

SinGAN: Learning a Generative Model from a Single Natural Image

(Tamar Rott Shaham, Tali Dekel, Tomer Michaeli) [1]


Award Paper중 하나였던 SinGAN의 발표는 굉장히 인상깊었습니다. SinGAN의 목표는 단일 training 이미지의 내부 통계를 알기 위해 unconditional generative model을 학습하는 것입니다. 다른 말로 요약하면 전체 이미지 샘플이 아니라 하나의 이미지 패치를 사용한다는 점에서 기존 GAN과 유사합니다. SinGAN은 multi-scale pipline을 사용하여 이미지 내의 내부 패치 분포를 학습합니다. GAN을 피라미드 형태로 쌓은 후 단일 이미지로부터 각각 다른 크기의 이미지에서 이미지 패치간의 분포를 학습하게 됩니다. 따라서 하나의 단일 이미지에 대하여 다양한 종횡비의 샘플을 뽑아서 training 할 수 있습니다.

 

 

단일 이미지로부터 다양한 이미지 샘플을 생성할 수 있으므로 다양한 task에서 좋은 성능을 냅니다.

 

1. 하나의 학습 이미지로부터 랜덤 이미지를 생성하는 task는 거의 원본과 유사한 fake 이미지를 만들어냅니다. 

 

2. 원본 이미지에 대해서 고해상도의 이미지를 생성하는 task도 우수한 성능을 보입니다. 

 

3. test를 했던 레벨 중 하나의 레벨을 선택해서 다운 샘플링된 페인트 버전을 할당하면 원본 이미지와 비슷한 텍스쳐와 레이아웃을 가진 fake 이미지를 생성합니다. 

소개한 task 외에도 다양한 task에 대한 시연이 ICCV에서 진행되었습니다. GAN에 대한 확장된 연구가 진행되면서 실제 이미지를 뛰어넘는 fake 이미지를 생성해내는것이 정말 인상깊었습니다. 이번 ICCV에서는 GAN에 대한 논문이 많이 발표되었고 앞으로도 GAN에 대한 연구가 활발히 진행될 것이라 전망합니다. 

[1] SinGAN : Learning a Generative Model from Single Natural Image

Anomaly Detection with GAN : AnoGAN

카테고리 없음 2019. 6. 25. 14:50 Posted by woojeong

이번 글에서는 Anomaly Detection에 대한 간략한 소개와 함께 GAN을 Anomaly Detection에 처음으로 적용한 논문을 리뷰하겠습니다. 논문 원제는 Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery 이며, Anomaly Detection 소개 부분은 DEEP LEARNING FOR ANOMALY DETECTION: A SURVEY 논문을 참고했음을 먼저 밝힙니다. 

 

Anomlay Detection


   Anomaly Detection는 '이상 탐지'라는 이름에서부터 알 수 있듯이 normal 하지 않은 데이터를 정상 데이터로부터 구분하는 것입니다. 그렇다면 어떤 데이터가 비정상이라는 것은 어떻게 알 수 있을까요? 사실 label이 붙어있지 않으면 이 기준이 굉장히 애매하게 됩니다. 직관적으로 생각해 보면 데이터 샘플이 모여있는 구간이 있을 것이고, 이 구간에서 많이 떨어진 샘플을 우리는 비정상 데이터, 즉 '이상치'라고 판별할 수 있습니다. 

 

   위 그래프를 보면, $N_1$ 과 $N_2$ 영역에 거의 모든 관측치들이 몰려 있기 때문에 이들은 정상 데이터로 분류됩니다. 하지만 $O_3$ 영역과, $O_1$, $O_2$의 관측치들은 대부분의 관측치들이 몰려 있는 영역과 멀리 떨어져 있습니다. 따라서 이들을 비정상 데이터로 볼 수 있습니다. 다시 말해서 정상 데이터의 분포에 속해 있지 않은 outlier들을 찾는 것이죠. 

 

Hawkins(1980)에 따르면 outlier는 다음과 같이 정의됩니다.

Observation that deviates so significantly from other observations as to arouse suspicion that it was generated by a different mechanism.

   대부분의 데이터와 너무 달라서, 아예 다른 data generative process를 통해 만들어졌을 것 같은 샘플들을 말합니다. 따라서 비정상 데이터는 데이터의 오류로부터 발생할수도 있지만, 이전에 알려지지 않은 새로운 생성 매커니즘에서부터 비롯된 것일수도 있습니다. 아래 그림은 각각 교통 데이터, 사물인터넷 센서 데이터에서의 비정상 데이터 예시를 보여줍니다. 빨간색으로 표시된 부분이 비정상 데이터입니다. 

Anomaly Detection의 예시

 

novelty와 anomaly의 구분

   위의 그림에서 호랑이 사진을 정상 데이터, 다른 동물 사진을 비정상 데이터로 분류한다고 할 때, 백호랑이 사진은 어디에 들어가야 할까요? 백호랑이 사진은 호랑이의 범주에는 포함되지만, 다른 일반적인 호랑이 사진보다 anomaly의 경계에 가까운 곳에 위치하고 있을 것입니다. 이런 백호랑이 사진과 같은 관측치를 novelty라고 합니다. 이전 데이터에서 보지 못한 새로운 패턴이지만 anomaly와 달리 정상 데이터 생성 process로부터 생성되었다는 차이점이 있습니다. 

Different aspects of deep learning-based anomaly detection


   Anomaly Detection을 수행하는 방법에는 여러 가지가 있습니다. 정상 데이터의 분포를 정의하는 통계적인 방식도 있고, KNN과 같은 전통적인 머신러닝 알고리즘을 이용하는 방식도 있죠. 하지만 최근에는 딥러닝을 이용한 Anomaly Detection이 좋은 성능을 보이고 있습니다. 딥러닝 기반의 Anomaly Detection을 몇 가지 측면에서 분류해 보도록 하겠습니다. 

Nature of Input Data

  • Sequential (eg, voice, text, music, time series, protein sequences)
  • Non-sequential data (eg, images, other data)

Availability of labels

  • Supervised
    • Training a deep supervised binary or multi-class classifier, using labels of both normal and anomalous data instances
    • lack of availability of labeled training samples
  • Semi-supervised
    • Leverage existing labels of single (normally positive class) to separate outliers
    • ex) deep autoencoders - train them on data samples with no anomalies. normal class samples would produce low reconstruction errors, abnormal class would produce high reconstruction error
  • Unsupervised
    • Solely based on intrinsic properties of the data instances
    • PCA, SVM, Isolation Forest
    • Autoencoder, RBM, DBN, RNN, LSTM

Training objective

  • Deep Hybrid Models (DHM)
    • Use deep neural networks mainly autoencoders as feature extractors
    • Features are input to traditional anomaly detection algorithms (ex, such as one-class SVM)
    • Lack of trainable objective customized for anomaly detection
  • One-Class Neural Networks (OC-NN)
    • data representation in the hidden layer is driven by the OC-NN objective
    • customized for anomaly detection

     

Deep Hybrid Model Architecture

AnoGAN


   이 논문에서 수행하고자 하는 task는 망막의 이미지 샘플을 보고 이 사진이 질병이 있는 사람의 것인지를 판별하고 어떤 부분이 비정상인지를 찾아내는 것입니다. 이를 위해서 GAN을 이용한 비지도학습을 수행합니다. 아래 그림이 전체 아이디어를 잘 보여주는데요, 정상 데이터로만 GAN을 학습해서 정상 데이터를 잘 생성할 수 있는 모델을 만든 다음, 비정상 데이터를 이 모델의 입력으로 넣어서 원래 이미지와 얼마나 비슷하게 복원할 수 있는지를 봅니다. 

Overall Architecture of AnoGAN


   모델 구조와 핵심 아이디어에 대해 더 자세히 보도록 하겠습니다. 먼저 모델 Training 과정에서는 앞서 말씀드렸다시피 정상 데이터만 사용하여 GAN을 학습합니다. 이때 GAN의 구조는 DCGAN을 차용했다고 합니다. 관측치의 label이 주어지지 않았기 때문에 논문에서는 이를 unsupervised learning이라고 정의하고 있습니다. 하지만 Training 과정에 사용되는 이미지들이 정상이라는 점은 알고 있기 때문에 엄밀히 보면 semi-supervised 방식이 아닐까 합니다. Training data $\left \langle l_m \right \rangle$는 다음과 같이 정의합니다.

  • $I_m$ :  $a \times b$ 크기의 정상 망막 이미지 $(m = 1,2, ... , M)$ 
  • $x_{k,m}$ :  $I_m$ 에서 랜덤으로 추출된 $c \times c$ 크기의 2D 이미지 패치

   정상 데이터로 Generator를 학습시킨다는 것은 $x = G(z)$의 매핑을 학습시키는 것입니다. $z$는 잠재 공간 $\mathcal{Z}$로부터 샘플링된 input noise의 1차원 벡터이고, $x$는 manifold $\mathcal{X}$를 따라 분포하는 2차원 이미지입니다.  

   정상 이미지들이 이런 manifold를 이루고 있다고 하면 manifold위의 점들은 각각 다른 정상 이미지 패치를 나타냅니다. 하지만 비정상 이미지는 이 manifold 바깥에 위치하게 되겠죠. 여기서 제일 중요한 점은 정상데이터로 학습시킨 GAN의 Generator가 $z$에서 $x$로의 매핑을 나타낸다는 것입니다. 

 

   Testing 과정에서는 비정상 데이터와 정상 데이터를 둘 다 사용하고 label 또한 주어져 있습니다. Testing data $\left \langle y_n, l_n \right \rangle$는 다음과 같이 정의합니다.

  • $y_n$ : 새로운 testing data $J$에서 추출된 $c \times c$ 크기의 이미지
  • $l_n \in \{0,1\}$ : 각 이미지에 대한 binary ground-truth label

 

   (a) 그림은 모델의 전체 모델 구조를 나타냅니다. 학습 과정은 GAN과 동일합니다. random noise $z$를 샘플링해서 Generator의 인풋으로 주어서 $G(z)$를 만들어 냅니다. 그리고 이를 실제 이미지와 구분할 수 있는 Discriminator $D$ 의 인풋으로 넣어서 이로부터 나오는 loss를 역전파하여 Generator와 Discriminator를 업데이트합니다. 

   Testing 과정에서는 비정상 데이터와 정상 데이터를 둘 다 사용하는데 이 때 (b) 그림이 Discriminator의 가장 마지막 convolution layer를 t-SNE 알고리즘으로 시각화한 것입니다. 파란색 정상 이미지와 빨간색 비정상 이미지가 확연히 구분되어 있는 것을 볼 수 있습니다. 

 

Mapping new Images to the Latent Space


   Training을 마치면 모델은 $z$로부터 $x$로 가는 매핑 $G(z)$를 학습한 상태입니다. 하지만 이 반대의 경우 $x$에서 $z$로 가는 매핑은 알지 못하는 상태입니다. 새로운 비정상 이미지가 인풋으로 주어질 때를 고려하면 우리는 이 inverse mapping이 필요합니다. 

   DCGAN에서 noise $z$의 값을 조금씩 조정해 가면서 이미지를 생성하면, 이미지가 서서히 바뀌었던 것을 기억하시나요?

Walking in the latent space

DCGAN 논문에서는 'Walking in the latent space'라를 표현을 사용했습니다. 따라서 잠재 공간 상에서 가까이 있는 두 $z$를 뽑으면 굉장히 비슷한 두 이미지를 생성하게 됩니다. 그렇다면 쿼리 이미지 $x$가 주어졌을 때, 매핑되는 $z$를 얻기 위해서는 generator가 최대한 $x$와 비슷한 이미지를 만들도록 $z$를 움직이면 되지 않을까요? 최적의 $z$를 찾기 위한 과정은 다음과 같습니다. 이는 모두 Testing 과정에서 이루어지며, Training 과정에서 학습된 Discriminator와 Generator의 파라미터는 모두 고정된 상태입니다.

Finding the best $z$

  1. $z_1$을 랜덤하게 샘플링합니다.
  2. 이를 학습된 Generator에 인풋으로 넣습니다.
  3. 생성된 이미지 $G(z_1)$를 보고 $z_1$의 coefficient를 업데이트합니다.
  4. 1-3을  $\Gamma$번 반복해서 $x$와 가장 비슷한 이미지 $G(z_\Gamma)$를 찾습니다. 그러면 잠재 공간 $\mathcal{Z}$ 상에서 $z$의 최적의 위치를 찾을 수 있습니다. 

이 때, 노이즈 자체를 업데이트하는 것이 아니라 $z$의 coefficient를 업데이트하는 것을 주의하세요.

 

Loss function to find best $z$


   $z$의 coefficient를 업데이트하려면 기준이 될 loss function을 정의해야겠죠. loss function은 residual loss와 discrimination loss 두 부분으로 나누어집니다.

 

  • Residual loss

$$\mathcal{L}_R(z_\gamma) = \sum \left | x-G(z_\gamma) \right |$$

   생성된 이미지 $G(z)$와 쿼리 이미지 $x$가 얼마나 일치하는지를 나타냅니다. 만약 완벽한 generator $G$를 학습해서 완벽한 매핑 $z \mapsto z$를 얻었다면 $x$와 $G(z)$는 완벽히 일치할 것이고 residual loss는 0이 될 것입니다.

 

  • Discrimination loss

$$\mathcal{L}_D(z_\gamma) = \sum \left | f(x)-f(G(z_\gamma)) \right |$$

   생성된 이미지가 학습된 manifold $\mathcal{x}$ 위에 있도록 강제합니다. adversarial training에서 실제 이미지의 discriminator loss와 같은 역할을 합니다. 하지만 논문에서는 discriminator의 출력 스칼라 값을 사용하는 대신 discriminator의 중간 layer $f(\cdot)$의 출력으로 나오는 intermediate feature representation을 사용했습니다. 이를 통해 더 풍부한 의미를 가지는 표현을 만들 수 있었다고 합니다.

 

Residual loss와 Discriminator를 합친 최종 loss는 다음과 같습니다. 

$$ \mathcal{L}(z_\gamma) = (1-\lambda)\cdot\mathcal{L}_R(z_\gamma) + \lambda\cdot\mathcal{L}_D(z_\gamma)$$

새로운 샘플 $x$가 anomaly인지 아닌지 판별하려면 이 loss값을 그대로 anomaly score로 사용하면 됩니다.  그리고 이미지의 어떤 부분이 비정상인지를 판별하기 위해서는 Residual score $x_R = \left | x-G(z_\Gamma) \right |$를 사용합니다. 이를 통해 원래 이미지 $x$와 생성된 이미지 $G(z_\Gamma)$가 다른 부분을 감지할 수 있습니다.

 

Experiments


실험 결과를 볼까요? 첫 번째 행은 실제 입력 이미지입니다. 두번째 행은 논문에서 제시한 방법으로 새로 생성한 이미지를 나타냅니다. 실제로 왼쪽 두 블록은 정상 이미지인데 원래 이미지와 새로 생성된 이미지가 매우 유사한 것을 볼 수 있습니다. 반면 가장 오른쪽 블록의 비정상 이미지의 경우 학습된 generator가 원래 이미지를 제대로 복원하지 못합니다. 생성된 이미지와 원래 이미지를 픽셀끼리 비교하면 어떤 부분이 비정상인지를 알려주는 marker를 얻을 수 있게 됩니다.