def test_transform_points(batch_size, num_points, num_dims, device_type):
    # generate input data
    eye_size = num_dims + 1
    points_src = torch.rand(batch_size, num_points, num_dims)
    points_src = points_src.to(torch.device(device_type))

    dst_homo_src = utils.create_random_homography(batch_size, eye_size)
    dst_homo_src = dst_homo_src.to(torch.device(device_type))

    # transform the points from dst to ref
    points_dst = tgm.transform_points(dst_homo_src, points_src)

    # transform the points from ref to dst
    src_homo_dst = torch.inverse(dst_homo_src)
    points_dst_to_src = tgm.transform_points(src_homo_dst, points_dst)

    # projected should be equal as initial
    error = utils.compute_mse(points_src, points_dst_to_src)
    assert pytest.approx(error.item(), 0.0)

    # functional
    assert torch.allclose(points_dst,
                          tgm.TransformPoints(dst_homo_src)(points_src))

    # evaluate function gradient
    points_src = utils.tensor_to_gradcheck_var(points_src)  # to var
    dst_homo_src = utils.tensor_to_gradcheck_var(dst_homo_src)  # to var
    assert gradcheck(tgm.transform_points, (
        dst_homo_src,
        points_src,
    ),
                     raise_exception=True)
    def test_inverse_gradcheck(self):
        # generate input data
        batch_size = 2
        eye_size = 3  # identity 3x3
        homographies = utils.create_random_homography(batch_size, eye_size)
        homographies = utils.tensor_to_gradcheck_var(homographies)  # to var

        # evaluate function gradient
        res = gradcheck(tgm.inverse, (homographies, ), raise_exception=True)
        self.assertTrue(res)
 def test_gradcheck(self):
     # generate input data
     batch_size, num_points, num_dims = 2, 3, 2
     eye_size = num_dims + 1
     points_src = torch.rand(batch_size, num_points, num_dims)
     dst_homo_src = utils.create_random_homography(batch_size, eye_size)
     # evaluate function gradient
     points_src = utils.tensor_to_gradcheck_var(points_src)  # to var
     dst_homo_src = utils.tensor_to_gradcheck_var(dst_homo_src)  # to var
     assert gradcheck(tgm.TransformPoints(dst_homo_src), (points_src, ),
                      raise_exception=True)
    def test_inverse_pose(self):
        # generate input data
        batch_size = 1
        eye_size = 4  # identity 4x4
        dst_pose_src = utils.create_random_homography(batch_size, eye_size)
        dst_pose_src[:, -1] = 0.0
        dst_pose_src[:, -1, -1] = 1.0

        # compute the inverse of the pose
        src_pose_dst = tgm.inverse_pose(dst_pose_src)

        # H_inv * H == I
        eye = torch.matmul(src_pose_dst, dst_pose_src)
        res = utils.check_equal_torch(eye, torch.eye(4), eps=1e-3)
    def test_inverse_pose(self):
        # generate input data
        batch_size = 1
        eye_size = 4  # identity 4x4
        dst_pose_src = utils.create_random_homography(batch_size, eye_size)
        dst_pose_src[:, -1] = 0.0
        dst_pose_src[:, -1, -1] = 1.0

        # compute the inverse of the pose
        src_pose_dst = tgm.inverse_pose(dst_pose_src)

        # H_inv * H == I
        res = torch.matmul(src_pose_dst, dst_pose_src)
        error = compute_mse(res, utils.create_eye_batch(batch_size, eye_size))
        self.assertAlmostEqual(error.item(), 0.0, places=4)
    def test_inverse(self):
        # generate input data
        batch_size = 2
        eye_size = 3  # identity 3x3
        homographies = utils.create_random_homography(batch_size, eye_size)
        homographies_inv = tgm.inverse(homographies)

        # H_inv * H == I
        res = torch.matmul(homographies_inv, homographies)
        eye = utils.create_eye_batch(batch_size, eye_size)
        error = utils.compute_mse(res, eye)
        self.assertAlmostEqual(error.item(), 0.0, places=4)

        # functional
        self.assertTrue(
            torch.allclose(homographies_inv,
                           tgm.Inverse()(homographies)))
    def test_transform_points_gradcheck(self):
        # generate input data
        batch_size = 2
        num_points = 2
        num_dims = 2
        eye_size = 3  # identity 3x3
        points_src = torch.rand(batch_size, 2, num_dims)
        points_src = utils.tensor_to_gradcheck_var(points_src)  # to var
        dst_homo_src = utils.create_random_homography(batch_size, eye_size)
        dst_homo_src = utils.tensor_to_gradcheck_var(dst_homo_src)  # to var

        # evaluate function gradient
        res = gradcheck(tgm.transform_points, (
            dst_homo_src,
            points_src,
        ),
                        raise_exception=True)
        self.assertTrue(res)
Exemple #8
0
def test_inverse_pose(batch_size, device_type):
    # generate input data
    eye_size = 4  # identity 4x4
    dst_pose_src = utils.create_random_homography(batch_size, eye_size)
    dst_pose_src = dst_pose_src.to(torch.device(device_type))
    dst_pose_src[:, -1] = 0.0
    dst_pose_src[:, -1, -1] = 1.0

    # compute the inverse of the pose
    src_pose_dst = tgm.inverse_pose(dst_pose_src)

    # H_inv * H == I
    eye = torch.matmul(src_pose_dst, dst_pose_src)
    assert utils.check_equal_torch(eye, torch.eye(4), eps=1e-3)

    # evaluate function gradient
    dst_pose_src = utils.tensor_to_gradcheck_var(dst_pose_src)  # to var
    assert gradcheck(tgm.inverse_pose, (dst_pose_src,),
                     raise_exception=True)
    def test_transform_points(self, batch_size, num_points, num_dims,
                              device_type):
        # generate input data
        eye_size = num_dims + 1
        points_src = torch.rand(batch_size, num_points, num_dims)
        points_src = points_src.to(torch.device(device_type))

        dst_homo_src = utils.create_random_homography(batch_size, eye_size)
        dst_homo_src = dst_homo_src.to(torch.device(device_type))

        # transform the points from dst to ref
        points_dst = tgm.transform_points(dst_homo_src, points_src)

        # transform the points from ref to dst
        src_homo_dst = torch.inverse(dst_homo_src)
        points_dst_to_src = tgm.transform_points(src_homo_dst, points_dst)

        # projected should be equal as initial
        error = utils.compute_mse(points_src, points_dst_to_src)
        assert pytest.approx(error.item(), 0.0)
    def test_transform_points(self):
        # generate input data
        batch_size = 2
        num_points = 2
        num_dims = 2
        eye_size = 3  # identity 3x3
        points_src = torch.rand(batch_size, 2, num_dims)
        dst_homo_src = utils.create_random_homography(batch_size, eye_size)

        # transform the points from dst to ref
        points_dst = tgm.transform_points(dst_homo_src, points_src)

        # transform the points from ref to dst
        src_homo_dst = tgm.inverse(dst_homo_src)
        points_dst_to_src = tgm.transform_points(src_homo_dst, points_dst)

        # projected should be equal as initial
        error = utils.compute_mse(points_src, points_dst_to_src)
        self.assertAlmostEqual(error.item(), 0.0, places=4)

        # functional
        self.assertTrue(
            torch.allclose(points_dst,
                           tgm.TransformPoints()(dst_homo_src, points_src)))