예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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
예제 #4
0
    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)
예제 #5
0
 def forward(self, module_input):
     output = batch_rodrigues(module_input.view(-1, 3)).view(
         -1, self.num_angles, 3, 3)
     return output
예제 #6
0
    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)