-43일차- 생성모델 판별모델
23년 이전 글/모두의연구소 아이펠

-43일차- 생성모델 판별모델

GAN

GAN의 목적함수

z는 임의 노이즈, D와 G는 Descriminator, Generator

D 모델에서 실제 이미지가 1, 가짜 이미지가 0이면 D는 이 식을 최대화하는게 목표로,

양쪽항에 있는 logD(x)와 log(1-D((G(z)))) 가 모두 1이 되는게 목표

G 모델은 반대로 위 식을 최소화 해야하고, log(1-D(G(z)))만 최소화하면 됨

즉, log 내부가 0이 되도록하며 D(G(z))가 1이 되도록 만듦

 

cGAN 목적 함수

위에 식과 대체로 동일하며, y라는 조건이 추가됨

MNIST를 학습시키는 경우 y는 0~9까지의 label 정보와 같음, y는 임의 노이즈 입력인 z의 가이드의 일종

 

GAN Feed forward

Generator

노이즈 z(파란색)가 입력되고 특정 representation(검정)으로 변환된 후 가짜데이터 G(z) (빨강)를 생성해냄

Deiscriminator

실제 데이터 x와 Generator가 생성한 가짜 데이터 G(z)를 각각 입력받아 D(x) 및 D(G(z))(보라)를 계산하여 식별

 

cGAN feed forward

Generator 

