개요

2024년에 3D Mesh 관련 각종 프로젝트와 탑티어 학회의 최신 논문을 보았지만 근본 되는 지식의 부재로 이해에 많은 어려움을 겪었다. 이에 그래도 근본이라고 할 수 있을 만한 논문 SMPL: A Skinned Multi-Person Linear Model을 정독하면서 중요한 부분들과 한번에 이해되기에 힘들었던 부분들을 다시 정리해보았다.

SMPL?

우선 SMPL이란 논문의 제목과 같이 Skinned Multi-Person Linear Model의 약어지만 말 그대로 모델이다. 본인같이 AI, 딥러닝이라는 키워드에 취해 ‘모델’ 혹은 ‘모델링’이란 말에 깊게 생각해보지 않았다면 같이 다시 생각해보자. 모델은 객체나 시스템, 패턴 혹은 데이터의 관계의 흐름에 관한 추상화 된 모형이라고 할 수 있다. 여기서 본인은 함수라는 단어로 표현하고 싶다. 우리가 코딩을 하면서 어떤 함수(Function)을 정의할 때 해당 함수의 입력(Input)과 출력(Output)을 통해 그 함수를 설명할 수 있다. 즉, SMPL이라는 모델은 마치 어떤 함수와 같이 입력과 출력이 명확하게 정의된다는 것이다. 바로 아래에서 일단 간단하게 해당 모델의 입력과 출력을 이해해보자

Inputs

  1. Pose Parameters $\vec\theta$
    • 72개, 혹은 (24,3) 또는 24 * 3 + 3개로 표현되는 파라미터. 논문 내 Sec 3. Blend skinnging 파트에 보면 다음 내용이 있다.

      “The pose of the body is defined by a standard skeletal rig, where $\mathcal{\vec{w}}_k \in \mathbb{R}^3 $ denotes the axis-angle representation of the relative rotation of part $k$ with respect to its parent in the kinematic tree. Our rig has $K = 23$ joints, hence a pose $\vec\theta = [\vec{\mathcal{w}}_0^T ,…, \vec{\mathcal{w}}_K^T]^T$ is defined by $\vert{\vec\theta}\vert = 3 * 23 + 3 = 72$ parameters; i.e. 3 for each part plus 3 for the root orientation.”

    • 본인은 아래와 같이 순차적으로 이해를 했다. 인과나 앞뒤가 바뀌었다고 느낄 수도 있지만 참고만 하면 괜찮을 것이다.
    • 포즈 파라미터 $\vec{\theta}$ 는 23개 또는 24개의 요소(elements)로 생각해 볼 수 있다.
    • $\mathcal{\vec{w}}_k$ 는 3개의 실수로 구성되는 요소이고, 관절(Joint)의 의미적 관계를 가질 수 있으며, 여기서 $k$는 0~23을 가지며 0번째는 키네마틱 트리의 루트가 되는 것 같다.
    • 각 $k$ 번째의 $\mathcal{\vec{w}}_k$ 는 자신의 부모 관절(Joint)에 대해 상대적인 회전을 axis-angle 표현으로 나타내는 정보를 가지고 있는 것 같다.
  2. Shape Parameters $\vec\beta$
    • 10개로 표현되는 Mesh의 형태 파라미터.마찬가지로 논문 내 Sec 3. Shape blend shapes 파트를 보면 다음 내용이 있다.

      “where ${\vec\beta}=[\beta_1,…,\beta_{\vert{\vec\beta}\vert}]^{T}, {\vert{\vec\beta}\vert}$ is the number of linear shape coefficients, and the $\mathbf{S}_{n}\in\mathbb{R}^{3N}$ represent orthonormal principal components of shape displacements.”

    • 그리고 또한 Sec 4.2. Shape Parameter Training에는 $\vec\beta$ 를 구하는 주성분 분석(PCA)에 대한 내용이 있다. SMPL의 코드 구현에서는 10개로 표현했지만 사실 논문 내용에서는 Shpae parameters $\vec\beta$ 가 10개여야 한다는 내용은 없는 것 같다.
      • 해당 이미지에 대한 설명은 다음과 같다.

        Figure 9 shows the relative cumulative variance of SMPL and BlendSCAPE. While SMPL requires many fewer PCs to account for the same percentage of overall variance, the variance is different in the two cases: …. A model requiring fewer components is generally preferable.

    • 내용을 참고하면 주성분이 적은 모델이 일반적으로 preferable 하다는 내용도 있고 실제 Figure 9 을 참고하면 5개도 안되는 주성분으로 누적 상대 분산의 90% 이상이 포함되어 형태(Shape)에 대한 충분한 정보를 가지고 있을 것으로 생각된다.
    • 하지만 지금은 최대한 이해하기 쉽게 (10,1)의 형식을 가진 신체의 외형(Shape)을 반영하는 파라미터로 일단 생각하자

