논문 : Image-to-image translation with conditional adversarial networks.

저자 : Isola, P., Zhu, J. Y., Zhou, T., & Efros, A. A. (2017)


Why do we choose cGAN?

# CNN과의 차이점

-어떻게 최소화 하는지 방법을 알려주어야 하는데, 그 과정에서 유클리디안 방식을 사용

-유클리디안 방식을 사용하면 흐리게 나옴(모든 출력의 평균을 최소화 하기 때문)

→ 목표 : 출력 이미지를 현실과 구별할 수 없게 내놓으면서도 목적에 맞게 로스 함수를 자동으로 학습

기존 방식

Conditional GANs

픽셀 단위의 classification or regression으로 문제 해결

각 출력 픽셀들은 다른 픽셀들에 서로 독립적이라고 생각

Unstructured 출력 공간 개념

Structured loss 사용

     : 주어진 목표 이미지와 출력의 다름을 penalize 하는 것

Generator U-net 사용

DiscriminatorPatchGAN 사용

# cGAN

G,D에 특정 condition 나타내는 정보 “y”더해줌

Generator GDiscriminator D가 실제 이미지인지 구분하지 못하는 출력을 내도록 학습되고

DGenerator가 생성한 이미지를 “fakes”로 구별할 수 있도록 훈련된다.

※ Z가 필요한가?

-Z의 유무가 큰 영향을 끼치지는 않지만, deterministic한 결론을 피하기 위해 dropout 형태로 여러 layer에 노이즈 줌 

* Deterministic : 입력값에 다라 출력값이 결정되는 것.

* Dropout : 네트워크의 일부를 생략, 모델결합에 투표효과를 주어 신경망 성능 향상

Method

# cGAN목적함수(Objective)

G는 목적함수를 최소화하는 방향으로, D는 최대화 하는 방향으로 나타냄

# L1 (맨하튼 거리)

격자 방식으로 픽셀상 거리를 나타냄, L2 유클리디안 거리는 블러리한 이미지 만들어냄

# 최종 목적함수(Objective)

Generator with skips

이전에는 입력이 여러 레이어를 통하면서 점점 다운샘플링 되고병목 레이어를 통화하고 나면 이러한 과정을 거꾸로 진행하는 처리

입력과 출력 사이에서 저수준의 정보를 공유   → 더 좋은 화질의 이미지 출력 가능

 i과 층 ni 잇는 skip connection만듬 (n은 전체 층의 )

skip connection은 층 i의 모든 채널을 그대로 ni층에 붙어있음

Markovian discriminator (PatchGAN)

#PatchGAN이란?

전체 영역이 아니라 특정 크기의 patch 단위로 가짜/진짜를 판별하고 그 결과에 평균을 구하는 방식

L1은 저주파 영역을 감당하고 D는 고주파 성분에 집중하여 가짜/진짜 여부를 판단함

픽셀들간의 연관성을 거리에 비례하여 작아짐(일정거리 이상 떨어지면 상호간의 관계가 의미가 없어짐)

특정 크기의 patch에 대하여 선명한 이미지 생성 비율을 찾고 학습을 한다면 G의 성능은 향상됨

전체 이미지의 가짜/진짜를 가리는 것보다 상관관계가 유지되는 범위의 적절한 크기를 정하는 것이 효율적임

 

Conclusion

# L1 + cGAN

전반적으로 보면 cGANGAN보다, 그리고 L1과의 combination이 더 좋은 결과를 내어줌.

DConditioning이 없는, Dx를 보지 않는 모델(GAN이라 표기/G에는 있음)

     사실 인풋과 아웃풋의 mismatch를 따지는 모델이 아니기 때문에 이 metric에서는 안좋은 성능일 수 밖에 없음.

L1을 사용한다는 것 ⇒ Discriminator가 하는 일은 변함이 없지만, GD를 속이는 일 뿐 아니라

    ground truth와의 L1 distance를 줄이는 일을 동시에 함

