FastMRISliceDataset#

class deepinv.datasets.FastMRISliceDataset(root: str | ~pathlib.Path, test: bool, challenge: str, load_metadata_from_cache: bool = False, save_metadata_to_cache: bool = False, metadata_cache_file: str | ~pathlib.Path = 'dataset_cache.pkl', sample_filter: ~typing.Callable = <function FastMRISliceDataset.<lambda>>, sample_rate: float | None = None, volume_sample_rate: float | None = None, transform_kspace: ~typing.Callable | None = None, transform_target: ~typing.Callable | None = None)[source]#

Bases: Dataset

Dataset for fastMRI that provides access to MR image slices.

1) The fastMRI dataset includes two types of MRI scans: knee MRIs and
the brain (neuro) MRIs, and containing training, validation, and masked test sets.
2) MRIs are volumes (3D) made of slices (2D).
3) This class in particular considers one data sample as one slice of a MRI scan,
thus slices of the same MRI scan are considered independently in the dataset.

Raw data file structure:

self.root --- file1000005.h5
           |
           -- xxxxxxxxxxx.h5
0) To download raw data, please go to the bottom of the page https://fastmri.med.nyu.edu/
1) Each MRI scan is stored in a HDF5 file and can be read with the h5py package.
Each file contains the k-space data, ground truth and some meta data related to the scan.
2) MRI scans can either be single-coil or multi-coil with each coil in
a multi-coil MRI scan focusses on a different region of the image.
3) In multi-coil MRIs, k-space data has the following shape:
(number of slices, number of coils, height, width)
4) For single-coil MRIs, k-space data has the following shape:
(number of slices, height, width)
Parameters:
  • root (Union[str, Path]) – Path to the dataset.

  • test (bool) – Whether the split is the “test” set.

  • challenge (str) – “singlecoil” or “multicoil” depending on the type of mri scan.

  • load_metadata_from_cache (bool) – Whether to load dataset metadata from cache.

  • save_metadata_to_cache (bool) – Whether to cache dataset metadata.

  • metadata_cache_file (Union[str, Path]) – A file used to cache dataset information for faster load times.

  • sample_filter (callable, optional) – A callable object that takes a SliceSampleFileIdentifier() as input and returns a boolean indicating whether the sample should be included in the dataset.

  • sample_rate (float, optional) – A float between 0 and 1. This controls what fraction of all slices should be loaded. Defaults to 1. When creating a sampled dataset either set sample_rate (sample by slices) or volume_sample_rate (sample by volumes) but not both.

  • volume_sample_rate (float, optional) – A float between 0 and 1. This controls what fraction of the volumes should be loaded. Defaults to 1 if no value is given. When creating a sampled dataset either set sample_rate (sample by slices) or volume_sample_rate (sample by volumes) but not both.

  • transform_kspace (callable, optional) – A function/transform that takes in the kspace and returns a transformed version. E.g, torchvision.transforms.RandomCrop

  • transform_target (callable, optional) – A function/transform that takes in the target and returns a transformed version. E.g, torchvision.transforms.RandomCrop


Examples:

Instanciate dataset without transform

from deepinv.datasets import FastMRISliceDataset
root = "/path/to/dataset/fastMRI/knee_singlecoil/train"
dataset = FastMRISliceDataset(root=root, test=False, challenge="singlecoil")
target, kspace = dataset[0]
print(target.shape)
print(kspace.shape)

Instanciate dataset with transform

from torchvision import transforms
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.RandomCrop((256, 256), pad_if_needed=True),
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.RandomVerticalFlip(p=0.5),
]) # Define the transform pipeline
root = "/path/to/dataset/fastMRI/knee_singlecoil/train"
dataset = FastMRISliceDataset(root=root, test=False, challenge="multicoil", transform_kspace=transform, transform_target=transform)
target, kspace = dataset[0]
print(target.shape)
print(kspace.shape)
class SliceSampleFileIdentifier(fname: Path, slice_ind: int)[source]#

Bases: NamedTuple

Data structure for identifying specific slices within MRI data files.

fname: Path#

Alias for field number 0

slice_ind: int#

Alias for field number 1