doublejy715 / Paper_review

Paper_review
1 stars 0 forks source link

[ Skimming ] Barbershop: GAN-based Image Compositing using Segmentation Masks #35

Open doublejy715 opened 2 years ago

doublejy715 commented 2 years ago

Abstract

doublejy715 commented 2 years ago

1. Introduction

본 논문은 여러 reference image를 이용하여 image editing을 가능하게 하는 새로운 도구를 소개한다. 특히 hair editing에 특화되어 있다.

최근 latent space manipulation 기반으로 face editing 하는 모델들은 pose, expression, gender, age같은 속성들을 변화시킬 수 있었음.

다른 방식으로는 source image의 얼굴 속성을 target image에 부여하는 방식으로 image editing을 시도하였음.

hair transfer and face-swapping은 최근 많이 시도되는 image editing 이지만 매우 어려운 문제임. 속성을 가져올 때 빛, 얼굴, 옷, 배경 등의 여러 요소가 속성에 영향을 미치기 때문에 다른 이미지에서 얼굴 속성을 가져오면 부자연스럽게 보일 수 있음.

또한 카메라 각도와 포즈에 따라 보이지 않는 얼굴 요소를 예측하여 생산해야 된다는 점이 어렵게 다가옴.


본 논문에서는 다양한 hair transfer tasks를 위해서 4개 참조 이미지를 이용한다. reference image의 디테일한 부분까지 잘 생성하기 위해서 GAN-inversion을 이용하였음

FS latent space를 새롭게 소개함

이 latent space를 이용하면 특이한 성질(주름과 점)을 유지한 채로 manipulation을 가능하게 한다.

latent code를 수정하여 reference image들을 target feature location으로 얼굴 위치를 옮긴다. 이 semantic alignment step은 GAN-embedding algorithm을 사용 가능하게 해주는 key라 볼 수 있음(왜인지는 좀더 생각해봐야함...). 이 reference image의 특성을 유지한 채로 target mask의 위치에 맞게 embed를 한다.

embed 의 결과가 target mask에 맞는 reference image의 latent code를 생성해 내는듯(맞음)


정리

doublejy715 commented 2 years ago

3. Method

3.1. Overview

blend image를 생성하기 위한 mask 생성 방법

reference images의 semantic region을 선택해서 원하는 이미지를 합성가능함.

여기서는 자동으로 reference image에 segmentation을 하고 target semantic segmentation mask image M을 생성한다.

hairstyle transfer를 위해서 한 이미지에서는 hairstyle을, 다른 이미지에서는 semantic categories 정보를 가져온다.

K개의 reference image가 있다면(I_{k}) 으로 가정한다. 그리고 새로운 이미지를 생성하기 위해서 reference image에서 원하는 요소를 가져와 target mask에 align하고 blend한다.(생성된 이미지를 I^{blend}라 한다.)

blended image의 latent code를 찾는 방법

이전 방식으로는 blend 이후 artifact가 발생하는 단점이 있었음. (특히 blend boundary에 심했었음) 그래서 StyleGAN2 architecture에 II2S embedding algorithm 방식을 선택하였음.

our embedding(FS latent space)

(II2S안쓰고)embedding 성능과 image 디테일 표현 능력을 키우기 위해서 FS latent space를 소개함. $ C = (F, S) $

structure tensor F

StyleGAN2의 synthesis network 과정 중 style block의 출력을 가져왔음. 이 논문에서는 7번째 block(m=7)을 가져왔기 때문에 R^(32x32x512) 크기가 됨. 주로 얼굴 요소의 위치를 수정하거나 reference images에서 원하는 얼굴 요소를 가져오고 싶을 때 이용

appearance code S

structure tensor F에서 사용하지 않은 나머지 W+ latent code R^{(18-m)&512}를 이용한다. 주로 appearance 정보를 가지고 있음

FS latent space로 확장하면서 개개인에서 나타나는 얼굴 특징에 대한 디테일을 더 잘 잡을 수 있게 됨. 그러나 이러한 구조에서도 조심스러운 latent code manipulation을 통해서 face editing을 해야함.(잘못하면 아티팩트가 생성될 수 있음)

major steps

  1. reference image I_{k} 들의 segmented mask를 생성하고, 일부 수정하고 싶은건 수정한다.
  2. reference image I_{k} 들의 FS latent space에 embedding 하여 latent code를 얻어낸다.
  3. 2번째 과정에서 찾은 reference image의 latent code에서 새로운 얼굴 위치를 가진 latent code를 찾는다. 새로운 얼굴 요소 위치는 만들어 놓았던 target segmentation M를 참조한다. (물론 I_{k}의 identity가 유지되어야 한다.)
  4. F^{blend}는 align된 k개 reference images의 원하는 얼굴 요소를 가져와 합한 것이다.
  5. blend를 위한 appearance code S_{blend}는 mixture of aligned image의 appearance code이다.
doublejy715 commented 2 years ago

3.2 Initial Segmentation

target mask 생성

