Skip to content

set_determinism() not effect on transforms #574

@cvlearn913

Description

@cvlearn913

I get different results when I execute the following code

from monai.data import write_nifti
from monai.utils import set_determinism
from monai.transforms import (
    AddChanneld,
    LoadImaged,
    SpatialPadd,
    RandCropByPosNegLabeld
)

import os
import glob
**set_determinism(0)** ##not effect
data_dir = "G:\Debug\\fineseg\Task08_HepaticVessel"

train_images = sorted(
    glob.glob(os.path.join(data_dir, "imagesTr", "*.nii.gz")))
train_labels = sorted(
    glob.glob(os.path.join(data_dir, "labelsTr", "*.nii.gz")))
data_dicts = [
    {"image": image_name, "label": label_name}
    for image_name, label_name in zip(train_images, train_labels)
]
train_data_dicts, val_data_dicts = data_dicts[:-9], data_dicts[-9:]


predict_root="G:\Debug\\fineseg\predict"


loader = LoadImaged(keys=("image", "label"))
data_dict = loader(train_data_dicts[0])
print(f"input:, {train_data_dicts[0]}")
print(f"image shape: {data_dict['image'].shape}")
print(f"label shape: {data_dict['label'].shape}")
print(f"image pixdim:\n{data_dict['image_meta_dict']['pixdim']}")

add_channel = AddChanneld(keys=["image", "label"])
data_dict = add_channel(data_dict)

spatial_pad=SpatialPadd(spatial_size = [512,512,160],method = 'end'
                        ,keys = ["image", "label"])
data_dict = spatial_pad(data_dict)
crop = RandCropByPosNegLabeld(num_samples = 200,keys = ["image", "label"],pos = 1,neg = 0 ,spatial_size = [160,160,160],label_key = "label")
data_dict = crop(data_dict)

for i in range(0,10):
     write_nifti(data =data_dict[i]['image'].squeeze(0), file_name = os.path.join(predict_root, str(i)+".nii.gz"))
     print(data_dict[i]['image'].sum()) # debug image data
     write_nifti(data = data_dict[i]['label'].squeeze(0), file_name = os.path.join(predict_root, str(i) + "label.nii.gz"))

The different results are:

-55316384.0
-134774880.0
-304366240.0
-51307344.0
-236706260.0
-59005348.0
-306887230.0
-60515810.0
-76919900.0
-69706830.0
-219979220.0
-207145660.0
-164953630.0
-150721400.0
-150822340.0
-173407470.0
-56645576.0
-180479340.0
-96035400.0
-116822020.0

Only after the transform.set_random_state() is set can get a definitive result:
crop = RandCropByPosNegLabeld(num_samples = 200,keys = ["image", "label"],pos = 1,neg = 0 ,spatial_size = [160,160,160],label_key = "label").set_random_state(0)

-170941440.0
-255337710.0
-168783200.0
-122861896.0
-55514240.0
-32203108.0
-50595764.0
-153388750.0
-86931790.0
-95088110.0

I wonder why this is happend? Thanks in advance!

Metadata

Metadata

Labels

questionFurther information is requested

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions