doublejy715 / Paper_review

Paper_review
1 stars 0 forks source link

DeepFaceEditing: Deep Face Generation and Editing with Disentangled Geometry and Appearance Control #28

Open doublejy715 opened 2 years ago

doublejy715 commented 2 years ago

1. Method skimming

Link

2. Related work

2.1 Neural Face Image Synthesis

2.2 Neural Face Editing

2.3 Neural Image Disentanglement

3. Methodology

DeepFaceDrawing에서 영감을 받았음.

image

(1) Geometry Encoder

geometry encoder에 들어가는 input은 2종류가 있다. sketch image와 real image가 있다. sketch input인 경우 auto-encoder network에 쓰일 필수적인 geometry 정보를 추출하기 용이하다.(sketch 그림이 보통 윤곽을 묘사한 geometry 정보를 가지고 있기 때문) 문제는 real image이다. real 얼굴 요소를 input image로 주기 위해서 먼저 image-to-sketch translation network를 거쳐 sketch image를 생성한다. 그리고 이를 geometry encoder input으로 입력한다.

image-to-sketch translation network를 생성하기 위해서 2개의 auto-encoder(하나는 sketch용, 다른 하나는 real image용)를 학습 한다. image space의 latent distribution을 sketch space에 aligning 하는 방식으로 geometry information만 encoder에서 뽑을 수 있도록 위해 학습시킨다.(disentangle하는 과정인 것 같은데 조금 더 이해가 필요)

image

먼저 sketch의 중간 특성을 생성하기 위해서 학습한 네트워크는 encoder(E{sketch})와 decoder(D{sketch}) 이다. 몇 가지 중요한 정보를 얻기 위해서, bottleneck layer 안의 latent space에서 low-resolution feature map을 얻는다. 이때 input과 output image는 sketch가 된다. sketch는 real image에서 뽑아낸 정보이거나 hand-drawn sketches 수 있다.

위 이미지의 하단 encoder의 input image는 real image이며 decoder의 output image는 input image에 대응되는 geometry feature image이다. encoder(E_{image})를 input image의 sketch geometry 정보를 표현한 latent space에 대응되도록 학습 시켰다.

f{G}와 f'{G}가 같도록 학습시키고 decoder의 각 레이어의 feature map 차이를 비교하고 decoder의 output은 L1 loss를 통하여 차이를 비교하였다.

(2) Appearance Encoder

Appearance는 얼굴에 있어서 중요한 요소 중 하나다. appearance feature을 추출하기 위해서 encoder(E_{appearance})를 하나 적용한다. 이 encoder는 appearance feature를 추출하고 공간 정보를 제거하기 위해서 global average pooling을 활용한다. 개별 지역별로 appearance을 추출하기 때문에 공간정보가 사라져도 유용한 정보가 크게 손실되지 않는다. face appearance와 geometry간의 disentangled interpolation 관련 실험 결과는 facial appearance space를 continuous하고 smooth하게 효과적으로 학습하였음을 보인다.

(3) Image Synthesis Generator

Input으로 독립된 정보인 geometry와 appearance representation을 받는다. image synthesis generator은 이것들로 reconstruction / swapping result를 만든다. 생성된 얼굴 이미지의 appearance를 조절하기 위해서, AdaIN을 적용했다. 이 generator는 4개의 residual block과 4개의 up-sampling layer로 구성되어 있으며, appearance feature가 이것들에게 주입된다. 그리고 input image resolution과 동일한 embedding feature(64 channel)로 만들어 진다.

sketch-to-image task와 다르게 논문의 framework는 실제 얼굴 이미지가 input이고 appearance feature를 분리해 낸다. 뿐만 아니라, 컨트롤 가능한 sketch-based face editing 네트워크는 사용자에게 사용하기 용이하다.

3.2 Global Fusion