cGAN(특정) input과 비슷한 (특정) output을 생성하도록 지도받음

L1 lossground truth와 생성된 output이 서로 비슷해지도록 지도함

# Colorfulness

cGANcolor distributionground truth와 얼마나 matching하는지에 대한 표 (빨간색)

L1 이 더 narrowdistribution을 보이는데, averaged / grayish color를 만들어내기 때문

cGAN이 더 실제에 가까운 color distribution보임

# Fully-convolutional translation

PatchGAN은 고정된 패치 discriminator를 사용하므로 어떠한 이미지 크기에도 적용할 수 있다.

마찬가지로 generator또한 복잡하게 적용할 수 있으므로 학습할 때 보다 더 큰 이미지에도 적용할 수 있다.

256*256으로 학습했지만 512*512 결과물을 낼 수 있음

#  Semantic segmentation (영상분할)

아웃풋이 복잡하지 않을 때, 반대로 실험해본 결과

Photo에서 Lables로 바뀌는 값은 L1 loss만 사용하는 방법이 더 효과적

cGAN이 더 샤프한 아웃풋을 내주지만, 존재하지 않는 작은 오브젝트를 만들어냄

각각의 Traning Data에서 최대 3000장 정도가 사용/Architecture에서 Photo로 바꾸는 경우에는 400장밖에 사용

또한, training batch size1 또는 4로 작게 가져가고  4일때는 Batch Normalization을   1일때는 Instance Normalization사용

온라인에서도 변환가능  https://affinelayer.com/pixsrv/index.html

Style transfe?

두 영상(content image & style image)가 주어졌을 때

그 이미지의 주된 형태를 content image 유사하게 유지하고

스타일만 우리가 원하는 style image로 바꿔주는 것

Style image : 스타일을 추출해낼 이미지

Content image : 추출해낸 스타일을 적용시킬 이미지

Feature map 추출방법

Feature map 추출방법

오른쪽 아래 집 모양을 보면 약간 찌그러진 느낌

상위 레벨 feature 일수록 추상적임

Content image의 상위 레벨 하나의 feature

Style image의 모든 레벨의 feature correlation을 이용하여 Loss function을 정의함

High level content 적용시켜야지 디테일한 정보들이 사라지기에 Style이 좀더 강조

단순한 texture과 복잡한 texture을 가지고 일관된 texture만들어냄

[Content transfer]

이미지 사이의 content간의 차이는 content loss, Lcontent로 측정

정보의 추상화가 많이 이루어진 high level layerfeature map과 비교

L번째의 layer에서 content lossfeature간 차의 Frobenius norm 제곱

 

[Style transfer]

Stlye loss, Lstlye은 각 feature map에 대해 Gram matrix를 구하고 Gram matrix간의차 Frobenius norm의 제곱으로 정의

Gram matrix그림간의 유사성정향화 할때 사용(아래 수식 설명)

Low layer부터 high layer까지 다양한 수준의 loss를 계산하고 Weightes sum하여 Lstlye로 정의

L층에서 스타일 이미지에 대한 상관관계 행렬을 계산
l번째 층에 대한 스타일 비용함수는 두 상관관계의 차이를 프로베니우스 제곱 한 것

[최종 목적함수]

알파가 1고 베타가 0이면 content 이미지와 윤곽이 비슷한 이미지가 나옴

Lcontent는 상위 레이어에서 추출하고 있고 하위 레이어에서 추출한 feature을 사용

반면 알파가 0이고 베타가 1이면 style 이미지와 비슷한 이미지가 나옴

 

아래는 해당 논문입니다.

https://www.google.com/search?q=Image+Style+Transfer+Using+Convolutional+Neural+Networks&rlz=1C1CAFA_enKR837KR837&oq=Image+Style+Transfer+Using+Convolutional+Neural+Networks&aqs=chrome..69i57j69i60j69i59j0l3.694j0j8&sourceid=chrome&ie=UTF-8#

+ Recent posts