Outputs

  1. 3D Mesh
    • 결론적으로 해당 모델은 특정 사람의 자세(pose)와 신체의 외형(shape)을 표현하는 3D Mesh 가 출력으로 나오는데 이는 (6890, 3)의 3차원 좌표를 가진 6890개의 점으로 표현된다. 여기서 6890개는 신체의 표면을 구성하는 점 들이다. 3D를 다뤄본 사람들은 알겠지만 삼각형 기반의 Polygon Mesh와는 다른 것 같다. 논문 내에서도 triangle deformation과는 다르다는 것을 수 차례 말한다. Sec. 3. Model Fomulation에 해당 내용을 근거할 부분이 있다.

      We begin with an artist created mesh with N = 6890 vertices and K = 23 joints.
      The result is a model, $M(\vec\beta,\vec\theta;\Phi): \mathbb{R}^{\vert{\vec\beta}\vert \times \vert{\vec\theta}\vert}\mapsto\mathbb{R}^{3N}$

    • 즉 입력으로 받은 shape 파라미터 $\vec\beta$와 pose 파라미터 $\vec\theta$를 arguments로 하는 SMPL 모델 $M$ 의 출력은 그 형태가 $N=6890$ 이고 $3 \times N인 (6890, 3)의 출력을 내놓는다.
    • Shape Blendshapes, Pose Blendshapes 까지만 적용해도 출력(output)의 shape은 (6890, 3)으로 같을 것 이지만 여기선 모델의 출력만 생각한다.
  2. Joint Location
    • 3D Mesh에만 초점을 두고 해당 논문 및 다른 논문들을 찾아보는 사람이라면 관절(Joint)의 위치 정보는 출력으로써 관심이 없을 수도 있지만 엄연히 입력의 결과로 생성되는 출력이다. Sec. 3. Model Formulation의 초반 부와 뒤 Joint locations를 참고하면 관련 내용을 확인할 수 있다. 결론적으로 (24, 3)의 관절의 좌표가 (x, y, z) 형태로 나온다. 논문의 내용을 읽다보면 헷갈릴 만한 내용이 많다.

      a function to predict $K$ joint locations (white dots in Fig. 3(b)), $J(\vec\beta):\mathbb{R}^{\vert{\vec\beta}\vert}\mapsto\mathbb{R}^{3K}$ as a function of shape parameters , $\vec\beta$

    • 위 논문의 내용으로만 보면 헷갈릴 수 있다 싶다. 왜냐하면 논문 내 정의에서는 $K=23$ 이라 정의했고 출력의 shape이 $3 \times K$ 라면 24개가 아닌 23개의 관절이지 않는가 하는데, 골반(pelvis)의 좌표는 root로 처리하여 카운팅을 안하는 경우가 있어 23으로 표현하는 경우도 있다. 그래도 Pose Estimation을 다루는 사람 입장에서는 24개라고 해주는게 낫지 않나. 아래 내용들을 살펴보면 24개의 영역으로 segmentation 했다는 내용이 있어 24개의 관절은 맞다.

