GAN 27

13. CycleGAN - 이론

CycleGAN의 구조는 매우 복잡하다. 이를 위해 판별자 두 개와 생성자 두 개가 필요하다. 이미지 대 이미지 변환. 이런 종류의 변환을 구현하려면 생성자의 입력이 사진이어야 한다. 생성자(변환기)가 이미지에서부터 시작하기 때문이다. 다른 말로 하면 한 도메인의 이미지를 다른 도메인의 이미지로 매핑한다. 이전에 생성자에게 주입한 잠재 벡터는 해석이 불가능했다. 이제 이 벡터를 입력 이미지로 대체한다. 이러한 아이디어는 강력하고 용도가 다양하지만 데이터 쌍이 필요하다는 것이 문제이다. CycleGAN의 뛰어난 점은 완벽한 쌍이 필요하지 않다는 것이다. 대신 사이클을 구성한다. 한 도메인에서 다른 도메인으로 변환하고 다시 반대로 변환한다. 예를 들어 공원의 여름 사진(도메인 A)에서 겨울 사진(도메인 B)..

GAN/이론 2021.07.02

12. CGAN - 구현

이 튜토리얼에서 선택한 손글씨 숫자를 생성하는 CGAN 모델을 구현하겠다. 마지막에는 각 숫자에 대한 이미지 샘플을 생성해 모델이 얼마나 목표 데이터를 잘 만드는지 확인해보겠다. %matplotlib inline import matplotlib.pyplot as plt import numpy as np from tensorflow.keras.datasets import mnist from tensorflow.keras.layers import (Activation,BatchNormalization,Concatenate,Dense, Embedding,Flatten,Input,Multiply,Reshape) from tensorflow.keras.layers import LeakyReLU from tenso..

GAN/이론 2021.06.30

11. CGAN - 이론

CGAN(conditional generative adversarial network)는 생성자와 판별자를 훈련하는 데 모두 레이블을 사용한다. 이 방법 덕분에 CGAN의 생성자는 원하는 가짜 샘플을 합성할 수 있다. 앞에서 ProGAN이 생성한 이미지가 인상적이지만 어떤 얼굴을 생성할지 제어할 수 없다. CGAN은 생성자와 판별자가 훈련하는 동안 추가 정보를 사용해 조건이 붙는 생성적 적대 신경망이다. 이론적으로 이 부가 정보는 어떤 것이든 가능하다. 예를 들어 클래스 레이블, 일련의 태그 또는 글로 쓰인 설명도 가능하다. CGAN을 훈련하는 동안 생성자는 훈련 데이터셋에 있는 각 레이블에 대해 실제 같은 샘플을 생성하는 법을 배운다. 판별자는 '진짜 샘플-레이블' 쌍과 '가짜 샘플-레이블' 쌍을 구별..

GAN/이론 2021.06.30

10. SGAN - 구현

이 튜토리얼에서는 MNIST 데이터셋에서 100개의 훈련 샘플만 사용해 손글씨 숫자를 분류하는 SGAN 모델을 만들어보겠다. 다음 그림은 이 튜토리얼에서 구현할 SGAN 모델을 고수준에서 그린 것이다. 이 그림은 이장의 서두에서 소개한 일반적인 개념도보다 조금 더 복잡하다. 진짜 레이블을 분류하는 다중 분류 문제를 풀기 위해 판별자는 소프트맥스 함수를 사용한다. 이 함수는 지정된 클래스 개수(여기에서는 10개) 만큼 확률 분포를 반환한다. 어떤 레이블에 할당된 확률이 높을수록 판별자가 샘플이 해당 클래스에 속한다고 크게 확신한다. 분류 오차를 계산하려면 출력 확률과 원-핫 인코딩된 타깃 레이블 사이의 교차 엔트로피 손실(cross-entropy-loss)을 사용한다. 진짜 대 가짜 확률을 출력하기 위해 ..

GAN/이론 2021.06.28

9. SGAN - 이론

준지도 학습(semi-supervised learning)은 GAN을 실용적으로 적용할 수 있는 무척 기대되는 분야 중 하나이다. 데이터셋에 있는 모든 샘플에 레이블이 필요한 지도 학습이나 레이블을 사용하지 않는 비지도 학습과 달리, 준지도 학습은 훈련 데이터셋의 일부에만 클래스 레이블을 가지고 있다. 준지도 학습은 데이터에 감춰진 내부 구조를 사용해 일부 레이블된 데이터 포인트를 일반화하고, 효율적인 방식으로 이전에 본 적 없는 새로운 샘플을 분류한다. 준지도 학습이 작동하려면 레이블된 데이터와 레이블이 없는 데이터가 동일한 분포에서 수집되어야 한다는 점이 중요하다. 생성 모델을 사용하여 훈련에 사용할 수 있는 추가 정보를 제공하면 준지도 학습 모델의 정확도 향상에 도움이 된다. 당연히 GAN이 가장 ..

