# 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)增加 ![](https://i.imgur.com/6UMSsgh.png) 在La色彩空間結合CNN semantic segmentation和appearance terms based GMM,在補充資料有更多說明。 解出UV map的MRF後,把label標註到scan,可以將scan分割成3個部分(上衣、褲子和外套)。 **<Garment Template>** SMPL基本原理為對template採用一連串的線性位移,然後做standard skinning *W(·)* ![](https://i.imgur.com/3dXyAZe.png) | 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如下 ![](https://i.imgur.com/b4HWwM7.png) 紅線為公式2。 Unposed衣服模型T^g^如下 ![](https://i.imgur.com/WDcZ8tP.png) T是公式2,乘上I會得到衣服與身體重疊部分,再加上D把衣服放在身體外面。 Posed衣服模型G用到公式1的skinning function ![](https://i.imgur.com/x3jNZ6H.png) \#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。 ![](https://i.imgur.com/lY7mIX8.png =500x) 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 ![](https://i.imgur.com/pUGQmPu.png) w是常數,y是最靠近x(在S上)的點 2. Distortion ![](https://i.imgur.com/uenVcZ1.png) 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~ ![](https://i.imgur.com/WeXAByi.png =400x) ![](https://i.imgur.com/gVfURS5.png =500x) (公式11用每張image得到的body shape/garment隱碼得到平均隱碼,感覺是用平均的方式避免極端值的影響,在精確的虛擬試衣目標,是個好方法嗎?) 為每種衣服訓練M^g^~w~(·),映射l~g~到un-posed衣服G^g^,公式如下,z^g^是低頻PCA係數,D是高頻位移。 ![](https://i.imgur.com/QcVpGch.png) 隱碼 l~β~和l~θ~分別用來預測身體shape β和pose θ,用一個FCN。 有了從預測來的β和衣服幾何資訊M^g^~w~(l~g~,B^g^),可以像公式3一樣計算位移。 ![](https://i.imgur.com/7LS7Ga5.png) ![](https://i.imgur.com/b4HWwM7.png) 因此使用C(β, θ~f~ , D)獲得第f個frame的3D posed vertices。 (後面的differentiable renderer [27], R~f~,不太懂要幹嘛。) ### 3.3. Loss functions * Shape Loss θ = 0~θ~,等於只看shape的loss ![](https://i.imgur.com/VgPHPh9.png) * Shape + Pose Loss ![](https://i.imgur.com/Tylbtrk.png) * 2D segmentation loss ![](https://i.imgur.com/Wn31tg9.png) I~f~:semantically segmented images; R~f~:rendered semantic segmentation image * Intermediate losses ![](https://i.imgur.com/DpkGlM7.png =400x) ![](https://i.imgur.com/fSHKP0P.png =300x) ![](https://i.imgur.com/l8fILq1.png =400x) 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、與相機的距離。 ![](https://i.imgur.com/F8hyT8u.png) ### 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比較小。 ![](https://i.imgur.com/kUrBHeZ.png) **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^ ![](https://i.imgur.com/dkTsPiJ.png) 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 前一個方法,來源的身體和目標身體是不一樣的身體,會造成更嚴重的滲透。 以下為此方法: ![](https://i.imgur.com/iyyHnCE.png) ![](https://i.imgur.com/1medLqK.png) v^s^~k~: 原衣服頂點 S^s^~Ik~:來源身體最靠近v^s^~k~的頂點,索引為Ik S^t^~Ik~:目標身體索引為Ik的頂點 ![](https://i.imgur.com/w3HQws9.png) 三組圖,每組最左邊的圖得到衣服模型,穿在中間的人身上。 ## **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(虛線) ![](https://i.imgur.com/bALo3re.png =300x) 以3D模型來說,Geodesic Distance就是兩頂端沿網格表面最短路徑的距離 ![](https://i.imgur.com/bbPFcbR.png =400x) ### 3. Laplacian Deformation 剛性對齊無法解決形狀差異 這是一個最小化的問題,同時讓source和目標長的一樣(Fitting term),但也盡量不讓source失真(Distortion term) ![reference link](https://i.imgur.com/7E44ndb.png) 更多公式推導資訊在[Laplacian Deformation](https://www.cse.wustl.edu/~taoju/cse554/lectures/lect08_Deformation.pdf)。 ### 3. Graph Laplacian Graph Laplacian = Degree matrix - Adjacency matrix ![](https://i.imgur.com/9PjI96y.png) --- # Supp Material * MGN Architexture ![](https://i.imgur.com/D3JWqZT.png) * Additional Results 本篇方法的Segmentation和Laplacian init很重要。 1.Segmentation: 下圖中左2圖片因為切割做得不好,左3褲腳有變形,最右邊的圖片是切割正確後產生的mesh。 ![](https://i.imgur.com/JrxnZHS.png)2.Laplacian init: 下圖右邊的褲子mesh因為沒有做Laplacian deformation,沒有把mesh對齊到邊緣上,在這個例子看起來比較短,中間則是有做Laplacian。 ![](https://i.imgur.com/PZlLWsD.png) <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。 ![](https://i.imgur.com/Es7zdoa.png) 作者也計算有高頻位移的情況下,error=5.78,沒有的話error=6.44mm。 * Texture Transfer 衣服Shape做得不好。 ![](https://i.imgur.com/db4Q6cM.png) * Garment Re-targeting 有用3D data或是直接從影像做Retargeting。 | 3D | Images 2 | | -------- | -------- | | ![](https://i.imgur.com/FsaSX1L.png) | ![](https://i.imgur.com/Y9IKPLv.png) | 這是第一個不知衣服拓樸資訊下,只用影像做re-targeting的方法。 有在各式各樣的shape做re-targeting,也有比較naive 和 body aware re-targeting。 左:Source; 中:Naive; 右:body aware ![](https://i.imgur.com/gQzdQGu.png) * Limitations and Future Work: 1.沒有處理pose的deformation 2.Skinning很方便,但是對誇張的pose有artifacts 3.Retargeting很依賴segmentation ![](https://i.imgur.com/jDyiJoL.png) 4.Source人物穿比較長的衣服,換成短袖會有原本衣服的材質在身上。 ![](https://i.imgur.com/PtikoKo.png) 5.沒有建模頭髮。