이 module generate는 local image feature을 가지고 최종 얼굴 이미지를 생성해 낸다. local image feature에서 자연스럽게 보이는 얼굴 이미지를 생성하기 위해서, 가능한 방법은 그냥 바로 local image patch들을 바로 적용하거나 component-level feature maps을 생성하는 곳에 convolution layer를 추가하는 것이다.(Why??) 그러나 이런 직접적인 접근은 다른 요소들의 가장자리에 아티펙트가 나타날 가능성이 있다.(기존 얼굴에 다른 얼굴 요소를 넣게 되면 경계가 나타나게 된다.) 그래서 바로 합치는 방법보다 Local Disentanglement module에서 나온 feature map을 이용하기로 한다. 이 feature map은 image generation network에 넣기 전 feature map을 이용한다. 이러한 방법으로 network는 더 information flow 지향적이게 되고 놓은 퀄리티 이미지를 생성하도록 한다. 구체적으로 Global Fusionmodule은 3가지로 구성되어 있다. DeepFaceDrawing, pix2pixHD와 비슷한 encoder, residual blocks, decoder로 되어있다. background 요소 feature map에다가 다른 component patches를 넣어준다. 이 과정은 background요소에 다른 요소를 올릴 때 발생하는 차이를 줄이기 위해서 실시한다. 이 합쳐진 feature map을 Global Fusion module에 넣어줘서 새로운 얼굴을 생성한다.

3.3 Training Process

전체 Framework를 학습한 과정을 설명한다. Local Disentanglement module를 먼저 학습하고 이후 Global Fusion module을 LD module parameter를 고정시켜 학습하게 된다.

(1) Training Dataset

논문의 network를 학습하기 위해서 수많은 sketch-image 한 쌍이 필요하다. 동시에 sketch를 준비할 때 중요한 점은 실제 hand-drawn sketches와 비슷하게 그려진 사진이어야 한다. 전통적인 edge extraction 방법으로는 HED, Canny가 있다. 그러나 이 방법은 hand-drawn sketch와 비슷한 edge map을 제공하지 못한다.

(2) Disentanglement Training

3 step으로 LD module을 학습한다.

  1. 3.1 section에서 언급한 대로 E{sketch}와 D{sketch}을 학습한다. 이는 sketch를 위한 geometry latent space를 학습하기 위함이다. loss는 L1 reconstruction loss를 적용하였다. 한번 E{sketch}를 학습하면 input sketch image에서 geometry feature map을 얻게 된다. 수식 : f{G} = E{sketch}(S{in})

  2. 다음 단계로 E{image}를 학습한다. 여기서는 real image(I{in})를 input으로 주면, geometry feature를 예측한 결과를 보여준다. 수식 : f'{G} = E{image}(I_{in}) 방식은 이전 geometry space를 학습한 과정과 동일하다.

Loss loss functino L{image} 는 다음과 같이 정의된다. image N(=7) : 디코더 D{sketch}의 layer 수. 0은 input image가 되고 N은 output image가 된다. 나머지 숫자는 중간 layer에서 나오는 feature map이 된다.

주의할 점은 E{image}를 optimizing 할 때 E{sketch}와 D_{sketch} weight를 고정한다.

  1. E{appearance}와 image synthesis generator G{syn}를 학습한다. 마지막 과정을 학습하기 위해서 E{sketch}와 E{image} weight를 고정한다. geometry feature f{G}의 sketches 나 real image에서 나온 feature map f'{G}를 G_{syn} input으로 넣어준다.

다음부터 나올 내용에서 f{G} 와 f'{G}를 구분하지 않고 G라고 통합하여 부르도록 한다. 그리고 앞으로는 facial image에서 appearance 와 geometry 정보를 나누기 위해서 swapping strategy와 cycle-consistency loss를 적용하였다. 그리고 생성된 이미지가 실제적이기 위해서 muti-scale discriminator와 adversarial loss를 적용하였는데, 이를 자세히 다뤄보도록 한다.

image

2개 요소 이미지인 I1(real image or sketch)와 I2(real image)를 training set input로 준다. I1과 I2을 E{sketch} 또는 E{image}를 이용하여 geometry feature를 뽑아 f1{G} 와 f2{G}를 얻는다. I2에서 E{appearance}를 이용하여 appearance feature f2{A} 를 얻는다.I2의 geometry feature를 I1 이미지의 geometry feature로 바꿔서 I' 를 생성한다. I' = G{syn}(f1{G},f2_{A}) 라 표현한다.

스크린샷 2021-11-13 오후 4 06 24

I1의 geometry와 I'의 appearance를 가지고 image의 cyclic reconstruction를 설정하였다.

(3) Loss

Self-reconstruction loss

스크린샷 2021-11-13 오후 4 29 26