Vertex to Vertex

본인은 지금 적는 내용이 해당 논문을 읽을 때 제일 한번에 이해하기 어려웠다. 여기서 말하는 Shape Blendshapes, Pose Blendshapes, Blend skinning과 그 외의 이야기를 다뤄보겠다.

(a): Default

일반적으로 3D 디자인 업계에서 3D 모델링을 말할 때 인간형 모델의 기본자세를 T 포즈라는 용어로 말하곤 한다. 본인도 약 10년 전 학부 전공과목으로 3D 모델링을 배울 때의 기억이다. 그래서 Figure 3의 (a)는 기본의 T 포즈 모양을 보여준다. 해당 외형은 논문에서 말하고 있는 rest pose 혹은 zero pose로도 볼 수 있을 것 같다. 아직 아무런 연산을 하지 않은 기본 모양이다. $\mathbf{\bar{T}}, \mathcal{W}$ 의 내용은 아래와 같다.

  • $\mathbf{\bar{T}} \in \mathbb{R}^{3N}$ : shape은 (6890,3) 이고, zero pose의 표현된 mesh template shape 이다.

    the model is defined by a mean template shape represented by a vector of $N$ concatenated vertices $\bar{T} \in \mathbb{R}^{3N}$ in the zero pose, $\vec\theta^*$

  • $\mathcal{W} \in R^{N \times K}$: blend weights 라 부르는 파라미터 SMPL 모델을 구성하는 Blend Skinning function의 파라미터이다.

    a set of blend weights, $\mathcal{W} \in R^{N \times K}$, (Fig. 3(a));

  • 뒤의 내용에 함수의 파라미터 개수를 언급하면서 이를 또 헷갈리게 만드는 내용이 있다. 이러한 수학적 정의는 모델의 파라미터와 다른 것으로 치는 지는 정확히 모르겠다.

여기서 하고픈 말은 기본 T포즈의 모델의 외형 vertices는 (6890, 3)의 정점으로 표현할 수 있다는 것. 그리고 그림에 나와있는 파랑, 빨강, 회색, 초록 등등의 영역은 Sec 4.1. Pose Parameter TrainingFigure 6에 대한 설명을 보면 알 수 있다. 3D mesh의 영역을 24개의 parts로 hand segmented 했다고 언급되어 있고 $\mathcal{W}$의 shape은 (23, 6890)인데 이는 segmentation mask 혹은 영역 구분에 대한 정보를 담고 있는 것으로 추정 할 수 있다. 이는 영역간의 정보에서 관절의 위치를 가져오는데 사용된다.

Our model is hand segmented into 24 parts (Fig. 6). We use this segmentation to compute an initial estimate of the joint centers and a regressor J I from vertices to these centers.

(b): Shape Blendshapes

기본 T 포즈의 외형 버텍스에서 shape parameters $\vec\beta$ 를 이용하여 SMPL 모델의 구성 요소 중 하나인 Shape Blendshapes 함수를 적용한 결과고, 그 결과로 외형이 조금 바뀌는 것으로 이해하였다. 그리고 이 단계에 Joint regression function도 언급이 되어있는데 이것을 이미지만 보고 판단하면 Mesh의 실제 자세가 아닌 T포즈의 형태에서 관절을 추출한다고 생각할 수 있지만 그렇지 않음에 주의하자. 정확히는 포즈에 대한 다르게 표현된 파라미터에서 위치를 뽑아내는 작업이다. 우선 블렌드 쉐잎 함수 $B_S$의 함수 파라미터를 $\mathcal{S}$ 로 표현한다. 수식은 다음과 같다.

\[B_s(\vec\beta;\mathcal{S}) = \sum_{n=1}^{\vert{\vec\beta}\vert}\beta_n \mathbf{S}_n\]

