Contribution 세미나/Pose estimation

[논문 세미나] SMPL: A Skinned Multi-Person Linear Model

PaperGPT 2023. 12. 17. 15:53

Introduction

기존에는 skeleton 형식으로 사람을 표현했다면, 3d model형태의 사람을 표현하는 방식의 논문 소개

추후 3d model을 이용한 pose estimation, human tracking, action recognition등의 논문들을 소개할 예정이기 때문에 디테일한 내용보다는 컨셉 위주로 설명을 진행하겠다.

 

 

일반적으로 3d 모델을 표현하기 위해서는 수많은 vertex가 필요하다. 특히 디테일한 모델링을 하려면 그만큼 많은 vertex가 필요한데 이를 전부 찾으려고 하면 풀려고 하는 문제가 너무 어려워지게 된다. 따라서 사람을 3d 모델링할 수 있는 파라미터로 모든 vertex를 regression할 수 있다면 사람에 대한 3d 모델링을 좀 더 쉽게 할 수 없을까?

Fig. 1은 실제 ground truth(회색)과 특정 파라미터를 통해 구한 3d 모델(주황색)을 보여주고 있다.

본 논문에서는 이러한 파라미터를 어떻게 가져가면 좋을지 효과적인 모델링 방식을 설명하고 있다.

 

Model formulation

SMPL을 통해 나온 output은 6890개의 vertices(정점)와 23개의 joint로 구성되어 있음

그럼 이러한 output을 구하기 위해 SMPL의 파라미터가 어떻게 구성되어 있는지 알아보자.

 

 

우선 zero pose(여기서는 평균 template pose라고 생각해도 될 듯)에 대한 N개의 vertices를 정의한다. 즉 reference에 해당하는 template이며 여기에 추가적으로 blend weight를 정의한다. Blend weight는 K개의 joint가 해당 vertices에 미치는 영향을 나타낸다. (추후 학습을 통해 구해지는 것 같음)

 

 

그 이후 shape에 해당하는 parameter(beta)를 고려한다.

Shape parameter는 10개의 실수값(PCA coefficients)으로 구성된 shape vector로, 각 실수값은 신장(tall/short) 축과 같은 특정 축 방향에서 인체 오브젝트의 팽창/수축 정도 등으로 해석될 수 있다.

 

여기서 B_S함수는 해당 shape parameter를 입력으로, template vertices와의 offset를 나타낸다.

 

 

2번째는 pose에 해당하는 parameter(theta)를 고려한다.

 

Pose parameter는 joint 하나당 3d orientation을 나타내며 추가적으로 root orientation을 포함한다. (joint가 상대적인 orientation이다보니 reference가 되는 root orientation이 필요해 보임)

 

Pose parameter을 바탕으로 총 23개의 joint에 대한 relative rotation matric을 구한다. 

 

여기서 함수 B_P는 해당 pose parameter를 바탕으로 구한 R(relative rotation matric)의 차이(template pose와 target pose사이의 차이)를 vertex displacement(학습을 통해 구해지는 값)와 연산을 통해 실제 vertices를 구할 수 있다.

 

 

그동안 vertices의 변화에 대해 알아보았다면 이제는 joint location에 대해서도 알아보자.

 

알다싶이 joint location은 사람의 shape에 따라서 달라진다. 따라서 shape parameter에 따라 joint 위치를 보정한다. (여기서 pose는 초기 template pose로 고려)

 

 

여기서 joint와 blend weight(joint가 vertices에 미치는 영향)를 고려하여 기존 vertices의 위치가 변하게 된다.
(사실 이부분에서 G함수에 대한 이해가 부족..)

 

이제 앞서 설명한 부분을 전부 고려하면 아래와 같이 모델을 구성할 수 있다.

 

 

이를 통해 새로운 vertices를 계산하면 아래와 같다.

 

요약하자면, 우리가 원하는 사람의 shape(beta)과 pose(theta)를 입력해주면 그에 따른 vertices를 구할 수 있다.

여기서 beta와 theta를 제외한 나머지 파라미터들은 다 학습데이터를 통해 학습된 파라미터값이다.
학습은 다양한 pose, shape를 가진 실제 gt값과 유사하게 나오도록 학습 한다. (자세한 loss는 생략..)