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)))
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)
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)