geometry와 appearance가 같은 이미지에서 나왔다면 (I1 = I2 = I) 논문의 framework를 지났을 때 같은 이미지가 재생성 되어야 한다. self-reconstruction loss는 3가지 용어가 들어있다

  1. Perceptual loss(L_{VGG}) generated image와 input image간 시각적 유사도를 측정하는 loss이다. pretrained된 VGG-19 네트워크에 대상 이미지를 넣어준다.
  2. Feature matching loss(L_{FM}) discriminator에 쓰이는 loss이다. training process를 안정화 해준다.
  3. Lab color loss(L_{Lab}) a와 b 채널 간에 chromatic 거리를 계산한다. 이는 이미지의 color tone을 CIE-LAB color space로 바꿔준다.

Cyclic swapping loss

최종 Swap 식은 다음과 같다.

스크린샷 2021-11-13 오후 5 01 01

Adversarial loss

또한 생성된 이미지의 분포가 실제 이미지의 분포와 비슷하게 만들기 위해서 muti-scale discriminator D를 적용하였다.(어떤 분포인지?)

스크린샷 2021-11-13 오후 5 07 58

(생성되는 이미지를 고퀄리티로 만들기 위해서 discriminator를 달아준다.이전 Loss와 관련된 input image와 생성되는 이미지 전부 discriminator 생성해줌)

L_{LD}

스크린샷 2021-11-13 오후 5 19 48

위에서 소개된 3개 loss 전부를 합친다. L{Recon} ,L{Swap}, L_{GAN}

(4) Global Fusion Training

미리 학습된 Local Disentanglement module를 가지고 Global Fusion module를 학습시킬 수 있다. 이전과 비슷한 방법으로 adversarial loss, feature matching loss, perceptual loss를 사용하여 Global Fusion module를 학습한다. 여기서는 swapping strategy를 사용하지 않는다.

doublejy715 commented 2 years ago

1. Introduction

2. Related work

2.1 Neural Face Image Synthesis

2.2 Neural Face Editing

2.3 Neural Image Disentanglement

3. Methodology

DeepFaceDrawing에서 영감을 받았음.

3.1 Local Disentanglement

Local Disentanglement에서 주요 목적은 2개 이미지에서 얼굴 요소를 추출한다. 그리고 두 이미지의 style과 geometry를 mixing한 feature map을 만드는 것이다.
(얼굴 요소 : 오른 눈, 왼 눈, 코, 입, 이미지 전체)

LD module input은 2개의 얼굴 요소 이미지이다. geometry 정보를 추출할 I1 image, appearance 정보를 추출할 I2 image가 들어온다. mixed feature map을 뽑기 위하여 Geometry Encoder와 Appearance Encoder를 만들었다. I1 이미지에서 추출한 geometry 특징과 I2 이미지에서 추출한 appearance 특징을 합치기 위해서 Image Synthesis Generator를 만들었다.

image

(1) Geometry Encoder의 학습

image

geometry encoder에 들어가는 input은 2종류가 있다. sketch image와 real image가 있다. sketch input인 경우 auto-encoder network에 쓰일 필수적인 geometry 정보를 추출하기 용이하다.(sketch 그림이 보통 윤곽을 묘사한 geometry 정보를 가지고 있기 때문) 문제는 real image이다. real image를 주기 위해 image-to-sketch translation network를 거쳐 sketch image를 생성한다.

image-to-sketch translation network를 생성하기 위해서 2개의 auto-encoder(하나는 sketch용, 다른 하나는 real image용)를 학습 한다. image space의 latent distribution을 sketch space에 aligning 하는 방식으로 geometry information만 encoder에서 뽑을 수 있도록 학습시킨다.

먼저 sketch의 중간 feature map(f{G})을 생성하기 위해서 학습한 네트워크는 encoder(E{sketch})와 decoder(D_{sketch}) 이다. input과 output image는 sketch가 된다. sketch는 real image에서 뽑아낸 정보이거나 hand-drawn sketches 수 있다. sketch image를 output으로 재생성 하기 위한 중요한 정보를 얻기 위해 bottleneck layer 안의 latent space에서 low-resolution feature map을 얻는다.

위 이미지의 하단 encoder의 input image는 real image이며 decoder의 output image는 input image에 대응되는 geometry feature image이다. encoder(E_{image})를 input image의 sketch geometry 정보를 표현한 latent space에 대응되도록 학습 시켰다.