reference image들을 segment 한 다음에 원하는 얼굴 요소를 복사해서 target image에 붙여넣는다. M{k} = Segment(I{k}) (BiSeNET을 이용하여 segmentation 진행하였음)

mask를 만들때 자동으로 reference image에서 그대로 가져올 수 있지만 수동으로 직접 마스크를 수정해도 된다.

target segmentation mask M 영역과 동일한 위치에 얼굴 요소가 존재하는 새로운 이미지 I^{blend}를 만드는 것이 주요 목적이다.(단순히 I^{blend}와 target segmentation mask M은 pair라 보면 편할 듯) I^{blend}는 reference image I_{k}로 부터 transfer 하여 생성된다.

M(x,y) = k : mask의 x,y 픽셀 위치에는 reference image의 순번이 기록되어 있다고 가정한다.

자동 target mask 생성 방법에 대하여

target mask의 각 픽셀들 (M(x,y))은 k 값으로 설정되어 있음. k는 참조한 inference image 순번을 의미함. k 의 값은 우선순위에 따라 정렬되므로 k값이 높을 수록 중요도가 떨어진다.(나중에 합성된다. 위에 존재하게 된다.)

k 값 관련해서 설명이 있음. label 1로 skin을 설정하고, skin은 머리에 가려져 있으니까 hair을 label 13으로 설정(중요한건 더 큰 값으로 설정한다는 점이다)

translate가 잘 되려면?
얼굴이 이미지 중심에 있어야 한다. 정렬 관련해서는 생략함

doublejy715 commented 2 years ago

3.3 Embedding

먼저 reference image들을 mask 머리 형태에 적합한 이목구비를 가진 새로운 reference image를 align해서 target mask M와 일치시킨다. 본 논문에서는 align 방식을 두가지로 분류했음 (1) Reconstruction : input image I{k}를 recon하기 위해서 latent code C^{rec}{k}를 찾아낸다. (2) Alignment : target mask M과 생성된 이미지 간 cross-entropy 값을 최소화시켜 C^{align}_{k}를 찾는다.

3.3.1 Reconstruction

input image I{k}에서 reconstruction code C^{rec}{k}를 찾는 방법을 소개한다. 이후 G(C^{rec}{k})를 이용해 I{k}를 만들어 낸다.(G는 stylegan2의 synthesis network임)

II2S를 시작하기 위한 reconstuction code C^{rec}{k} 찾아내고, II2S는 StyleGAN2의 W+ latent-space에 embedding된 latent code w^{rec}{k} 를 찾아준다.

C^{rec}{k} -> [ II2S ] -> w^{rec}{k} -> [ G ] -> I_{k}

W / W+ & II2S

reconstruction algorithm은 reconstruction quality 와 suitability간 trade-off를 통해서 editing이나 image compositing이 이루어진다. W latent space는 512개의 vector만 존재하므로 디테일한 부분까지 묘사하기 어렵다. W+ latent space와 II2S를 이용하면 latent space의 표현력이 증가하지만, 여전히 괜찮은 reconstruction을 만들어 내기엔 역부족 이었음.

W+ VS FS space

noise embedding을 이용하면 거의 완벽한 reconstruction 이 가능하지만 dataset의 artifact에 overfitting 되어 recon, edit에는 부적합 할 수 있음.

noise embedding 없이 W+ space 보다 더 쉽게 control 가능함. 또한 새로운 이미지를 design 하는 것도 가능.

spatially correlated signal을 이용한 latent code를 통해서 얼굴 디테일을 묘사할 수 있었음. stylegan2 generator의 style-blocks 출력을 이용하여 spatially-correlated structure-tensor F를 만들었음.

학습 이야기

F^{init}{k} = G{m}(w^{rec}{k}) : recon을 위한 w latent code를 synthesis network에 넣고, m번 째 style block output을 가지고 나온 것이 F^{init}{k} (18 - m) 번째 style block 들의 input인 w^{rec}{k} 들은 S^{init}{k} 가 된다.

think : 내 생각으로는 init이 reference image의 원본 에서 튀어나온 w,F,S 인듯하다. 여기서 말하는 C는 SF latent space 상에서 만들어진 이미지를 의미하는 듯하다.

C^{rec}{k} = arg min L{PIPS}(C) + L_{F}

넘어감

3.3.2 Alignment

각 reference image I{k}를 latent code C^{rec}{k}로 얻을 수 있게 되었음. 이 C^{rec}{k}는 tensor F^{rec}{k}, appearance code S^{rec}_{k}로 구정되어 있음.

C^{rec}{k}는 I{k}의 appearance를 가지지만, target segmentation 에 맞춰서 디테일이 align 되지 않았음.(여전히 original reference image의 detail을 가지고 있음) 그래서 target segmentation과 일치하는 latent code C^{align}{k}를 찾아야 함.(물론 reference image에서 많이 벗어나지 않도록 C^{rec}{k} 근처에서 찾아야 함)

