Healthcare-Robotics / bodies-at-rest

Code + Data for CVPR 2020 oral paper "Bodies at Rest: 3D Human Pose and Shape Estimation from a Pressure Image using Synthetic Data."
Other
63 stars 8 forks source link

Names of Poses #5

Closed aajikar closed 3 years ago

aajikar commented 3 years ago

Hi Henry,

I am a MSc. student at the University of Calgary looking to perform pose classification on pressure. I would like to train my algorithm using the dataset you have created. I am having troubles deciphering what the pose_type labels mean.

I was wondering if you had a glossary for the pose labels that defines what each acronym is. Specifically I'm having trouble understanding what plo means. What is the difference between:

rollpi vs rollpi_plo supine vs supine_plo

Would appreciate your feedback on this matter!

Best Regards,

Aakash

henryclever commented 3 years ago

Hi Aakash,

Sure, I would be happy to help! First, if you haven't looked at the supplementary materials of the paper yet, I recommend checking them out - there are 8 pages of it, with details like these (but I can't recall how elaborate on this particular question).

Most of the dataset falls within the "rollpi" and the "rollpi_plo" tags. The "rollpi" part means that the human body global rotational roll is sampled uniformly over an entire rotation. These correspond to the "general*" partition in Table 4 of the Appendix. The body roll rotates the body about the head-to-toe axis. With uniform sampling of body roll, there are supine, prone, lateral and everything-in-between kinds of postures in these partitions. So the 'rollpi' partitions don't have a particular posture class- they are continuous. However, you might assign them to a posture class by establishing bounds on the global roll angle and assigning parts of it to different classes. E.g. if a supine posture is at theta=0, you might classify everything from -10 degrees to 10 degrees as supine, 170 to 190 degrees as prone, etc.

The supine tag means that all of the poses have a body roll of zero, with a 'roll0' tag: they set to exactly theta=0 when dropped on the bed.

The 'plo' tag is an acronym for 'prevent-limbs-off' meaning that the joint angles are sampled such that all the limbs initially overlay the mattress and do not hang off the side of it. Often when people are in bed, their limbs do not hang off the sides of the bed. So this aims to distribute the pose accordingly. Note that these tags are for initial sampling, before the body is rested on the bed. Sometimes, when a 'plo' type pose is rested on the bed, the limbs come to rest in a position where the are hanging off the side of the bed. Thus this tag does not enforce it, but it represents poses much more likely to have the person's limbs over the top of the mattress. Almost all of the poses in the SLP dataset are like that.

Hope this helps!

-Henry

aajikar commented 3 years ago

Hi Henry,

This is really helpful! I've looked at the supplemental material however your explanation cleared the confusion!

Regarding body roll and theta values, do you recall which where this can be found in the provided metadata? I'm unsure as to where I should be looking for these angle values.

Thank you once again for your help and quick feedback!

Aakash

henryclever commented 3 years ago

Hi Aakash,

Sure. Checkout line 178 in the lib_py/tensorprep_lib_br.py file. There are 72 joint angles associated with each pose. So it's not really meta data; it's part of the resting pose vector associated with each pose. The first three joint angles in that vector are the global rotation. I can't remember which is which i.e. roll vs. pitch; but you shouldn't have too much trouble with that. Keep in mind that they are direction cosine angles. So if you want to get the body roll or the pitch represented as Euler angles, you will have to do some conversion. Line 248 in lib_py/kinematics_lib_br.py can help with that.

-Henry

aajikar commented 3 years ago

Thank you Henry this helps a lot!