f{G}와 f'{G}, decoder의 각 레이어의 feature map, decoder의 output은 L1 loss를 통하여 차이를 비교하였다.

(2) Appearance Encoder

Appearance는 얼굴에 있어서 중요한 표현 요소이다. appearance feature을 추출하기 위해서 encoder(E_{appearance})를 만든다. 이 encoder는 appearance feature를 추출하고 공간 정보를 제거하기 위해서 global average pooling을 활용한다. 지역별로 appearance을 추출하기 때문에 공간정보가 사라져도 유용한 정보가 크게 손실되지 않는다.

(3) Image Synthesis Generator(G_{syn})

Input으로 독립된 정보인 geometry와 appearance representation을 받는다. image synthesis generator은 이것들로 reconstruction / swapping result를 만든다. 생성된 얼굴 이미지의 appearance를 조절하기 위해서, input appearance에 AdaIN을 적용했다. 이 generator는 4개의 residual block과 4개의 up-sampling layer로 구성되어 있으며, appearance feature가 각 layer에 주입된다. 결과적으로 input image resolution과 동일한 embedding feature(64 channel)가 만들어 진다.

3.2 Global Fusion

이 module generate는 local image feature을 가지고 최종 얼굴 이미지를 생성해 낸다. local image feature에서 자연스럽게 보이는 얼굴 이미지를 생성하기 위해서, Local Disentanglement module에서 나온 feature map을 이용한다. background 요소 feature map에다가 다른 component patches를 넣어준다. 이 과정은 real image에서 background요소에 다른 얼굴 요소를 올릴 때 boundary에서 발생하는 아티펙트를 없애기 위해서 실시한다. 이 합쳐진 feature map을 Global Fusion module에 넣어줘서 새로운 얼굴을 생성한다. Global Fusion module의 구조는 크게 3가지로 구성되어 있다. DeepFaceDrawing, pix2pixHD와 비슷한 encoder, residual blocks, decoder로 되어있다.

3.3 Training Process

전체 Framework를 학습한 과정을 설명한다. Local Disentanglement module를 먼저 학습한다. 이후 Global Fusion module을 학습하게 된다.(이때 LD module parameter는 고정한다.)

(1) Training Dataset

논문의 network를 학습하기 위해서 수많은 sketch-image 한 쌍이 필요하다. 동시에 sketch를 준비할 때 중요한 점은 실제 hand-drawn sketches와 비슷하게 그려진 사진이어야 한다. 전통적인 edge extraction 방법으로는 HED, Canny가 있다. 그러나 이 방법은 hand-drawn sketch와 비슷한 edge map을 제공하지 못한다.

(2) Disentanglement Training

3 step으로 LD module을 학습한다.

  1. section 3.1 에서 언급한 대로 E{sketch}와 D{sketch}을 학습한다. 이는 sketch의 geometry latent space를 학습하기 위함이다. loss는 L1 reconstruction loss를 적용하였다. 한번 E{sketch}를 학습하면 input sketch image에서 geometry feature map을 얻게 된다. 수식 : f{G} = E{sketch}(S{in})

  2. 다음 단계로 E{image}를 학습한다. 여기서는 real image(I{in})를 input으로 주면, geometry feature를 예측한 결과를 보여준다. 방식은 이전 geometry space를 학습한 과정과 동일하다. 수식 : f'{G} = E{image}(I_{in})

Loss loss functino L{image} 는 다음과 같이 정의된다. image N(=7) : 디코더 D{sketch}의 layer 수. 0은 input image가 되고 N은 output image가 된다. 나머지 숫자는 중간 layer에서 나오는 feature map이 된다.

주의할 점은 E{image}를 optimizing 할 때 E{sketch}와 D_{sketch} weight를 고정한다.

  1. E{appearance}와 image synthesis generator G{syn}를 학습한다. 마지막 과정을 학습하기 위해서 E{sketch}와 E{image} weight를 고정한다. geometry feature f{G}의 sketches 나 real image에서 나온 feature map f'{G}를 G_{syn} input으로 넣어준다.

다음부터 나올 내용에서 f{G} 와 f'{G}를 구분하지 않고 G라고 통합하여 부르도록 한다. 그리고 앞으로는 facial image에서 appearance 와 geometry 정보를 나누기 위해서 swapping strategy와 cycle-consistency loss를 적용하였다. 그리고 생성된 이미지가 실제적이기 위해서 muti-scale discriminator와 adversarial loss를 적용하였는데, 이를 자세히 다뤄보도록 한다.

