From ab8e1a7c555fc19da1c475eb994a31b50f08a5bf Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Thu, 15 Apr 2021 09:36:12 +0100 Subject: [PATCH 1/3] fix duplication of key_transforms in RandSpatialCropSamplesd Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> --- monai/transforms/croppad/dictionary.py | 2 +- tests/test_rand_spatial_crop_samplesd.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/monai/transforms/croppad/dictionary.py b/monai/transforms/croppad/dictionary.py index c4ef659c69..ec76e17b5f 100644 --- a/monai/transforms/croppad/dictionary.py +++ b/monai/transforms/croppad/dictionary.py @@ -536,7 +536,7 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> List[Dict[Hashable, n ret = [] d = dict(data) for i in range(self.num_samples): - cropped = self.cropper(d) + cropped = self.cropper(deepcopy(d)) # add `patch_index` to the meta data for key in self.key_iterator(d): meta_data_key = f"{key}_{self.meta_key_postfix}" diff --git a/tests/test_rand_spatial_crop_samplesd.py b/tests/test_rand_spatial_crop_samplesd.py index 09688f44b7..9db82b7acd 100644 --- a/tests/test_rand_spatial_crop_samplesd.py +++ b/tests/test_rand_spatial_crop_samplesd.py @@ -14,7 +14,7 @@ import numpy as np from parameterized import parameterized -from monai.transforms import RandSpatialCropSamplesd +from monai.transforms import Compose, RandSpatialCropSamplesd, ToTensord TEST_CASE_1 = [ {"keys": ["img", "seg"], "num_samples": 4, "roi_size": [2, 2, 2], "random_center": True}, @@ -76,6 +76,23 @@ def test_shape(self, input_param, input_data, expected_shape, expected_last): np.testing.assert_allclose(item["img"], expected_last["img"]) np.testing.assert_allclose(item["seg"], expected_last["seg"]) + def test_deep_copy(self): + data = {"img": np.ones((1, 10, 11, 12))} + num_samples = 3 + sampler = RandSpatialCropSamplesd( + keys=["img"], + roi_size=(3, 3, 3), + num_samples=num_samples, + random_center=True, + random_size=False, + ) + transform = Compose([ToTensord(keys="img"), sampler]) + samples = transform(data) + self.assertEqual(len(samples), num_samples) + for sample in samples: + self.assertEqual(len(sample["img_transforms"]), len(transform)) + + if __name__ == "__main__": unittest.main() From eaa46c9f11e3a9135aee4630f7a3fd927cd283a9 Mon Sep 17 00:00:00 2001 From: monai-bot Date: Fri, 16 Apr 2021 11:31:42 +0000 Subject: [PATCH 2/3] [MONAI] python code formatting Signed-off-by: monai-bot --- tests/test_rand_spatial_crop_samplesd.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_rand_spatial_crop_samplesd.py b/tests/test_rand_spatial_crop_samplesd.py index 9db82b7acd..3f5eee7b27 100644 --- a/tests/test_rand_spatial_crop_samplesd.py +++ b/tests/test_rand_spatial_crop_samplesd.py @@ -93,6 +93,5 @@ def test_deep_copy(self): self.assertEqual(len(sample["img_transforms"]), len(transform)) - if __name__ == "__main__": unittest.main() From aa56b7b67637c9a59c7976f609ddc99acea4e0c1 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Thu, 22 Apr 2021 01:27:01 +0800 Subject: [PATCH 3/3] [DLMED] only deep copy unmodified Signed-off-by: Nic Ma --- monai/transforms/croppad/dictionary.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/monai/transforms/croppad/dictionary.py b/monai/transforms/croppad/dictionary.py index 64f8b31354..d68c4c4779 100644 --- a/monai/transforms/croppad/dictionary.py +++ b/monai/transforms/croppad/dictionary.py @@ -543,9 +543,12 @@ def randomize(self, data: Optional[Any] = None) -> None: def __call__(self, data: Mapping[Hashable, np.ndarray]) -> List[Dict[Hashable, np.ndarray]]: ret = [] - d = dict(data) for i in range(self.num_samples): - cropped = self.cropper(deepcopy(d)) + d = dict(data) + # deep copy all the unmodified data + for key in set(data.keys()).difference(set(self.keys)): + d[key] = deepcopy(data[key]) + cropped = self.cropper(d) # add `patch_index` to the meta data for key in self.key_iterator(d): meta_data_key = f"{key}_{self.meta_key_postfix}"