다시, $\vec\beta$ 는 10개의 PCA 결과이고 $\mathbf{S}_n$ 으로 구성된 $B_s$ 함수의 파라미터 $\mathcal{S}$ 의 shape은 $\mathcal{S} = [\mathbf{S}_1,…,\mathbf{S}_{\vert\vec\beta\vert}]$ 로 표현되어있다. 해당 $B_s$ 의 연산 결과가 기본 template mesh $\bar{T}$ 에 더해지면서($\bar{T}+ B_s(\vec\beta;\mathcal{S})$) Shape Blendshapes를 적용한 외형 vertices가 (b)와 같이 나타난다.

$\vec\beta = [\beta_1,…,\beta_{\vert{\vec\beta}\vert}]^T , \vert{\vec\beta}\vert$ is the number of linear shape coefficients, and the $\mathbf{S}_n\in\mathbb{R}^{3N}$ represent orthonormal principal components of shape displacements. Let $\mathcal{S} = [\mathbf{S}_1,…,\mathbf{S}_{\vert\vec\beta\vert}] \in \mathbb{R}^{3N \times |\vec\beta|} $ be the matrix of all such shape displacements.

또한 해당 결과를 관절의 위치(Joint location)을 예측하는 데 사용한다. 여기서 본인이 겪었던 헷갈림은 위에 언급한 것처럼 (d)의 그림처럼 특정 자세를 잡은 후의 관절 위치가 아니라 T포즈의 형태에서 관절 위치를 바로 추론한다고 생각한 것이다. 출력으로 나오는 Joint location과 pose parameter 는 일단 다름을 한번 생각하자. 이어서 위에서 사용한 수식을 활용하여 Joint regressor $J$ 의 연산을 수행한다. 여기서 $\mathcal{J}$ 는 Joint regressor 연산에서 dot product 되는 Matrix이고 이 또한 SMPL 모델이 학습하는 파라미터이다.

\[J(\vec\beta;\mathcal{J},\mathbf{\bar{T}},\mathcal{S}) = \mathcal{J}(\mathbf{\bar{T}}+B_s(\vec\beta;\mathcal{S}))\]

논문의 설명에 의하면 Joint regressor matrix를 통해 rest vertices를 rest joints로 변환한다고 언급되어 있다. 이 때문에 처음에는 rest pose에 대한 관절 추출로 이해하였다. 여전히 헷갈리지만 이해한 바로는 Joint Regressor $\mathcal{J}$ 가 Sec 4.1 의 내용처럼 우선적으로 버텍스로 부터 관절 정보를 회귀하도록 학습된다는 것이다. 그 뒤에 각종 목적함수들과 정규화 항들에 대한 minimize를 통해 학습을 수행한다는 내용이 있다.

결론적으로는 학습 단계에서는 Joint Regressor를 학습하기 위한 pose parameter 정보는 데이터셋으로 부터 얻은 것으로 보인다. 용어로의 표현은 $\hat{\mathbf{J}}_i^P$ 로 되어있다. 이를 통해 joint regression parameter $\mathcal{J}$ 를 학습하였고 이는 다시 블렌드 스키닝에 사용된다.

(c): Pose Blendshapes

앞선 (b)과정을 이해했다면 이 과정은 이해하기 쉽다. 그림으로 보았을 때 여전히 Mesh의 형태는 T포즈를 취하고 있고, 외형은 조금 더 개인의 형상에 맞게 변형된 느낌이다. 즉 Pose parameter $\vec\theta$ 를 활용하여 Blendshapes 연산을 수행하고 이를 vertices의 모양에 반영하여 외형을 변형하는 작업으로 이해하였다. 그림에 추가 된 것과 같이 $T_p(\vec\beta, \vec\theta)$ 를 $\mathbf{\bar{T}}+B_s(\vec\beta)+B_p(\vec\theta)$ 로 정의하였다. 즉 기존의 (b)에다가 Pose Blendshapes 연산 $B_p(\vec\theta)$ 의 결과를 더해주면 해당 포즈 파라미터까지 반영된 외형의 결과를 얻을 수 있는 것으로 이해하였다. Pose Blendshapes의 수식은 다음과 같다.

