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).
When
use_pca=False
, if the device of MANO layer is CPU, it will raise error on this line. This error is due toself.th_posedirs
is on cpu device butth_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)
.