본문 바로가기
논문/review

Image-to-Image Translation with Conditional Adversarial Networks 리뷰

by ornni 2022. 7. 6.
728x90
반응형

 

목차

0. Abstract

1. Introduction

2. Related work

3. Method

3.1 Objectives

3.2 Network Architectures

3.2.1 Generator with skips

3.2.2 Markovian discriminator (PatchGAN)

3.3 Optimization and inference

4. Experiments

4.1 Evaluation metrics

4.2. Analysis of the objective function

4.3. Analysis of the generator architecture

4.4. From PixelGANs to PatchGANs to ImageGANs

4.5. Perceptual validation

4.6 Semantic segmentation

4.7. Community-driven Research

5. Conclusion


0. Abstract

 

이전: CGAN을 이미지-이미지 변환 문제에 대한 해결방안으로 연구

CGAN은 단순히 입력 이미지에서 출력 이미지로 매핑뿐만 아니라, 매핑을 훈련시키기 위한 손실함수 또한 학습

그래서 레이블된 지도에서 사진을 합성하고, edge map에서 객체를 재구성하고 이미지를 채색하는 작업에서 효과적

 

PIX2PIX 이후 매핑 함수, 손실함수에 대해 수작업을 통한 설계가 필요 없어짐

자세한 이야기는 뒤에 이어서 나옴:)

 

아래 사진은 다양한 이미지 변환의 예시

  • 시멘틱 레이블을 실제 이미지로 변환
  • 흑백을 컬러로 변환
  • 위성 사진을 지도로 변환
  • 낮을 밤으로 변환
  • 스케치를 채색된 이미지로 변환

 

1. Introduction

 

자동 이미지-이미지 변환: 충분한 훈련 데이터를 사용해 어떤 한 장면에 대한 표현을 다른 표현으로 변환하는 작업

 

문제: 어떻게 입력 이미지를 그에 관련된 출력 이미지로 변환할 지에 대한 고민

논문 목표: 관련된 모든 문제에 대한 공통된 프레임워크 개발

 

이전 해결책: CNN을 이용하여 이미지-이미지 변환 수행

단점

- CNN이 손실함수를 최소화하도록 학습하므로 손실 함수를 잘 디자인 해야 함

- CNN이 예측값과 실제값 사이 유틀리디안 거리를 최소화하게 되어 흐린 결과물을 만드는 경향이 있다는 것

유클리디안 거리가 모든 가능한 출력을 평균하며 최소화하기 때문에

 

해결방법: "출력을 현실과 구분하기 어렵게 만드는 것"과 같은 고수준의 목표를 특정

이를 충족하기 위해 적절한 손실 함수를 자동적으로 학습하는 것이 바람직함

이는 GAN과 동일!!

 

논문이 기여하는 바

- 넓은 범위의 문제에 대한 CGAN이 합리적인 결과를 만들어 냈음을 입증

- 좋은 결과에 도달하기에 충분한 간단한 프레임워크를 보이고, 몇 가지 중요한 구조적 선택의 효과를 분석


2. Related work

 

첫번째 관련된 연구

Structured losses for image modeling

기존 이미지-이미지 변환 문제: 픽셀마다 분류, 회귀 등이 사용

하지만 이런 공식화는 출력 공간이 구조화되지 않아 각 출력 픽셀들이 입력 이미지에 독립적인 것처럼 다루어짐

 

그래서 structured loss를 사용하는 CGAN 이용

structured loss는 출력의 joint configuration에 패널티를 부여

(1. structured loss를 사용한다는 의미와 joint configuration에 패널티를 부여한다는 의미 추가 공부 필요)


두번째 관련된 연구

Conditional GANs

기존 이미지-이미지 변환 문제: GAN사용

하지만 L2 regulation과 같은 다른 항들에 의존하는 GAN에서만 적용

Unconditional GAN에서만 적용되었다는 의미인듯

 

논문에서는 Conditional GAN을 사용

특정 응용에 해당하는 어떠한 것도 존재하지 않음


논문의 구조 선택에서 이전 작업들과의 차이

- Generator에 U-Net에 기반이 된 구조를 사용

- Discriminator에 PatchGAN 분류기 사용(이미지 패치 크기에만 패널티 부여)

이런 접근이 더 넓은 범위의 문제에서 효과적이며 패치 크기를 바꾸는 것의 효과를 조사

 


3. Method

 

이제 어떻게 진행되는지 살펴볼 예정

 

GAN: 랜덤 노이즈 벡터 z에서 출력 이미지 y로의 매핑(G:z→y)을 학습하는 Generator

CGAN: 관찰된 이미지 x와 랜덤 노이즈 벡트 z에서 y로의 매핑(G:[x, z]→y)을 학습

 

Generator(G)는 실제 이미지와 구별이 불가능한 출력을 만들어내도록 훈련