\[B_p(\vec\theta;\mathcal{P})= \sum_{n=1}^{9K}(R_n(\vec\theta)-R_n(\vec\theta^*))\mathbf{P}_n\]

여기서 익숙치 않다고 생각할 수 있는 $\vec\theta^*$ 는 우리가 앞서 말했던 기본 T포즈 혹은 rest pose 또는 zero pose의 Pose parameter 이다. 우리가 SMPL Model을 통해 표현하려는 자세(pose)는 T 포즈는 아니었을테니 $\vec\theta$ 와 $\vec\theta^*$ 가 다르다는 것을 명심하자. 또한 등장하는 $\mathbf{P}_n$ 은 Pose Blendshapes 함수의 파라미터 $\mathcal{P}$의 구성요소이다. 또한 완전히 새로이 등장하는 함수 $R$이다. pose vector $\vec\theta$를 $exp(\vec\omega)$ 로 매핑하는 연산이라는데 이는 pose parameter $\vec\theta$ 에 대한 부모 관절의 회전 행렬로 인코딩되는 내용에 대한 것으로 이 내용은 최종 형상에 관한 언급에서 다시 이야기한다. 해당 내용은 논문 내에서 찾아볼 수 있다.

we define the effect of the pose blend shapes to be linear in $R^*(\vec\theta) = (R(\vec\theta)-R(\vec\theta^*))$, where $\vec\theta^*$ denotes the rest pose.

where the blend shapes, $P_n \in \mathbf{R}^{3N}$, are again vectors of vertex displacements. Here $\mathcal{P} = [\mathbf{P}_1,…,\mathbf{P}_{9K}] \in R^{3N \times 9K}$ is a matrix of all 207 pose blend shapes.

(d)를 가기전에

본인을 헷갈리게 만들었던 SMPL 공식 유튜브 영상에서 발췌해온 이미지다. 해당 내용은 Model Decomposition으로 SMPL 모델을 모듈 단위로 분해하여 설명하려하는 것으로 보인다. $T+B_p(\theta)$ 부분을 보았을 때 rest pose가 아닌 것을 보고 pose Blendshapes 연산을 적용하면 Pose가 바뀌는 것인가 했는데 그 것은 아니었다. 그저 pose parameter 와 shape parameter에 대한 Blendshapes가 각각 별개로 서로 dependency하지 않음을 표현하려는 것으로 보인다.

(d): Blend skinning

마지막 단계의 blend skinning을 적용하면 실제 3D Mesh가 외형(shape)과 자세(pose)가 반영된 것으로 transformation된다. 해당 내용은 이해하기 가장 어려운 내용이지만 논문에 언급된 수식을 가지고 이해하는게 제일 그나마 쉬운듯하다. 내용이 짧지 않으므로 단계적으로 이해한다.

Stamdard linear blend skinning

우선 Sec 3. Model Formulation - Blend skinning 내용에 standard linear blend skinning function에 대한 내용이 있다.

Using this, the standard linear blend skinning function $W(\bar{\mathbf{T}},\mathbf{J},\vec\theta, \mathcal{W}):\mathbb{R}^{3N \times 3K \times \vec\theta \times \mathcal{W} } \mapsto \mathbb{R}^{3N}$ takes vertices in the rest pose, $\bar{\mathbf{T}}$, joint locations, $\mathbf{J}$, a pose, $\vec\theta$, blend weights, $\mathcal{W}$, and returns the posed vertices.

여기서 $W$ 가 선형 블렌드 스키닝 함수를 표현하는 용어임을 우선 알수 있고, 이는 기본적으로 rest pose $\bar{\mathbf{T}}$ 에 속해있는 임의의 정점 $\mathbf{\bar{t}}_i$ 를 실제 변형하려는 자세의 정점 $\mathbf{\bar{t}’_i}$ 로 옮긴다는 것이다. 그래서 $\mathbf{\bar{t}’_i}$ 을 이해하기 위해 식(2)를 본다.

