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
62 stars 8 forks source link

What's the meaning of the keys in dataset? #13

Closed thraster closed 4 months ago

thraster commented 7 months ago

Hi Clever, Recently, I was doing heavy study on your code, I was wondering the meaning of the keys in the .p files: This is my guess:

  1. markers_xyz_m: ground truth joints coordinate (24,3)
  2. body_shape: ground truth shape param, 10个
  3. mesh_contact: mesh contact with the bed (27,64)
  4. mesh_depth: mesh depth image (27, 64)
  5. root_xyz_shift: ground truth shift of the root joint (1,3)
  6. body_height: body height(m)
  7. body_mass: body weight(kg)
  8. images: the pressure image (17281 = 6427)
  9. joint_angles: ground truth of pose param (24,3)
  10. bed_angle_deg: I don't know.

I was confused in the ground truth mesh generating part, I used the body_shape, joint_angles and root_xyz_shift to generating the mesh directly without any preprocess on these params, it turns out that the generated mesh and joints isn't align with the markers_xyz_m 图片

Could you please tell me why this happend and how to process theres params properly?

Thank you very much!!!

Thraster.

henryclever commented 7 months ago

Hi, it looks like you are most of the way there! I believe I used the markers_xyz for the actual ground truth comparison in the network training -- you should be able to compare by printing out the targets on L534 of convnet_br.py. This offset is due to an adjustment in the global reference frame that I never got around to cleaning up the code for. Can you tell me the exact difference in the translation (x,y,z) between the root joint positions of the two skeletons, as well as the root_joint_shift? I should be able to identify what it is using that (I think it's something like 10 taxels in the y direction...)

The bed angle is always zero in this dataset. In a previous work (IROS 2018) I had the supine and seated poses separate, where the bed angle was tilted 60 degrees for the headrest. But in bodies at rest everything is supine so you can ignore it.

-Henry

thraster commented 7 months ago

Hi Henry, thank you for your response, this is the details of the shift of each joint using a female subject 图片 the first line of _shift of each joint(SMPL_joint - markers_xyz)_ is the shift between the two root joints of the two.

I calculated the SMPL_joint using body_shape, joint_angles and root_xyz_shift, no any adjustment in data.

图片

The biggest difference happends in y-axis.

By the way I saw some (marks_xyz 1000) or (marks_xyz -[0.0, 0.0, 0.075]) in the _tensorprep_lib.preplable(), I understand the 0.075 may be the offset in z-axis, but what's the meaning of 1000? is that for calculating the MPJPE and V2V in centimeters?

Thank you! Thraster.

henryclever commented 7 months ago

OK - yeah I remember this but I can't figure out exactly where it is transformed in the code. I'm going to need to download the repo and some data and play with it to figure it out - i will do it this weekend. It is some combination of the 10 taxels in the y direction and a root joint offset from the flex simulator.

It's a good question, and I wish I had this cleaned up before publishing.

thraster commented 7 months ago

Thanks henry!

My current solutions is using the calculated joints as ground truth for training, I think this may working.

By the way, if you still remember this: When you calculating the MPJPE and V2V, did you Multiply the coordinates by 1000? Is this for calculating in millimeters or centimeters? I'm very carious about this, because I need to do some evaluation about the models.

Thank you again!

henryclever commented 7 months ago

The multiplication of 1000 converts from meters to millimeters.

thraster commented 7 months ago

Thanks! got it!