-
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (CycleGAN) 정리AI/Computer Vision 2022. 2. 14. 13:30728x90
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (CycleGAN) 정리
1. Introduction
Image-to-image translation은 짝진 형태의 이미지 train 세트를 이용해 인풋 이미지와 아웃풋 이미지를 매핑하는 것이 목표인, 컴퓨터 비전과 그래픽의 한 분야입니다. 하지만 많은 태스크에 있어서 짝이 지어진 학습 데이터를 얻는 것이 불가능합니다.
Image-to-image translation의 대표적인 모델인 Pix2pix는 GAN loss를 합친 목적 함수를 이용하여 성능을 높였지만, training data가 pair로 존재해야만 한다는 한계점이 존재합니다.
따라서 CycleGAN 논문에서는 Paired training data없이 X라는 도메인으로부터 얻은 이미지를 타깃 도메인 Y로 바꾸는 방법을 제안합니다.
X와 Y는 우리가 서로 연결하고자 하는 두 Domain의 image입니다. X도메인에서 Y로 맵핑하는 G function이 존재하고, 이것이 Y에 가까운가를 Y의 Discriminator인 Dy를 통해 검증 받게 됩니다. 반대의 경우도 마찬가지입니다.
이렇게 될 경우 문제점이 발생합니다. X에서 Y로 맵핑할 경우 X의 성질을 유지하면서 Y로 style만 바꾸는 것이 주목적이 되는 것이 아니라, 그냥 Y도메인의 진짜 이미지처럼만 보이면 되기 때문에 input의 특성을 무시하게 되어 결국은 의미 없는 맵핑이 됩니다. 그 결과로 input과 괴리감 있는 결과가 나오게 됩니다.
다시 말씀드리자면, 그림 X을 사진 Y로 바꾸려고 한다고 할 때, 바꾼 사진 Y을 다시 그림 X으로 최대한 유사하게 바꿀 수 있어야 한다는 의미입니다. 하지만 위에서 언급한 문제들을 해결하기 위해 추가적인 loss를 사용하게 됩니다.
Cycle GAN의 핵심은 사진의 스타일을 바꾸되, 다시 원본 이미지로 복구 가능한 정도로만 바꾸는 것입니다.
뒤에서 CycleGAN의 학습 방식에 대해서 더 구체적으로 살펴보도록 하겠습니다.
짝진 학습 데이터가 없었음에도 불구하고 collection style transfer, object transfiguration, season transfer, photo enhancement와 같은 task에서 높은 성능을 보였습니다.
2. Related Work
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (CycleGAN) 이라는 이름에서 보이는 것과 같이 여러 관련 연구들을 살펴봅니다.
- Generative Adversarial Networks (GANs)
- Image-to-Image Translation
- Unpaired Image-to-Image Translation
- Cycle Consistency
- Neural Style Transfer
3. Formulation
CycleGAN는 두 개의 매핑 함수 G:X→Y와 F:Y→X를 포함합니다.
추가로 두 개의 적대적인(adversarial) discriminator인 DX와 DY를 도입합니다.
앞서 말씀드렸던 것처럼 x도메인에서 y도메인으로의 단순 맵핑이 아니라, 다시 돌아오는 부분을 고려하여 input이미지로 잘 돌아올 수 있도록 제약조건을 겁니다. 그 제약조건은 돌아온 결과 값이 원래 그림과 같아야 한다는 것이 됩니다. 이를 위해서 기존의 GAN loss는 유지하고, 생성한 fake 이미지와 원본 이미지 X의 loss를 최소화하도록 합니다.
따라서 CycleGAN에서는 목적함수가 Adversarial Loss, 또 다른 하나는 Cycle Consistency Loss 이렇게 두가지로 이뤄져 있습니다. 각각의 loss에 대해서는 이어서 설명드리도록 하겠습니다.
우리의 목표는 Adversarial loss를 이용해, G(x)로부터의 이미지 데이터의 분포와 Y로부터의 이미지 데이터의 분포가 구분 불가능하도록 G:X→Y를 학습시키는 것입니다. 이러한 매핑(함수)은 제약이 적기 때문에, 우리는 F:Y→X와 같은 역방향 매핑을 함께 진행했고, F(G(x))가 X와 유사해지도록 강제하는 cycle consistency loss를 도입했습니다.
* GAN
- GAN에서는 D를 새로 만들어 G가 real인지 fake인지 구별하게끔 만든다.
- 즉 두 네트워크의 미션은 아래와 같다.
- D는 fake를 구별하려 한다.
- D의 입장에서 0에 가까우면 real, 1에 가까우면 fake로 구별한다.
- logD(G(x))를 통해 G가 만들어내는 결과는 1(fake)에 가깝게 만든다
- log(1−D(y))를 통해 실제 정답 이미지는 0(real)에 가깝게 만든다.
- G는 fake image로 D를 속이려 한다.
- 마찬가지로 G의 입장에서는 D와 반대로 argMin을 하면 된다.
- – logD(G(x))를 통해 G가 만들어내는 결과는 0(real)에 가깝게 만든다
- – log(1−D(y))를 통해 실제 정답 이미지는 1(fake)에 가깝게 만든다.
- G 입장에서는 D를 가장 잘 속이는 이미지를 만들어내야 한다
- D는 fake를 구별하려 한다.
Adversarial Loss먼저 Adversarial Loss는 기존의 GAN에서 사용했던 것과 같은 Adversarial loss를 사용합니다.
GAN에서는 D를 새로 만들어 G가 real인지 fake인지 구별하게끔 만듭니다.
D는 fake를 구별하려 하기 때문에, D의 입장에서 0에 가까우면 real, 1에 가까우면 fake로 구별합니다.
이를 식으로 나타내면 첫번째 항의 logD(y)를 통해 G가 만들어내는 결과는 1(fake)에 가깝게 만듭니다
두번째 항의 Log(1−D(y))를 통해 실제 정답 이미지는 0(real)에 가깝게 만듭니다.
Cycle Consistency Loss다음은 Cycle Consistency Loss를 설명드리겠습니다. 이 Cycle Consistency Loss가 CycleGAN의 핵심이라고 할 수 있습니다.
X가 G를 통과한 뒤 생성된 Y가, 다시 F를 통과했을 때 원본의 X가 나오는 것을 Cycle Consistency라고 합니다.
그런데 단순히 Y가 X가 되도록 F를 통과시켰을 때, 원본 X와는 조금 다른 X_2가 나오게 되는 차이가 생기게 되고, 이 원본 X와 X_2의 차이를 Cycle Consistency Loss라고 합니다. 이 Loss를 식으로 나타내게 되면 위의 식의 첫번째 항이 되고, 이 첫번째 항은 아래의 첫번째 그림에 해당하게 됩니다.
역으로, 위의 식의 두번째 항은 역으로 원본 Y와 다시 생성한 Y_2의 차이를 나타내고, 아래의 두번째 그림에 해당하게 됩니다.
Full Objective최종적으로 CycleGAN은 다음과 같은 목적함수를 사용하게 됩니다.
이 Adversarial Loss와 Cycle Consistency Loss를 모두 반영하여 CycleGAN의 목적함수를 이용하게 됩니다.
이렇게 되면 Paired training data없이 X라는 도메인으로부터 얻은 이미지를 타깃 도메인 Y로 바꿀 수 있게 됩니다.
4. Implementation
Network Architecture
우리는 우리의 generative 모델로 neural style transfer와 super-resolution에 좋은 결과를 보인 논문에서 사용된 구조를 채택했습니다. 이 네트워크는
- 두 개의 stride-2 convolutions,
- several residual blocks, ( = shortcut, skip connection)
- 두 개의 factionally strided convolutions(stride = 1/2)를 포함합니다.
- 128*128 이미지에는 6 블록, 256*256 혹은 그 이상의 해상도의 이미지에는 9 블록을 사용합니다.
- 또한 instance normalization을 이용합니다.
- Discrminator는 70 * 70의 겹치는 이미지가 진짜인지 혹은 가짜인지 구분하기 위한 70*70 PatchGANs를 사용합니다. Patch 수준의 discriminator 구조는 더 적은 파라미터를 갖고 있고, 임의의 사이즈의 이미지에 모두 적용 가능합니다.
Training Details
우리는 모델 학습 과정을 안정화시키기 위해 두 가지 기술을 적용했습니다.
첫번째는 의 negative log likelihood 함수를 least-squares loss로 대체했다는 것입니다. 이 loss가 학습 과정에서 더 안정적이었고 더 좋은 품질의 결과를 낳았습니다. 실제로 GAN Loss 에 대해, 는 를, 는 를 최소화하는 방향으로 학습합니다.
두 번째는, 모델의 진동(oscillation)을 줄이기 위해 discriminator를 최신의 generator가 생성한 하나의 이미지를 이용하기보다는 지금까지 생성된 이미지들을 사용했다는 것입니다. 우리는 이전에 생성된 이미지 50개를 저장할 수 있는 버퍼를 이용했습니다.
모든 실험에 있어
- λ는 10으로 두었습니다.
- 배치 사이즈는 1이었고, Adam solver를 이용했습니다.
- 처음 100 epoch에 대해서는 learning rate 0.0002를 유지하였고, 이후 100 epoch에서는 선형적으로 0에 가까워지게 lr를 줄여가며 학습했습니다.
5. Results
1) Evaluation
논문에서는 pix2pix와 같은 데이터 셋과 평가지표(metrics)를 사용해서, 우리의 방법을 몇 가지 baseline과 양적, 질적 두 기준 모두로 비교했습니다. 도시 풍경 데이터셋에서의 semantic label ↔ photo 태스크, Google map으로부터의 aerial photo(공중사진) ↔ 지도 태스크를 포함합니다. 또한 loss function에 대한 연구도 진행했습니다.
CoGAN, SimGAN, pix2pix와 같은 다양한 다른 모델과 CycleGAN에게 같은 task를 시킨 후, 결과를 비교합니다.
- AMT perceptual studies: 사람을 대상으로 한 실험입니다. 참가자들에게는 실제 사진 혹은 지도와 (우리의 알고리즘 혹은 baseline 모델을 통해 생성된) 가짜 이미지를 보여준 후 그들이 진짜라고 생각하는 것을 선택하게 했습니다. 처음 10개에 대해서는 선택이 옳았는지 틀렸는지 피드백을 주었고, 이후 40개를 이용해 알고리즘이 참가자를 속였는지를 테스트했습니다.
- FCN score: perceptual studies가 얼마나 그래픽이 실제 같은지를 테스트하는 데에 있어서는 매우 좋은 기준이었음에도, 우리는 또한 사람을 대상으로 한 실험이 필요하지 않은 automatic 한 양적 기준을 찾고 싶었습니다. 이를 위해 우리는 'FCN score'를 채택했습니다.
- Semantic segmentation metrics: 사진을 라벨링 하는 성능을 평가하기 위해 우리는 per-pixel 정확도(accuracy)와 IOU를 포함하는 기본적인 평가지표를 이용했습니다.
CycleGAN이 대체로 우수한 성능을 보이고 있는 것을 확인할 수 있습니다. 2번째, 3번째 표에서는 pix2pix가 조금 더 우수한 성능을 내는 것을 확인할 수 있습니다.(Pix2pix이 더 좋은데 왜 써?)
2) Application
이 CycleGAN을 paired training data가 없는 여러 task들에 대해서 적용한 결과입니다. 총 5가지 application이 있습니다.
- Object transfiguration
첫번째로 Object transfiguration은 물체의 모양을 바꾸는 task로 아래의 이미지처럼, cycleGAN을 사용하면 말의 이미지를 얼룩말로 잘 바꾸는 것을 확인할 수 있습니다.
- Season Transfer
마찬가지로 계절을 바꾸는 task에 대해서도 두번째 사진처럼 cycleGAN이 좋은 성능을 보여주는 것을 알 수 있습니다.
- Photo Enhancement
- Collection Style Transfer
논문을 읽으면서 개인적으로 cycleGAN이 이렇게 사진 이미지를 여러 화가들의 화풍을 적용하여 그림처럼 만들거나, 역으로 그림을 사진으로 바꾸는 task 또한 실제처럼 잘 만들어내는 부분이 제일 신기했습니다.
- Photo Generation from paintings
6. Limitations and Discussion
논문에서는 cycleGAN이 여러 경우에 좋은 성능을 보이긴 하지만, 모든 task에 대해서 성공적이진 않았다고 하면서 그 한계를 크게 3가지로 분류하여 설명했습니다.
1. We have explored tasks that require geometric changes, with little success. (On translation tasks that involve color and texture changes, like many of those reported above, the method often succeeds.)
2. Some failure cases are caused by the distribution characteristic of the training datasets.
3. We observe a lingering gap between the results achievable with paired training data and those achieved by our unpaired method
첫번째로, CycleGAN의 경우 색상이나 질감을 바꾸는 task에서는 잘 적용되지만, 객체의 모양 자체를 바꾸는 task에 대해서는 잘 작동하지 않습니다. 오른쪽의 그림에서 보이는 것처럼, 사과를 오렌지로 바꿀 때도 색깔만 바뀌고 모양이 바뀌지 않는다든가, 강아지를 고양이로 바꾸는 작업에 대해서도 그다지 좋은 결과가 나오지 않습니다. 이렇게 모양 자체를 잘 바꾸지 못하는 이유는 생성 모델 자체가 여러 장의 데이터를 학습해서 분위기만 바꾸는 데에 초점을 맞추기 때문이라고 합니다.
두번째로 학습에 이용된 데이터 셋 자체의 분포가 불균형하기 때문에 발생하는 문제도 있습니다. 왼쪽 그림에서 보이는 것처럼, 이미지넷에 제공된 데이터에는 말을 타고 있는 사람의 이미지는 존재하지 않기 때문에 사람과 말을 구분하지 못하고 사람도 얼룩으로 만든 것을 알 수 있습니다.
Reference
https://wiserloner.tistory.com/1209
https://comlini8-8.tistory.com/9
https://velog.io/@chy0428/CycleGAN
https://algopoolja.tistory.com/49
https://dogfoottech.tistory.com/177
728x90'AI > Computer Vision' 카테고리의 다른 글