GAN/이론 2021.06.28

8. 텐서플로 허브를 사용한 실습

다음 코드는 latent_vector에 지정한 랜덤 시드를 기반으로 얼굴을 생성하는 완전한 예제이다. import matplotlib.pyplot as plt import tensorflow as tf import tensorflow_hub as hub module=hub.KerasLayer('https://tfhub.dev/google/progan-128/1') latent_dim=512 # 생성할 샘플의 잠재공간 차원 latent_vector=tf.random.normal([1,latent_dim],seed=13) #시드를 바꾸면 다른 얼굴을 생성한다. interpolated_images=module(latent_vector) # 모듈을 사용해 잠재 공간에서 이미지를 생성 plt.imshow(inte..

GAN/이론 2021.06.27

7. ProGAN - 주요한 혁신들(2)

다음 혁신은 미니배치 표준편차(mini-batch standard deviation)이다. 이를 자세히 알아보기 전에 모드 붕괴를 생각해보자. 모드 붕괴는 GAN이 몇 개의 좋은 샘플만 만드는 방법이나 이들의 순서를 조금 바꾸기만 할 때 발생한다. 일반적으로 한 사람의 얼굴이 아니라 실제 데이터셋에 있는 모든 사람의 얼굴을 생성하기 원한다. 따라서 캐라스와 연구진은 판별자에게 샘플이 충분히 다양한지 알려주는 방법을 만들었다. 간단하게 요약하면 판별자를 위해 한 개의 스칼라 통계 값을 추가로 계산한다. 이 통게값은 생성자가 만들거나 실제 데이터에서 온 미니배치에 있는 모든 픽셀의 표준편차이다. 판별자는 평가할 배치 이미지에서 표준편차가 낮다면 이 이미지는 가짜라고 학습한다. 진짜 데이터는 분산이 크기 때문..

GAN/이론 2021.06.27

6. ProGAN - 주요한 혁신들(1)

ProGAN은 풀 HD화질로 실제 사진같은 이미지를 생성하는 최신 기법이다. 여기에 포함된 네 가지 혁신은 다음과 같다. 2장에서 출력을 위한 초깃값을 만드는 저해상도 공간을 잠재공간이라고 불렀다. 4장의 DCGAN과 ProGAN도 초기 훈련된 잠재 공간은 의미 있는 속성을 가진다. 예를 들어 얼굴 이미지에 안경을 씌우는 벡터를 찾을 수 있다면 동일한 벡터로 새로운 이미지에도 안경을 씌울수 있다는 뜻이다. 이를 보간(interpolation)이라고 한다. 다음 그림에 이 과정이 나타나있다. 특정한 지역에 가까워질 때 그 지역만 확대해서 볼 수 있다면 어떨까? 복잡도를 늘릴 수 있을 것이다. 거칠고 픽셀이 두드러진 이미지가 아니라 디테일이 상세한 이미지를 본다. 예를 들어 계곡으로 더 빨리 내려가기 위해 ..

GAN/이론 2021.06.27

8. 훈련 노하우

거의 모든 머신러닝 자료를 보면 이미지를 -1과 1 사이로 정규화하는 것이 좋다. 다른 머신러닝 분야처럼 정규화를 하면 일반적으로 계산이 용이하다. 입력을 제한한 것처럼 생성자의 출력도 tanh 활성화 함수 등으로 제한을 두는 것이 좋다. 초기에 배치 정규화는 매우 좋은 기법이라고 널리 여겨졌다. 하지만 최근에는 이따금 나쁜 결과를 만든다. 특히 생성자에서 그렇다. 반면 판별자에서는 일반적으로 긍정적인 결과를 만든다. 그레이디언트 노름이 너무 크면 무엇인가 잘못된다. 요즘에는 BigGAN 같은 모델이 이 분야에서 혁신을 만들고 있다. 하지만 기술적인 이슈가 여전히 있다. 단순한 가중치 클리핑은 다른 딥러닝 분야처럼 그레이디언트 소멸과 폭주를 만들 수 있다. 다른 말로 하면, 입력을 조금 바꾼다면 가중치를..

GAN/이론 2021.06.26