image

2개 요소 이미지인 I1(real image or sketch)와 I2(real image)를 training set input로 준다. I1과 I2을 E{sketch} 또는 E{image}를 이용하여 geometry feature를 뽑아 f1{G} 와 f2{G}를 얻는다. I2에서 E{appearance}를 이용하여 appearance feature f2{A} 를 얻는다.I2의 geometry feature를 I1 이미지의 geometry feature로 바꿔서 I' 를 생성한다. I' = G{syn}(f1{G},f2_{A}) 라 표현한다.

스크린샷 2021-11-13 오후 4 06 24

I1의 geometry와 I'의 appearance를 가지고 image의 cyclic reconstruction를 설정하였다.

(3) Loss

Self-reconstruction loss

스크린샷 2021-11-13 오후 4 29 26

geometry와 appearance가 같은 이미지에서 나왔다면 (I1 = I2 = I) 논문의 framework를 지났을 때 같은 이미지가 재생성 되어야 한다. self-reconstruction loss는 3가지가 들어있다.

  1. Perceptual loss(L_{VGG}) generated image와 input image간 시각적 유사도를 측정하는 loss이다. pretrained된 VGG-19 네트워크에 대상 이미지를 넣어준다.
  2. Feature matching loss(L_{FM}) discriminator에 쓰이는 loss이다. training process를 안정화 해준다.
  3. Lab color loss(L_{Lab}) a와 b 채널 간에 chromatic 거리를 계산한다. 이는 이미지의 color tone을 CIE-LAB color space로 바꿔준다.

Cyclic swapping loss

Adversarial loss

또한 생성된 이미지의 분포가 실제 이미지의 분포와 비슷하게 만들기 위해서 muti-scale discriminator D를 적용하였다.

스크린샷 2021-11-13 오후 5 07 58

L_{LD}

스크린샷 2021-11-13 오후 5 19 48

위에서 소개된 3개 loss 전부를 합친다. L{Recon} ,L{Swap}, L_{GAN}

(4) Global Fusion Training

미리 학습된 Local Disentanglement module를 가지고 Global Fusion module를 학습시킬 수 있다. 이전과 비슷한 방법으로 adversarial loss, feature matching loss, perceptual loss를 사용하여 Global Fusion module를 학습한다. 여기서는 swapping strategy를 사용하지 않는다.

4. Experiments

4.1 Results and Evaluation

Face Style Transfer

image real image의 geometry와 real image appearance를 가지고 face style transfer 비교

Sketch-based Face Image Synthesis

image sketch image로 geometry 정보를 주고 real image의 appearance를 가져온 경우.

Face Editing

sketch image editing

image sketch를 수정하여 얼굴 editing이 가능한 보습을 보인다.

appearance edit through geometry image editing

image geometry image의 얼굴 요소를 수정하여 appearance에 영향을 미칠 수 있다. 눈 크기, 콧수염, 주름, 턱수염 등이 있다.

appearance editing

image appearance image를 수정하여 face editing을 실시한다. 얼굴 요소를 원하는 사람의 appearance로 대체하여 editing이 가능하다.

5. Conclusion, limitations

이 연구는 face generation과 editing을 위해서 disentanglement framework를 하나 소개했다. 주로 관점은 geometry와 appearance 특성 얼굴 이미지는 효과적으로 disentangled 가능 했다는 점이다. 그리고 sketches는 geometry feature에 있어서 이상적인 중간적 위치를 제공한다.
geometry와 appearance간 disentanglement component-level은 Local Disentanglement module에서 얻어진다. Global Fusion module은 feature map의 facial image pathces로 부터 일관된 local-to-global image를 생성하도록 한다.

이 연구의 한계점 중 한가지는 geometry와 appearance만 disentangle 가능하다는 것이다. 다른 attribute들은 (head pose와 같은 것들) 고려되지 않았다. 이것은 Figs 17 / 18에서 볼수있다. image image 얼굴의 pose가 정면을 바라보지 않거나 가려진 곳이 있다면 이상한 색이 얼굴에 나타난다. 또한 lighting는 이 연구의 framework에서 역시 disentangle하지 않기 때문에 sketch나 reference image를 이용해서 lighting condition을 조절하는 것은 어렵다.