Open doublejy715 opened 3 years ago
global appearance transfer : 전체 영역을 대상으로 appearance를 transfer하는 듯.
DeepFaceDrawing에서 영감을 받았음.
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를 만들었다.
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를 통하여 차이를 비교하였다.
Appearance는 얼굴에 있어서 중요한 표현 요소이다. appearance feature을 추출하기 위해서 encoder(E_{appearance})를 만든다. 이 encoder는 appearance feature를 추출하고 공간 정보를 제거하기 위해서 global average pooling을 활용한다. 지역별로 appearance을 추출하기 때문에 공간정보가 사라져도 유용한 정보가 크게 손실되지 않는다.
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)가 만들어 진다.
이 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로 되어있다.
전체 Framework를 학습한 과정을 설명한다. Local Disentanglement module를 먼저 학습한다. 이후 Global Fusion module을 학습하게 된다.(이때 LD module parameter는 고정한다.)
논문의 network를 학습하기 위해서 수많은 sketch-image 한 쌍이 필요하다. 동시에 sketch를 준비할 때 중요한 점은 실제 hand-drawn sketches와 비슷하게 그려진 사진이어야 한다. 전통적인 edge extraction 방법으로는 HED, Canny가 있다. 그러나 이 방법은 hand-drawn sketch와 비슷한 edge map을 제공하지 못한다.
Sketch dataset
Image dataset
Data preprocess
3 step으로 LD module을 학습한다.
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})
다음 단계로 E{image}를 학습한다. 여기서는 real image(I{in})를 input으로 주면, geometry feature를 예측한 결과를 보여준다. 방식은 이전 geometry space를 학습한 과정과 동일하다. 수식 : f'{G} = E{image}(I_{in})
Loss loss functino L{image} 는 다음과 같이 정의된다. N(=7) : 디코더 D{sketch}의 layer 수. 0은 input image가 되고 N은 output image가 된다. 나머지 숫자는 중간 layer에서 나오는 feature map이 된다.
주의할 점은 E{image}를 optimizing 할 때 E{sketch}와 D_{sketch} weight를 고정한다.
다음부터 나올 내용에서 f{G} 와 f'{G}를 구분하지 않고 G라고 통합하여 부르도록 한다. 그리고 앞으로는 facial image에서 appearance 와 geometry 정보를 나누기 위해서 swapping strategy와 cycle-consistency loss를 적용하였다. 그리고 생성된 이미지가 실제적이기 위해서 muti-scale discriminator와 adversarial loss를 적용하였는데, 이를 자세히 다뤄보도록 한다.
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}) 라 표현한다.
I1의 geometry와 I'의 appearance를 가지고 image의 cyclic reconstruction를 설정하였다.
geometry와 appearance가 같은 이미지에서 나왔다면 (I1 = I2 = I) 논문의 framework를 지났을 때 같은 이미지가 재생성 되어야 한다. self-reconstruction loss는 3가지가 들어있다.
swappping loss 전체 식
geometry와 appearance feature를 더 확실하게 disentangle 하는 loss이다. geometry와 appearance feature를 서로 다른 source로부터 생성하여 swapping된 얼굴을 생성한다. (여기서는 I1 != I2 이다.)
L_{Geo} 식
얼굴 이미지에서 완벽하게 appearance feature와 geometry feature를 disentanglement 하는게 목적이다. 아이디어는 appearance 변환 후에도 geometry가 유지되게 하는게 목적이다. I1의 appearance를 I2 appearance로 바꾸는 swapping을 통해 I'가 생성되어도 I1의 geometry feature은 그대로 유지되어야 한다. L1 loss를 이용하여 I1과 I'의 geometry를 비교한다.
L_{Cycle} 식
아이디어는 변환 후에도 appearance가 유지되도록 하는것이 목적이다. I2의 geometry와 스왑된 I'(I1의 geometry와 I2의 appearnace를 가지고 생성한 이미지)이미지의 appearance를 가지고 다시 I2이미지를 만든다.
또한 생성된 이미지의 분포가 실제 이미지의 분포와 비슷하게 만들기 위해서 muti-scale discriminator D를 적용하였다.
위에서 소개된 3개 loss 전부를 합친다. L{Recon} ,L{Swap}, L_{GAN}
미리 학습된 Local Disentanglement module를 가지고 Global Fusion module를 학습시킬 수 있다. 이전과 비슷한 방법으로 adversarial loss, feature matching loss, perceptual loss를 사용하여 Global Fusion module를 학습한다. 여기서는 swapping strategy를 사용하지 않는다.
real image의 geometry와 real image appearance를 가지고 face style transfer 비교
sketch image로 geometry 정보를 주고 real image의 appearance를 가져온 경우.
sketch를 수정하여 얼굴 editing이 가능한 보습을 보인다.
geometry image의 얼굴 요소를 수정하여 appearance에 영향을 미칠 수 있다. 눈 크기, 콧수염, 주름, 턱수염 등이 있다.
appearance image를 수정하여 face editing을 실시한다. 얼굴 요소를 원하는 사람의 appearance로 대체하여 editing이 가능하다.
이 연구는 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에서 볼수있다. 얼굴의 pose가 정면을 바라보지 않거나 가려진 곳이 있다면 이상한 색이 얼굴에 나타난다. 또한 lighting는 이 연구의 framework에서 역시 disentangle하지 않기 때문에 sketch나 reference image를 이용해서 lighting condition을 조절하는 것은 어렵다.
1. Method skimming
Link
2. Related work
2.1 Neural Face Image Synthesis
Goodfellow이 만든 Generative Adversarial Networks(GAN)으로 실제적인 가상의 얼굴을 제작 가능하게 되었음.
그러나 위 모델을 가지고는 얼굴의 세세한 부분을 조정하지 못함.
이미지를 조절하기 위해서 Conditional GANs를 만들어 내고, 여기에 영감을 받은 다른 논문들이 나왔음. 1) semantic mask를 input으로 넣어주고 reference portrait를 참조하여 new face를 만들어 내는 방법 2) 바로 semantic mask를 넣어주는 것이 아니라, propose spatiallyadaptive normalization to progressively inject semantic information and achieve better visual quality for scene images(...?) 3) but, semantic mask를 이용한 방법들은 detail한 control에는 부족한 면이 보였음.
다른 방법으로 user-friendly한 geometry control 방법은 sketch가 있다. 누구나 쉽게 sketch 하고 원하는 모양을 표현할 수 있다. ex) Pix2Pix, SketchyGAN, LinesToFacePhoto 가 있다.
이 외에도 대충 그린 sketch로 부터 고퀄리티의 얼굴을 제공하는 DeepFaceDrawing이 있다. 여기서 sketch로 부터 생성되는얼굴 퀄리티를 높이기 위해서 local-to-global 접근과 leverages manifold projection을 이용하였다.
Sketch는 얼굴 윤곽 묘사만이 아니라 디테일한 부분까지 묘사할 수 있다. 그러나 sketch 스스로 appearance control에 관여할 수 없다.(속성 변화까지는 하지 못한다는 의미?)
2.2 Neural Face Editing
2.3 Neural Image Disentanglement
3. Methodology
DeepFaceDrawing에서 영감을 받았음.
3.1 Local Disentanglement
Local Disentanglement에서 주요 목적은 이미지(얼굴)의 5 요소(오른 눈, 왼 눈, 코, 입 , background)에서 geometry 정보와 appearance feature 정보를 각각 뽑아내는 것. 이를 위해서 Geometry Encoder와 Appearance Encoder를 디자인함. 그리고 서로 다른 이미지에서 추출한 geometry 특징과 appearance 특징을 합치기 위해서 Image Synthesis Generator를 만들었음. 이 Encoder와 generator들은 얼굴 요소 레벨의 이미지 patch를 만들기 위해서 고안되었음.
(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하는 과정인 것 같은데 조금 더 이해가 필요)
먼저 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을 제공하지 못한다.
Sketch dataset
Image dataset
Data preprocess
(2) Disentanglement Training
3 step으로 LD module을 학습한다.
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})
다음 단계로 E{image}를 학습한다. 여기서는 real image(I{in})를 input으로 주면, geometry feature를 예측한 결과를 보여준다. 수식 : f'{G} = E{image}(I_{in}) 방식은 이전 geometry space를 학습한 과정과 동일하다.
주의할 점은 E{image}를 optimizing 할 때 E{sketch}와 D_{sketch} weight를 고정한다.
다음부터 나올 내용에서 f{G} 와 f'{G}를 구분하지 않고 G라고 통합하여 부르도록 한다. 그리고 앞으로는 facial image에서 appearance 와 geometry 정보를 나누기 위해서 swapping strategy와 cycle-consistency loss를 적용하였다. 그리고 생성된 이미지가 실제적이기 위해서 muti-scale discriminator와 adversarial loss를 적용하였는데, 이를 자세히 다뤄보도록 한다.
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}) 라 표현한다.
I1의 geometry와 I'의 appearance를 가지고 image의 cyclic reconstruction를 설정하였다.
(3) Loss
Self-reconstruction loss
geometry와 appearance가 같은 이미지에서 나왔다면 (I1 = I2 = I) 논문의 framework를 지났을 때 같은 이미지가 재생성 되어야 한다. self-reconstruction loss는 3가지 용어가 들어있다
Cyclic swapping loss
swappping loss 전체 식
geometry와 appearance feature를 더 확실하게 disentangle 하는 loss이다. geometry와 appearance feature를 서로 다른 source로부터 생성하여 swapping된 얼굴을 생성한다. (여기서는 I1 != I2 이다.)
L_{Geo} 식
얼굴 이미지에서 완벽하게 appearance feature와 geometry feature를 disentanglement 하는게 목적이다. 아이디어는 변환 후에도 geometry가 유지되게 하는게 목적이다. I1의 appearance를 I2 appearance로 바꿔서 swapping을 통해 I
가 생성되어도 I1의 geometry feature은 그대로 유지되어야 한다. L1 loss를 이용하여 I1과 I
의 geometry를 비교한다.L_{Cycle} 식
아이디어는 변환 후에도 appearance가 유지되도록 하는것이 목적이다. I2의 geometry와 스왑된 I'(I1의 geometry와 I2의 appearnace를 가지고 생성한 이미지)이미지의 appearance를 가지고 다시 I2이미지를 만든다. reconstruction loss(L_{Recon})는 다음과 같이 수정된다.
최종 Swap 식은 다음과 같다.
Adversarial loss
또한 생성된 이미지의 분포가 실제 이미지의 분포와 비슷하게 만들기 위해서 muti-scale discriminator D를 적용하였다.(어떤 분포인지?)
(생성되는 이미지를 고퀄리티로 만들기 위해서 discriminator를 달아준다.이전 Loss와 관련된 input image와 생성되는 이미지 전부 discriminator 생성해줌)
L_{LD}
위에서 소개된 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를 사용하지 않는다.