|
|
import torch |
|
|
|
|
|
from custom_manopth import rodrigues_layer |
|
|
|
|
|
|
|
|
def th_posemap_axisang(pose_vectors): |
|
|
rot_nb = int(pose_vectors.shape[1] / 3) |
|
|
pose_vec_reshaped = pose_vectors.contiguous().view(-1, 3) |
|
|
rot_mats = rodrigues_layer.batch_rodrigues(pose_vec_reshaped) |
|
|
rot_mats = rot_mats.view(pose_vectors.shape[0], rot_nb * 9) |
|
|
pose_maps = subtract_flat_id(rot_mats) |
|
|
return pose_maps, rot_mats |
|
|
|
|
|
|
|
|
def th_with_zeros(tensor): |
|
|
batch_size = tensor.shape[0] |
|
|
padding = torch.tensor([0.0, 0.0, 0.0, 1.0], device = tensor.device, dtype = tensor.dtype) |
|
|
padding.requires_grad = False |
|
|
|
|
|
concat_list = [tensor, padding.view(1, 1, 4).repeat(batch_size, 1, 1)] |
|
|
cat_res = torch.cat(concat_list, 1) |
|
|
return cat_res |
|
|
|
|
|
|
|
|
def th_pack(tensor): |
|
|
batch_size = tensor.shape[0] |
|
|
padding = tensor.new_zeros((batch_size, 4, 3)) |
|
|
padding.requires_grad = False |
|
|
pack_list = [padding, tensor] |
|
|
pack_res = torch.cat(pack_list, 2) |
|
|
return pack_res |
|
|
|
|
|
|
|
|
def subtract_flat_id(rot_mats): |
|
|
|
|
|
rot_nb = int(rot_mats.shape[1] / 9) |
|
|
id_flat = torch.eye( |
|
|
3, dtype=rot_mats.dtype, device=rot_mats.device).view(1, 9).repeat( |
|
|
rot_mats.shape[0], rot_nb) |
|
|
|
|
|
results = rot_mats - id_flat |
|
|
return results |
|
|
|
|
|
|
|
|
def make_list(tensor): |
|
|
|
|
|
return tensor |
|
|
|