Generative Model

 

  • Probability Density Function
    • PDF : Probability Density Function (확률 밀도 함수)
      수식 기호 : p_z
    • Sample drawn from the PDF
      수식 기호 : z ~ p_z
    • 영상을 만들어내는 PDF를 알고 있으면 영상을 생성할 수 있다.(p_data) PDF값이 큰 sample을 생성하면 됨.
      • 그러나, PDF를 구하는 것이 불가능. 그래서 나온 것이 GAN
  • GAN(Generative Adversarial Network)
    • Generator : 가짜 돈(데이터)을 만들어 속이는 역할
    • Discriminator : 가짜 돈인지 실제 돈인지 가리는 것
      • Generator가 생성한 가짜 돈을 Discriminator가 구분해내지 못했을 때 모델이 다 학습을 마쳤다고 볼 수 있다.
    • 구조
      • 노이즈 -> Generator -> 가짜 -> Discriminator -> 가짜 or 진짜
                           ↑            진짜↗          |
                            |__________________________|
                                        피드백
      • 노이즈 : Input data. 가우시안 노이즈. 이 노이즈에 따라 다른 결과값을 도출하게 된다. z_1, z_2, ..., z_n
      • Generator : 매핑 함수의 역할을 할 수 있는 Generator 생성 G(z_1), G(z_2), ..., G(z_n)
        이 Generator도 Convolution Network였다. 이 때 Fractionally-strided convolution 연산을 시행하였다.
      • 가짜 데이터 : G(z) ~ p_data
      • Discriminator : 진짜 데이터가 들어오면 높은 값, 가짜 데이터가 들어오면 낮은 값을 반환시키는 것. D(x)
        예전의 D는 그저 Convolution Network였다. 
      • Cost Function
        하나의 영상에 대한 GAN Cost function
        여러 개의 영상에 대한 GAN Cost function(2)
        여러 개의 영상에 대한 GAN Cost function에서 기댓값은 실제로 구할 순 없는 개념 상의 수식이다. 이를 사용하기 위한 방법으로는 많은 데이터를 쓰는 것이 가장 쉬운 방법이다.

        아래는 Cost function을 최적화시킨 것이다.
        바로 위에 식에서 D와 관련있는 부분은 뒷 부분 (E_z~p_z(z)[log(1-D(G(z)))]이다. 우리는 D(*)에 G(z)가 들어갔을 때 높은 값을 내길 원하기 때문에(=Generator가 만든 가짜 데이터를 진짜라고 인식하는 비율이 크길 원하기 때문에) 결국, 1-D(G(z))는 낮은 값이길 원하니 이 전체의 값을 최소화하는 G를 구하고 싶은 것이다. 
        D에서는 Grandient Descent가 아닌 Ascent. 값이 증가하는 방향으로 Gradient를 Update시켜야 한다.
        G에서는 Gradient Descent로 Gradient Update.
    • Walking in the latent(=z, G(z)에 쓰이는 z) space
      • z 자체는 노이즈일 뿐인데, 이를 의미있는 데이터로 만들어주는 매핑 함수 G( * )가 잘 만들어졌는가를 살펴보기 위해 만들어진 개념이다. z space에서 이동을 할 때 급작스러운 변화를 보이는 것이 아닌 걷는 것처럼 점진적인 변화를 보여줘야(부드러운 변화를 보여줘야) G( * )가 잘 학습됐다고 얘기할 수 있다는 것이다.
        (참고 : http://jaejunyoo.blogspot.com/2017/02/deep-convolutional-gan-dcgan-2.html)

Universal Loss로서의 GAN

 

Pix2Pix

 

  • Loss
    • Fixed Loss의 단점
      • 수많은 영상의 결과에서 얻은 Loss에 대한 평균값에 대해 학습시키는 것이기 때문에 좋지 않은 결과를 도출해내곤 했다. 
        Image colorization에선 정확하지 않은 색을, Super resolution에선 선명하지 않은 영상을 반환했다.
    • Universal Loss
      • 위의 Fixed Loss의 단점을 보완하기 위해서 사용한 것이 Universal Loss이고 실제로 성능이 굉장히 좋아진 것을 확인할 수 있다고 한다. 이 때에도 GAN이 사용이 된다.
      • L2대신 Discriminator를 사용한다. 이 Discriminator 자체를 Loss로 둔다. 이것과 위에서 살펴본 GAN과의 차이는 Input에 있다. 아까는 임의의 노이즈를 준 반면, 이 때의 Input으로는 하나의 영상을 주게 된다. 그 외 나머지는 다 같다. 이 때의 GAN을 Pix2Pix라고 한다.
  • PatchGAN : Patch 단위로 Discrminate한다. 한 Patch가 어느 정도 영역을 보고 있는지에 대해 나타나있는 것이 Receptive Field
  • Pix2Pix Loss 함수
    • 뒤에 부분인 λL_(L1)(G)는 Fixed Loss이다. 수많은 영상에 대해서 만족스러운(평균을 낸) Loss값을 도출해내야 하므로 뒤에 수식만 사용하여 Loss를 구하면 아까 단점으로 언급했던 바와 같이 fade된(뿌얘진/노이즈가 낀) 영상이 반환된다.
      그럼 앞에 부분 수식만 쓰면 되는 것 아닌가? 이 또한 아니다. 가령, 흑백 영상을 컬러 영상으로 변환한다고 하자. 이 때 앞에 수식은 Input으로 주어진 흑백 영상을 고려하지 않고 그저 컬러인 영상만을 만족하는 영상을 반환하게 된다. 즉, Input과 완전히 다른 그저 색깔만 입혀진 영상을 내는 것이다. 그래서 뒤의 L1 Loss를 주어 원래의 Input과 유사한 형태의 결과를 반환할 수 있도록 하는 것이다. 이처럼 두 수식이 서로 보완을 해주며 작동을 해야 더 좋은 성능을 나타나게 된다.
      L_c에서 c는 conditional이다.
      아까 본 GAN에서 D( * ) 함수와 G( * ) 함수에 들어가는 파라미터가 달라졌다.
  • Pix2Pix Structure
    • 가짜 데이터를 학습시킬 땐, 원영상 x와 변환하고자 하는 목표 영상 y 쌍 {x, y}가 필요하다. 이런 데이터를 많이 준비해 학습시키면 된다.

 

Conditional GAN

 

  • 앞서 살펴본 Pix2Pix도 Conditional GAN에 포함된다. Conditional GAN은 그 말마따나 GAN에 추가적인 조건(condition)을 더한 것이다.
  • Conditional + Stack GAN
    • Text를 임베딩하여 하나의 벡터로 만들어 활용하는 것이 Stack GAN으로, 이 때 나온 vector를 condition으로써 적용시킬 수 있다.
      StackGAN
      Conditional+Stack GAN

Progressive GAN

 

  • 4x4로 downsampling한 영상만 보여주며 이와 구분이 안 되는 4x4 가짜 영상을 만들게끔 한다. 이를 하나의 입력으로 넣어 이 때의 8x8 영상을 만들도록 한다. 이 과정을 반복하여 나중에 고해상도의 1024x1024 영상까지 만들어내도록 한다. 굉장히 좋은 퀄리티의 영상을 얻어낼 수 있다.
    Progressive GAN

 

CycleGAN

 

  • Pix2Pix같은 경우 쌍으로 존재할 때 학습이 가능했다. 그러나 우리는 Unpaired된 쌍도 유사한 feature가 되도록 변화하는 작업을 하고 싶은 경우가 생길 수 있다.(가령, 말을 얼룩말로 변환한다거나...) 이를 위해 만들어진 것이 CycleGAN
  • Figures from the tutorial of Alexei Efros, UC Berkeley at ICCV 2017 Tutorial on GANs
    여기선 G와 F라는 두 개의 함수를 학습시킨다. min(||F(G(x)0 - x||)값을 구하게 된다.
    x와 F(G(x))와 비슷하도록 하는 제약조건을 주면 G(x)도 비슷할 것이라는 개념을 활용하는 것이다. 당연히 G(x)로 변환한 F(G(x))가 원래의 원본과 완전히 다르면 제대로 학습이 안 됐다고 볼 수 있을 것 이다.
  • CyCADA
    • CycleGAN에 Semantically Consistent만 붙인 것이다.
      the tutorial of Judy Hoffman at ICCV 2019
      위에서 Domain Adversarial이 Discriminator다.

Domain Adaptation 

 

이해를 아직 못해서 제대로 정리 못했습니다 이 부분은 넘어가주셨으면 합니다.

 

  • GAN에서 쓰이는 adversarial loss가 Domain Adaptation에 중요한 요소 기술이 되고 있다.
  • 모아놓은 데이터에 Bias가 있을 수 있다. 이러면 Low resulution, Motion Blur, Pose Variety와 같은 문제가 생기면 제대로 인식이 되지 않을 수 있다. 그러면 그러한 케이스를 다 가진 데이터를 모으면 되지 않은가, 그것은 비용이 너무 비싼 것이 문제이다. 그래서 나온 것이 Domain Adaptation이다. 깨끗한 영상에 대해 학습을 했지만, 비교적 저품질의 input이 들어와도 제대로 인식할 수 있게끔 해준다.

Deep Domain Adaptation

the tutorial of Judy Hoffman at ICCV 2019

각 feature vector의 분포(직접 만들 순 없고 개념적인 것)에 차이가 있을 것이라고 본다. 이 분포 간 차이를 측정하기 위한 도구로 Max Mean Discrepancy가 있다.(KL divergency라는 것도 있다고 한다..!) 이 차이를 줄여야 한다.

Classification 학습
Maximize the confusion of domain classifier


Style Transfer (스타일 전이)

 

  • content 영상에 style 영상의 style을 전이하는 것이 목표이다.
  • Style 정의
    • Slide Credit : Andrew Ng
      스타일은 채널 간 activation 사이의 상관관계라고 정의한다.

 

+ Recent posts