Disceiminator(D)는 거짓 이미지를 가능한 잘 탐지해내도록 경쟁적으로 훈련

Generator

CGAN과 비슷하게 작동

하지만 입력으로 노이즈 벡터와 클래스 벡터를 받는 CGAN과 달라 더 이상 노이즈 벡터를 받지 않음

(2. CGAN정의 확인 필요)

오로지 이미지만 입력으로 받아 출력을 생성

 

Discriminator

2가지 입력을 가짐

Generator에 넣었던 입력 이미지

Pair가 될 진짜 이미지

2가지를 동시에 discriminator에 넣었을 때 pair를 비교하여 생성된 이미지인지 진짜 이미지인지 구분

 

알아야할 점!!!

기존의 GAN에서 한단계 발전시켰다는 점

- Generator에 U-Net와 skip connection 사용

- Discriminator에 PatchGAN 분류기 사용


3.1 Objectives

 

(1): 기존 CGAN의 목적함수

G는 목적함수를 최소화하려는 반면 D는 최대화하려 함

앞의 그림과 연관시켜보면 아래와 같다

Discriminator의 입력 이미지에 생성된 G(x) 이미지와 training data인 x를 넣어줘서 Conditional 효과를 주게 되어 GAN이 학습할 때 방향성을 잡아줌

 

이전의 접근: GAN의 목적함수를 L2 Loss와 같은 전통적인 손실 함수와 혼합하는 것이 효과적이라는 것을 찾음

Discriminator의 입장은 변하지 않음

Generator는 Discriminator를 속여야 할 뿐 아니라 L2 Loss에 대해 믿을만한 출력을 만들어야 함

따라서 생성된 이미지와 대응되는 진짜 이미지와의 거리를 loss에 추가하여 생성된 이미지가 진짜 이미지와 비슷할 수 있도록 학습

(3): 논문에서는 L2보다 L1을 사용했을 때 blur효과가 더 줄어들어서 L1을 사용

앞의 그림과 연관시켜보면 아래와 같다

L1 Loss는 학습을 진행할 때 유클리디안 거리를 최소화하는 방향으로 집중하는 경향이 있음

그래서 Original 이미지에서 generation 이미지의 pixel-level에서의 차이를 구한 값으로 표현

(4): PIX2PIX의 최종 loss function은 두 loss 함수를 합친 것((1)+(3))


PIX2PIX의 문제

문제: z가 없다면 x에서 결정론적인 출력 y가 생성될 수 있으므로 z를 추가해야함

실험 결과: Generator가 z를 무시하며 학습

해결책: 노이즈를 사용하도록 dropout 방식 사용

결과: 출력에서는 아주 조금의 확률만이 관찰

문제: generator가 학습 시에 노이즈를 무시하여 생기는 문제

→ 향후 bicycleGAN에서 개선됨


3.2 Network architecture

 

Generator과 Discriminator convolution-BatchNorm-ReLU 형태의 모듈을 사용

모두 DCGAN을 조금 변형해서 사용


3.2.1 Generator with skips

 

이미지-이미지 변환 문제의 특징은 고해상도 입력 그리드를 고해상도 출력 그리드로 매핑하는 것

고려하는 문제의 입력과 출력은 겉보기로 다르지만 동일한 기본 구조를 가짐

이전 해결책: 인코더-디코더 신경망을 주로 사용

 

인코더-디코더 신경망

1. 입력은 점진적으로 downsampling하는 일련의 레이어를 거침

2. bottleneck layer까지 진행

3. 해당 지점에서 downsampling 과정이 역전됨

위의 신경망은 모든 정보의 흐름이 bottleneck을 포함한 모든 레이어를 통과할 것을 요구

이미지 변환 문제에서는 입력과 출력 사이에 공유되는 많은 양의 저수준 정보가 있으며 이 정보를 신경망을 통해 직접 전송하는 것이 바람직

ex) 이미지 채색에서 입력과 출력은 중요한 edge 위치 공유


Generator: U-Net 선택 + skip connection 추가

level별로 처리된 feature들의 정보를 효율적으로 이용하기 위해

각각의 skip connection은 간단한 레이어 i의 모든 채널을 레이어 n-i의 모든 채널에 연결

데이터가 인코더를 통하면 이미지의 feature를 잘 추출할 수 있음

다시 디코더를 통하면 원하는 이미지를 만들 수 있음

이 과저에서 이미지의 정보의 손실이 발생

이러한 정보의 손실을 막기 위해 skip connection을 사용

+ skip connection을 통해 생기는 추가적 이익: 역전파 과정에서 vanishing gradient 문제 해결 가능


3.2.2 Markovian discriminator (PatchGAN)

 

문제: L2, L1 Loss가 모든 픽셀값에 평균을 사용하여 이미지를 흐리게 생성

하지만 Loss는 고주파수의 선명도를 얻어내지는 못하지만 저주파수의 특징을 정확하게 얻어냄

