3D Human pose estimation에는 Model-free, Model-based 2가지 접근법이 있는데, 이에 관한 설명과 관련 논문들을 살펴보겠습니다.
먼저 두 방법론의 큰 개념은 아래와 같은데, 가장 큰 차이점은 human model을 forward할 때 사용하냐 안하냐 차이입니다.
1. Model-based
- Model-based의 경우, 위의 그림처럼 입력 이미지로부터 3D human model의 parameter를 추청하는 형태입니다.
- pose와 shape 부분의 파라미터를 학습하고, 3D human model은 fixed 상태로 그대로 사용합니다.
2. Model-free
- 반면에 Model-free는 3D human model을 사용하지 않고, 입력 이미지로부터 직접적으로 3D mesh를 추정합니다.
- 이 때, 3D human mesh는 3D human model(SMPL)의 topology(vertex 개수, face를 이루는 vertex index)와 같다고 가정합니다.
좀 더 디테일한 부분을 알아보겠습니다.
1. Model-based
- Model-based 접근법은 3D 관절 회전 파라미터를 학습하므로, 부모 joint의 3D rotation이 잘못 예측되면, 자식 joint들에도 영향이 갑니다 (error accumulation).
- 이러한 error accumulation 현상 때문에 직접적으로 좌표를 추정하는 model-free에 비해 정확도가 낮을 수 있습니다.
- 하지만, 3D 관절 회전은 다른 캐릭터로의 포즈 전송을 가능하게 하는 등 여러 앱에서 매우 유용하게 사용될 수 있다.
학습 방식
- in-the-wild dataset(2d pose) : 3D mesh를 2D로 project 시킨 뒤 2D pose와 loss 계산한다.
- 관절에만 loss를 주어도, LBS 덕분에 관절로부터 떨어져있는 mesh vertex들도 loss에 영향을 받게 된다.
- 카메라로부터 사람이 x,y,z축으로 어디에 있는지 3D translation vector 추정한다.
(focal length, principle point는 constant로 가정 - 불확실성 줄이기 위해)
- mocap : mocap dataset들은 3D pose data가 있어서, GT 3D pose와 loss를 계산한다.
2. Model-free
- SMPL 6980개의 vertex 3D 좌표를 모두 추정해야 한다 (6890x3)
- 위와 같은 이유로, output space가 매우 커진다.
- 3D human model에서 얻는 것처럼 output이 smooth하지 않을 수 있음
- 3D 관절 회전값을 얻지 못하기 때문에 다른 앱에 적용하기에는 제약이 있음 (실용성 떨어짐)
학습 방식
- Vertex를 추정하는 걸 목표로 하기 때문에, in-the-wild 2D 및 mocap 3d 데이터 모두 3D pseudo-GT(mesh)를 만들어서 사용한다.
- model-free는 관절에만 loss 계산하면 관절만 삐죽 튀어나온다. 관절로부터 떨어져있는 mesh vertex들이 영향을 받지 않는다.
- pre-processing stage에서 3D pseudo GT mesh를 얻어놔야 하는 게 가장 큰 차이점 (SMPLify-X 혹은 NeuralAnnot 이용)
- vertex-to-vertex L1 Loss : model-based 때도 쓰는 게 더 정확도 많이 올려준다
(model-based는 optional, 성능 높이려면 해야함 / model-free는 필수)