1. Cycle GAN Model - Generator
1) 2개의 GAN(G&F)
- Generator G : X-> Y mapping(Foward transformation)
- Generator F : Y-> X mapping(Backward transformation)
pix2pix generator
UNet : encoder-decoder 구조로 고수준의 특징 추출을 수행한다.
(생성된 이미지의 해상도가 낮음)
Cycle GAN generator
비슷한 성격을 지닌 두 도메인 간의 이미지 변환을 수행
Unet의 많은 skip connection -> 모델이 과도하게 단순화, 생성된 이미지의 세부 정보(detail) 부족하게 됨
결론적으로, ResNet & residual block을 사용
2. Cycle GAN Model - Discriminator
2개의 Discriminator(Dx & Dy)
-Discriminator Dy : 실제 도메인 Y의 이미지 샘플 y와 G가 생성한 y_hat=G(x)를 구분
-Discriminator Dx : 실제 도메인 X의 이미지 샘플 x와 F가 생성한 x_hat=F(y)를 구
Discriminator는 pix-to-pix와 똑같은 pathGAN의 구조를 같는다.
이미지 전체를 한번에 판단하는 것보다, 세부 영역들에 대해 구분한 값을 반환함을 목표로 하며,
NxN patch크기로 patch가 real/fake를 판단한다. -> 모든 이미지 패치들에 대한 convolution을 통해서 output을 얻음
pathGAN :
만약 generator에서 생성된 이미지가 PatchGAN에 들어가면, 0으로 가득찬 matrix를 반환하도록 학습 것
반대로 real images에 대해서, PatchGAN은 1로 가득찬 matrix를 반환하도록 학습할 것
3. 데이터셋
참고 : https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/blob/master/CycleGAN.ipynb
(1) https://www.kaggle.com/datasets/balraj98/horse2zebra-dataset - horse2zebra dataset
(2) https://www.kaggle.com/datasets/balraj98/apple2orange-dataset - apple2orange dataset
4. 구현
5. Replay Buffer
GAN 트레이닝을 진행하며 똑같은 샘플별 성능이 트레이닝을 돌릴 때마다 성능이 달라지는 경우가 발생
왼쪽 그래프에서는 Discriminator가 파란색 샘플에 대해 대체로 진짜라고 판단하고 있지만, 똑같은 아키텍처를 가지고 랜덤시드만 다르게한 오른쪽 그래프는 파란색 샘플에 대해 대체적으로 가짜라고 판단 -> Replay Buffer 사용
Replay Buffer
: 이전에 Generator가 생성했던 이미지 히스토리를 일정 개수만큼 저장한 후 그걸 다시 Discriminator에게 보여줌으로써 전에 봤던 것을 어떻게 반영했는지 알게 해주는 역할을 하게 됨
6. 이미지 생성 결과
'Deep Learning' 카테고리의 다른 글
VAE(Variational Auto-Encoder) (0) | 2024.11.03 |
---|---|
Conditional GAN (0) | 2024.10.11 |
GAN (Generative Adversarial Network) (1) | 2024.03.24 |
U-Net : Image segmentation | U-Net 구조 이해하기 (0) | 2024.02.04 |
[Deep learning] Image Segmentation (0) | 2024.02.04 |