그래서 저주파수를 잡아내기 위해 L1을 사용하기로 함

 

이는 GAN discriminator를 고주파수의 정확성만을 모델링하도록하고 저주파수의 정확성은 L1에 의존하게 함

 

고주파수를 모델링하기 위해 관심을 지역적 이미지 패치의 구조만 두는 것이 충분

PatchGAN discriminator 구조 설계(이미지 안의 각 N*N 패치가 실제인지 거짓인지 분류)

패치의 크기 안에서만 패널티를 부여하는 방식

이런 방식은 discriminator을 약하게 만들어서 학습을 안정화함

 

이런 판별자를 이미지 전체에 걸쳐 합성곱으로 실행, 모든 결과를 평균화하여 discriminator의 궁극적 출력 제공

 

대체로 patch size는 70*70을 사용

이미지 사이즈와 동일한 286*286를 사용해도 70*70를 사용한 결과와 크게 다를 바 없음

오히려 parameter의 수가 증가해 학습 시간에 악영향을 미침

뒤에 실험 결과로 확인 가능


3.3 Optimization and inference

 

최적화를 위해 GAN의 일반적인 접근법을 따름

discriminator와 generator의 경사 하강법 스텝을 번갈아서 진행

generator가 log(1-D(x, G(x, z)))를 최소화하는 대신 logD(x, G(x, z))를 최대화하는 방향으로 학습

D를 최적화하는 동안 목적함수를 2로 나누어서 G와 비교적 상대적 합습률을 조금 늦춤

 


minibatch SGD

learning rate=0.0002

momentum paraneter beta1=0.2, beta2=0.999

Adam optimize

 


4. Experiments

 

각각의 데이터셋이서 진행

작은 크기의 데이터에서도 그럴듯한 결과가 나옴!


4.1 Evaluation metrics

 

문제: 합성된 이미지 품질 평가

픽셀 당 MSE와 같은 측정 항목들은 결과의 결합 통계량을 평가하지 않으므로 구조화된 손실을 얻으려는 구조 측정 안함

 

해결방법: 결과에 대해 시각적인 품질을 더 전체적으로 평가하기 위해 두가지 전략 선택

- Amazon Mechanical Turk를 이용해 실제 대 거짓 지각 연구 진행

- FNC-score으로 충분히 현실적이어서 일반적인 지각 시스템이 객체들을 인지할 수 있는지 측정


4.2 Analysis of the objective function

 

다양한 손실에서 훈련된 결과

다른 손실들은 서로 다른 품질의 결과를 만들도록 유도

L1만 사용하는 것은 적절하지만 흐릿함

CGAN만 사용하는 것은 이미지가 선명하지만 현실성이 떨어짐

(3. 특정한 적용상황에서는 인위적인 시각적 구조를 가짐?)

두 항을 모두 사용하면 이런 구조를 줄일 수 있음

L1+CGAN의 정확도가 가장 좋음!


4.3 Analysis of the generator architecture

 

U-Net을 사용하는 경우가 Encoder-Decoder를 사용했을 때보다 이미지가 잘 생성됨!

skip connection을 통해 Encoder의 high-resolution을 decoder에 잘 전달


4.4 From PixelGANs to PatchGANs to ImageGANs

 

패치 크기에 따른 변형들(L1+CGAN)

L1: 불확실한 영역은 흐리고 채도가 낮음

1*1 PixelGAN: 더 나은 색상 다양성을 보여주나 공간 통계량에 영향을 미치지 않음

16*16 PixelGAN: 부분적으로 명확한 결과를 보여주지만 관찰할 수 없는 크기에서 타일화된 인궁구조가 만들어짐

70*70 PixelGAN: 공간과 색상 차원에서 옳지 않더라도 명확한 출력을 만들어냄

286*286 PixelGAN: 70*70 PixelGAN과 비슷한 결과를 만들어내지만 FCN-score에서 조금 낮은 품질을 보여줌

더 많은 파라미터와 깊이를 갖게 되어 훈련이 더 어렵기 때문일 것


4.5 Perceptual validation

 

AMT의 실험결과

인간 평가자를 얼마나 잘 속이는가?

map→photo: 18.9%

photo→map: 6.1%


4.6 Semantic segmentation

 

출력이 입력보다 덜 complex한 semantic segmentation에서 성능 확인

질적 실험 결과 CGAN이 segmentation을 잘 수행하고 있음

양적 실험 결과 오히려 L1를 사용하는 것이 더 좋은 결과


4.7 Community driven Research

 

커뮤니티에서 다양한 모델이 나오면서 응용됨

단순히 label과 이미지간의 변환 모델이 아니라 이미지-이미지 변호나 문제를 해결할 수 있을 가능성이 보임


5. Conclusion

 

CGAN이 이미지-이미지 변환에 효과적이며 위에 소개된 네트워크는 다양한 환경에서 적용할 수 있음

 

반응형