hassony2 / manopth

MANO layer for PyTorch, generating hand meshes as a differentiable layer
GNU General Public License v3.0
601 stars 104 forks source link

Fix a bug when the device of manolayer is cpu and use_pca=False #26

Open yl-1993 opened 1 year ago

yl-1993 commented 1 year ago

When use_pca=False, if the device of MANO layer is CPU, it will raise error on this line. This error is due to self.th_posedirs is on cpu device but th_pose_map is on cuda device.

The reason lies in the output value of batch_rotprojs, th_pose_map, is always on GPU. Because inside this function, it always converts the output to GPU. After this PR, the output value will remain on its original device after batch_rotprojs.

In addition, the torch.svd() is deprecated in favor of torch.linalg.svd(), which follows the same convention as np.linalg.svd to output (U, S, V_T).