From 2c686ae4c93ef56d26ef363b0583af9776b7dff4 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Wed, 24 Mar 2021 09:42:36 +0000 Subject: [PATCH 1/3] 1837--collating Signed-off-by: Wenqi Li --- monai/transforms/spatial/array.py | 3 ++- monai/transforms/spatial/dictionary.py | 3 ++- tests/test_inverse_collation.py | 13 +++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/monai/transforms/spatial/array.py b/monai/transforms/spatial/array.py index de9bba8e95..3c4a988ac7 100644 --- a/monai/transforms/spatial/array.py +++ b/monai/transforms/spatial/array.py @@ -990,7 +990,8 @@ def __call__( affine = affine @ create_scale(spatial_dims, self.scale_params) self.affine = affine - self.affine = torch.as_tensor(np.ascontiguousarray(self.affine), device=self.device) + if not isinstance(self.affine, torch.Tensor): + self.affine = torch.as_tensor(np.ascontiguousarray(self.affine), device=self.device) grid = torch.tensor(grid) if not isinstance(grid, torch.Tensor) else grid.detach().clone() if self.device: diff --git a/monai/transforms/spatial/dictionary.py b/monai/transforms/spatial/dictionary.py index 5f8aa3d0b0..e356a51a2a 100644 --- a/monai/transforms/spatial/dictionary.py +++ b/monai/transforms/spatial/dictionary.py @@ -698,7 +698,8 @@ def __call__( affine = self.rand_affine.rand_affine_grid.get_transformation_matrix() else: grid = create_grid(spatial_size=sp_size) - affine = torch.eye(len(sp_size) + 1) + # to be consistent with the self._do_transform case (dtype and device) + affine = torch.as_tensor(np.eye(len(sp_size) + 1), device=self.rand_affine.rand_affine_grid.device) for key, mode, padding_mode in self.key_iterator(d, self.mode, self.padding_mode): self.push_transform(d, key, extra_info={"affine": affine}) diff --git a/tests/test_inverse_collation.py b/tests/test_inverse_collation.py index 5bde157343..344780d2be 100644 --- a/tests/test_inverse_collation.py +++ b/tests/test_inverse_collation.py @@ -14,6 +14,7 @@ from typing import TYPE_CHECKING import numpy as np +import torch from parameterized import parameterized from monai.data import CacheDataset, DataLoader, create_test_image_2d, create_test_image_3d, pad_list_data_collate @@ -49,7 +50,9 @@ RandRotate90d(keys=KEYS, spatial_axes=(1, 2)), RandZoomd(keys=KEYS, prob=0.5, min_zoom=0.5, max_zoom=1.1, keep_size=True), RandRotated(keys=KEYS, prob=0.5, range_x=np.pi), - RandAffined(keys=KEYS, prob=0.5, rotate_range=np.pi), + RandAffined( + keys=KEYS, prob=0.5, rotate_range=np.pi, device=torch.device("cuda" if torch.cuda.is_available() else "cpu") + ), ] ] @@ -62,7 +65,9 @@ RandRotate90d(keys=KEYS, prob=0.5, spatial_axes=(0, 1)), RandZoomd(keys=KEYS, prob=0.5, min_zoom=0.5, max_zoom=1.1, keep_size=True), RandRotated(keys=KEYS, prob=0.5, range_x=np.pi), - RandAffined(keys=KEYS, prob=0.5, rotate_range=np.pi), + RandAffined( + keys=KEYS, prob=0.5, rotate_range=np.pi, device=torch.device("cuda" if torch.cuda.is_available() else "cpu") + ), ] ] @@ -102,8 +107,8 @@ def test_collation(self, _, transform, collate_fn, ndim): else: modified_transform = Compose([transform, ResizeWithPadOrCropd(KEYS, 100)]) - # num workers = 0 for mac - num_workers = 2 if sys.platform != "darwin" else 0 + # num workers = 0 for mac or gpu transforms + num_workers = 0 if sys.platform == "darwin" or torch.cuda.is_available() else 2 dataset = CacheDataset(data, transform=modified_transform, progress=False) loader = DataLoader(dataset, num_workers, batch_size=self.batch_size, collate_fn=collate_fn) From e86c97fa9d27df91636fff4282670e1ec3353f38 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Wed, 24 Mar 2021 09:58:40 +0000 Subject: [PATCH 2/3] fixes transform device Signed-off-by: Wenqi Li --- tests/test_inverse_collation.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/test_inverse_collation.py b/tests/test_inverse_collation.py index 344780d2be..3e07a8f0e2 100644 --- a/tests/test_inverse_collation.py +++ b/tests/test_inverse_collation.py @@ -51,7 +51,11 @@ RandZoomd(keys=KEYS, prob=0.5, min_zoom=0.5, max_zoom=1.1, keep_size=True), RandRotated(keys=KEYS, prob=0.5, range_x=np.pi), RandAffined( - keys=KEYS, prob=0.5, rotate_range=np.pi, device=torch.device("cuda" if torch.cuda.is_available() else "cpu") + keys=KEYS, + prob=0.5, + rotate_range=np.pi, + device=torch.device("cuda" if torch.cuda.is_available() else "cpu"), + as_tensor_output=False, ), ] ] @@ -66,7 +70,11 @@ RandZoomd(keys=KEYS, prob=0.5, min_zoom=0.5, max_zoom=1.1, keep_size=True), RandRotated(keys=KEYS, prob=0.5, range_x=np.pi), RandAffined( - keys=KEYS, prob=0.5, rotate_range=np.pi, device=torch.device("cuda" if torch.cuda.is_available() else "cpu") + keys=KEYS, + prob=0.5, + rotate_range=np.pi, + device=torch.device("cuda" if torch.cuda.is_available() else "cpu"), + as_tensor_output=False, ), ] ] From cb60f72b31860d76218696eca91c27ff68480e11 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Wed, 24 Mar 2021 13:24:30 +0000 Subject: [PATCH 3/3] reverting self.affine Signed-off-by: Wenqi Li --- monai/transforms/spatial/array.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/monai/transforms/spatial/array.py b/monai/transforms/spatial/array.py index 3c4a988ac7..de9bba8e95 100644 --- a/monai/transforms/spatial/array.py +++ b/monai/transforms/spatial/array.py @@ -990,8 +990,7 @@ def __call__( affine = affine @ create_scale(spatial_dims, self.scale_params) self.affine = affine - if not isinstance(self.affine, torch.Tensor): - self.affine = torch.as_tensor(np.ascontiguousarray(self.affine), device=self.device) + self.affine = torch.as_tensor(np.ascontiguousarray(self.affine), device=self.device) grid = torch.tensor(grid) if not isinstance(grid, torch.Tensor) else grid.detach().clone() if self.device: