How to ensure the consistency of the transformation of different modal images and the corresponding label
675492062 opened this issue · comments
My codes:
import os
import SimpleITK as sitk
from PIL import Image
import numpy as np
from batchgenerators.utilities.file_and_folder_operations import join, subfolders, isfile
from cuda_backend.py_api import Handle
import deform
`
def test_3D():
filenames = get_list_of_files('/home/xwl/Data/aug')
for files in filenames:
if 'LGG' in files[0]:
for file in files:
print(file)
sp = file.split('.nii.gz')
sitk_image = sitk.ReadImage(file)
array_image = sitk.GetArrayFromImage(sitk_image).copy()
array_image = array_image.astype(np.float32)
cuda_handle = Handle(array_image.shape, mode="constant")
# cuda_handle.test()
# cuda_handle.scale(1.2)
np.random.seed(0)
p = np.array([0.8, 0.2])
is_flipx = np.random.choice([False, True], p=p.ravel())
is_flipy = np.random.choice([False, True], p=p.ravel())
is_flipz = np.random.choice([False, True], p=p.ravel())
cuda_handle.flip(do_y=is_flipx, do_x=is_flipy, do_z=is_flipz)
# cuda_handle.translate(100, 100, 20)
# cuda_handle.rotate(0.75 * np.pi, 0.75 * np.pi, 0.75 * np.pi)
cuda_handle.elastic(sigma=5., alpha=200., mode='constant')
cuda_handle.end_flag()
# correct_ret = deform.spatial_augment(array_image, mode="mirror")
# Warm up and Unit test
# for i in range(100):
# if 'seg' not in sp[0].split('/')[-1].split('_'):
# output = cuda_handle.augment(array_image, order=1)
# else:
# output = cuda_handle.augment(array_image, order=0)
output = cuda_handle.augment(array_image, order=0)
volOut = sitk.GetImageFromArray(output[0])
id = sp[0].split('/')[-2]
dirname = "/home/xwl/Data/training/preprocessed/pre_" + id
if not os.path.exists(dirname):
os.makedirs(dirname)
print("dir create ok")
if os.path.exists(dirname):
sitk.WriteImage(volOut, dirname + "/" + "pre_" + file.split('/')[-1], True)
def get_list_of_files(base_dir):
"""
returns a list of lists containing the filenames. The outer list contains all training examples. Each entry in the
outer list is again a list pointing to the files of that training example in the following order:
T1, T1c, T2, FLAIR, segmentation
:param base_dir:
:return:
"""
list_of_lists = []
for glioma_type in ['LGG']: # ['HGG', 'LGG']:
current_directory = join(base_dir, glioma_type)
patients = subfolders(current_directory, join=False)
for p in patients:
patient_directory = join(current_directory, p)
t1_file = join(patient_directory, p + "_t1.nii.gz")
t1c_file = join(patient_directory, p + "_t1ce.nii.gz")
t2_file = join(patient_directory, p + "_t2.nii.gz")
flair_file = join(patient_directory, p + "_flair.nii.gz")
seg_file = join(patient_directory, p + "_seg.nii.gz")
this_case = [t1_file, t1c_file, t2_file, flair_file, seg_file]
assert all((isfile(i) for i in this_case)), "some file is missing for patient %s; make sure the following "
"files are there: %s" % (p, str(this_case))
list_of_lists.append(this_case)
print("Found %d patients" % len(list_of_lists))
return list_of_lists
if name == "main":
test_3D()
`
and second problem:
after runing the above codes, we can get the below errors:
CUDA error at /home/xwl/cuda_spatial_deform/cuda_backend/kernel/utils.cu:97 code=2(cudaErrorMemoryAllocation) "cudaMalloc((void **)&random, coords_size * sizeof(float))"
Keep the coordinates unchanged, according to the doc.