[Paper Review] CycleGAN

김현우
None
Published in
15 min readNov 5, 2020

휴먼스케이프 Software engineer Covy입니다.

본 포스트에서는 이전에 포스팅했던 GAN을 활용하였고, 이전에 포스팅했던 pix2pix처럼 image to image translation을 구현했지만 pix2pix에서는 하지 못했던 것들을 새로이 할 수 있게 만든 논문에 대해서 리뷰하려고 합니다. 이 포스트는 이전 포스트 GAN에 대한 이해를 바탕으로 진행할 예정으로, 이전 포스트에 대한 내용은 이곳(GAN)을 참고하시면 좋습니다. 리뷰하려는 논문의 제목은 다음과 같습니다.

“Unpaired Image-to-Image Translation using Cycle-Consistent Adversaria Networks”

논문에 대한 내용을 직접 보시고 싶으신 분은 이곳을 참고하시면 좋습니다.

Objective

논문에서 목적으로 하고 있는 것은 unpaired image to image translation framework을 구현하는 것입니다. 부연 설명을 하자면, 기존의 pix2pix 같은 general-purposed image to image translation framework 같은 경우에는 conditional gan을 이용하여 input에 해당되는 output을 형성하기 위해 input과 함께 ground truth output을 학습 데이터로 넣어주었습니다. 하지만, 지금 소개한 cycleGAN의 경우에는 input 데이터와 그에 해당하는 ground truth 데이터가 아닌, input data와 그에는 대응되지 않는 여러 ground truth data들을 이용해 학습을 진행합니다. 이전에 selfie2anime에 대해서 포스팅을 진행한 적이 있었는데, 이것을 예로 들자면 pix2pix 의 경우에는 학습데이터로 selfie와 이를 변환한 anime 사진을 이용해 대응관계를 학습한 반면, cycleGAN에서 진행하려는 것은 anime 사진들의 특성(논문에서는 distribution을 의미합니다)들을 이용해 selfie 사진을 anime화 시킨다고 보시면 될 것 같습니다. 결과적으로, 어떠한 배경이든 paired image 없이 image to image translation을 구현할 수 있도록 하는 것이 논문의 목표이며 이를 달성함으로써 다양한 응용이 가능함을 논문에서 제시합니다.

Cycle Consistency

논문에서는 앞서 설명한 unpaired image to image translation을 구현하는 것을 목적으로 여러 관련 연구들을 제시합니다. 가장 먼저 image to image translation이라는 점에서 앞서 언급했던 pix2pix의 구조를 언급하는데, 이는 paired image to image translation이기 때문에 결이 약간 다르다고 제시합니다. 다음으로 Zhou et al.과 Godard et al.에서 소개된 cycle consistency loss에서 영감을 받아서 변환과 역변환이 서로에 대해서 일대일 대응이 되도록 하는 방법을 제시합니다. 마지막으로 기존의 neural style transfer 방법(한 이미지를 다른 이미지의 style을 가지도록 병합)을 언급하는데, 이미지 하나의 개별적인 transfer이 아닌 두 이미지 집단의 변환 관계를 학습시켜 일반적인 translation을 학습하고 싶었기 때문에 이 방법을 사용하지 않습니다.

따라서 논문에서는 이 세 가지 방법 중 두 번째 방법을 사용하게 됩니다. 앞서 설명한 변환과 역변환을 거쳐 원래의 이미지가 되려는 특성을 cycle consistency라고 칭합니다.

Cost Function Design

앞서 설명드린 cycle consistency를 찾는다라는 것을 수식적으로 전개하면 두 집단 X, Y에 대해서 G(F(Y)) ≈ X, F(G(X)) ≈ Y를 만족하는 두 mapping G: X → Y 와 F: Y→ X를 찾는다라고 볼 수 있습니다. 그리고 이러한 두 mapping을 학습시키기 위해 논문에서는 두 discriminator인 D_X, D_Y를 설정합니다. 기존의 GAN과는 차별적인 새로운 cost function을 설계합니다.

논문에서 제시한 cost function은 크게 두 가지 loss의 결합으로 이루어져 있습니다. 첫 번째는 GAN 논문리뷰에서도 언급했던 adversarial loss입니다.

adversarial loss

위 식과 같이 adversarial loss를 표현할 수 있는데, GAN 논문리뷰를 보신 분들은 익숙하실 것입니다. 보지 않으신 분들을 위해 간단히 부연설명을 하자면, G는 generator이자 G: X → Y mapping 이며, D_Y는 G로 인해서 mapping된 x∈X가 real인지 fake인지 구별하는 discriminator입니다. 기존의 GAN처럼 discriminator는 real을 real로 fake를 fake로 제대로 구별하는 것이 목적이기 때문에 real case인 첫 번째 항 D_Y(y)를 1로, fake case인 두 번째 항 내부의 D_Y(G(x))를 0으로 구별하는 것이 optimal한 case라고 볼 수 있습니다. 이 때문에 discriminator는 L_GAN을 최대화시키는 것을 목적으로 합니다.
반면 generator는 fake를 real인 것 마냥 만들어 내는 것이 목적이기 때문에 D_Y(G(x))를 discriminator가 1로 구별하는 것을 목적으로 합니다. 이 때문에 generator는 L_GAN을 최소화시키는 것을 목적으로 합니다. 결과적으로 min_G max_D L_GAN을 구하는 것을 cost function으로 설정을 했었습니다.

