Paper/Human

Multi-HMR: Multi-Person Whole-Body Human Mesh Recovery in a Single Shot

침닦는수건 2024. 4. 22. 14:14
반응형

내 맘대로 Introduction

 

single image에서 multi person detection하는 논문. SMPLX 파라미터를 찾는 방식으로 검출해내는데 카메라로부터 거리까지 추정하는 절대적 검출이라는 것이 차이점이다. 

 

대규모 데이터를 먹은 DinoV2를 backbone으로 쓰기 때문에 generalization도 좀 더 잘되는 것 같고 실제로 해봤을 때 기존 ROMP 같은 논문들보다 안정성이 뛰어나다.

 

메모

1) human patch detection (어느 patch에 사람 머리가 있는지)

2) offset regression (patch 내에서 디테일한 위치)

3) Cross attention 기반 regression ( human param + distance)



파라미터 dimension 정도 확인

distortion 안다룸. undistorted image 입력으로 쓰는게 맞음.


Backbone은 그냥 ViT, 특히 DinoV2를 썼다. 가져와서.



ViT 의 16x16 patch 별로 score를 맥여서 사람이 있는지 없는지를 판별함. ( 한 patch에 여러명있는 경우는 신경을 안쓴듯, 그래서 occlusion에 약할 것 같다. 머리를 찾는거고 머리는 보통 작게 나오니까 큰 문제는 없겠지만 다닥다닥 있으면 무조건 안될 듯.)
각 patch 단위로 또 patch 내부에서 얼마 offset 위치에 head joint가 있는지 추가 regression

head joint 위치를 coarse to fine으로 찾는 모양새



앞서 사람 머리 joint 찾는건 사실 전처리에 가깝고 핵심은 여기

사람 머리가 있는 patch token을 Q로 쓰고, 모든 patch token을 K,V로 써서 cross attention을 한다. (자기 자신도 포함인 듯)

cross attnetion -> self attention을 거쳐 SMPLX param + distance 뱉도록 설계함.
distance는 reference focal lenegth로 scale된 log(depth)를 쓴다. 

log는 값의 범위를 줄이기 위함이고 focal length term을 넣은 이유는 후에 camera embedding에 따라 focal legnth aware로 만들기 위함.

학습에는 real scale( intrinsic 있는) 데이터로 학습시켰다.
camera embedding은 각 픽셀 좌표를 unproject한 뒤, x, y 값을 fourier embedding해서 썼다. z를 안쓴 이유는 어차피 1이기 때문.

직접 f, cx, cy를 embedding할수도 있었겠지만 성능이 구렸다고 함.

camera embedding이 가능할 경우에는 patch token에 "concat"해서 추가해준다.

(add면 없을 때는 0더하면 되는데 concat이므로 없을 때도 뭔가 연장해주긴 해야한다. 코드 보면 임의 기준 focal length로 embedding한 것 연장해주는 듯. 즉, 없을 때 안넣어주는게 아니라 그냥 기준값 넣어준다.)
1) patch detectino은 단순히 BCE로

2) offset regression은 L1 으로 했다. 
- smplx param
- distance
- mesh vertex
- projected mesh vertex




synthetic human 모델을 AGORA, UBody에서 데려온 뒤 InterHand까지 붙여서 가상 데이터 찍어내서 사용했다.

body param보다도 hand에서 효과가 컸을 듯.
반응형