Skip to content

Saving NiFTI images with resampling raises memory error #2316

@shawnfan19

Description

@shawnfan19

Hello!

I have created the following pipeline and run it on some NiFTI images here (https://drive.google.com/drive/folders/1r2_0RTHFN8XfSLnSgMGYZuQXuhEpP4NC?usp=sharing). I would like to save the processed images as NiFTI because I am processing >10,000 images before training a neural network. Instead of having to process all images every epoch, I would like to save them as temporary files until training is complete.

preprocess_transform = Compose([
    LoadImaged(keys=["img"]),
    AsChannelFirstd(keys=["img"], channel_dim=-1),
    Spacingd(keys=["img"], pixdim=(2, 2, 2), diagonal=True, mode="bilinear"),
    ScaleIntensityd(keys=["img"], minv=0, maxv=1),
    SaveImaged(
                    keys=["img"],
                    output_dir="./visualization",
                    output_ext=".nii",
                    resample=True,
     ),
    ToTensord(keys=["img"])
])

Without resampling, the saved images appear distorted and shorn, but with resampling, the following error is received. It appears that the affine transform requires >200,000 GB of memory?

Modifying image pixdim from [1.01821 1.01821 2.025 0. ] to [ 1.01821005 1.01821005 2.0250001 898.17486327]
input data information of the runtime error transform:
img statistics:
Type: <class 'numpy.ndarray'>
Shape: (1, 172, 172, 82)
Value range: (0.0, 1.0)
img_meta_dict statistics:
Type: <class 'dict'>
Value: {'sizeof_hdr': array(1543569408, dtype=int32), 'extents': array(4194304, dtype=int32), 'session_error': array(0, dtype=int16), 'dim_info': array(0, dtype=uint8), 'dim': array([ 1024, 20481, 20481, 20736, 256, 0, 0, 0],
dtype=int16), 'intent_p1': array(0., dtype=float32), 'intent_p2': array(0., dtype=float32), 'intent_p3': array(0., dtype=float32), 'intent_code': array(0, dtype=int16), 'datatype': array(4096, dtype=int16), 'bitpix': array(8192, dtype=int16), 'slice_start': array(0, dtype=int16), 'pixdim': array([ 4.6006030e-41, -7.9165687e-07, -7.9165687e-07, -6.3281336e-23,
4.0563766e-09, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00],
dtype=float32), 'vox_offset': array(0., dtype=float32), 'scl_slope': array(6.9055e-41, dtype=float32), 'scl_inter': array(6.9055e-41, dtype=float32), 'slice_end': array(0, dtype=int16), 'slice_code': array(0, dtype=uint8), 'xyzt_units': array(2, dtype=uint8), 'cal_max': array(0., dtype=float32), 'cal_min': array(0., dtype=float32), 'slice_duration': array(0., dtype=float32), 'toffset': array(0., dtype=float32), 'glmax': array(0, dtype=int32), 'glmin': array(0, dtype=int32), 'qform_code': array(256, dtype=int16), 'sform_code': array(0, dtype=int16), 'quatern_b': array(0., dtype=float32), 'quatern_c': array(0., dtype=float32), 'quatern_d': array(0., dtype=float32), 'qoffset_x': array(-3.216494e+31, dtype=float32), 'qoffset_y': array(1.5721015e+19, dtype=float32), 'qoffset_z': array(5.8155804e-15, dtype=float32), 'srow_x': array([0., 0., 0., 0.], dtype=float32), 'srow_y': array([0., 0., 0., 0.], dtype=float32), 'srow_z': array([0., 0., 0., 0.], dtype=float32), 'affine': array([[ 2. , 0. , 0. , 507.58554077],
[ 0. , 2. , 0. , 689.41204834],
[ 0. , 0. , 2. , 271.63400269],
[ 0. , 0. , 0. , 1. ]]), 'original_affine': array([[ 1.01821005, 0. , 0. , 507.58554077],
[ 0. , 1.01821005, 0. , 689.41204834],
[ 0. , 0. , 2.0250001 , 271.63400269],
[ 0. , 0. , 0. , 1. ]]), 'as_closest_canonical': False, 'spatial_shape': array([20481, 20481, 20736], dtype=int16), 'original_channel_dim': -1, 'filename_or_obj': '/scratch/sfan/AV45/I174732/ADNI_023_S_0376_PT_PET_Brain_AV45_recon_br_raw_20100527082453889_6_S85655_I174732.nii'}
img_transforms statistics:
Type: <class 'list'>
Value: [{'class': 'Spacingd', 'id': 23314182078984, 'orig_size': (336, 336, 81), 'extra_info': {'meta_data_key': 'img_meta_dict', 'old_affine': array([[ 1.01821005, 0. , 0. , 507.58554077],
[ 0. , 1.01821005, 0. , 689.41204834],
[ 0. , 0. , 2.0250001 , 271.63400269],
[ 0. , 0. , 0. , 1. ]]), 'mode': 'bilinear', 'padding_mode': 'border', 'align_corners': False}}]
Traceback (most recent call last):
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/transforms/transform.py", line 48, in apply_transform
return transform(data)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/transforms/io/dictionary.py", line 231, in call
self.saver(img=d[key], meta_data=meta_data)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/transforms/io/array.py", line 282, in call
self.saver.save(img, meta_data)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/data/nifti_saver.py", line 157, in save
output_dtype=self.output_dtype,
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/data/nifti_writer.py", line 150, in write_nifti
spatial_size=output_spatial_shape
[: len(data.shape)],
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/networks/layers/spatial_transforms.py", line 539, in forward
grid = nn.functional.affine_grid(theta=theta[:, :sr], size=list(dst_size), align_corners=self.align_corners)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/torch/nn/functional.py", line 3933, in affine_grid
return torch.affine_grid_generator(theta, size, align_corners)
RuntimeError: [enforce fail at CPUAllocator.cpp:67] . DefaultCPUAllocator: can't allocate memory: you tried to allocate 278341060534272 bytes. Error code 12 (Cannot allocate memory)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/transforms/transform.py", line 48, in apply_transform
return transform(data)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/transforms/compose.py", line 144, in call
input_ = apply_transform(transform, input)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/transforms/transform.py", line 71, in apply_transform
raise RuntimeError(f"applying transform {transform}") from e
RuntimeError: applying transform <monai.transforms.io.dictionary.SaveImaged object at 0x1534418a82e8>

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "preprocess.py", line 83, in
for i, batch in enumerate(check_loader):
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 517, in next
data = self._next_data()
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 557, in _next_data
data = self._dataset_fetcher.fetch(index) # may raise StopIteration
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/data/dataset.py", line 93, in getitem
return self._transform(index)
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/data/dataset.py", line 79, in _transform
return apply_transform(self.transform, data_i) if self.transform is not None else data_i
File "/home/sfan/anaconda3/envs/torch_monai/lib/python3.6/site-packages/monai/transforms/transform.py", line 71, in apply_transform
raise RuntimeError(f"applying transform {transform}") from e
RuntimeError: applying transform <monai.transforms.compose.Compose object at 0x1534418a8400>

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions