def test_convert_points_from_homogeneous(self):
        # generate input data
        batch_size = 2
        points_h = torch.rand(batch_size, 2, 3)
        points_h[..., -1] = 1.0

        # to euclidean
        points = tgm.convert_points_from_homogeneous(points_h)

        error = utils.compute_mse(points_h[..., :2], points)
        self.assertAlmostEqual(error.item(), 0.0, places=4)

        # functional
        self.assertTrue(
            torch.allclose(points,
                           tgm.ConvertPointsFromHomogeneous()(points_h)))
Beispiel #2
0
    def test_convert_points_batch(self, device_type):
        # generate input data
        points_h = torch.FloatTensor([[
            [2, 1, 0],
        ], [
            [0, 1, 2],
        ]]).to(torch.device(device_type))

        expected = torch.FloatTensor([[
            [2e6, 1e6],
        ], [
            [0, 0.5],
        ]]).to(torch.device(device_type))

        # to euclidean
        points = tgm.convert_points_from_homogeneous(points_h)
        assert_allclose(points, expected)
Beispiel #3
0
def test_convert_points_from_homogeneous(batch_shape, device_type):
    # generate input data
    points_h = torch.rand(batch_shape)
    points_h = points_h.to(torch.device(device_type))
    points_h[..., -1] = 1.0

    # to euclidean
    points = tgm.convert_points_from_homogeneous(points_h)

    error = utils.compute_mse(points_h[..., :2], points)
    assert pytest.approx(error.item(), 0.0)

    # functional
    assert torch.allclose(points, tgm.ConvertPointsFromHomogeneous()(points_h))

    # evaluate function gradient
    points = utils.tensor_to_gradcheck_var(points)  # to var
    assert gradcheck(tgm.convert_points_from_homogeneous, (points, ),
                     raise_exception=True)