Cycle GAN에 대해서 알아보자
딥러닝(Deep-Learning)

Cycle GAN에 대해서 알아보자

반응형

Cycle GAN이 무엇인지에 대해서 알아보겠습니다.


해당 논문 링크 : https://arxiv.org/abs/1703.10593



Cycle GAN이 탄생하게 된 배경은, Pix2Pix에서 필요로 했던 양쪽에 대응되는 데이터 쌍의 존재 필요성에서 벗어나도록 하기 위함이었습니다.


즉, 데이터 쌍 없이도 문제를 풀어보자는 시도에서 탄생한 것이 바로 Cycle GAN입니다.




위의 Pix2Pix를 이용한 학습을 본다면, 완전한 신발 이미지를 생성하기 위해 input data set으로 신발의 외곽선 이미지를 넣었습니다.


이처럼, 완전한 형태의 신발로 결과값을 도출하기 위해서는 학습 단계에서 특정한 신발 이미지와 그에 해당하는 외곽선 이미지 쌍이 존재해야만 합니다. 그냥 이미지에서 외곽선 추출 기법을 통해 얻어내면 되는 것이기 때문에 비교적 어렵지 않은 일로 평가됩니다.



하지만 만약, 일반적인 풍경 사진을 유명한 화가스타일의 그림으로 바꾸는 모델을 만들고자 한다면, Pix2Pix로 가능할까요?


해결하기 위해선, 해당 화가의 그림과 완벽하게 같은 풍경 사진을 찍어서 데이터 쌍으로 구성해 학습을 해야하는데 이는 거의 불가능에 가깝습니다. 즉, 같은 장소에서 같은 시점으로 서로 비슷하게 찍어야만 가능성을 높일 수 있는데, 실생활에 적용하기에는 무리가 있죠.

따라서 Pix2Pix와 같이 Pair를 이루는 데이터가 아닌, Unpair로 구성된 데이터로 학습하는 방법을 도출해야 합니다.


또한 Pix2Pix 모델이 가지는 손실 함수에서는 핵심요소인 GAN보다 L1 손실함수에 더 의존하는 모습을 보입니다. 실제로 해당 논문에서 화면 분할 작업을 실험할 때, 오히려 GAN을 그냥 빼버린 것이 성능이 올라가는 경우도 존재했습니다.


Cycle GAN에서는 쌍을 이루지 않는 데이터 셋(Unpaired)를 이용해서 학습을 하면서 L1 손실 함수의 사용이 불가능해졌습니다. 왜냐하면, input과 output이 일대일로 대응하는 데이터가 없기 때문입니다. 따라서 Cycle GAN에서는 Pix2Pix의 GAN을 유지하고, L1을 대체할 손실함수를 만들었습니다.


그렇다면 Cycle GAN의 프레임워크에 대해 좀 더 자세히 알아볼까요?



각각 두 개의 Generator와 Discriminator를 만들자




X와 Y는 각각 도메인을 의미합니다. 즉 G는 X 도메인의 사진을 Y 도메인으로 변환시켜주는 것이며, F는 반대로 Y 도메인의 사진을 X 도메인으로 변환시켜줍니다. Dx와 Dy는 X와 Y 도메인의 판별자 역할을 합니다.


이는 우리가 GAN에서 배웠듯이, 생성자에 해당하는 G와 F는 판별자 D를 속이도록 학습하여 GAN 손실 함수를 진짜같이 만드는 것을 목표로 합니다.

(즉, G와 Dy / F와 Dx는 서로 적대적 학습을 진행)


이렇게 되면 G(X)의 결과는 Y 도메인에 존재하게 되고, F(Y)는 X 도메인에 존재하게 될 것입니다.


여기서 순환 일관성(Cycle Consistency)에 대한 발상을 하게 된 것입니다.


직관적인 형태로 나타낸 모습인데요.


쉽게 말하면 G(X)를 통해 보내진 결과 값을 다시 F로 인해 돌아올 수 있어야 한다는 것입니다.

반대로도 성립되는 말이구요. 식으로 나타내면 아래와 같습니다.


F(G(X)) = X

F(G(Y)) = Y


Cycle GAN의 핵심은 생성자를 통해 데이터를 변환시키는데, 다시 복구할 수 있을 정도로만 바꾸는 것입니다.


Cycle GAN의 프레임워크는 Pix2Pix와 거의 유사하지만 아래 두 가지의 경우만 차이점이 존재합니다.


1. 생성자 하나, 판별자 하나를 쓰는 게 아니라 생성자 둘, 판별자 둘을 사용한다. X 도메인에서 Y 도메인으로 변환하는 것뿐만 아니라, 역방향으로도 변환을 해야 하기 때문이다.

2. 생성자 학습 시에 L1 손실 함수를 사용할 수 없는 대신에, Lcyc 손실 함수를 이용한다.


Cycle GAN에 맞는 L(cycle) 손실 함수를 생성해 모델을 완성하게 됩니다. Cycle GAN은 Pix2Pix와는 다르게 GAN 손실 함수가 핵심적인 역할을 하기 때문에 더 아름다운 모델을 만들 수 있을 것으로 평가받고 있습니다.



마지막으로, 실제로 Cycle GAN으로 진행한 실험 결과들을 살펴보겠습니다. 다음은 논문에 기재된 결과들입니다.



모네의 그림을 실제 사진처럼 만들거나, 실제 사진을 모네 그림처럼 만들어주기도 합니다.

말을 얼룩말로, 얼룩말을 말로 바꿔주기도 하구요. 여름과 겨울을 서로 바꿔서 만들어주기도 합니다.

마지막처럼, 실제 사진을 여러 화가들의 그림으로 생성해내는 모습도 볼 수 있습니다.




아래는 GTA5 게임의 화면을 실제 도로사진처럼 만들어주고, 그 반대의 경우도 실험을 통해 나타낸 결과입니다.




이처럼 Cycle GAN을 통해 학습이 잘 이루어진다면, 내가 원하는 유사한 사진을 Input으로 넣어서 좋은 결과물을 얻어낼 수도 있습니다.

아직 많이 어려운 기술이기 때문에 실험 결과처럼 좋은 형태가 나오는 것은 매우 어렵다고 합니다.



한 이미지를 다른 dataset의 이미지로 만들어주고, 동시에 반대로도 학습을 가능토록 하는 Cycle GAN에 대해서 알아봤습니다!

반응형