최근 GAN 연구로 사실적인 머리카락이나 얼굴은 잘 생성하지만, 하나의 이미지로 그럴듯하게 결합하는 것은 여전히 어려움
제안
GAN inversion 기반으로 헤어스타일 변환을 위한 이미지 블렌딩에 새로운 솔루션 제시
세부 정보를 보존하고 공간 정보를 인코딩하는 1) 새로운 latent space를 제안하고, 2) segmentation mask에 맞게 이미지를 수정할 수 있는 새로운 GAN-embedding 알고리즘 제안
결과
본 연구에서 제안한 새로운 표현은 여러 참조 이미지에서 점과 주름과 같은 detail과 같은 시각적 특성을 전송할 수 있고, latent space에서 이미지 혼합을 수행하기에 일관성 있는 이미지를 합성
다른 접근 방식에 존재하는 blending artifact를 피하고 전역적으로 일관된 이미지를 찾음
3. METHOD
Overview
Reference image에서 머리카락이나 얼굴과 같은 의미 있는 영역들을 고르고 각 영역을 혼합하여 합성 이미지를 만든다.
→ reference image는 자동 분할하고, target semantic segmentation mask image M 을 사용한다.
헤어스타일 전송을 위해 한 이미지에서 헤어스타일을 복사하고 semantic-category에서 다른 이미지를 사용한다.
→ reference image set Ik는 각각 target mask에 정렬된 다음 혼합되어 새로운 영상을 형성
Contribution
Output : Reference image Ik의 스타일을 갖는 합성 이미지 Iblend
혼합 이미지에 대한 latent code를 찾음으로써 전통적인 아티팩트인 '혼합 영역의 경계에서 이미지 블렌딩' 아티팩트를 피함
StyleGAN2 architecture 사용 및 II2S 임베딩 알고리즘을 확장
II2S : StyleGAN2 의 18개 affine 스타일 블록의 입력을 𝑊+ latent code로 사용
latent code C=(F,S)를 사용하여 이미지 임베딩
임베딩의 용량을 늘리고 이미지 세부 정보 캡처
structure tensor F∈R32x32x512 : StyleGAN2의 7번째 레이어에 있는 스타일 블록의 출력
appearance code S∈R(18−m)×512 : 나머지 스타일 블록에 대한 입력으로 사용
② Alignment
2. Reference image Ik를 분할 알고리즘을 통해 자동적으로 분할하여 target mask M 생성하거나 수동 생성
3. Reference image Ik와 유사하면서도 target mask M과 일치하는 이미지의 임베딩인 latent code Ckalign=(Fkalign,Sk)를 찾음
③ Blending
4. 결합 structure tensor Fblend는 Falign의 분할 영역 k를 복사하여 형성
5. Appearance code Sk에 대한 혼합 가중치로 appearance code Sblend 는 정렬된 이미지의 모양을 혼합하며, 혼합 가중치는 새로운 masked-appearance loss function을 사용하여 발견
Data preprocessing
Reference image는 두 눈과 입 사이의 거리를 기반으로 이미지를 잘라내고, 이미지의 크기를 조정하는 얼굴을 기반으로 정렬하는 facial landmark detection을 통해 기본 1024 x 1024 이미지로 전처리된다.
① Embedding
이미지를 혼합하기 전 각 이미지를 target mask M에 정렬해야 한다.
Reconstruction : 입력 이미지 Ik를 재구성하기 위해 latent code Ckrec를 찾음
Alignment : 생성된 이미지와 target mask M 사이의 cross-entropy를 최소화하는 latent code Ckalign를 찾음
Reconstruction
목표 : 입력 이미지 Ik를 잘 재구성하는 Ckrec를 찾는 것
G(Ckrec) : reconstruction the image Ik
G : StyleGAN2 generator
초기화 : StyleGAN2의 II2S를 통해 얻은 W+ 잠재 공간으로부터 잠재 코드 wkrec를 초기화
II2S
기존 StyleGAN2의 잠재 공간 W 에는 512개의 구성 요소 로는 일반적인 detail은 표현 가능하지만, 얼굴의 특정 detail(점, 주름, 속눈썹의 정확한 위치)을 인코딩하는 것은 불가능했다. 이를 개선하기 위한 W+ 공간과 II2S의 사용은 latent space의 표현성을 향상시키지만, 재구성에는 불충분하다. 따라서 본 연구에서는 향상된 재구성을 위해 FS 공간이라는 새로운 latent space에 이미지를 임베딩한다.
Latent code를 부분적으로 사용하여 얼굴의 특정 detail을 포착한다. Latent code C는 latent code W+ 보다 더 많은 capacity를 가지며, 각 reference image를 재구성하기 위해 초기값으로 W + latent code를 사용하여 gradient descent를 적용한다.
Ckrec=(Fkrec,Sk)
structure tensor Fkinit=Gm(wkrec) : generator의 블록 중 하나의 출력(본 연구에서는 m=7)
appearance code Skinit=wkrec : 나머지 (18−m)개의 wkrec 블록
Latent code C는 LPIPS(C)를 최소화하면서 기존 W+(Fkinit)와 최대한 비슷한 latent code F를 찾는 방향으로 최적화된다.
Perceptual loss
기본적으로 이미지 간의 perceptual 손실을 측정하는 지표로, 이미지 간의 비교에 사용된다. 본 연구에서는 기존 인풋 이미지를 resizing한 ref_im_L과 generator를 통해 생성한 후 downsampling한 gen_im_L을 비교한다.
L_F loss self.opts.l_F_lambda * (latent_F - F_init).pow(2).mean()를 통해 기존 W+(Fkinit)와 최대한 비슷한 latent code F를 찾는다.
따라서 원본 이미지와의 차이를 최소화하면서 기존 W+(Fkinit)와 최대한 비슷한 latent code F를 찾는 것이 주 목적이다. 최종 loss는 아래와 같다.
LE=L2+Lp+LPIPS(C)+LF
② Alignment
Initial Segmentation
Reference image는 자동으로 분할되고 target image로 복사할 영역이 선택된다. 목표는 reference image Ik로부터 M(x,y)=k인 이미지의 위치(x,y)에서 시각적 특성이 전달되도록 target mask M과 일치하는 합성 영상 Iblend를 형성하는 것이다.
Mk=SEGMENT(Ik)
SEGMENT : segmentation network(BiSeNET)
M은 자동으로 생성되고 수동 편집 가능
Target mask를 자동으로 구성하기 위해 각 픽셀 M(x,y)은 Mk(x,y)=k 조건을 만족하는 값 k로 설정한다. 이때, Segmentation mask 간의 충돌을 해결하기 위해(둘 이상의 k에 대해 Mk(x,y)=k 조건 충족), k 값이 우선순위에 따라 정렬되어 합성된다.
Inpainting
Mk(x,y)=k 이 어떤 k에 대해서도 충족되지 않을 때, 일부 픽셀은 segmentation mask에 포함되지 않을 수 있다. 이 경우, 대상 마스크의 일부는 휴리스틱 방법을 사용하여 인페인팅한다.
Alignment
목표 : aligned image의 wkalign을 찾은 뒤 Fkrec를 이용해 Fkalign를 찾는 것
Ckrec=(Fkrec,Sk)는 target M에 정확히 정렬되지 않는다. 따라서 M과 일치하고 latent space에서 Ckrec 와 비슷한 latent space Ckalign를 찾아야 한다.
그러나 Fkrec의 detail은 공간적으로 상관 관계가 있기 때문에 Ckalign를 직접 최적화하기 어렵다. 대신 먼저 W+ latent code를 찾고 W+로 정렬된 이미지를 찾아낸 다음 Fkrec를 이용해 Fkalign를 찾을 수 있다.
Latent code를 찾기 위해 semantic segmentation network SEGMENT와 generator G를 합성하여 미분 가능한 sementic segmentation generator Seg∘G 구성한다. loss를 최소화하기 위해 이 generator에 GAN inversion(예: II2S)을 사용하면, latent code walign을 찾을 수 있고, 이를 통해 G(walign)은 분할이 대상 분할과 일치하는 이미지가 된다.
Lalign=XEnt(M,segment(G(walign)))
GAN Inversion
입력 이미지와 유사한 결과 이미지를 얻을 수 있도록 하는 latent vector를 찾는 과정
그러나 서로 다른 이미지일지라도 동일한 semantic segmentation을 생성할 수 있으므로 GAN inversion은 segmentation mask에 적합하지 않다. 또한 참조 이미지의 원래 latent code와 최대한 유사한 이미지를 찾는 것을 목표로 하기 때문에 참조 이미지의 내용을 보존하기 위해 style losse만 사용하여 결과를 도출한다.
aligned image G(walign)와 원본 이미지 Ik 사이의 스타일을 보존하기 위해 style loss를 사용한다. LOHO에서 설명된 masked loss는 특정 영역 내에서만 feature activation의 gram matrix를 계산하기 위해 정적 마스크를 사용한다. 반면, 본 연구에서는 각 gradient descent 단계가 새로운 latent code를 생성하고 이는 새로운 생성 이미지 및 분할로 이어지기에 각 단계에서 사용된 마스크는 동적이다. LOHO에서 착안하여 loss를 gram matrix에 기반한다:
Kℓ(I)=γℓTγℓ,(3)
γℓ∈RHℓWℓ×Cℓ : matrix formed by the activations of layer ℓ of the VGG network
gram matrix
벡터들 간의 내적을 통해 생성되는 행렬로 주로 벡터들 사이의 관계를 이해하는 데 사용
ρk(Ik)⊙Ik : 의미 영역 k 외부의 모든 픽셀을 0으로 설정하여 이미지 마스킹
alignment loss
Lalign(W)=XEnt(M,SEGMENT(G(W)))+λsLs(6)
XEnt : multi-class cross-entropy function
Falign 만 구하는 것이 목적이기에 정렬 중에 F에 해당하는 W + 공간 부분만 최적화
초기 reconstruction code wrec 근처에 walign latent code를 유지하기 위해 early-stopping
λS : LOHO에서 설정한 값
mask 와 image 모두 iteration step 마다 update
Structure Transfer
walign을 사용한 정렬은 그럴듯한 이미지를 생성하지만 세부 정보의 표현이 필요하다.
잘라낸 얼굴 이미지에서 겹치는 영역은 공간적으로 정렬되므로 해당 영역 내에서 재구성된 이미지의 구조를 전송한다. 이때, target mask가 참조 이미지의 영역과 항상 완벽하게 정렬되어 있지는 않다는 점을 유의해야 한다. Ik에서 Fk로 structure와 appearance을 전송하기 위해 binary mask를 사용하여 detail을 복사할 영역 정의한다: target mask M
αk(x,y)=1{M(x,y)=k}(7)
reference image’s maskMk
βk(x,y)=1{Mk(x,y)=k}(8)
1{⋅} : indicator function
레이어 ℓ의 activation 차원과 일치하도록 αk,ℓ을 bicubic-resampling을 사용하여 다운샘플링하면 αk
Structure tensor
각 reference 이미지 𝑘에 대해 정렬된 latent representation Ckalign를 구할 수 있다.
Gm(wkalign) : Generator 안 m번째 style-block의 output
αk,m⋅βk,m : [0, 1], target 이미지와 reference 이미지의 semantic class가 동일하기 때문에 Fkrec에서 구조를 복사
(1−αk,m⋅βk,m) : detailed feature을 재구성하는 능력이 덜한 wkalign 를 복사
③ Blending
Structure Blending
structure tensor Fkalign와 appearance code Sk를 혼합하여 최종 이미지를 합성할 수 있다. 혼합 이미지를 만들기 위해 가중치ak,m를 사용하여 Ckalign의 structure tensor 요소를 결합하여 structure tensor 혼합한다. 각 reference image의 coarse structure는 각 structure tensor의 영역 결합으로 간단하게 합성할 수 있지만, appearance code를 혼합하는 것은 더 복잡하다.
Fblend=k=1∑Kak,m⊙Fkalign(10)
☉ : element wise multiplication
Appearance Blending
서로 다른 K개의 reference code Sk의 혼합인 단일 style code Sblend를 찾아야 한다. Sblend를 찾기 위해 마스킹된 부분을 LPIPS 거리 함수를 loss로 최적화한다. VGGℓ는 채널 차원에 걸쳐 정규화된 convnet(VGG)의 ℓ layer의 activation을 나타낸다. 해당 텐서의 모양은 Hℓ,Wℓ이며, Cℓ 채널이다.
Sblend를 찾기 위해 latent code를 정렬된 reference codes(Sk)와 가까운 영역 내에 머무르도록 한다. GAN inversion의 불안정한 특성으로 인해, 제약이 없으면 loss를 과도하게 적합시키거나, 입력들로부터 멀리 떨어진 코드를 찾을 수도 있다.
본 연구에서 제한된 해결책은 가능한 latent code들의 집합을 임베딩 공간의 작은 부분으로 제한한다. k개의 다른 혼합 가중치 U={uk} 집합을 찾는 것으로, 각 uk는 R(18−m)×512의 벡터이다.
Sblend=k∑uk⊙Sk(14)
k∑uk=1,(uk≥0)(15)
Sblend의 각 요소는 reference code Sk의 해당 요소의 convex combination
I=G(Cblend)로 Lmask를 최소화 → projected gradient descent을 사용하여 Cblend를 찾음
blended image가 reference image 중 하나의 복사본이 되도록 U를 초기화