딥러닝, 머신러닝/Pose Estimation
3D Human Pose Estimation
woo11
2022. 5. 21. 14:54
3D Human Pose Estimation은 일반적으로 두가지를 통칭해서 말한다.
1. 3D 관절 좌표 : 위 그림의 왼쪽과 같은 3D 관절 좌표를 추정하는 방식
2. 3D 관절 회전 : 위 그림의 오른쪽과 같은 3D 표면(surface, mesh)을 표현하는 방식, x/y/z 각도 3차원과 위치 3차원으로 6D라고 부르기도 한다.
3D 관절의 회전(각도)은 팔꿈치라고 치면, 좌우, 위아래, 앞뒤 방향이라고 볼 수 있다.
- 위 그림에 있는 사람의 맨몸 형태를 3D Human Mesh라 하는데, 3D Human Mesh는 3D 관절 회전(Pose)과 3D 길이/체형(shape)으로 구성되어 있다.
- 최종적으로 위의 그림처럼 3D Human Mesh를 얻어내는 모델을 3D Human Model이라 하는데, Pose에 관한 파라미터인 3D 관절 회전(Jx3)과 3D 길이 및 체형에 관한 파라미터 Beta를 input으로 받는다.
- 그리고 Beta에서부터 길이(키, 팔길이 등) 및 체형을 결정하고, 위 그림과 같은 T-posed 3D mesh를 얻어낸다.
- 얻어낸 뒤, 3D 관절 회전 파라미터와 함께 skinning function을 적용하면, 위의 축구하는 그림과 같은 3d mesh가 나온다.
1-1. 3D 관절 회전
- 해당 관절(팔꿈치)의 부모 관절(어깨)에 상대적인 3D 회전
- 회전으로 인해 모든 자식 관절들이 이동 (어깨-> 팔꿈치->손목)
- 따라서, leaf node(손목, 발목, 머리)에 해당하는 관절들은 3D 회전이 정의되지 않음 (child node가 없으니까)
- root node(pelvis)의 3D 회전은 global rotation(전신의 3D 회전)에 해당한다.
1-2. 3D 길이 및 체형
- T-Pose를 취한 사람의 길이와 체형에 관한 파라미터
- PCA를 통해 사람의 체형, 길이에 대한 latent space를 모델
- T-Pose를 취한 큰 규모의 3D scan dataset이 있다고 가정
- PCA 알고리즘 돌림(데이터를 구분하는 가장 주된 기준을 찾는 것)
- 사람들의 체형을 구분하는 주된 기준 : PCA Components
- 컴포넌트들의 베타(계수)를 곱한 뒤 더해서 최종 T-posed 3D mesh를 얻음
- 키, 체형, … (1, 2번째가 가장 큰 기준) : 0.1 0.1 - 키 작고 마른사람, 0.8 0.1 - 키 크고 마른 사람
Skinning function
- 피부를 입히는 function, 관절들의 위치로부터 피부를 알아낸다
- Skinning Weight (VxJ) : 각 mesh vertex마다 각 관절에 영향을 받는 정도
(팔꿈치의 vertex는 팔꿈치의 rotation에 가장 영향을 크게 받는다.)
3D human model마다 3D artist가 미리 weight를 만들어 놓고, 그걸 별도의 툴로 refine해서 사용한다
Linear Blend Skinning(LBS)
- Skinning function 중 대표적인 방법으로, 모든 관절의 변형을 선형으로(linear) 합쳐서(blend) 3D mesh를 얻는 skinning 알고리즘
- 단순하지만 꽤 그럴듯한 결과가 나와서 많이 쓴다
pose-dependent correctives
- 머리 숙이고 인사할때 뱃살 쳐지는 거 correction시키는 방법 : skin이 더 real하게 만드는 것
- LBS의 한계점을 극복하기 위한 것
데이터 수집
- 여러 체형, 키를 가진 사람의 3D scan 필요 : 전문 스튜디오 필요
- pose dependent corrective : 여러 포즈를 취한 사람의 3d scan 필요 (등 수그렸을 때 뱃살 쳐지는거)
- skinning weight 만들기 : 3D artist가 만든 후 약간의 fine-tuning
- 3D scan 시 native 사람 모델이 목표기 때문에, 타이즈 같은거 입은 배우 고용해서 촬영
위의 3D 캐릭터처럼 목표로 하는 캐릭터가 분명하게 있으면, shape 변형은 따로 필요없기 때문에 pose(Jx3)만으로 변형이 가능하다.