노이즈 z(파랑)와 추가 정보 y(녹색)를 함께 입력받아 Generator 내부에서 결합되어 representation(검정)으로 변환되며 가짜 데이터 (G(z|y)를 생성. MNIST나 CIFAR-10 등의 데이터셋에 학습하는 경우 y는 레이블 정보이며 일반적으로 one-hot 벡터를 입력으로 넣음

Discriminator

실제 데이터 x와 Generator가 생성한 가짜 데이터 G(z | y)를 각각 입력 받으며, 마찬가지로 y정보가 각각 함께 입력되어 진짜와 가짜를 식별함

MNIST나 CIFAR-10등의 데이터셋을 학습하는 경우 실제 데이터 x와 y는 알맞은 한 쌍을 이뤄야 하며, 마찬가지로 Generator에 입력된 y와 Discriminator에 입력되는 y는 동일한 레이블을 나타내야함

 

cGAN Discriminator 구성하기

cGAN의 Discriminator는 Maxout이라는 특별한 레이어가 사용되는데, 이는 두 레이어 사이를 연결할 때 여러개의 fully-connected 레이어를 통과시켜 그 중 가장 큰 값을 가져오도록 함

2개의 fully-connected 레이어를 사용할 때 Maxout을 식으로 표현하면

fully-connected 레이러를 2개만 사용하면 다차원 공간에서 2개의 면이 교차된 모양의 activation function처럼 작동

사용하는 fully-connected 레이어 갯수가 늘어나면 점점 곡선 형태 activation이 가능

maxout 참고자료

 

Pix2Pix

cGAN에서는 작은 조건으로 원하는 클래스의 이미지를 생성할 수 있었는데, 이러한 입력자체가 조건이 된다면?

Pix2Pix는 이미지를 입력으로 하여 원하는 다른 형태의 이미지로 변환시킬 수 있는 GAN 모델

 

한 이미지의 픽셀에서 다른 이미지의 픽셀로 변환한다는 뜻에서 Pix2Pix라는 이름으로 불리며 GAN 기반의 Image-toImage 작업에서 가장 기초가 되는 연구

Pix2Pix2는 이미지에 효율적인 convolution 레이어를 활용

Encoder에서 이미지(x)를 입력 받으면 단계적으로 down-sampling 하면서 중요한 representation을 학습하며

Decoder에서는 이를 반대로 다시 이미지를 up-sampling해서 동일한 크기의 변환된 이미지(y)를 생성해냄

모두 conv 레이어로 진행하며 여기서 Encoder의 최종 출력은 bottleneck이라고 불리는 이 부분이 x의 가장 중요한 특징을 담고 있음

bottleneck이 이미지를 생성하는데 충분한 정보를 제공하도록 Generator 구조를 하나 더 제안함

레이어마다 Encoder, Decoder가 연결(skip connection)되어 있으며, Decoder가 변환된 이미지를 더 잘 생성하도록 Encoder로부터 추가정보를 이용하는 방법이며, U-Net구조의 Generator를 사용하면 더 좋은 결과를 얻을 수 있음

 

 

U-Net 논문 리뷰 — U-Net: Convolutional Networks for Biomedical Image Segmentation

딥러닝 기반 OCR 스터디 — U-Net 논문 리뷰

medium.com

Generator만으로 이미지 변환이 가능하지 않을까?

출력된 이미지와 실제 이미지의 차이로 손실 계산 후 역전파하여 네트워크를 학습시키면 가능하긴 함

그러나 품질의 차이가 커짐

L1이라 쓰인 Generator만으로 생성된 결과는 흐릿함. 이는 Generator가 단순히 이미지의 평균 손실만을 줄이고자 파라미터를 학습하기 때문

반면 cGAN은 훨씬 세밀한 정보를 잘 표현함. Discriminator를 잘 속이려면 진짜 같은 이미지를 만들어야 하기 때문

논문에서는 L1손실과 GAN손실을 같이 사용하면 더 좋은 결과를 얻을 수 있음

 

Pix2Pix (Discriminator)

DCGAN 예시

DCGAN의 Discriminator는 이미지를 입력받아 conv 레이어로 크기를 줄여나가며, 이미지에 대해 확률값을 출력

Pix2Pix

이미지를 입력받아 conv 레이어를 거쳐 여러 개의 예측값을 내놓음

전체 영역이 아닌 일부 영역에 대해서만 참 거짓을 판별하는 확률값 도출

이후 다른 확률 값들을 평균하여 최종 Discriminator 출력을 생성, 일부 영역(patch)을 활용한다고 해여 PatchGan으로도 불림

일반적으로 이미지에서 거리가 먼 두 픽셀은 연관이 없기 때문에 일부 영역에서 세부적으로 판별하는 것이 Generator에게 진짜같은 이미지를 만들게 할 수 있음

많은 patch를 사용할 수록 결과가 좋아지는 모습

 

Generator 구성

pix2pix

encoder의 C64는 어떠한 하이퍼 파라미터를 가진 레이어의 조합인가?

64개의 4x4 필터에 stride 2를 적용한 Convolution -> 0.2 slope의 leakyReLU (BatchNorm 사용 x)

decoder의 CD512는 어떠한 하이퍼파라미터를 가진 레이어의 조합인가?

512개의 4x4 필터에 stride 2를 적용한 Convolution -> BatchNorm -> 50% Dropout -> ReLU

https://neurohive.io/en/popular-networks/pix2pix-image-to-image-translation/

각 블록을 지나면서 입출력의 크기가 달라지며 최종적으로 1이 되고 채널의 수는 512까지 늘어남

 

Pix2Pix의 Generator

skip connection으로 연결한 U-Net구조가 훨씬 더 실제 이미지에 가까운 품질을 보임

 

Discriminator

pix2pix

최종 출력이 sigmoid인점이 특별한 점

https://neurohive.io/en/popular-networks/pix2pix-image-to-image-translation/

2개 입력을 받아 CONCAT 후 Encode 블록 5개를 통과하며 이후 4개 블록은 C64-C128-C256-C512 마지막은 1채널차원 출력을 위한 블록

최종 출력은 30으로 출력크기가 1씩 감소하는 것이 특징

출력크기를 30으로 맞추는 이유는 70x70PatchGan을 사용할 때 각 픽셀의 receptive field 크기를 (70,70)으로 맞추기 위함

 

 

Understanding PatchGAN

Hi Guys! In this blog, I am going to share my understanding of PatchGAN (only), how are they different from normal CNN Networks, and how…

sahiltinky94.medium.com

 

반응형