여기까지가 일반적인 GAN의 범위인 것에 비해서 cycleGAN에서는 adversarial loss로 한 가지가 더 추가됩니다. 위 과정의 반대 과정입니다. 위의 식은 G: X → Y mapping generator와 D_Y discriminator를 학습하기 위한 loss였다면, cycle consistency를 위해서 논문에서는 F: Y→ X mapping generator와 D_X discriminator 또한 학습을 진행해야 합니다. 이를 위해서 논문에서는 앞서 소개했던 GAN loss의 반대과정을 반영하는 L_GAN(F, D_X, Y, X)를 adversarial loss로 추가하여 설계를 진행했습니다.

이렇게 까지만 진행한다면 G와 F를 각각 학습 시킬 수 있는 충분한 근거를 cost function을 통해서 설계한 것입니다. 하지만, 논문 리뷰의 초기에서 설명을 드렸듯이, cycle consistency를 cost function을 통해서 반영하기 위해서는 cost function의 추가적인 항목의 기여가 필요했습니다. 그렇지 않다면 input domain이 target domain의 distribution만 가진 채로 random하게 mapping 되어 다시 역으로 mapping 했을 시 원래의 image로 돌아오지 않게 됩니다. 이러한 상황을 해결하기 위해서 논문에서는 cycle consistency loss를 추가합니다.

위의 식이 cycle consistency를 학습시키기 위한 항으로 추가한 cycle consistency loss입니다. p_data(x) distribution을 따르는 x들에 대해서 F(G(x))와 x 사이의 L1 loss들의 mean과 p_data(y) distribution을 따르는 y들에 대해서 G(F(y))와 y사이의 L1 loss들의 mean을 반영하여 cycle consistency loss를 최소화하는 형태로 학습을 진행시키고자 한 것입니다.

이들을 종합하여 최종적으로 논문에서 제시한 cost function은 아래와 같습니다.

λ를 설정한 것은 앞서 설명한 adversarial loss와 cycle consistency loss 간의 중요도를 λ를 통해서 조절하고 싶어서 사용을 한 것입니다. 위 cost function을 통해서 최종적으로 학습 하고 싶은 optimal한 mapping G*, F*은 다음과 같습니다.

Network Architecture

네트워크의 구조는 논문에서 자세히 짚고 넘어가지는 않지만, 부록에 쓰여있는 내용을 간략히 요약해서 전달드리자면, 크게는 Johnson et al.의 네트워크 구조를 따라서 설계를 진행했습니다.

Generator의 경우, 크게 두 가지 구조 6 residual block structure, 9 residual block structure가 존재하는데, 두 구조 모두 convolution-instance normalization-relu에 해당되는 dk, 그리고 residual block에 해당되는 Rk, 그리고 upsampling을 위한 fractional strided convolution-instance normalization-relu layer인 uk들로 구성되어 있습니다.

Discriminator의 경우 70x70 patchGAN을 사용했습니다. 이는 convolution-instance normalization-leaky relu로 구성된 ck들로 구성되어 있습니다.

자세한 네트워크 아키텍쳐에 대해서 논문에서 직접적으로 다루지 않기 때문에 궁금하신 분들은 논문 18 쪽의 Appendix를 보시는 것을 추천드립니다!

Evaluation

논문에서 학습한 mapping을 평가하기 위해 사용한 척도가 굉장히 다양하게 존재합니다. 크게 4가지로 나누면 다음과 같이 정리할 수 있습니다.

1. Comparison against baselines
2. Anaylsis of the loss function
3. Image reconstruction quality
4. Additional results on paired datatsets

먼저 첫 번째로, Comparison against baselines는 기존의 다른 네트워크 + cost function에 비해서 논문의 네트워크 + cost function의 구조가 가지는 성능적인 장점을 보는 척도입니다. 이 척도는 거의 모든 논문들에서 기본적으로 제시하는 공통적인 척도이고, 소개드리는 논문에서도 등장하는 모든 표에 이 내용을 담고 있습니다. 따라서 이에 대한 추가적인 언급은 하지 않도록 하겠습니다. 다만 자주 등장하는 test method인 AMT와 FCN scores에 대한 비교를 진행한 내용에 대해서 표를 첨부하겠습니다.

AMT “real vs fake” test
FCN scores

