def get_gpu_tensor_if_possible(self, data: T) -> Any:
     """"
     Get a cuda tensor if this transform was cuda enabled and a GPU is available, otherwise
     return the input.
     """
     import torch
     if isinstance(data, torch.Tensor):
         if self.use_gpu and not is_gpu_tensor(data):
             return data.cuda()
         else:
             return data
     else:
         return data
Esempio n. 2
0
def test_ct_range_manual(
        image_rand_pos_gpu: Union[torch.Tensor, np.ndarray]) -> None:
    image_out = CTRange.transform(data=image_rand_pos_gpu,
                                  output_range=output,
                                  window=window,
                                  level=level,
                                  use_gpu=use_gpu)
    if use_gpu:
        assert is_gpu_tensor(image_out)
        image_out = image_out.cpu().numpy()

    assert np.mean(image_out) == approx(0.0929241235)
    assert_image_out_datatype(image_out)
Esempio n. 3
0
def test_ct_range_liver(
        image_rand_pos_gpu: Union[torch.Tensor, np.ndarray]) -> None:
    image_out = CTRange.transform(data=image_rand_pos_gpu,
                                  output_range=output,
                                  window=200,
                                  level=55,
                                  use_gpu=use_gpu)

    if use_gpu:
        assert is_gpu_tensor(image_out)
        image_out = image_out.cpu().numpy()

    assert np.mean(image_out, dtype=np.float) == approx(0.9399296555978557)
    assert_image_out_datatype(image_out)
Esempio n. 4
0
def test_transform_compose(use_gpu: bool = False) -> None:
    class Identity(Transform3D[torch.Tensor]):
        def __call__(self, sample: torch.Tensor) -> torch.Tensor:
            return self.get_gpu_tensor_if_possible(sample)

    class Square(Transform3D[torch.Tensor]):
        def __call__(self, sample: torch.Tensor) -> torch.Tensor:
            return self.get_gpu_tensor_if_possible(sample)**2

    a = torch.randint(low=2, high=4, size=[1])
    if use_gpu:
        a = a.cuda()

    # test that composition of multiple identity operations holds
    identity_compose = Compose3D([Identity(use_gpu=use_gpu)] * 3)
    a_t = identity_compose(a)
    assert torch.equal(Compose3D.apply(identity_compose, a), a_t)
    assert torch.equal(a_t, a)
    assert is_gpu_tensor(a_t) == use_gpu

    # test that composition of multiple square operations holds
    square_compose = Compose3D([Square(use_gpu=use_gpu)] * 3)
    assert torch.equal(square_compose(a), a**8)
    assert torch.equal(Compose3D.apply(square_compose, a), a**8)