공부 정리용 블로그입니다. 미숙한 실력으로 인해 표현이나 설명에서 많은 오류가 있을 수 있으니 참고 바랍니다 :)

Introduction
3D Vision human motion 쪽에서 가장 많이 쓰이는 representation은 SMPL 이라고 한다.
SMPL은 기존 blend skinning 방식을 변형·사용하였으며, SCAPE에서 발전된 performance를 보인다.
(첫 논문 review라서 디테일하게 다루진 않았다.)
Main Task
SMPL의 flow는 다음과 같다.
- shape & pose blend shapes를 이용하여 mesh 구축
- Joint를 고려하여 mesh와 joint 자연스럽게 연결 (blend skinning)
blend skinning인 LBS는 다음과 같은 파라미터로 이루어져 있다.
- zero pose vertex (zero vs rest 명확한 차이를 알기 전까진 혼용 예정)
- joint location
- pose parameters
- blend weight




SMPL은 기본 LBS에서 초기 vertex에 shape&pose blend shapes를 추가한 형태이다.
추가로, LBS 식을 해석해보자. 수식 하나하나를 제대로 이해하지 못해 간단히 말해보겠다.
Gk는 joint k에 대한 변환 행렬을 의미한다. A(k)는 joint k의 조상 joint로, joint k에 영향을 주는 다른 joint까지 고려하는 것으로 보인다.
G'은 특정 포즈 (theta)에 대한 변형과 zero pose에 대한 변형의 역수를 곱해서 얻는다. 이것은 zero pose에서 현재 포즈로의 변형으로 정규화했다고 해석해본다.
이렇게 얻은 변형 수식과 기존 vertex, blend weight를 곱하여 새로운 vertex를 구하는 것이 LBS의 원리이다.
Methods
- joint location
- blend weight
- shape&pose blend shapes
- rotation matrix
Joint Location (J)
SMPL은 mesh vertex를 가지고 joint location을 찾는 regressor를 학습시킨다.
train 과정은 다음과 같다.
- Figure 6과 같이 수작업으로 24 part로 segmentation 한다.
- 서로 다른 part를 연결하는 정점들의 평균으로 initial joint location 설정
rough하게 initial joint를 설정한다고 이해하면 좋을 것 같다.

다음의 objective function을 optimizing하면서 joint location을 update한다.
이렇게 얻은 joint location을 이용하여 joint regressor를 학습시킨다.
(과정이 복잡하여 충분히 이해하지 못했다.)

Blend Weight (W)
Blend weight는 Joint Location과 유사한 방식을 따른다.
- Figure 6를 이용하여 diffusing the segmentation하여 inital weight를 구한다.
- objective funtion을 optimizing하여 blend weight를 update 한다.
- 모든 데이터에 대해 update된 고정된 blend weight를 얻는다. (이 weight는 shape&pose 상관없이 일정한 값을 가진다.)
Rotation Matrix (exp(w))
rotation matrix를 구하기 앞서, 우리는 part k에서의 axis-angle representation을 구한다.

Rodrigues formula를 이용하여, rotation matrix (3x3)을 얻는다.
rotation matrix는 특정 축을 중심으로 얼마나 회전했는지 나타낸다.

위의 예시는 x축을 중심으로 90도 회전했다고 해석할 수 있다.
Shape & Pose blend shapes (Tp)
Main Task에서 우리는 초기 vertex에 shape & pose blend shapes를 더한 것을 확인하였다.
먼저, shape pose blends란 무엇일까? 처음 듣는 단어였기에 이해하는데 오랜 시간이 걸렸다. 필자가 이해한 바로는, 사람은 모두 각자의 체형이 있다. identity-dependent라고도 표현을 하는 것 같다. 이 차이를 반영하는 것을 shape blend shapes라고 한다.
같은 방식으로, pose shape blends는 pose 마다 자세가 다르기에, pose-dependent한 자세를 의미한다고 본다.

(a)가 기본 형태이며, (b)는 (a)에 shape blend shapes를 더한 것이다. 특정 체형의 특징을 추가 고려한 것으로, (a)에 비해 덩치가 조금 더 커진 것을 확인할 수 있다.
(c)의 경우에는 (b)에 pose blend shapes를 더한 것으로, 엉덩이 쪽이 확장되었다. 다리는 벌리는 일명, split pose를 취함으로써 발생하는 초기 pose 변화를 반영한 결과이다.
(d)는 blend skinning을 거쳐 나온 최종 mesh이다.
shape & pose blend shapes를 기본 형태에 더하고 나서 진행하기에 보다 더 자연스러운 결과가 나온다고 생각한다. 초기 mesh에서 최종 mesh로 바로 넘어가는 것이 아닌, 중간 mesh를 반영한 덕이라고 필자는 판단했다.
Evaluation
model generalization과 pose generalization을 기준으로 성능을 평가하였다. 개념이 설명되어 있으나, 두개의 명확한 차이점을 파악하기 어려워 각각 '얼마나 shape에 잘 작동하냐', '얼마나 pose에 잘 작동하냐'로 이해하였다.

주성분 수가 증가함에 따라 전체적으로 성능은 향상된다. 주성분이 늘어날 수록 다 많은 데이터 분포를 학습할 수 있다는 장점이 있다.
SMPL-LBS와 BlendSCAPE의 성능은 유사하지만 SMPL이 더 높다. 하지만 위 그래프에서의 포인트는 SMPL-LBS와 SMPL-DQBS의 성능이 거의 똑같다는 것이다.
논문에서 DQBS에 대해서 다루지는 않았지만, LBS보다 훨씬 복잡하고 시간이 오래 걸린다. LBS는 간단하고 연산 속도도 빠르면서 동시에 성능도 좋게 나온 것이다. 이는 SMPL-LBS를 사용하면 간단하고 빠르면서 좋은 성능을 낼 수 있다.
또한 SMPL-LBS-Sparse 모델을 새롭게 추가하였다. 이는 왼쪽 발목 관절이 오른쪽 어깨에 주는 영향이 미미할 것이라는 가정에서 나온 것으로, 모든 관절이 모든 부위에 유의미한 영향을 주는 것에 의문을 품었다. 논문에서는 한 정점은 최대 4개의 관절에서만 영향을 받는다고 가정하고 해당 모델을 만들었다.
고려하는 관절의 수가 줄어들어, 관절의 영향에 대한 표현력이 하락하였다. 이에 성능 또한 감소한 것을 확인할 수 있다. 그럼에도 계산 용량이 줄어, SMPL-LBS보다도 더 빠른 연산이 가능할 것이다. 이는 실시간 애니메이션이나 게임에서 중요한 이점으로 작용하지 않을까 싶다.

위 XAI 논문에서는 간단한 표현력과 정확도 사이에는 trade-off 관계가 있다고 한다.
위의 성능 결과랑 같은 맥락이라고 생각한다.
** 번외
BlendSCAPE에 대해 잘 다루고 있지 않아 간단히 차이점을 살펴보자.
SMPL은 vertex 기반인 반면, BlendSCAPE는 triangle 기반이다. 이것의 장점은 local한 변형을 잘 잡아내는 것이다. 삼각형 안의 공간에 대해서 디테일한 표현을 잘하지만, 그 외의 전체적인 변형에 대해서는 취약한 모습을 보인다.
BlendSCAPE의 자세한 작동 원리는 나중에 다시 알아보자.