# Multi-Garment Net 筆記
2019
## **Abstract**
從1~8張frames預測身體形狀&衣服形狀,並把此衣服穿到另一個人的身上,這人有不同的身形和體態。
為了訓練MGN,用了數個衣服模型register到3D scan的dataset,建構了數位衣櫥。
不論是數位衣櫥或是用MGN預測出來的衣服模型,都可以用來dress
## **1.Introduction**
以往的方法缺乏真實性與控制性,因為只用一個model同時呈現人的身體model和衣服model。
這篇paper是第一個能夠直接從圖片中得到人體model和這個人身上的衣服model。而且有更好的visual quality,並且能將衣服上的材質轉移到另一件同款衣服上
為了做到這個目標,需要解決兩個問題:
1. 從3D scan學習衣服model
2. 從image重建衣服model
衣服template有長短袖、長短褲和外套這五種,但同樣是某一種衣服會有顯著的不同,首先會將template和scan衣服的輪廓的差異最小化,同時保留template表面的**Laplacian**,這的步驟只需要解**線性系統**,這個global操作對之後的registration有很大的影響。
在Registration時,學習每個衣服的vertex based PCA model。
MGN訓練時會被給予多張images、body pose and shape、各個衣服的PCA係數、encode衣服細節的PCA位移,這是bottom-up的估計。
在test時,拿衣服和身體的投影去解釋輸入的semantic segmentation,這比silhouette matching更細緻。
主要貢獻如下:
1. 第一個只用RGB image分離衣服和身體model
2. 健全的3D scan segmentation和從衣服template register到人身上的衣服。
3. Top-down objective function讓衣服和身體model去吻合semantic segmentation images。
4. 展示數個以往做不到的應用:用預測的衣服模型dress另一個人、轉移texture和geometry。
## **2.Related Work**
有兩個研究的分支與此方法最有關聯:
1. Capture of clothing and body shape
2. data-driven clothing models
### Performance Capture
將mesh變形到跟影片中的人一樣,因為是影片所以有各種角度可以參考。雖然靈活,需要multi-view,深度相機
[SimulCap](https://www.youtube.com/watch?v=rTdz3saGKsQ)
### Body and cloth capture from images and depth
有人提供系統標出衣服範圍。
有人從database中拿出與輸入相似的衣服model。
### Data-driven clothing.
很少有network model是從真實資料學習來的。
也有從scan data學習來的模型,但這篇paper將不同的服裝進行細分,以實現清晰的邊界和更多的控制。
這篇paper參考[ClothCap](https://www.youtube.com/watch?v=dVxj8tzx04U)的方法,更重要的是,還學習了每個衣服的network model,直接從image預測身型和衣服geometry。
## **3. Method**
356個scan樣本
### 3.1. Data Pre-Processing: Scan Segmentation and Registration
[ClothCap](https://www.youtube.com/watch?v=dVxj8tzx04U)register一個template到一段4D scan影像,而這篇是register一個template到多個風格、geometry、身形和姿勢的對象。以下列出與ClothCap主要不同之處。
**<Body-Aware Scan Segmentation**>
首先將scan分成skin、上衣和褲子(在scan中會標註衣服種類)
由於segmentation不精確,我們在non-rigid對齊後在SMPL表面的UV-map上求解MRF(Appendix1)來結合body specific garment priors和segment scans。
garment prior可以從可能與SMPL身體model重疊的vertex收集,因為即使同一種衣服也可能差異很大,定義了cost會隨著**geodesic distance**(Appendix2)增加

在La色彩空間結合CNN semantic segmentation和appearance terms based GMM,在補充資料有更多說明。
解出UV map的MRF後,把label標註到scan,可以將scan分割成3個部分(上衣、褲子和外套)。
**<Garment Template>**
SMPL基本原理為對template採用一連串的線性位移,然後做standard skinning *W(·)*

| Parameter | Meaning |
| -------- | -------- |
| M(·) | Human body function |
| θ | Pose |
| β | Shape |
| t | Global translation |
| D | optional per-vertex displacements |
| J | skeleton |
| W(·) | Standard skinning function|
| B~p~(·) | pose-dependent deformation funtion |
| B~s~(·) | shape-dependent deformation funtion |
| W | blend weight |
每個衣服種類都有template G^g^,使I^g^為indicator matrix,若衣服vertex i與身體vertex j有關聯,I^g^~i,j~=1。
SMPL身體模型與衣服的Displacements如下

紅線為公式2。
Unposed衣服模型T^g^如下

T是公式2,乘上I會得到衣服與身體重疊部分,再加上D把衣服放在身體外面。
Posed衣服模型G用到公式1的skinning function

\#Pose控制身體在某個姿勢下的身體擠壓,J把身體依據關節點擺放肢體。
**<Garment Registration>**
給segmented scans後,non-rigidly register到身體和衣服model,困難點是衣服的幾何形狀差異很大,會讓registration失敗。因此會先將每個衣服template根據SMPL的β和θ變形,得到G^g^~init~。值得注意的是,每種衣服template是固定的,會與scan邊緣對不上。為了globally變形,用了基於**Laplacian deformation**(Appendix3)的目標函式。
令L^g^∈ R^mg×mg^為**graph Laplacian**(Appendix4),∆~init~=LG^g^~init~ ∈ R^mg×3^。從每個scan boundary的vertex S~b~找衣服最近的邊緣vertex,有C個scan points q~1:C~,以及與之對應的template vertex j~1:C~,用I~C×mg~去索引template的vertex對應到q的哪個vertex。

1. 表面結構
上面的L^g^乘上G^g^代表G^g^的Laplacian變化,也就是distortion term。
2. boundary
下面的衣服vertex要盡量變成scan的vertex位置,也就是fitting term。
而常數w用來控制上述兩者的Loss比例。先用這個linear方法得到初步結果,再用non-linear nonrigid registration可避免non-linear陷入不好的區域最佳解。
衣服頂點的Loss
1. Interpenetration

w是常數,y是最靠近x(在S上)的點
2. Distortion

v^0^~k~用公式5,S^0^用公式1
**<Dressing SMPL>**
用公式3、4、5去變形衣服,函式C(θ, β, D)回傳身體模型和衣服模型,更多資訊在Supp.
### 3.2. From Images to Garments
學習衣服的Shape space,用合成的訓練資料,包含image和對應的身體、衣服模型。
**<Garment Shape Space>**
為了移除pose對衣服shape的影響,把registrations的衣服unpose,做PCA得到 pose-invariant shape basis B^g^,用35個component z^g^為衣服shape做encode,再加上位移向量D^hf,g^~j~,衣服模型G^g^ = B^g^ x z^g^ + D^hf,g^~j~,j代表第j個衣服。
每一個scan也會抽取身體的shape資訊,這對衣服retarget到另一身體是必須的。
**<MGN: Multi-Garment Net>**
Input: 數張(1~8) semantically segmented images, 2D joint預測。
下述的θ代表關節角度和平移。
Base network f~w~將segmentation和2D joint映射到每個frame的latent code:
* 與3D pose有關的l~p~、
* Body shape l~β~
* Garments l~g~


(公式11用每張image得到的body shape/garment隱碼得到平均隱碼,感覺是用平均的方式避免極端值的影響,在精確的虛擬試衣目標,是個好方法嗎?)
為每種衣服訓練M^g^~w~(·),映射l~g~到un-posed衣服G^g^,公式如下,z^g^是低頻PCA係數,D是高頻位移。

隱碼 l~β~和l~θ~分別用來預測身體shape β和pose θ,用一個FCN。
有了從預測來的β和衣服幾何資訊M^g^~w~(l~g~,B^g^),可以像公式3一樣計算位移。


因此使用C(β, θ~f~ , D)獲得第f個frame的3D posed vertices。
(後面的differentiable renderer [27], R~f~,不太懂要幹嘛。)
### 3.3. Loss functions
* Shape Loss
θ = 0~θ~,等於只看shape的loss

* Shape + Pose Loss

* 2D segmentation loss

I~f~:semantically segmented images;
R~f~:rendered semantic segmentation image
* Intermediate losses



F:image數量
L:garments數量
z hat:ground truth PCA garment參數
這個loss可以穩定訓練。
### 3.4. Implementation details
**<Base Network (f^∗^~w~)>**
用CNN映射輸入{I,J}到身體β、θ和衣服的隱碼,5層捲積+max-pooling。
平移不變性使得無法捕捉區域特性,為了產生細節,需要利用2D特徵和特徵所在的位置,為了這個目的,把像素的座標接在每層CNN的輸出。把2D關節點的預測J接在θ隱碼後面。
三個Fully connected layer和average pooling作用在衣服和θ隱碼(和Supp圖對不起來)
**<Garment Network (M^g^~w~)>**
每種衣服有自己的神經網路。
神經網路有兩個分支:
1. 預測整體的mesh
衣服隱碼l~g~為輸入,有兩層FCN去回歸計算PCA係數,將這些係數和PCA basis內積得到base garment mesh。
2. 增加高頻細節
用一個FCN去回歸計算剛剛得到的mesh上的位移,將這個位移限制在1公分以內,否則會蓋掉PCA得到的mesh。
## **4. Dataset and Experiments**
**Dataset**
356個3D掃描,其中70個用來testing。
Multi-mesh registration的身體和衣服model可以re-posed和re-shaped,因此可以做data augmentation。
我們不知道物體的size、與相機的距離。

### 4.1. Experiments
**Qualitative comparisons**
(Qualitative data are measures of 'types' and may be represented by a name, symbol, or a number code.)
和[這篇論文](https://www.youtube.com/watch?v=_wuEru4WeDw)比較,下圖左方為比較對象的結果,下圖右方為本篇論文結果,衣服的建模讓本篇論文的distortion比較小。

**Quantitative Comparison**
(Quantitative data are measures of values or counts and are expressed as numbers.)
一樣與[這篇論文](https://www.youtube.com/watch?v=_wuEru4WeDw)比較,計算衣服的symmetric error E^g^

N:衣服mesh數量
S^g^~i~:g這個衣服的第i個mesh的頂點集合
d(v~k~, *S*):頂點v和表面*S*的L2距離
此篇方法的error為5.78mm,另一篇的error為5.72mm,另一篇會更好的原因是:這篇paper確保只有semantically正確的頂點可以去解決3D shape的位置,但是另一篇可以更大程度的distortion以符合目標。
值得注意的是,MGN用linear function(PCA係數)預測衣服model,而另一篇論文用GraphCNN,PCA的方法雖然容易處理但會得到較smooth的結果,但也對各種衣服的geometry有了固定的拓樸方式。
**GT vs Predicted pose**
從θ和β得到3D vertex,想知道θ和β分別造成多少loss,所以有以下ablation study,兩個情景:
1.用自己預測的3D Pose,error=11.90mm
2.用GT Pose,error=5.78mm
上述的error和公式18一樣,為vertex-to-surface error。
### 4.2. Re-targeting
unposed space:沒有姿勢,即為T pose
此篇論文提出以及比較兩種方法:
1. Naive re-targeting
用公式13從來源目標計算衣服位移D^s,g^,再用公式5穿到目標身體。
2. Body aware re-targeting
前一個方法,來源的身體和目標身體是不一樣的身體,會造成更嚴重的滲透。
以下為此方法:


v^s^~k~: 原衣服頂點
S^s^~Ik~:來源身體最靠近v^s^~k~的頂點,索引為Ik
S^t^~Ik~:目標身體索引為Ik的頂點

三組圖,每組最左邊的圖得到衣服模型,穿在中間的人身上。
## **5.Conclusion and Future Works**
* 第一個model可以從少數照片重建出身體和衣服mesh。
* Re-dressing
* 第一個registered的真實衣服模型dataset。
## Appendix
### 1. Markov Random Field
第N+1時刻的分佈特性,與某時刻以前的隨機變數的取值無關
### 2. Geodesic distance
Geodesic distance測地距離和Euclidean Distance不同,測地距離為實際上可以經過的空間所加起來的距離,歐式距離則是直接連線,測地距離直觀上類似DFS必須經過存在的點來計算距離
下圖中,Geodesic distance(實線)與Euclidean Distance(虛線)

以3D模型來說,Geodesic Distance就是兩頂端沿網格表面最短路徑的距離

### 3. Laplacian Deformation
剛性對齊無法解決形狀差異
這是一個最小化的問題,同時讓source和目標長的一樣(Fitting term),但也盡量不讓source失真(Distortion term)

更多公式推導資訊在[Laplacian Deformation](https://www.cse.wustl.edu/~taoju/cse554/lectures/lect08_Deformation.pdf)。
### 3. Graph Laplacian
Graph Laplacian = Degree matrix - Adjacency matrix

---
# Supp Material
* MGN Architexture

* Additional Results
本篇方法的Segmentation和Laplacian init很重要。
1.Segmentation:
下圖中左2圖片因為切割做得不好,左3褲腳有變形,最右邊的圖片是切割正確後產生的mesh。
2.Laplacian init:
下圖右邊的褲子mesh因為沒有做Laplacian deformation,沒有把mesh對齊到邊緣上,在這個例子看起來比較短,中間則是有做Laplacian。

<font color=#FF0000>
我的目標是要做3D試衣間,所以不會用衣服Retarget和從圖片Registration成3D模型,衣服模型從廠商可得到,我只需要得到衣服中的人體模型即可。
</font>
* Inferring 3D garments and underlying body
用15張frame去預測,mean vertex-to-surface error為5.43mm,2張為6.38mm。
下圖為衣服的error。

作者也計算有高頻位移的情況下,error=5.78,沒有的話error=6.44mm。
* Texture Transfer
衣服Shape做得不好。

* Garment Re-targeting
有用3D data或是直接從影像做Retargeting。
| 3D | Images 2 |
| -------- | -------- |
|  |  |
這是第一個不知衣服拓樸資訊下,只用影像做re-targeting的方法。
有在各式各樣的shape做re-targeting,也有比較naive 和 body aware re-targeting。
左:Source; 中:Naive; 右:body aware

* Limitations and Future Work:
1.沒有處理pose的deformation
2.Skinning很方便,但是對誇張的pose有artifacts
3.Retargeting很依賴segmentation

4.Source人物穿比較長的衣服,換成短袖會有原本衣服的材質在身上。

5.沒有建模頭髮。