def to_tensor(self, to_rot=True, *args, **kwargs): if not torch.is_tensor(self.left_hand_pose): if self.left_hand_pose is not None: self.left_hand_pose = torch.from_numpy(self.left_hand_pose) if not torch.is_tensor(self.right_hand_pose): if self.right_hand_pose is not None: self.right_hand_pose = torch.from_numpy(self.right_hand_pose) if to_rot: if self.left_hand_pose is not None: self.left_hand_pose = batch_rodrigues( self.left_hand_pose.view(-1, 3)).view(-1, 3, 3) if self.right_hand_pose is not None: self.right_hand_pose = batch_rodrigues( self.right_hand_pose.view(-1, 3)).view(-1, 3, 3) for k, v in self.extra_fields.items(): if isinstance(v, GenericTarget): v.to_tensor(*args, **kwargs)
def to_tensor(self, to_rot=True, *args, **kwargs): self.body_pose = torch.from_numpy(self.body_pose) if to_rot: self.body_pose = batch_rodrigues(self.body_pose.view(-1, 3)).view( -1, 3, 3) for k, v in self.extra_fields.items(): if isinstance(v, GenericTarget): v.to_tensor(*args, **kwargs)
def forward(self, module_input, prev_val): if self.append_params: if self.to_aa: prev_val = batch_rodrigues(prev_val) prev_val = prev_val[:, :, :2].contiguous().view( -1, self.num_angles * 6) module_input = torch.cat([module_input, prev_val], dim=-1) cont_repr = super(ContinuousRotReprRegressor, self).forward(module_input) output = self.repr_decoder(cont_repr).view(-1, self.num_angles, 3, 3) return output
def forward(self, pca_coeffs): batch_size = pca_coeffs.shape[0] decoded = torch.einsum('bi,ij->bj', [pca_coeffs, self.pca_basis]) + self.mean return batch_rodrigues(decoded.view(-1, 3)).view(batch_size, -1, 3, 3)
def forward(self, module_input): output = batch_rodrigues(module_input.view(-1, 3)).view( -1, self.num_angles, 3, 3) return output
def forward(self, features): aa_vectors = super(AARegressor, self).forward(features).view( -1, self.num_angles, 3) return batch_rodrigues(aa_vectors.view(-1, 3)).view( -1, self.num_angles, 3, 3)