2 minute read

CP-VITON

  • ECCV 2018 ACCEPTED

VITON의 후속작 격인 논문이다. 이전 VITON은 shape context matching 을 통해서 spatial deformation 은 해결하려고 했지만, 몸의 형태와 옷을 제대로 맞춰서 융합시키지 못했기 때문에 퍼포먼스가 다소 떨어졌다. 그래서 위 논문에서는 옷의 로고, 주름 등 보다 더 자세한 특징을 잡을 수 있는 Characteristic-Preserving Image-based Virtual Try-On NEtwork (CP-VTON)를 제시한다. 두 개의 모듈로 되어있는데 (a) Geometric Matching Module 과 (b) Try-On Module이 있다.

$c_i$를 입고 있는 레퍼런스 이미지 $I_i$ 에 target clothing 인 $c_o$를 입혀서 $I_o$라는 이미지를 만든느 것이 해당 논문의 태스크 이다. 그냥 생각해봤을 때, ($I_i$, $c_o$, $I_o$) 이 세 가지를 모두 가지고 있으면, ground truth가 있으므로 제일 쉽게 학습시킬 수 있다. 하지만 이런 3가지 정보를 모두 가지고 있는게 어렵기 때문에, 앞선 연구 에서는 ($I_i$, $c_i$) 이 두 가지 정보를 가지고 학습시켜서 $f(I_i, c_i)$ = $I_i$ 를 할 수 있게끔 한다. 하지만 이러면 identity mapping 이 되버리니까 직접적으로 $I_i$ 를 인풋으로 사용하지 않고 대신 person representation p 를 사용한다.

여기서 Person representation p 는 총 3개의 정보를 갖게 된다.

  • Pose Heatmap: “Realtime multiperson 2d pose estimation using part affinity fields” 에서 나온 pose estimator 로 18개의 키포인트 정보를 담은 히트맵이다. 18 채널을 가지고 있다.
  • Human body representation: ” Look into person: Self-supervised structure-sensitive learning and a new benchmark for human parsing.” 에서 나온 human parser 로 대략적인 몸통의 형태를 0과 1로 표현한 매트릭스 를 얻는다.
  • Face and Hair: 앞에 사용했던 human parser로 얼굴과 머리카락 정보를 받는다.

(a) GMM (Geometric Matching Module)

in-shop 이미지 (c) 와 input image representation (p) 를 align하는 것을 의미한다. 그래서 사람 형태에 맞는 warped clothes를 만들어서 다음 모듈에 넘어가게 된다. warped clothes를 만드는 $\theta$ 는 spatial transformation parameter로 TPS (Thin-Plate Spline) transformation 모듈의 파라미터라고 생각하면 된다. ($\hat{c} = T_\theta(c)$)그래서 이렇게 나온 아웃풋을 가지고 기존 사람이 입고 있는 옷 이미지와 L1_loss로 계산하면 된다.

$L_{GMM}(\theta) = \lVert \hat{c}-c_t \rVert_1 = \lVert T_\theta(c) - c_t \rVert_1$

VITON 과 다르게 따로 feature extractor를 쓰지 않았고, 직접적으로 L1 loss를 주기 때문에 좀 더 warping 된 옷의 형체과 사람의 몸과 잘 맞춰지도록 했다.

(b) Try-on Module

이제 옷이랑 사람 몸이 잘 맞춰졌으니, 이제 그 옷을 사람 이미지에다 입히는 일만 남았다. 예전에는 U-net 구조를 써서 encoder-decoder 형태로 네트워크를 만들어서 사람 이미지를 만들었다. 하지만, 이 방법은 이미지를 blurry하게 만들거나, 타겟 몸 모양과 옷이 제대로 안 맞춰지는 등 많은 문제를 야기했다. 따라서 이를 해결하기 위해 대충 만들어진 Rendered Person $I_r$ 과 Composition Mask $M$ 을 두 개를 아웃풋으로 내는 encoder-decoder 네트워크를 만들었다. 그래서 파이널 아웃풋은

$I_o = M \otimes \hat{c} + (1-M)\otimes I_r$

으로 나타낼 수 있다. ($\otimes$는 element-wise operation이다.) 그리고 gt 값인 $I_t$ 와 $I_o$ 의 비교는 그냥 L1 loss 로 계산한다. 대신 feature extractor를 한 번 거친다.

$L_{vgg}(I_o, I_t) = \sum_{i=1}^{5}\lambda_i\lVert \phi_i(I_o) - \phi_i(I_t) \rVert_1$

$\phi$ 는 feature extractor인데 앞서 봤던 VITON에서 썼던 방법 그대로, VGG19의 5개 layer를 선택해서 L1 loss를 준다.

$L_{TOM} = \lambda_{L1} \lVert I_o - I_t \rVert 1 + \lambda{vgg}L_{VGG}(\hat{I}, I)

  • \lambda_{mask} \lVert 1 - M \rVert _1$

위의 식은 이 논문의 전체적인 목적 함수를 나타낸다.

Experiments

  • Dataset: VITON에서 사용했던 데이터셋 그대로 씀. 19,000개의 옷 과 해당 옷을 입은 여성의 pair-wise 된 데이터셋 이다.

image

확실히 마스킹 사용하는게 잘 되는 것 같다. 디테일도 잘 살아있고.. 다만 아직은 옷의 한 부분밖에 변형을 못한다는 것과(상의랑 하의 동시 바꾸는게 안 됨) 팔 로 가려진 부분 주변이 되게 어색한 등 이상한 형태를 보인다.

Comments