\[\mathbf{\bar{t}'_i} = \sum_{k=1}^Kw_{k,i}G'_k(\vec\theta,\mathbf{J})\mathbf{\bar{t}_i}\]

위치가 변경된 정점 $\mathbf{\bar{t}’_i}$ 는 어떠한 합 연산에 의해 결정되고 그 요소는 기본 자세의 정점 $\mathbf{\bar{t}_i}$ 와 추가적인 2가지 요소의 곱으로 이해된다. 여기서 $w_{k,i}$ 는 blend Weights라 불렀던 $\mathcal{W}$ 의 요소로 신체를 24개(k개)의 영역으로 나눴는데 $k$ 번째 부분이 6890개 중 $i$ 번째 정점에 미치는 영향의 크기를 나타낸다고 한다. 당장 완벽히 이해가 되지 않아도 (23, 6890)으로 구성된 $\mathcal{W}$ 중 하나인 것으로 이해하고 넘어가면 될 것 같다. 이어서 ${G’}_{k}(\vec\theta,\mathbf{J})$ 를 이해하기 위해 식(3)을 본다.

\[G'_k(\vec\theta,\mathbf{J}) = G_k(\vec\theta,\mathbf{J})G'_k(\vec\theta^*,\mathbf{J})^{-1}\]

해당 내용도 논문에 이어진 바로 하단부에 설명이 있다. $G_k(\vec\theta,\mathbf{J})$ 는 joint $k$ 의 world transformation 연산이다. $G’_k(\vec\theta,\mathbf{J})$ 는 동일한 trnasformation 연산의 역연산이고 이는 rest pose($\vec\theta^*$)에 대하여 수행되는 연산이다. 이렇게 수식을 한 단계 더 세부적으로 보았다. 여기서 한번 더 들어가서 $G_k(\vec\theta,\mathbf{J})$ 을 이해하기 위해 식(4)를 보았다.

\[G_k(\vec\theta,\mathbf{J}) = \prod_{j \in A(k)} \begin{bmatrix}\mathbf{exp}(\vec\omega_j) & \mathbf{j}_j \\ \vec{0} & 1 \end{bmatrix}\]

행렬의 연속적인 곱으로 표시되는 어떠한 연산의 결과는 world transformation으로 해석 가능하고 여기서 한번 더 깊게 들어가보면 행렬의 (1,1)의 자리에 들어가는 $\mathbf{exp}(\vec\omega_j)$ 는 다시 식(1)로 전개된다.

\[\mathbf{exp}(\vec\omega_j)= \mathcal{I}+ \hat{\bar\omega}_j \sin(\Vert\vec\omega_j\Vert)+\hat{\bar\omega}_j^2\cos(\Vert\bar\omega_j\Vert)\]

해당 연산은 Joint $j$ axis-angle 표현에서 로드리게스 공식을 이용한 회전행렬 로의 변환이라고 한다. 여기서마저 새롭게 등장하는 $\hat{\bar\omega}$ 는 3차원 벡터 ${\bar\omega}$ 의 skew symmetric matrix(반대칭행렬) 이다. 그리고 $\mathcal{I}$는 $3 \times 3$의 identity matrix이다.

여기까지 설명이 오느라 길었지만 결론은 식 (1)~(4)를 활용하면 rest pose의 한 버텍스를 blend wieght matrix $\mathcal(W)$ 와 pose parameter $\vec\theta$ 를 가지고 표현하려고 하는 Mesh 의 정점으로 이동할 수 있다는 것을 알았다.

SMPL Model

우리의 SMPL 모델의 함수를 위의 Blend skinning에 대입해보면 $W(\bar{\mathbf{T}},\mathbf{J},\vec\theta, \mathcal{W})$ 에 대응되는 아래와 같은 식(11)을 얻을 수 있다.

\[M(\vec\beta,\vec\theta;\Phi) = W(T_p(\vec\beta,\vec\theta;\mathbf{\bar{T}},\mathcal{S},\mathcal{P}),J(\vec\beta;\mathcal{J},\mathbf{\bar{T},\mathcal{S}}),\vec\theta,\mathcal{W} )\]

함수를 표현하는 세미콜론 뒤에 있는 파라미터를 굳이 표기하지 않아도 되지만 논문에 표현된 그대로 가져왔다. blend skinnging 함수는 $W$ 로 표현되고 첫번 째 $T_p(\vec\beta,\vec\theta)$ 는 식(6)에서와 같이 Shape Blendshapes 와 Pose Blendshape를 적용한 형태로 표현된다.

\[T_p(\vec\beta,\vec\theta) = \mathbf{\bar{T}}+ B_s(\vec\beta) + B_p(\vec\theta)\]

이 $T_p(\vec\beta,\vec\theta)$ 로 표현되는 정점은 말그래도 blend skinning을 적용하기 전의 정점(vertices) $\mathbf{\bar{t}_i}$ 와 같다고 볼 수 있다. 이를 식(2)에 대입하면 그대로 식(7)이 유도 된다. 이것을 좀더 자세히 풀어 쓴 것이 우리가 구하고픈 식(12)이다.

\[t'_i = \sum_{k=1}^{|\beta|}w_{k,i}G'_k(\vec\theta,J(\vec\beta;\mathcal{J},\mathbf{\bar{T}},\mathcal{S}))\mathbf{t}_{P,i}(\vec\beta,\vec\theta;\mathbf{\bar{T}},\mathcal{S},\mathcal{P})\]

여기서 $\mathbf{t}_{P,i}(\vec\beta,\vec\theta;\mathbf{\bar{T}},\mathcal{S},\mathcal{P})$ 를 굳이 바로 위 식(6) 으로 풀어적은 것이 식 (13)이다.

\[\mathbf{t}_{P,i}(\vec\beta,\vec\theta;\mathbf{\bar{T}},\mathcal{S},\mathcal{P}) = \\ \mathbf{\bar{t}}_i + \sum_{m=1}^{|\vec\beta|}\beta_m\mathbf{s}_{m,i}+\sum_{n=1}^{9K}(R_n({\vec\theta})-R_n(\vec\theta^*))\mathbf{p}_{n,i}\]

결론적으로 우리가 rest pose혹은 zero pose에서 실제 특정 자세(pose)와 외형(shape)을 표현하기 위한 3D Mesh 표현으로 변환하기 위해서 기본 T포즈의 정점(vertex)에 Shape Blendshapes와 Pose Blendshapes 연산을 취하고 이것을 $k$ 마다 Blend weight $w_{k,i}$ 와 world transformation $G’_k(\vec\theta,J(\vec\beta;\mathcal{J},\mathbf{\bar{T}},\mathcal{S}))$ 와 곱한것을 더하면 최종 버텍스 위치 $t’_i$ 를 구할 수 있다. 비록 $k=23$ 이지만 왼발 끝의 정점의 변환은 오른 팔의 영역에 의한 영향을 거의 안받는 것처럼 sparse 하지않을까 생각했었다. 하지만 Sec 5.2. Sparse SMPL에서 Pose blendshapes 연산에 대해서는 SMPL 모델은 일단 기본적으로 SMPL are not sparse 하다는 내용이 있다. 그래서 별도의 SMPL-LBS-Sparse 모델을 따로 만들어 실험했다는 내용이 논문에 있으니 참고하자. (일단은 굳이 dense 하다고 할 건 아니지만 not spares정도로만 하자)

From Dataset

위에서 간단하다고 말할 수 있을지 모르겠지만 해당 모델의 입력과 출력 그리고 모델이 최종적으로 표현하고자 하는 버텍스의 변환 연산에 대해 살펴 보았다. 본인이 해당 논문이 발표된지 많은 시간이 지나고 읽으면서 마지막까지 가졌던 포인트는 입력(pose,shape)의 출처였다.

Datasets

해당 논문에서 언급된 데이터 셋은 2가지다. multi-pose 데이터 셋과 multi-shape 데이터 셋. 두 데이터셋 모두 같은 토폴로지를 가진 다는 것으로 보아 3D Mesh 의 정의를 (6890,3)의 정점으로 표현하는 것으로 보인다. 한 명의 사람의 외형 및 자세를 말끔히 표현한 mesh를 registrations 라고 용어 정의했다.

그래서 multi-pose 데이터 셋은 40명 분의 1786개의 registrations이 있으며 각각 20명 여성의 891개, 20명 남성의 895개이다. multi-shape 데이터 셋은 CAESAR 데이터 셋에서 가져왔다고 한다. 다양한 shape의 남성에 대한 1700개의 registrations와 다양한 shape의 여성에 대한 2100개의 registarations를 가지고 있다.

Shape, Pose parameter

위의 데이터셋에 대한 논문 내의 설명만으로는 본인은 뭔가 이해하기에 부족했다. 그래서 pose parameter $\vec\theta$ 와 shape parameter $\vec\beta$ 를 어떻게 얻는다는 말인가. 그리고 더불어 해당 파라미터는 그럼 우리가 이 SMPL 모델을 사용하고자 할 때 어떻게 얻을 수 있는가.

사실 여기서 인공지능과 딥러닝에 절여져있던 나의 편견을 깨달았다. SMPL 모델은 컴퓨터 비전 분야에 속해있지만 마치 ‘이미지 분류(image classification)’, ‘객체감지(Object Detection)’ 과 같이 단순히 직관적인 문제를 해결하기 위한 딥러닝 모델로만 판단할 것은 아니었다. 그래서 본인이 해당 포스팅에 초반에 모델에 대한 사전 내 뜻을 가져오면서 언급한 것이다. (6890, 3)의 정점들을 어떠한 함수(혹은 모델, 또는 표현)의 결과로 구조화, 설계화, 추상화 하려는 것이었고 그에 대한 입력을 $\vec\theta$ 와 $\vec\beta$ 로 정한 것이다. 해당 내용은 Sec 2. Related Work에도 있다.

그래서 일단 논문과 위에 내용에서 언급한 것처럼 shape parameter는 mesh dataset들을 대상으로 PCA를 수행하여 그 성분을 줄여 $\vec\beta$ 를 만들었다는 것을 알았고, pose parameter 는 그림 6 처럼 segmentation 한 영역을 기반으로 Joint Regressor 에 대한 설계에서 얻었음을 알 수 있다.

Our model is hand segmented into 24 parts (Fig. 6). We use this segmentation to compute an initial estimate of the joint centers and a regressor $\mathcal{J}_I$ from vertices to these centers. This regressor computes the initial joints by taking the average of the ring of vertices connecting two parts.

정리

마지막 의문이었던 해당 파라미터를 특정 이미지나 다른 사례로 부터 추출해서 모델을 돌려 3D Mesh를 Reconstruction 혹은 recovery 해보고 싶다면 해당 내용은 SMPL 논문의 범위를 넘어설 것이다. 이는 2016년에 이어서 나온 SMPLify 논문 혹은 그 뒤에 해당 내용을 포함하고 있는 SMPL 기반의 3D Mesh Recovery 관련 논문들의 사례에서 답을 얻을 수 있을 것이다.

이해하기 어려웠고 지금 정리한 내용과 본인이 이해한 내용에도 오류가 있을 수 있다. 댓글을 포함한 다양한 방법들을 통해서 지적해주시면 다시 이해하고 수정할 수 있도록 하겠다.

Matthew Loper, Naureen Mahmood, Javier Romero, Gerard Pons-Moll, and Michael J. Black. SMPL: A Skinned Multi-Person Linear Model
참고: khanhha님 블로그
참고: dancefirst님 블로그

댓글남기기