공간 정보를 가진 F^{rec}{k}를 바로 수정하는 대신에 W+를 이용해서 F^{align}{k}를 만들었음.

순서 : F^{rec}{k}찾기 -> target segmented mask align과 일치한 w^{align} 만들기 -> transfer F^{align}{k} 찾기

approach for finding a latent code

SEGMENT * G : semantic segmentation의 generator

GAN inversion(II2S)를 새로운 generator(SEGMENT * G)에 이용해서 w^{align}를 만들어 냄. G(w^{align})은 target segmentation과 일치한 모습의 이미지를 생성할 수 있음.

그러나 segmentation mask는 많은 이미지에서 같은 모습을 보일 수 있으므로 GAN inversion에 적합하지 않음. 그래서 가능한 한 original reference image의 latent code와 비슷하게 만들어 지도록 노력함. (???) L_{2}, L{1}, style loss를 복합적으로 사용하여 최선의 align 이미지를 생성하도록 만듦.

seg mask를 가지고 G(w^{align}) 을 생성할 때 original image의 style을 유지하기 위해서 masked style-loss 를 사용하였음.(LOHO) LOHO 에서 특정 영역에 대한 feature activation의 gram matrix를 계산하기 위해 static mask를 사용하였음.

학습시 새로운 latent code를 생성하고, 그 latent code로부터 image 와 segmentation을 만들어 낸다.

loss는 gram matrix를 기반으로 만들어 졌다.

K{l}(I) = r^{T}{l} * r_{l}

r{l} ( R^{H{l}W_{l}C{l}} ) 은 VGG network의 l번째 activation layer로 되어 있다. 또한 영역 k에 대한 mask를 다음과 같이 정의한다.

image

좌항은 이미지에서 category k가 있는 영역을 나타낸 마스크이다.

lantent code w 로부터 생성된 이미지와 target image I_{k} 를 가지고 gram matrices 간 차이로 만들었음. 물론 semantic region 안에서만 평가함.

image

VGG - 16 network에서 relu1_2, relu2_2, relu3_3, relu 4_3 에서 나오는 출력물을 합하였음.

find an aligned latent code

segmented image와 style loss는 cross-entropy로 계산하고, gradient descent로 최소화 하였음.

image

train result

저자는 mask의 위치에 맞고, 스타일은 input image에서 가져오는 이미지가 필요하다.(F^{align})

그래서 W^{align} latent code가 input image의 w^{rec} latent code과 비슷하게 되기 전에 학습을 그만두었다.

그래서 100 iter에서 멈춤, 50 ~ 200 iter 는 퀄리티가 비슷함을 찾음.

수식들

doublejy715 commented 2 years ago

3.3.3 Structure Transfer

이제 w^{align} 으로 그럴듯한 align된 이미지를 얻었다. 그렇지만 디테일한 스타일이 여전히 original image를 따라가지 못하고 있음. Fig 3(e) vs Fig 3(f)

target mask는 항상 완벽하게 reference image에 일치하게 있지 않으며 머리 모양은 target mask를 따라가기 때문에

image I{k}의 structure와 appearance를 F{k}부터 안전하고 디테일 하게 뽑아오기 위해 binary mask를 이용함.

image 위와 같은 마스크를 각각 만든다.

image

3.4 Structure Blending

blended image를 생성하기 위해서 structure tensor 요소를 합성한다. weight a{k.m} 과 C^{align}{k}를 이용하여 합성함.

image

3.5 Appearance Blending

본 논문에서 blending 방식은 S^{blend}에 대한 style code를 찾는 것이다. S^{blend}를 찾는 학습을 할 때 masking 된 상태에서 LPIPS distance를 loss로 사용한다.

doublejy715 commented 2 years ago

4. Results

TITAN Xp graphics card * 1사용

4.1 Dataset

4.2 Competing methods

MichiGAN, LOHO

4.3 Comparsion

4.3.1 User Study

4.3.2. Reconstruction Quality

reconstruction quality of an embedding를 측정하기 위해서 RMSE, PSNR, SSIM, VGG perceptual similarity, LPIPS perceptual similarity, FID score를 이용하였음. table 1을 참조하면 됨

4.4 Ablation Study

Fig 9 를 통해서 hair transfer 정로를 가능해 볼 수 있음

first column

4.5 Qualitative Results

본 방법을 사용하였을 때 다양하고 괜찮은 결과를 얻을 수 있는 방법을 설명한다.

4.6 Limitations

  1. FS latent space를 통해서 recon 능력을 올렸지만, 여전히 보석, 장식품 같은 물체를 생성하는데 한계점이 보임. Fig 10(2, 4)
  2. occlusion이 발생하면 이상한 결과를 가져다 줌. Fig 10(3, 5) 부분적으로 얇은 머리카락은 잡아내기 힘들어 그냥 얼굴이 보임
  3. reference image와 target segmentation mask가 완전하게 overlap되지 않으면 aligning embedding이 잘 안됨
  4. structure tensor가 target mask에 일치하도록 해야 Fig10(6) 현상이 덜생긴다.