Shimingyi / MotioNet

A deep neural network that directly reconstructs the motion of a 3D human skeleton from monocular video [ToG 2020]
https://rubbly.cn/publications/motioNet/
BSD 2-Clause "Simplified" License
554 stars 82 forks source link

bone2skeleton conversion #8

Closed snitchjinx closed 3 years ago

snitchjinx commented 3 years ago

Hello, thanks for sharing this nice work!

I have a question regarding the bone to skeleton conversion function in ./models/model.py It seems the joints are shifted from the pelvis joint by offsets of bone lengths, but why is there no horizontal offsets for RKnee, RAnkle, LKnee, and LAnkle. I was expecting something like:

skel_in[:, 2, 0] = -unnorm_bones[:, 0, 0] skel_in[:, 5, 0] = unnorm_bones[:, 0, 0] skel_in[:, 3, 0] = -unnorm_bones[:, 0, 0] skel_in[:, 6, 0] = unnorm_bones[:, 0, 0]

Thanks in advance for consideration!

Shimingyi commented 3 years ago

Hello! A good question!

We use this function to convert the bone length to T-skeleton, in here we haven't apply the horizontal offsets on Knees and Ankles because we found this kind of setting will be more similar to various character model, so it's better for skinning and other processes.

20200910150611

But because we only apply positional loss directly in our training, so the model can also converage if you use different setting.

snitchjinx commented 3 years ago

Thanks!

longbowzhang commented 3 years ago

Hi @Shimingyi I am also curious about the bones2skel function in model.py. I guess this function constructs the skeleton in terms of relative positions based on the following two oberservations.

But I would like to double check with you about bones2skel whether it expresses the t-pose skeleton in terms of relative positions or absolute positions.

Many thanks.

Shimingyi commented 3 years ago

Hi@longbowzhang ,

You are right, it's not the absolute position in a 3d space. Each value is the relative position compared to its parent joint. This code can help you to undersantd it better: get_skel

Best, Mingyi