TIL 2023-03-15

곽태욱·2023년 3월 15일
0

StyleGAN2

https://youtu.be/5UlTdngEdas

GAN

GAN은 Generator와 Discriminator로 이루어진다. Discriminator는 실제 이미지는 1로 분류하고 Generator가 만든 가짜 이미지는 0으로 분류한다. 만약 Discriminator가 이미지를 잘못 분류하면 Discriminator에게 페널티를 주고 이미지를 잘 분류하면 Generator에게 페널티를 주는 방식으로 loss 함수를 설계한다. 이를 통해 Generator는 주어진 문장에 따른 자연스러운 이미지가 무엇인지를 학습할 수 있는데, 세부적으론 자연스러운 이미지에 대한 분포(평균, 표준편차)를 학습하는 것이다.

PGGAN

GAN은 고해상도 이미지를 학습하는데 적합한 모델이 아니다. Generator가 생성하는 해상도가 고정되어 있기 때문이다(?). 그래서 PGGAN은 출력 이미지의 해상도를 높일 수 있도록, 학습할 때 이미지 해상도를 점점 늘려나가는 방식을 사용한다. 처음엔 4x4 이미지를 생성하는 계층으로 Generator와 Discriminator를 학습시키고, 다음엔 8x8 이미지를 생성하는 계층을 4x4 이미지를 생성하는 계층에 이어 붙여서 학습시킨다. 이렇게 PGGAN은 이미지를 생성하는 계층의 해상도를 2배씩 늘려준 후 이전 이미지 생성 계층에 이어붙여가며 학습을 진행하기 때문에 출력 이미지의 해상도에 구애받지 않을 수 있다.

하지만 PGGAN을 사용하면 출력 이미지의 특징을 세세하게 조정할 수 없다는 단점이 있다. 프롬프트나 문장을 사용해 출력 이미지의 특징을 제어할 수 없다는 것이다.

StyleGAN

PGGAN의 단점을 해결하기 위해 StyleGAN이 등장했다. PGGAN에선 latent 입력(z)이 계층마다 해상도가 2배씩 증가하는 여러 개의 이미지 생성 계층을 통과하며 이미지를 생성했다면, StyleGAN에선 latent 입력(z)이 Fully-connected 계층으로 구성된 Mapping Network를 통과해 생성된 style vector(w)가 계층마다 해상도가 2배씩 증가하는 여러 개의 이미지 생성 계층 층층마다 입력으로 들어간다. style vector(w)가 층층마다 들어가는 과정에서 affine 변환을 거쳐 AdaIN 구조를 통해 합쳐진다. 또한 여러 개의 이미지 생성 계층 층층마다 노이즈를 넣어줘서 출력으로 다양한 느낌의 가상 이미지가 생성되게 한다. StyleGAN은 특징 분포를 linear하고 덜 entangled하게 변환할 수 있어 여러 스타일 사이의 자연스러운 interpolation 변환이 가능하며 출력 이미지에 원하는 특징이 나오도록 유도할 수 있다.

각 계층의 첫 노이즈 입력은 전체적인 이미지 특징의 다양함을 결정하고, 마지막 노이즈 입력은 세부적인 이미지 특징의 다양성을 결정한다.

AdaIN 구조는 기존 style transformer에서 사용된 구조인데, 특정 특징의 분포만 알고 있다면 해당 특징을 출력 이미지에 적용할 수 있는 구조이다. 어떤 이미지 특징의 통계(평균, 표준편차) 데이터를 기존과 섞어주면 해당 특징을 가지는 이미지가 나온다고 한다.

profile
이유와 방법을 알려주는 메모장 겸 블로그. 블로그 내용에 대한 토의나 질문은 언제나 환영합니다.

0개의 댓글