본문 바로가기
딥러닝 with Python

[딥러닝 with Python] Pix2Pix란?

by CodeCrafter 2025. 2. 27.
반응형


[이번 포스팅은 " Isola, P., Zhu, J. Y., Zhou, T., & Efros, A. A. (2017). Image-to-image translation with conditional adversarial networks. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 1125-1134). " 을 참고했습니다]

 

이번에 알아볼 내용은 이미지에서 다른 이미지 스타일로 변환을 시키는 모델인 Pix2Pix에 대해서 알아보겠습니다.

 

1. Pix2Pix란?

-Pix2Pix 는 이미지-이미지 변환(Image to Image Translation) 문제를 해결하기 위해 사용되는 조건부 생성적 적대 신경망(Conditional GAN, cGAN)모델을 말합니다. 

 

- 기본적으로 입력 이미지와 원하는 출력 이미지간의 매핑을 학습하며, 다양한 응용이 가능합니다. 

* 아래 논문의 예시처럼 다양한 상황에 대해서 이미지변환이 가능합니다.

 

- Pix2Pix의 구조는 아래와 같습니다.

 

- 일반적으로 GAN의 Input이 사전확률분포인 P에서 도출된 샘플인 z를 활용하지만, Pix2Pix에서는 변환하기전의 이미지 (x) 가 Input이 됩니다.

 

- x는 입력이미지, y는 입력이미지가 변환하고자하는 목표 이미지가 되겠습니다. Pix2Pix는 이 둘을 Pair로 해서 학습이 진행됩니다.

 

- Generator(생성기, G)

 * Generator는 U-Net의 구조를 기반으로 하고 있으며 입력 이미지를 원하는 출력이미지로 변환하는 역할을 합니다. 

 * Generator는 x를 입력으로 받아 Pair인 y와 유사한 이미지를 생성하도록 합니다. 이를 수식으로 표현하면 아래와 같습니다.

 

- Discriminator(판별기, D)

 * Discriminator는 입력된 이미지가 실제 데이터인지, Generator가 생성한 이미지인지 판별하는 역할을 합니다.

 * 이때, (x, G(x)) 의 쌍을 입력으로 받아서 fake라는 결과를, (x, y)의 쌍을 입력으로 받았을때는 real라는 결과를 도출하도록 학습이됩니다.

 

- Pix2Pix의 손실함수

* Pix2Pix의 손실함수는 GAN 손실함수와 L1 손실함수의 결합된 형태입니다.

* 첫번째 항인 GAN 손실함수를 자세히 전개하면 아래와 같습니다. 이때 Discriminator는 (x,y)를 입력으로 받아서 이를 real이라고 판단하도록, (x,G(x))를 입력으로 받았을때는 이를 fake로 판단하도록 하는 항이 되겠습니다. 

* 두번째 항은 L1 손실함수 항인데요. 이는 pix2pix에서 생성된 이미지의 품질을 높이기 위한 항입니다.

* 이는 생성된 G(x)와 실제 이미지인 y 간의 픽셀 단위의 차이의 절대값의 평균을 의미합니다. 기존의 다른 실험에서 L2 Loss를 도입했으나 그럴 경우 이미지가 너무 Smoothing이되어 Blur한 이미지가 나오게 된다고 하여 위와 같이 L1 Loss를 활용했습니다.

 

 

2. 실험 결과 

- 먼저, 아래는 Ablation Study 결과입니다.

 

- 손실함수를 L1만 / GAN 손실만 / L1+GAN 손실을 활용했을때를 비교했으며, 그림의 품질에서 알 수 있듯 L1+GAN의 손실함수로 설정하여 학습했을때 더 좋은 결과를 얻을 수 있습니다.

(논문에서 cGAN, 즉 Conditional GAN이라고 명시한 이유는 Generator에 들어가는 Input이 변환전 실제 이미지인 x라는 특정한 조건을 가졌기 때문입니다. 즉, Pix2Pix는 cGAN의 한 형태입니다.)

 

- 다음은 지도와 실제 해당지역에 대한 사진의 결과 입니다.

 

이 밖에도 여러 결과가 있으며, 논문을 참조하시면 되겠습니다.

 

 

- Pix2Pix2는 이러한 능력덕분에 

 * 위성지도 변환

 * 흑백 사진 컬러화

 * 스케치에서 사진 생성

 * 야간 사진을 주간 사진으로 변환 

 등의 작업에서 효과가 있음을 보였습니다.

 

하지만, 치명적인 단점이 하나 있는데요. 그건 바로 학습 간에 이미지간의 정확한 Pair (x,y)가 존재해야한다는 것입니다. 이러한 이유로 데이터셋 구성이 쉽지 않다는 단점이 있습니다.

반응형

댓글