AMT test는 real과 fake 이미지를 구별하는 GAN에 대한 test로도 잘 알려져 있는데, 실제 사람들을 대상으로 real과 fake를 구별하게 테스트를 시키고, 얼마나 많은 fake 이미지를 real로 속이느냐에 초점이 맞추어져 있는 결과입니다. 결과는 위에서 보시는 바와 같이 논문의 아키텍쳐가 거의 1/4의 경우로 사람들을 속일 수 있었다라고 보시면 될 것 같습니다.

FCN scores는 AMT test와는 다르게 인간이 직접 테스트에 참여하지 않습니다. FCN scores는 semantic segmentation algorithm을 평가하는 것으로도 유명한데, 어떤 이미지를 원하는 label로 잘 인식했는지를 척도로 평가를 진행하게 됩니다. 이 경우 labels->photo의 image translation에서 photo를 원하는 것으로 잘 분석해 냈는지를 보기 위한 사용했고, 그 결과 이전에 소개드렸던 pix2pix에 그나마 근접한 수치를 뽑아냈다는 것에 의미가 있다고 보시면 될 것 같습니다.

다음으로 Anaylsis of the loss function 은 앞서 소개드린 cost function을 소개한 과정이 제대로 의미를 가지는지 평가를 하기 위한 척도입니다. 이를 위해서 비교하는 대상들로 최종적으로 논문에서 설계한 cost function에서 하나 둘 씩 항목을 제거해가면서 cost function을 새로이 만들고 같은 task를 시도하여 비교하게 됩니다. 그 task로 선택하여 제시한 것이 labels->photos의 FCN scores 와 photos->labels의 classification performance입니다.

FCN scores
Classification performance

그 결과가 위에 보이시는 표에 제시한 값들입니다. GAN loss 자체를 없애는 것과 cycle consistency를 없애는 것 모두 performance의 상당한 저하를 가져왔다는 사실을 확인할 수 있습니다. forward cycle과 backward cycle이라 적혀있는 것들은 앞서 언급한 cycle consistency loss에서 각각 한 개의 항만 포함한다는 것입니다.

다음으로 Image reconstruction quality 은 cycle consistency를 확인하는 부분입니다. 그런데 논문에서 이를 정량적으로 분석하지 않고 정성적으로 사진을 통해서 reconstructed image와 input 이미지의 잦은 유사성을 설명합니다. 아래는 논문에서 예시로 든 사진들입니다.

이와 더불어 Additional results on paired datatsets 에서 paired learning dataset을 가진 pix2pix에서 진행했던 dataset을 들어 pix2pix에서 진행할 수 있었던 작업들을 똑같이 진행할 수 있다는 것을 보여줍니다. 즉, 논문에서 소개한 네트워크가 더 general한 작업물이었다는 것을 보여줍니다. 아래는 그 결과입니다.

Application

마지막으로 논문에서 evalutaiton part에서 소개했던 것은 굉장히 다양한 작업들이 가능하다는 것을 보여주는 작업물들이었습니다. 상당히 흥미로운 것이 많아서 몇 가지만 간단히 소개해드리려고 합니다! 이 부분은 이런 것들도 가능하구나 정도로만 봐주셔도 좋을 것 같습니다.

Style transfer

input image를 다양한 화가의 스타일에 맞게 바꾸는 작업입니다.

Object transfiguration

object를 형태가 비슷한 다른 무언가로 바꾸는 작업입니다.

painting2photo

painting을 photo로 바꾸는 작업입니다.

photo enhancement

사진을 선명하게 바꾸는 작업입니다.
(DSLR의 style을 따라했다고 보시면 됩니다)

Conclusion

얼마전에 GAN의 역사와 발전이라는 글을 본 적 있었는데 상당히 흥미로워서 읽게 된 논문 cycleGAN의 리뷰였습니다. GAN이 처음 등장했을 때만큼의 충격은 아니지만, 그래도 unpaired image translation에서 큰 역할을 해 주었다고 생각이 듭니다. 특히 application 쪽에서 굉장히 다양한 잠재성을 가지고 있고, 그것들을 처음 보면서 재미있게 읽을 수 있었던 것 같습니다. 흥미로운 주제와 다양한 응용의 논문을 찾고 싶으시면서 GAN에 관심이 있다 하면 읽어보시는 것을 추천드립니다!

Get to know us better!
Join our official channels below.

Telegram(EN) : t.me/Humanscape
KakaoTalk(KR) : open.kakao.com/o/gqbUQEM
Website : humanscape.io
Medium : medium.com/humanscape-ico
Facebook : www.facebook.com/humanscape
Twitter : twitter.com/Humanscape_io
Reddit : https://www.reddit.com/r/Humanscape_official
Bitcointalk announcement : https://bit.ly/2rVsP4T
Email : support@humanscape.io

--

--