GAN으로 도트찍기 (2)

이전 글 : http://wonjaekim.com/archives/181

이번 글에서는 658번째 이터레이션에서 훈련이 끝난 InfoGAN Generator를 가지고 2개의 continuous feature(code)와 1개의 discrete feature(code)에 대해서 탐색을 해보겠다.

우선 연속적 피쳐의 영향을 알아보기 위해서 discrete feature를 고정한 채 2차원으로 두개의 feature를 도시하였다.

np.linspace로 각각 -100부터 100까지 16개의 값을 생성하였다. 즉 왼쪽 위가 (-100, -100), 오른쪽 아래가 (100, 100)이다. 훈련 데이터로 사용한 도트들은 얼굴과 머리카락 외에도 다양한 악세서리들을 착용하고 있는데, 이러한 산발적 특징들과 광원을 뭉뚱그려서 학습한 걸로 보인다.

(산발적 특징을 가진 도트들)

다음으로 이산적 피쳐의 영향을 알아보기 위해서 연속적 피처를 (0, 0)으로 고정한 채 64개의 이미지를 생성하였다.

오버피팅으로 인해 다른 것들도 꽤 있지만 대부분 훈련 데이터에 있는 어떤 도트와 거의 일치한다. 이산적 피처는 가장 많이 떨어져있는 64개의 캐릭터 스타일을 학습하였음을 알 수 있다. 노이즈가 많이 있는 생성 이미지들은 위의 연속적 피처의 조정을 통해 노이즈를 통제할 수 있다.

InfoGAN의 discrete feature들은 one-hot vector의 형태로 Generator에 던져지게 된다. 그렇다면 당연히 각각의 vector를 합쳐서 two-hot 또는 n-hot vector의 형태로 만들어 각 스타일을 인터폴레이트 할 수 있다. 위의 이미지는 각자의 one-hot vector와 자신의 오른쪽에 있는 다음 스타일의 one-hot vector를 합쳐서 만든 two-hot vector를 통해 생성된 이미지이다.

(연속된 3개의 코드를 합친 이미지)

(랜덤한 10개의 코드를 합친 이미지)

 

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.