GHUM & GHUML: Generative 3D Human Shape and Articulated Pose Models
![](https://blog.kakaocdn.net/dn/EBzWc/btr3HpvI2O7/fL7u058dnuLU3HPfjoPbm1/img.png)
내 맘대로 Introduction
이 논문은 SMPL 시리즈 (SMPL, SMPL+H, SMPL+D, SMPL+X)와 같은 parametric human model을 만드는 것을 목표로 했다. 단 기존 SMPL이 body에만 집중했던 것을 넘어서 얼굴와 손을 포함한 모델이며 파라미터를 만드는 방식이 PCA 기반이 아닌 deep learning을 통한 방식이다.
파라미터를 그냥 loss 설계하고 backpropagation으로 찾아지는 값 그대로 쓰는 것인데 효과적인 학습을 위해서 PCA 기반 값을 초기화값으로 사용하거나 low-dimension 모델인 GHUML은 대놓고 PCA 기반 값을 쓰기도 하기 때문에 완전히 deep learning을 통한 새로운 방식이라고 하기엔 아쉬움이 남는 논문이다.
DeepHandMesh: A Weakly-Supervised Deep Encoder-Decoder Framework for High-Fidelity Hand Mesh Modeling (ECCV 2020. Oral.) 오히려 이 논문이 더 가까운 논문이 아닐까 싶다. 아무튼 전신을 대상으로 한 모델이라는 점은 contribution이 맞는 것 같다.
핵심 내용
![](https://blog.kakaocdn.net/dn/17bF3/btr3HQtbn2L/6E6Efkwm3EAqbVm91ZYz31/img.png)
사실 위 그림에 설명글이 거의 모든 것을 내포하고 있어서 위의 그림과 주석을 잘 읽어보면 될 일이긴 하다.
![](https://blog.kakaocdn.net/dn/bo7Kpt/btr3ofHVtpK/dq92b5bXC7RiNca6na30Kk/img.png)
모델 자체는 수식(1)만 보아도 SMPL가 매우 유사하게 되어있다는 것을 알 수 있다. pose/shape/expression parameter를 딥러닝을 통해 만들었다 자체가 핵심 내용이지 이 파라미터로 하여금 어떻게 vertex와 joint를 찾는지, shape은 어떻게 변형시키는지와 같은 내용은 SMPL가 동일하다. 따라서 SMPL과 사실 상 형태가 같다고 보는게 낫겠다.
![](https://blog.kakaocdn.net/dn/vNSj9/btr3LHhUfPn/ioeGvVuvCSWdojFhWZXaak/img.png)
먼저 vertex는 중립 상태(θ hat)에서 pose-dependent/shape/expression에 의해 변형된 vertex ~ 상태로 만들고 이것을 pose에 의한 transformation으로 위치를 옮긴다. (여기서 pose-depedent는 논문에 그림5를 보면 이해될 것이다.)
![](https://blog.kakaocdn.net/dn/QiP1U/btr3IYxHuVc/eJADnsbnJ4Y3u77QyfOkp0/img.png)
그리고 미리 3D scan에 registration해두었던 GT mesh와 vertex L1 loss를 먹여 학습하는 식이다. 이러면 GT mesh와 유사하도록 하는 파라미터가 학습될 것이다.
shape parameter는 기존 방식 중 PCA와 함께 유명한 VAE를 이용하는 방식으로 만들었다. 사실 상 사전에 만들어둔 것이다. expression parameter도 마찬가지다. VAE로 만들었다. 학습된 decoder에 parameter를 넣으면 vertex offset이 나오는 식이다.
![](https://blog.kakaocdn.net/dn/pl6zz/btr3lDh4p9c/54WKRuh4WHKa6FDMKWH9CK/img.png)
마지막으로 joint regressor도 만들어 두어야 하는데 이것은 생짜로 만들면 너무 효율이 안좋기 때문에, 대충 joint는 신체가 접히는 부분 근방의 vertex 중심에 있을 것이란 가정을 이용해서 한 번 구하고 나머지 residual을 네트워크를 통해 보정하는 식으로 구했다.
![](https://blog.kakaocdn.net/dn/cQ67uw/btr3CmsTla2/5hMfm1qHleNKdI2d2ckqzk/img.png)
앞에 term이 deterministic하게 직접 접히는 부분 근방에서 대충 찾은 term이고 후자가 네트워크로 찾는 term이다. 전자는 역시 사전에 대충 계산해놓는 것으로 보인다.
![](https://blog.kakaocdn.net/dn/uWWKe/btr3uEOaEoG/w8kcBheV4B6DDOCpUgKO70/img.png)
학습을 용이하게 하기 위해서 pose-dependent deformation 값은 최소화로 한다거나 (그림 5. 참조)
![](https://blog.kakaocdn.net/dn/71Ads/btr3IY5BBCG/9aNSxYsEN8P985KUA67Pv0/img.png)
주변 vertex 간의 거리를 regularize해서 smoothness를 확보한다거나
![](https://blog.kakaocdn.net/dn/dCa5nm/btr3Hrf6X1E/yS4nMxVg83KQSO4hOKCCqK/img.png)
최종 vertex에서도 smoothness를 한 번 더 보강하는 것과 같은 loss term이 추가되긴 하지만 크게 새로운 점은 아닌 것 같다.
Results
![](https://blog.kakaocdn.net/dn/qhIC3/btr3Bv4rfhj/V1Z5nOgaIIRxN5l0VqtFbK/img.png)
일단 PCA 보다 VAE를 쓰기 때문에 에러 수준이 현저히 낮아짐을 관찰할 수 있고
![](https://blog.kakaocdn.net/dn/7Zuci/btr3ofVsZUI/oPGgqH04pD78XOoKnGOcik/img.png)
registration 결과와 2~5mm 차이를 낼 정도로 표현력도 준수하게 갖추게 되었다.
![](https://blog.kakaocdn.net/dn/dw3rj4/btr3kyntxok/c4lbBzusFL9hOLtgedVB2K/img.png)
작아서 잘 안 보이긴 하지만 손의 표현력도 MANO를 갖다 붙인 것 보다 좋아보인다.
![](https://blog.kakaocdn.net/dn/ekMCsH/btr3BxnElv3/I4F7LBEHO38fHWEAOODb11/img.png)
결과적으로 SMPL보다 뛰어난 모델을 얻었다는 내용이다.