Skip to content

Duplicated records of RandSpatialCropSamplesd in key_transforms in case of preceding transforms #2009

@djoerch

Description

@djoerch

Describe the bug

When using RandSpatialCropSamplesd in a transform chain in a dataset the record of transforms (key_transforms) of a single output patch differs depending on whether another transform has been called before or not.

To Reproduce

import numpy as np

from monai.data import Dataset
from monai.transforms import RandSpatialCropSamplesd, Compose, ToTensord, DeleteItemsd
from monai.utils import first

sz = (1, 10, 11, 12)
samples_per_img = 3

list_of_data = [dict(img=np.ones(sz), label='a')] * 100

sampler = RandSpatialCropSamplesd(
    keys=["img"],
    roi_size=(3, 3, 3),
    num_samples=samples_per_img,
    random_center=True,
    random_size=False,
)

trafo_chains = [
    [ToTensord(keys="img"), sampler],
    [sampler],
    [ToTensord(keys="img"), DeleteItemsd(keys="img_transforms"), sampler]
]

for trafo_chain in trafo_chains:
    ds = Dataset(data=list_of_data, transform=Compose(trafo_chain))
    sample = first(ds)
    print([d["class"] for d in sample[0]["img_transforms"]])

The output I got from this is:

['ToTensord', 'RandSpatialCropd', 'RandSpatialCropd', 'RandSpatialCropd']
['RandSpatialCropd']
['RandSpatialCropd']

Expected behavior
I would expect that the RandSpatialCropSamplesd appears only once in the record key_transforms if it is applied only once to create the patch. Or do I misunderstand the use of this transform?

Environment

================================                                                                                                                                                                 
Printing MONAI config...                                                                                                                                                                         
================================                                                                                                                                                                 
MONAI version: 0.5.0                                                                                                                                                                             
Numpy version: 1.18.5                                                                                                                                                                            
Pytorch version: 1.7.1                                                                                                                                                                           
MONAI flags: HAS_EXT = False, USE_COMPILED = False                                                                                                                                               
MONAI rev id: 2707407fed8c78ccb1c18d1e994a68580457219e                                                                                                                                           
                                                                                                                                                                                                 
Optional dependencies:                                                                                                                                                                           
Pytorch Ignite version: 0.4.4                                                                                                                                                                    
Nibabel version: 3.2.1                                                                                                                                                                           
scikit-image version: 0.17.2                                                                                                                                                                     
Pillow version: 8.2.0                                                                                                                                                                            
Tensorboard version: 2.4.1                                                                                                                                                                       
gdown version: NOT INSTALLED or UNKNOWN VERSION.
TorchVision version: 0.8.2
ITK version: NOT INSTALLED or UNKNOWN VERSION.
tqdm version: 4.60.0
lmdb version: NOT INSTALLED or UNKNOWN VERSION.
psutil version: NOT INSTALLED or UNKNOWN VERSION.

For details about installing the optional dependencies, please visit:
    https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies


================================
Printing system config...
================================
`psutil` required for `print_system_info`

================================
Printing GPU config...
================================
Num GPUs: 2
Has CUDA: True
CUDA version: 10.2
cuDNN enabled: True
cuDNN version: 7605
Current device: 0
Library compiled for CUDA architectures: ['sm_37', 'sm_50', 'sm_60', 'sm_70', 'sm_75']
GPU 0 Name: GeForce RTX 2070 SUPER
GPU 0 Is integrated: False
GPU 0 Is multi GPU board: False
GPU 0 Multi processor count: 40
GPU 0 Total memory (GB): 7.8
GPU 0 Cached memory (GB): 0.0
GPU 0 Allocated memory (GB): 0.0
GPU 0 CUDA capability (maj.min): 7.5
GPU 1 Name: GeForce RTX 2070 SUPER
GPU 1 Is integrated: False
GPU 1 Is multi GPU board: False
GPU 1 Multi processor count: 40
GPU 1 Total memory (GB): 7.8
GPU 1 Cached memory (GB): 0.0
GPU 1 Allocated memory (GB): 0.0
GPU 1 CUDA capability (maj.min): 7.5

Additional context

d = dict(data)
for i in range(self.num_samples):
cropped = self.cropper(d)

It could be that the cause of this is in the code snippet below where the incoming dict is shallow-copied which results in the list types (e.g. key_transforms) to be shared among all copies of d.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions