I’m having this problem while i’m creating my dataset using torchio using a medical imaging dataset. It seems like i have some data with 3 channels and other one with a single channel. How can i fix this problem?
The dataset is created in this mode:
dataset_dir_name = 'BUSI'
dataset_dir = Path(dataset_dir_name)
images_dir = dataset_dir / 'image'
labels_dir = dataset_dir / 'label'
image_paths = sorted(images_dir.glob('*.png'))
label_paths = sorted(labels_dir.glob('*.png'))
++
subjects = []
for (image_path, label_path) in zip(image_paths, label_paths):
subject = tio.Subject(
mri=tio.ScalarImage(image_path),
brain=tio.LabelMap(label_path),
)
subjects.append(subject)
dataset = tio.SubjectsDataset(subjects)
print('Dataset size:', len(dataset), 'subjects')
In this mode i simply compute the transform.
training_transform = tio.Compose([
tio.ToCanonical(),
tio.Resize(1),
tio.Resample(4),
tio.CropOrPad((48, 60, 48)),
tio.RandomMotion(p=0.2),
tio.RandomBiasField(p=0.3),
tio.RandomNoise(p=0.5),
tio.RandomFlip(),
tio.OneOf({
tio.RandomAffine(): 0.8,
tio.RandomElasticDeformation(): 0.2,
}),
#tio.OneHot(),
])
validation_transform = tio.Compose([
tio.ToCanonical(),
tio.Resize(1),
tio.Resample(4),
tio.CropOrPad((48, 60, 48)),
#tio.OneHot(),
])
num_subjects = len(dataset)
num_training_subjects = int(training_split_ratio * num_subjects)
num_validation_subjects = num_subjects - num_training_subjects
num_split_subjects = num_training_subjects, num_validation_subjects
training_subjects, validation_subjects = torch.utils.data.random_split(subjects, num_split_subjects)
training_set = tio.SubjectsDataset(
training_subjects, transform=training_transform)
validation_set = tio.SubjectsDataset(
validation_subjects, transform=validation_transform)
print('Training set:', len(training_set), 'subjects')
print('Validation set:', len(validation_set), 'subjects')
I generate the dataLoader.
training_batch_size = 16
validation_batch_size = 2 * training_batch_size
training_loader = torch.utils.data.DataLoader(
training_set,
batch_size=training_batch_size,
shuffle=True,
num_workers=num_workers,
)
validation_loader = torch.utils.data.DataLoader(
validation_set,
batch_size=validation_batch_size,
num_workers=num_workers,
)
The error.