示例#1
0
    def _compute_absolute_angle_loss(self, prediction: torch.Tensor,
                                     target: torch.Tensor):
        prediction = TensorGeometry.batch_assembleDeltaEulerAngles(
            prediction[:, :, :-3])
        target = TensorGeometry.batch_assembleDeltaEulerAngles(
            target[:, :, :-3])

        return 100 * torch.nn.functional.mse_loss(prediction, target)
示例#2
0
    def test_batchEulerDifferences(self):
        y = 0.1745329
        x_prime = 0.3490659
        z_prime_prime = 0.7853982
        input_angles = [y, x_prime, z_prime_prime]

        expected_euler_rotation_batch = torch.Tensor([
            input_angles, input_angles, input_angles, input_angles,
            input_angles, input_angles, input_angles, input_angles
        ]).requires_grad_(True)

        # 2 segments of 4 euler rotations
        expected_euler_rotation_batch = expected_euler_rotation_batch.view(
            (2, 4, 3))

        absolute_euler_orientation_batch = TensorGeometry.batch_assembleDeltaEulerAngles(
            expected_euler_rotation_batch)
        self.assertTrue(absolute_euler_orientation_batch.requires_grad)

        actual_euler_rotation_batch = TensorGeometry.batch_eulerDifferences(
            absolute_euler_orientation_batch)
        self.assertTrue(actual_euler_rotation_batch.requires_grad)

        numpy.testing.assert_allclose(
            actual_euler_rotation_batch.detach().numpy(),
            expected_euler_rotation_batch.detach().numpy(),
            rtol=7.1029973e-07)
示例#3
0
    def _compute_global_loss(self, prediction: torch.Tensor,
                             target: torch.Tensor):
        global_rotations = TensorGeometry.batch_assembleDeltaEulerAngles(
            target[:, :, :-3])
        global_translations = TensorGeometry.batch_assembleDeltaTranslationMatrices(
            target[:, :, -3:])
        global_pose_minus_start = torch.cat(
            (global_rotations, global_translations), dim=2)[:, 1:, :]

        loss = BatchSegmentMSELoss()
        return loss.compute(prediction, global_pose_minus_start)
示例#4
0
    def test_batch_assembleDeltaEulerAngles(self):
        y = 0.1745329
        x_prime = 0.3490659
        z_prime_prime = 0.7853982
        input_angles = [y, x_prime, z_prime_prime]

        relative_euler_rotation_batch = torch.Tensor([
            input_angles, input_angles, input_angles, input_angles,
            input_angles, input_angles, input_angles, input_angles
        ]).requires_grad_(True)

        # 2 segments of 4 euler rotations
        relative_euler_rotation_batch = relative_euler_rotation_batch.view(
            (2, 4, 3))

        actual_absolute_euler_orientation_batch = TensorGeometry.batch_assembleDeltaEulerAngles(
            relative_euler_rotation_batch)
        self.assertTrue(actual_absolute_euler_orientation_batch.requires_grad)
        actual_absolute_matrix_orientation_batch = TensorGeometry.batchEulerAnglesToRotationMatrixTensor(
            actual_absolute_euler_orientation_batch)
        self.assertTrue(actual_absolute_matrix_orientation_batch.requires_grad)
        actual_relative_rotation_batch = torch.zeros(
            actual_absolute_matrix_orientation_batch[:, 1:, :].shape)

        #take the absolute rotation tensor and make the rotations relative
        for i, segment in enumerate(actual_absolute_matrix_orientation_batch):
            for j, rotation in enumerate(segment[1:]):
                actual_relative_rotation_batch[i, j] = torch.mm(
                    rotation, segment[j].inverse())

        actual_relative_rotation_batch = TensorGeometry.batchRotationMatrixTensorToEulerAngles(
            actual_relative_rotation_batch)
        self.assertTrue(actual_relative_rotation_batch.requires_grad)

        actual_relative_rotation_batch = actual_relative_rotation_batch.detach(
        ).numpy()
        expected_relative_rotation_batch = relative_euler_rotation_batch.detach(
        ).numpy()
        numpy.testing.assert_allclose(actual_relative_rotation_batch,
                                      expected_relative_rotation_batch,
                                      rtol=7.1029973e-07)