def test_exception(self, batch_size, device, dtype): with pytest.raises(TypeError): src = torch.rand(batch_size, 5, 2).numpy() assert kornia.get_tps_transform(src, src) with pytest.raises(ValueError): src = torch.rand(batch_size, 5) assert kornia.get_tps_transform(src, src)
def test_jit(self, batch_size, device, dtype): src, dst = _sample_points(batch_size, device) kernel, affine = kornia.get_tps_transform(src, dst) op = kornia.warp_points_tps op_jit = torch.jit.script(op) assert_allclose(op(src, dst, kernel, affine), op_jit(src, dst, kernel, affine))
def test_affine_only(self, batch_size, device, dtype): src = torch.tensor( [[[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0], [0.5, 0.5]]], device=device).repeat(batch_size, 1, 1) dst = src.clone() * 2.0 kernel, affine = kornia.get_tps_transform(src, dst) assert_allclose(kernel, torch.zeros_like(kernel), atol=1e-4, rtol=1e-4)
def test_jit(self, batch_size, device, dtype): src, dst = _sample_points(batch_size, device) kernel, affine = kornia.get_tps_transform(src, dst) image = torch.rand(batch_size, 3, 32, 32, device=device) op = kornia.warp_image_tps op_jit = torch.jit.script(op) assert_close(op(image, dst, kernel, affine), op_jit(image, dst, kernel, affine), rtol=1e-4, atol=1e-4)
def test_gradcheck(self, batch_size, device, dtype, requires_grad): opts = dict(device=device, dtype=torch.float64) src, dst = _sample_points(batch_size, **opts) kernel, affine = kornia.get_tps_transform(src, dst) kernel.requires_grad_(requires_grad) affine.requires_grad_(not requires_grad) assert gradcheck(kornia.warp_points_tps, (src, dst, kernel, affine), raise_exception=True)
def test_no_warp(self, batch_size, device, dtype): src = torch.rand(batch_size, 5, 2, device=device) kernel, affine = kornia.get_tps_transform(src, src) target_kernel = torch.zeros(batch_size, 5, 2, device=device) target_affine = torch.zeros(batch_size, 3, 2, device=device) target_affine[:, [1, 2], [0, 1]] = 1. assert_allclose(kernel, target_kernel, atol=1e-4, rtol=1e-4) assert_allclose(affine, target_affine, atol=1e-4, rtol=1e-4)
def test_gradcheck(self, batch_size, device, dtype): opts = dict(device=device, dtype=torch.float64) src, dst = _sample_points(batch_size, **opts) kernel, affine = kornia.get_tps_transform(src, dst) image = torch.rand(batch_size, 3, 8, 8, requires_grad=True, **opts) assert gradcheck( kornia.warp_image_tps, (image, dst, kernel, affine), raise_exception=True, atol=1e-4, rtol=1e-4 )
def test_warp(self, batch_size, device, dtype): src = torch.tensor([[[-1.0, -1.0], [-1.0, 1.0], [1.0, -1.0], [1.0, -1.0], [0.0, 0.0]]], device=device).repeat(batch_size, 1, 1) # zoom in by a factor of 2 dst = src.clone() * 2.0 tensor = torch.zeros(batch_size, 3, 8, 8, device=device) tensor[:, :, 2:6, 2:6] = 1.0 expected = torch.ones_like(tensor) # nn.grid_sample interpolates the at the edges it seems, so the boundaries have values < 1 expected[:, :, [0, -1], :] *= 0.5 expected[:, :, :, [0, -1]] *= 0.5 kernel, affine = kornia.get_tps_transform(dst, src) warp = kornia.warp_image_tps(tensor, src, kernel, affine) assert_allclose(warp, expected, atol=1e-4, rtol=1e-4)
def test_warp(self, batch_size, device, dtype): src, dst = _sample_points(batch_size, device) kernel, affine = kornia.get_tps_transform(src, dst) warp = kornia.warp_points_tps(src, dst, kernel, affine) assert_allclose(warp, dst, atol=1e-4, rtol=1e-4)
def test_smoke(self, batch_size, device, dtype): src, dst = _sample_points(batch_size, device) kernel, affine = kornia.get_tps_transform(src, dst) warp = kornia.warp_points_tps(src, dst, kernel, affine) assert warp.shape == src.shape
def test_smoke(self, batch_size, device, dtype): src = torch.rand(batch_size, 4, 2, device=device) out = kornia.get_tps_transform(src, src) assert len(out) == 2
def test_smoke(self, batch_size, device, dtype): src, dst = _sample_points(batch_size, device) tensor = torch.rand(batch_size, 3, 32, 32, device=device) kernel, affine = kornia.get_tps_transform(src, dst) warp = kornia.warp_image_tps(tensor, dst, kernel, affine) assert warp.shape == tensor.shape