diff --git a/2d_classification/mednist_tutorial.ipynb b/2d_classification/mednist_tutorial.ipynb index 09224fddda..dd1556d8f9 100644 --- a/2d_classification/mednist_tutorial.ipynb +++ b/2d_classification/mednist_tutorial.ipynb @@ -118,6 +118,7 @@ " RandZoom,\n", " ScaleIntensity,\n", " EnsureType,\n", + " ToNumpy,\n", ")\n", "from monai.utils import set_determinism\n", "\n", @@ -361,7 +362,8 @@ "source": [ "train_transforms = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpy(),\n", " AddChannel(),\n", " ScaleIntensity(),\n", " RandRotate(range_x=np.pi / 12, prob=0.5, keep_size=True),\n", @@ -372,7 +374,7 @@ ")\n", "\n", "val_transforms = Compose(\n", - " [LoadImage(image_only=True), AddChannel(), ScaleIntensity(), EnsureType()])\n", + " [LoadImage(), ToNumpy(), AddChannel(), ScaleIntensity(), EnsureType()])\n", "\n", "y_pred_trans = Compose([EnsureType(), Activations(softmax=True)])\n", "y_trans = Compose([EnsureType(), AsDiscrete(to_onehot=num_class)])" diff --git a/2d_registration/registration_mednist.ipynb b/2d_registration/registration_mednist.ipynb index f53a9e66a2..8a728970bf 100644 --- a/2d_registration/registration_mednist.ipynb +++ b/2d_registration/registration_mednist.ipynb @@ -103,6 +103,7 @@ "from monai.transforms import (\n", " EnsureChannelFirstD,\n", " Compose,\n", + " FromMetaTensord,\n", " LoadImageD,\n", " RandRotateD,\n", " RandZoomD,\n", @@ -232,6 +233,7 @@ " [\n", " LoadImageD(keys=[\"fixed_hand\", \"moving_hand\"]),\n", " EnsureChannelFirstD(keys=[\"fixed_hand\", \"moving_hand\"]),\n", + " FromMetaTensord(keys=[\"fixed_hand\", \"moving_hand\"]),\n", " ScaleIntensityRanged(keys=[\"fixed_hand\", \"moving_hand\"],\n", " a_min=0., a_max=255., b_min=0.0, b_max=1.0, clip=True,),\n", " RandRotateD(keys=[\"moving_hand\"], range_x=np.pi/4, prob=1.0, keep_size=True, mode=\"bicubic\"),\n", diff --git a/3d_segmentation/brats_segmentation_3d.ipynb b/3d_segmentation/brats_segmentation_3d.ipynb index cde08c6cae..ec374b04f7 100644 --- a/3d_segmentation/brats_segmentation_3d.ipynb +++ b/3d_segmentation/brats_segmentation_3d.ipynb @@ -135,6 +135,7 @@ " AsDiscreted,\n", " Compose,\n", " Invertd,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " MapTransform,\n", " NormalizeIntensityd,\n", @@ -265,13 +266,14 @@ " # load 4 Nifti images and stack them together\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", - " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", " pixdim=(1.0, 1.0, 1.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", + " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " RandSpatialCropd(keys=[\"image\", \"label\"], roi_size=[224, 224, 144], random_size=False),\n", " RandFlipd(keys=[\"image\", \"label\"], prob=0.5, spatial_axis=0),\n", " RandFlipd(keys=[\"image\", \"label\"], prob=0.5, spatial_axis=1),\n", @@ -286,13 +288,14 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", - " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", " pixdim=(1.0, 1.0, 1.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", + " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " NormalizeIntensityd(keys=\"image\", nonzero=True, channel_wise=True),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n", " ]\n", @@ -784,9 +787,10 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\"]),\n", - " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\"], pixdim=(1.0, 1.0, 1.0), mode=\"bilinear\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", + " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " NormalizeIntensityd(keys=\"image\", nonzero=True, channel_wise=True),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n", " ]\n", diff --git a/3d_segmentation/spleen_segmentation_3d.ipynb b/3d_segmentation/spleen_segmentation_3d.ipynb index 6e3f5d46c3..8b1ece6a0d 100644 --- a/3d_segmentation/spleen_segmentation_3d.ipynb +++ b/3d_segmentation/spleen_segmentation_3d.ipynb @@ -63,6 +63,7 @@ " AsDiscrete,\n", " AsDiscreted,\n", " EnsureChannelFirstd,\n", + " FromMetaTensord,\n", " Compose,\n", " CropForegroundd,\n", " LoadImaged,\n", @@ -283,6 +284,7 @@ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", @@ -315,6 +317,7 @@ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", @@ -696,6 +699,7 @@ " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=\"bilinear\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", @@ -790,6 +794,7 @@ " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=\"bilinear\"),\n", + " FromMetaTensord(keys=\"image\"),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", diff --git a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb index 491cc94745..7134738584 100644 --- a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb +++ b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb @@ -128,6 +128,7 @@ " AddChanneld,\n", " Compose,\n", " CropForegroundd,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " Orientationd,\n", " RandCropByPosNegLabeld,\n", @@ -276,6 +277,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", @@ -316,6 +318,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", diff --git a/3d_segmentation/unet_segmentation_3d_catalyst.ipynb b/3d_segmentation/unet_segmentation_3d_catalyst.ipynb index 26eb763919..68b95343ca 100644 --- a/3d_segmentation/unet_segmentation_3d_catalyst.ipynb +++ b/3d_segmentation/unet_segmentation_3d_catalyst.ipynb @@ -137,6 +137,7 @@ " AsChannelFirstd,\n", " AsDiscrete,\n", " Compose,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " RandCropByPosNegLabeld,\n", " RandRotate90d,\n", @@ -293,6 +294,7 @@ " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", " AsChannelFirstd(keys=[\"img\", \"seg\"], channel_dim=-1),\n", + " FromMetaTensord(keys=[\"img\", \"seg\"]),\n", " ScaleIntensityd(keys=[\"img\", \"seg\"]),\n", " RandCropByPosNegLabeld(\n", " keys=[\"img\", \"seg\"],\n", @@ -310,6 +312,7 @@ " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", " AsChannelFirstd(keys=[\"img\", \"seg\"], channel_dim=-1),\n", + " FromMetaTensord(keys=[\"img\", \"seg\"]),\n", " ScaleIntensityd(keys=[\"img\", \"seg\"]),\n", " EnsureTyped(keys=[\"img\", \"seg\"]),\n", " ]\n", diff --git a/3d_segmentation/unet_segmentation_3d_ignite.ipynb b/3d_segmentation/unet_segmentation_3d_ignite.ipynb index fa61045f8e..586de5ff4d 100644 --- a/3d_segmentation/unet_segmentation_3d_ignite.ipynb +++ b/3d_segmentation/unet_segmentation_3d_ignite.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "tags": [] }, @@ -84,6 +84,7 @@ " Resize,\n", " ScaleIntensity,\n", " EnsureType,\n", + " Lambda,\n", ")\n", "from monai.utils import first\n", "\n", @@ -185,7 +186,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "torch.Size([10, 1, 96, 96, 96]) torch.Size([10, 1, 96, 96, 96])\n" + "(10, 1, 96, 96, 96) (10, 1, 96, 96, 96)\n" ] } ], @@ -193,17 +194,19 @@ "# Define transforms for image and segmentation\n", "imtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", - " ScaleIntensity(),\n", + " LoadImage(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", + " ScaleIntensity(),\n", " RandSpatialCrop((96, 96, 96), random_size=False),\n", " EnsureType(),\n", " ]\n", ")\n", "segtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", " RandSpatialCrop((96, 96, 96), random_size=False),\n", " EnsureType(),\n", " ]\n", @@ -350,17 +353,19 @@ "# create a validation data loader\n", "val_imtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", - " ScaleIntensity(),\n", + " LoadImage(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", + " ScaleIntensity(),\n", " Resize((96, 96, 96)),\n", " EnsureType(),\n", " ]\n", ")\n", "val_segtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", " Resize((96, 96, 96)),\n", " EnsureType(),\n", " ]\n", diff --git a/acceleration/automatic_mixed_precision.ipynb b/acceleration/automatic_mixed_precision.ipynb index cd47c4051d..001ef29dea 100644 --- a/acceleration/automatic_mixed_precision.ipynb +++ b/acceleration/automatic_mixed_precision.ipynb @@ -122,6 +122,7 @@ " Compose,\n", " CropForegroundd,\n", " FgBgToIndicesd,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " Orientationd,\n", " RandCropByPosNegLabeld,\n", @@ -245,6 +246,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"],\n", " a_min=-57,\n", @@ -288,6 +290,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"],\n", " a_min=-57,\n", diff --git a/acceleration/dataset_type_performance.ipynb b/acceleration/dataset_type_performance.ipynb index 4917cc78c4..71ea3b4950 100644 --- a/acceleration/dataset_type_performance.ipynb +++ b/acceleration/dataset_type_performance.ipynb @@ -125,6 +125,7 @@ " AsDiscrete,\n", " Compose,\n", " CropForegroundd,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " Orientationd,\n", " RandCropByPosNegLabeld,\n", @@ -404,6 +405,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"],\n", " a_min=-57,\n", @@ -443,6 +445,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"],\n", " a_min=-57,\n", diff --git a/acceleration/fast_training_tutorial.ipynb b/acceleration/fast_training_tutorial.ipynb index 30c405581c..6b0988b45b 100644 --- a/acceleration/fast_training_tutorial.ipynb +++ b/acceleration/fast_training_tutorial.ipynb @@ -107,6 +107,7 @@ " Compose,\n", " CropForegroundd,\n", " FgBgToIndicesd,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " Orientationd,\n", " RandCropByPosNegLabeld,\n", @@ -224,6 +225,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"],\n", " a_min=-57,\n", @@ -275,6 +277,7 @@ " pixdim=(1.5, 1.5, 2.0),\n", " mode=(\"bilinear\", \"nearest\"),\n", " ),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"],\n", " a_min=-57,\n", diff --git a/deepedit/ignite/infoANDinference.ipynb b/deepedit/ignite/infoANDinference.ipynb index 62635077ff..242029f518 100644 --- a/deepedit/ignite/infoANDinference.ipynb +++ b/deepedit/ignite/infoANDinference.ipynb @@ -97,6 +97,8 @@ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import torch\n", + "from torch import jit\n", + "import tempfile\n", "\n", "import monai\n", "from monai.config import print_config\n", @@ -120,6 +122,7 @@ " SqueezeDimd,\n", " ToNumpyd,\n", " ToTensord,\n", + " FromMetaTensord,\n", ")\n", "\n", "from monai.networks.nets import DynUNet\n", @@ -261,19 +264,16 @@ ], "source": [ "# Download data and model\n", + "data_dir = tempfile.TemporaryDirectory().name\n", "\n", "resource = \"https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/_image.nii.gz\"\n", - "dst = \"_image.nii.gz\"\n", - "\n", - "if not os.path.exists(dst):\n", - " monai.apps.download_url(resource, dst)\n", + "image_path = os.path.join(data_dir, \"_image.nii.gz\")\n", + "monai.apps.download_url(resource, image_path)\n", "\n", "resource = \"https://github.com/Project-MONAI/MONAI-extra-test-data/releases/\\\n", - "download/0.8.1/pretrained_deepedit_dynunet-final.pt\"\n", - "dst = \"pretrained_deepedit_dynunet-final.pt\"\n", - "\n", - "if not os.path.exists(dst):\n", - " monai.apps.download_url(resource, dst)" + "download/0.8.1/pretrained_deepedit_dynunet-final.ts\"\n", + "model_path = os.path.join(data_dir, \"pretrained_deepedit_dynunet-final.ts\")\n", + "monai.apps.download_url(resource, model_path)" ] }, { @@ -313,11 +313,12 @@ "output_type": "stream", "text": [ "EnsureChannelFirstd => image shape: (1, 392, 392, 210)\n", - "Orientationd => image shape: (1, 392, 392, 210)\n", - "ScaleIntensityRanged => image shape: (1, 392, 392, 210)\n", - "AddGuidanceFromPointsDeepEditd => image shape: (1, 392, 392, 210)\n", - "Resized => image shape: (1, 128, 128, 128)\n", - "ResizeGuidanceMultipleLabelDeepEditd => image shape: (1, 128, 128, 128)\n", + "FromMetaTensord => image shape: torch.Size([1, 392, 392, 210])\n", + "Orientationd => image shape: torch.Size([1, 392, 392, 210])\n", + "ScaleIntensityRanged => image shape: torch.Size([1, 392, 392, 210])\n", + "AddGuidanceFromPointsDeepEditd => image shape: torch.Size([1, 392, 392, 210])\n", + "Resized => image shape: torch.Size([1, 128, 128, 128])\n", + "ResizeGuidanceMultipleLabelDeepEditd => image shape: torch.Size([1, 128, 128, 128])\n", "AddGuidanceSignalDeepEditd => image shape: (3, 128, 128, 128)\n", "ToTensord => image shape: torch.Size([3, 128, 128, 128])\n" ] @@ -325,7 +326,7 @@ ], "source": [ "data = {\n", - " 'image': '_image.nii.gz',\n", + " 'image': image_path,\n", " 'guidance': {'spleen': [[66, 180, 105], [66, 180, 145]], 'background': []},\n", "}\n", "\n", @@ -338,6 +339,8 @@ " LoadImaged(keys=\"image\", reader=\"ITKReader\"),\n", " # Ensure channel first\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " # Convert away from MetaTensor\n", + " FromMetaTensord(keys=\"image\"),\n", " # Change image orientation\n", " Orientationd(keys=\"image\", axcodes=\"RAS\"),\n", " # Scaling image intensity - works well for CT images\n", @@ -505,8 +508,7 @@ ], "source": [ "# Evaluation\n", - "model_path = 'pretrained_deepedit_dynunet-final.pt'\n", - "model.load_state_dict(torch.load(model_path))\n", + "model = jit.load(model_path)\n", "model.cuda()\n", "model.eval()\n", "\n", @@ -542,17 +544,6 @@ " i, image.shape, label.shape, np.min(label), np.max(label), np.sum(label)))\n", " show_image(image, label)" ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# remove downloaded files\n", - "os.remove('_image.nii.gz')\n", - "os.remove('pretrained_deepedit_dynunet-final.pt')" - ] } ], "metadata": { diff --git a/deepgrow/ignite/inference.ipynb b/deepgrow/ignite/inference.ipynb index 077ac69db5..6aaa98a269 100644 --- a/deepgrow/ignite/inference.ipynb +++ b/deepgrow/ignite/inference.ipynb @@ -59,7 +59,8 @@ " ToNumpyd,\n", " Activationsd,\n", " AsDiscreted,\n", - " Resized\n", + " Resized,\n", + " FromMetaTensord,\n", ")\n", "\n", "max_epochs = 1\n", @@ -421,7 +422,7 @@ " LoadImaged(keys='image'),\n", " AsChannelFirstd(keys='image'),\n", " Spacingd(keys='image', pixdim=pixdim, mode='bilinear'),\n", - "\n", + " FromMetaTensord(keys='image'),\n", " AddGuidanceFromPointsd(ref_image='image', guidance='guidance', foreground='foreground', background='background',\n", " dimensions=dimensions),\n", " Fetch2DSliced(keys='image', guidance='guidance'),\n", diff --git a/deepgrow/ignite/inference_3d.ipynb b/deepgrow/ignite/inference_3d.ipynb index 0cf2db6199..fdd91f2bd7 100644 --- a/deepgrow/ignite/inference_3d.ipynb +++ b/deepgrow/ignite/inference_3d.ipynb @@ -39,7 +39,8 @@ " ToNumpyd,\n", " Activationsd,\n", " AsDiscreted,\n", - " Resized\n", + " Resized,\n", + " FromMetaTensord,\n", ")\n", "\n", "max_epochs = 1\n", @@ -140,6 +141,8 @@ " LoadImaged(keys='image'),\n", " AsChannelFirstd(keys='image'),\n", " Spacingd(keys='image', pixdim=pixdim, mode='bilinear'),\n", + " FromMetaTensord(keys='image'),\n", + " ToNumpyd(keys=('image', 'image_meta_dict')),\n", " AddGuidanceFromPointsd(ref_image='image', guidance='guidance', foreground='foreground', background='background',\n", " dimensions=dimensions),\n", " AddChanneld(keys='image'),\n", @@ -164,7 +167,7 @@ " guidance = guidance if guidance else [np.roll(data['foreground'], 1).tolist(), []]\n", " slice_idx = guidance[0][0][0] if guidance else slice_idx\n", " print('Guidance: {}; Slice Idx: {}'.format(guidance, slice_idx))\n", - " if tname == 'Resized':\n", + " if tname in ('Resized', 'FromMetaTensord', 'ToNumpyd'):\n", " continue\n", "\n", " image = image[:, :, slice_idx] if tname in ('LoadImaged') else image[slice_idx] if tname in (\n", diff --git a/deployment/bentoml/mednist_classifier_bentoml.ipynb b/deployment/bentoml/mednist_classifier_bentoml.ipynb index 860e0915e2..f1737385de 100644 --- a/deployment/bentoml/mednist_classifier_bentoml.ipynb +++ b/deployment/bentoml/mednist_classifier_bentoml.ipynb @@ -104,6 +104,7 @@ " RandZoom,\n", " ScaleIntensity,\n", " EnsureType,\n", + " ToNumpy,\n", ")\n", "from monai.utils import set_determinism\n", "\n", @@ -230,7 +231,8 @@ "source": [ "train_transforms = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpy(),\n", " AddChannel(),\n", " ScaleIntensity(),\n", " RandRotate(range_x=np.pi / 12, prob=0.5, keep_size=True),\n", diff --git a/modules/3d_image_transforms.ipynb b/modules/3d_image_transforms.ipynb index f407fd3838..ef06ff1d3a 100644 --- a/modules/3d_image_transforms.ipynb +++ b/modules/3d_image_transforms.ipynb @@ -44,6 +44,7 @@ " Rand3DElasticd,\n", " RandAffined,\n", " Spacingd,\n", + " FromMetaTensord,\n", ")\n", "from monai.config import print_config\n", "from monai.apps import download_and_extract\n", @@ -279,11 +280,11 @@ } ], "source": [ - "image, metadata = loader(train_data_dicts[0][\"image\"])\n", + "image = loader(train_data_dicts[0][\"image\"])\n", + "metadata = image.meta\n", "# print(f\"input: {train_data_dicts[0]['image']}\")\n", "print(f\"image shape: {image.shape}\")\n", - "print(f\"image affine:\\n{metadata['affine']}\")\n", - "print(f\"image pixdim:\\n{metadata['pixdim']}\")" + "print(f\"image affine:\\n{metadata['affine']}\")" ] }, { @@ -330,8 +331,7 @@ "data_dict = loader(train_data_dicts[0])\n", "# print(f\"input:, {train_data_dicts[0]}\")\n", "print(f\"image shape: {data_dict['image'].shape}\")\n", - "print(f\"label shape: {data_dict['label'].shape}\")\n", - "print(f\"image pixdim:\\n{data_dict['image_meta_dict']['pixdim']}\")" + "print(f\"label shape: {data_dict['label'].shape}\")" ] }, { @@ -436,18 +436,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "image shape: (1, 512, 512, 55)\n", - "label shape: (1, 512, 512, 55)\n", - "image affine after Spacing:\n", - "[[ 0.0000000e+00 -9.7656202e-01 0.0000000e+00 4.7683716e-07]\n", - " [-9.7656202e-01 0.0000000e+00 0.0000000e+00 4.7683716e-07]\n", - " [ 0.0000000e+00 0.0000000e+00 -5.0000000e+00 2.7000000e+02]\n", - " [ 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.0000000e+00]]\n", - "label affine after Spacing:\n", - "[[ 0.0000000e+00 -9.7656202e-01 0.0000000e+00 4.7683716e-07]\n", - " [-9.7656202e-01 0.0000000e+00 0.0000000e+00 4.7683716e-07]\n", - " [ 0.0000000e+00 0.0000000e+00 -5.0000000e+00 2.7000000e+02]\n", - " [ 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.0000000e+00]]\n" + "image shape: torch.Size([1, 512, 512, 55])\n", + "label shape: torch.Size([1, 512, 512, 55])\n", + "image affine after Orientation:\n", + "tensor([[ 0.0000e+00, -9.7656e-01, 0.0000e+00, 4.7684e-07],\n", + " [-9.7656e-01, 0.0000e+00, 0.0000e+00, 4.7684e-07],\n", + " [ 0.0000e+00, 0.0000e+00, -5.0000e+00, 2.7000e+02],\n", + " [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00]])\n", + "label affine after Orientation:\n", + "tensor([[ 0.0000e+00, -9.7656e-01, 0.0000e+00, 4.7684e-07],\n", + " [-9.7656e-01, 0.0000e+00, 0.0000e+00, 4.7684e-07],\n", + " [ 0.0000e+00, 0.0000e+00, -5.0000e+00, 2.7000e+02],\n", + " [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00]])\n" ] } ], @@ -455,8 +455,8 @@ "data_dict = orientation(datac_dict)\n", "print(f\"image shape: {data_dict['image'].shape}\")\n", "print(f\"label shape: {data_dict['label'].shape}\")\n", - "print(f\"image affine after Spacing:\\n{data_dict['image_meta_dict']['affine']}\")\n", - "print(f\"label affine after Spacing:\\n{data_dict['label_meta_dict']['affine']}\")" + "print(f\"image affine after Orientation:\\n{data_dict['image'].affine}\")\n", + "print(f\"label affine after Orientation:\\n{data_dict['label'].affine}\")" ] }, { @@ -522,18 +522,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "image shape: (1, 334, 334, 55)\n", - "label shape: (1, 334, 334, 55)\n", + "image shape: torch.Size([1, 334, 334, 55])\n", + "label shape: torch.Size([1, 334, 334, 55])\n", "image affine after Spacing:\n", - "[[ 0.0000000e+00 -1.5000000e+00 0.0000000e+00 4.7683716e-07]\n", - " [-1.5000000e+00 0.0000000e+00 0.0000000e+00 4.7683716e-07]\n", - " [ 0.0000000e+00 0.0000000e+00 -5.0000000e+00 2.7000000e+02]\n", - " [ 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.0000000e+00]]\n", + "tensor([[ 0.0000e+00, -1.5000e+00, 0.0000e+00, 4.7684e-07],\n", + " [-1.5000e+00, 0.0000e+00, 0.0000e+00, 4.7684e-07],\n", + " [ 0.0000e+00, 0.0000e+00, -5.0000e+00, 2.7000e+02],\n", + " [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00]])\n", "label affine after Spacing:\n", - "[[ 0.0000000e+00 -1.5000000e+00 0.0000000e+00 4.7683716e-07]\n", - " [-1.5000000e+00 0.0000000e+00 0.0000000e+00 4.7683716e-07]\n", - " [ 0.0000000e+00 0.0000000e+00 -5.0000000e+00 2.7000000e+02]\n", - " [ 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.0000000e+00]]\n" + "tensor([[ 0.0000e+00, -1.5000e+00, 0.0000e+00, 4.7684e-07],\n", + " [-1.5000e+00, 0.0000e+00, 0.0000e+00, 4.7684e-07],\n", + " [ 0.0000e+00, 0.0000e+00, -5.0000e+00, 2.7000e+02],\n", + " [ 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00]])\n" ] } ], @@ -541,8 +541,8 @@ "data_dict = spacing(data_dict)\n", "print(f\"image shape: {data_dict['image'].shape}\")\n", "print(f\"label shape: {data_dict['label'].shape}\")\n", - "print(f\"image affine after Spacing:\\n{data_dict['image_meta_dict']['affine']}\")\n", - "print(f\"label affine after Spacing:\\n{data_dict['label_meta_dict']['affine']}\")" + "print(f\"image affine after Spacing:\\n{data_dict['image'].affine}\")\n", + "print(f\"label affine after Spacing:\\n{data_dict['label'].affine}\")" ] }, { @@ -621,6 +621,7 @@ } ], "source": [ + "data_dict = FromMetaTensord(keys=[\"image\", \"label\"])(data_dict)\n", "rand_affine = RandAffined(\n", " keys=[\"image\", \"label\"],\n", " mode=(\"bilinear\", \"nearest\"),\n", diff --git a/modules/autoencoder_mednist.ipynb b/modules/autoencoder_mednist.ipynb index a0b6a2df5a..e7be6e7a07 100644 --- a/modules/autoencoder_mednist.ipynb +++ b/modules/autoencoder_mednist.ipynb @@ -105,6 +105,7 @@ " ScaleIntensityD,\n", " EnsureTypeD,\n", " Lambda,\n", + " FromMetaTensord,\n", ")\n", "from monai.utils import set_determinism\n", "\n", @@ -278,6 +279,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImageD(keys=[\"im\"]),\n", + " FromMetaTensord(keys=[\"im\"]),\n", " AddChannelD(keys=[\"im\"]),\n", " ScaleIntensityD(keys=[\"im\"]),\n", " RandRotateD(keys=[\"im\"], range_x=np.pi / 12, prob=0.5, keep_size=True),\n", @@ -291,6 +293,7 @@ "test_transforms = Compose(\n", " [\n", " LoadImageD(keys=[\"im\"]),\n", + " FromMetaTensord(keys=[\"im\"]),\n", " AddChannelD(keys=[\"im\"]),\n", " ScaleIntensityD(keys=[\"im\"]),\n", " EnsureTypeD(keys=[\"im\"]),\n", diff --git a/modules/batch_output_transform.ipynb b/modules/batch_output_transform.ipynb index d4cc49f1d0..2be8d3ba4f 100644 --- a/modules/batch_output_transform.ipynb +++ b/modules/batch_output_transform.ipynb @@ -102,6 +102,7 @@ " RandCropByPosNegLabeld,\n", " ScaleIntensityd,\n", " EnsureTyped,\n", + " FromMetaTensord,\n", ")\n", "from monai.utils import get_torch_version_tuple\n", "\n", @@ -244,6 +245,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AsChannelFirstd(keys=[\"image\", \"label\"], channel_dim=-1),\n", " ScaleIntensityd(keys=\"image\"),\n", " RandCropByPosNegLabeld(\n", @@ -255,6 +257,7 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AsChannelFirstd(keys=[\"image\", \"label\"], channel_dim=-1),\n", " ScaleIntensityd(keys=\"image\"),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n", diff --git a/modules/cross_validation_models_ensemble.ipynb b/modules/cross_validation_models_ensemble.ipynb index 2c40707b68..c5a6448d6d 100644 --- a/modules/cross_validation_models_ensemble.ipynb +++ b/modules/cross_validation_models_ensemble.ipynb @@ -104,6 +104,7 @@ " ScaleIntensityd,\n", " EnsureTyped,\n", " VoteEnsembled,\n", + " FromMetaTensord,\n", ")\n", "from monai.utils import set_determinism\n", "\n", @@ -250,6 +251,7 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " AsChannelFirstd(keys=[\"image\", \"label\"], channel_dim=-1),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityd(keys=[\"image\", \"label\"]),\n", " RandCropByPosNegLabeld(\n", " keys=[\"image\", \"label\"],\n", @@ -267,6 +269,7 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " AsChannelFirstd(keys=[\"image\", \"label\"], channel_dim=-1),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityd(keys=[\"image\", \"label\"]),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n", " ]\n", diff --git a/modules/decollate_batch.ipynb b/modules/decollate_batch.ipynb index c281e6b739..700e44f295 100644 --- a/modules/decollate_batch.ipynb +++ b/modules/decollate_batch.ipynb @@ -143,6 +143,7 @@ " Resized,\n", " SaveImaged,\n", " ScaleIntensityd,\n", + " FromMetaTensord,\n", ")\n", "from monai.utils import set_determinism\n", "\n", @@ -246,6 +247,7 @@ " LoadImaged(keys=[\"img\", \"seg\"]),\n", " EnsureChannelFirstd(keys=[\"img\", \"seg\"]),\n", " Orientationd(keys=\"img\", axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=[\"img\", \"seg\"]),\n", " Resized(keys=\"img\", spatial_size=(96, 96, 96), mode=\"trilinear\", align_corners=True),\n", " ScaleIntensityd(keys=\"img\"),\n", " EnsureTyped(keys=[\"img\", \"seg\"]),\n", @@ -288,7 +290,10 @@ " device=device,\n", " ),\n", " AsDiscreted(keys=\"pred\", threshold=0.5),\n", - " SaveImaged(keys=\"pred\", meta_keys=\"pred_meta_dict\", output_dir=root_dir, resample=False),\n", + " SaveImaged(\n", + " keys=\"pred\", meta_keys=\"pred_meta_dict\", resample=False,\n", + " output_dir=tempfile.TemporaryDirectory().name\n", + " ),\n", " ]\n", ")\n", "# will compute mean dice on the decollated `predictions` and `labels`, which are list of `channel-first` tensors\n", diff --git a/modules/image_dataset.ipynb b/modules/image_dataset.ipynb index 45a803b112..9da53da161 100644 --- a/modules/image_dataset.ipynb +++ b/modules/image_dataset.ipynb @@ -118,6 +118,7 @@ "from monai.data import ImageDataset\n", "from monai.transforms import Compose, EnsureChannelFirst, RandAdjustContrast, Spacing\n", "from monai.config import print_config\n", + "from monai.data import MetaTensor\n", "\n", "print_config()" ] @@ -173,11 +174,12 @@ "source": [ "class TestCompose(Compose):\n", " def __call__(self, data, meta):\n", - " data = self.transforms[0](data, meta) # ensure channel first\n", - " data, _, meta[\"affine\"] = self.transforms[1](data, meta[\"affine\"]) # spacing\n", + " data = MetaTensor(data, meta=meta) # convert to MetaTensor\n", + " data = self.transforms[0](data) # ensure channel first\n", + " data = self.transforms[1](data) # spacing\n", " if len(self.transforms) == 3:\n", - " return self.transforms[2](data), meta # image contrast\n", - " return data, meta\n", + " return self.transforms[2](data), data.meta # image contrast\n", + " return data, data.meta\n", "\n", "\n", "img_xform = TestCompose([EnsureChannelFirst(), Spacing(pixdim=(1.5, 1.5, 3.0)), RandAdjustContrast()])\n", diff --git a/modules/integrate_3rd_party_transforms.ipynb b/modules/integrate_3rd_party_transforms.ipynb index ff301c9bf5..9b6ab2cbac 100644 --- a/modules/integrate_3rd_party_transforms.ipynb +++ b/modules/integrate_3rd_party_transforms.ipynb @@ -59,12 +59,14 @@ " AddChanneld,\n", " Compose,\n", " CropForegroundd,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " Orientationd,\n", " ScaleIntensityRanged,\n", " Spacingd,\n", " SqueezeDimd,\n", " EnsureTyped,\n", + " ToNumpyd,\n", " adaptor,\n", ")\n", "from monai.data import DataLoader, Dataset\n", @@ -269,6 +271,8 @@ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", + " ToNumpyd(keys=[\"image\", \"label\", \"image_meta_dict\", \"label_meta_dict\"]),\n", " ScaleIntensityRanged(keys=[\"image\"], a_min=-57,\n", " a_max=164, b_min=0.0, b_max=1.0, clip=True),\n", " CropForegroundd(keys=[\"image\", \"label\"], source_key=\"image\"),\n", diff --git a/modules/interpretability/cats_and_dogs.ipynb b/modules/interpretability/cats_and_dogs.ipynb index c8d6974e80..f189d9085c 100644 --- a/modules/interpretability/cats_and_dogs.ipynb +++ b/modules/interpretability/cats_and_dogs.ipynb @@ -40,6 +40,7 @@ " Resized,\n", " Rotate90d,\n", " ScaleIntensityd,\n", + " FromMetaTensord,\n", ")\n", "from monai.networks.utils import eval_mode\n", "from contextlib import nullcontext\n", @@ -165,6 +166,7 @@ "transforms = Compose([\n", " LoadImaged(\"image\"),\n", " AsChannelFirstd(\"image\"),\n", + " FromMetaTensord(\"image\"),\n", " ScaleIntensityd(\"image\"),\n", " Rotate90d(\"image\", k=3),\n", " DivisiblePadd(\"image\", k=divisible_factor),\n", @@ -200,7 +202,7 @@ " axes = np.asarray(axes) if nims == 1 else axes\n", " for d, ax in zip(data, axes.ravel()):\n", " # channel last for matplotlib\n", - " im = np.moveaxis(d[\"image\"], 0, -1)\n", + " im = np.moveaxis(d[\"image\"].cpu().numpy(), 0, -1)\n", " ax.imshow(im, cmap='gray')\n", " ax.set_title(Animals(d['label']).name, fontsize=25)\n", " ax.axis(\"off\")\n", diff --git a/modules/interpretability/class_lung_lesion.ipynb b/modules/interpretability/class_lung_lesion.ipynb index 12ca96dd47..edcfac4ef6 100644 --- a/modules/interpretability/class_lung_lesion.ipynb +++ b/modules/interpretability/class_lung_lesion.ipynb @@ -85,6 +85,7 @@ " AddChanneld,\n", " Compose,\n", " LoadImaged,\n", + " FromMetaTensord,\n", " RandFlipd,\n", " RandRotate90d,\n", " RandSpatialCropd,\n", @@ -247,6 +248,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(\"image\"),\n", + " FromMetaTensord(\"image\"),\n", " AddChanneld(\"image\"),\n", " ScaleIntensityRanged(\n", " \"image\",\n", @@ -268,6 +270,7 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(\"image\"),\n", + " FromMetaTensord(\"image\"),\n", " AddChanneld(\"image\"),\n", " ScaleIntensityRanged(\n", " \"image\",\n", diff --git a/modules/interpretability/covid_classification.ipynb b/modules/interpretability/covid_classification.ipynb index 6ec9184d57..26c98a310d 100644 --- a/modules/interpretability/covid_classification.ipynb +++ b/modules/interpretability/covid_classification.ipynb @@ -88,6 +88,7 @@ " Compose, LoadImage, Lambda, AddChannel,\n", " ScaleIntensity, EnsureType, RandRotate,\n", " RandFlip, Rand2DElastic, RandZoom, Resize,\n", + " ToNumpy,\n", ")\n", "from monai.apps import download_and_extract\n", "\n", @@ -220,7 +221,8 @@ "\n", "\n", "train_transforms = Compose([\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpy(),\n", " Lambda(lambda im: im if im.ndim == 2 else im[..., 0]),\n", " AddChannel(),\n", " Resize(spatial_size=crop_size, mode=\"area\"),\n", @@ -234,7 +236,8 @@ "])\n", "\n", "val_transforms = Compose([\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpy(),\n", " Lambda(lambda im: im if im.ndim == 2 else im[..., 0]),\n", " AddChannel(),\n", " Resize(spatial_size=crop_size, mode=\"area\"),\n", diff --git a/modules/inverse_transforms_and_test_time_augmentations.ipynb b/modules/inverse_transforms_and_test_time_augmentations.ipynb index f1050e2e01..544befb4c2 100644 --- a/modules/inverse_transforms_and_test_time_augmentations.ipynb +++ b/modules/inverse_transforms_and_test_time_augmentations.ipynb @@ -11,7 +11,7 @@ "\n", "### What are transforms?\n", "\n", - "- We use transforms to modify data. In MONAI, we use them to (for exampl) load images from file, add a channel component, normalise the intensities and reshape the image.\n", + "- We use transforms to modify data. In MONAI, we use them to (for example) load images from file, add a channel component, normalise the intensities and reshape the image.\n", "- We can also use transforms as a method of data augmentation – we have a finite amount of data so to avoid overfitting, we can apply random transforms to modify our data each epoch.\n", "- Examples of random transformations might be randomly flipping, rotating, cropping, padding, zooming, as well as applying non-rigid deformations.\n", "\n", @@ -145,6 +145,7 @@ " EnsureTyped,\n", " EnsureType,\n", " BatchInverseTransform,\n", + " FromMetaTensord,\n", ")\n", "from monai.transforms.utils import allow_missing_keys_mode\n", "from monai.utils import first, set_determinism\n", @@ -228,8 +229,8 @@ " def __call__(self, data):\n", " d = dict(data)\n", " im = d[self.label_key]\n", - " q = np.sum((im > 0).reshape(-1, im.shape[-1]), axis=0)\n", - " _slice = np.where(q == np.max(q))[0][0]\n", + " q = (im > 0).reshape(-1, im.shape[-1]).sum(dim=0)\n", + " _slice = q.argmax(dim=0)\n", " for key in self.keys:\n", " d[key] = d[key][..., _slice]\n", " return d\n", @@ -243,10 +244,9 @@ " def __call__(self, data):\n", " d = {}\n", " for key in self.keys:\n", - " fname = os.path.basename(\n", - " data[key + \"_meta_dict\"][\"filename_or_obj\"])\n", + " fname = os.path.basename(data[key].meta[\"filename_or_obj\"])\n", " path = os.path.join(self.path, key, fname)\n", - " nib.save(nib.Nifti1Image(data[key], np.eye(4)), path)\n", + " nib.save(nib.Nifti1Image(data[key].numpy(), np.eye(4)), path)\n", " d[key] = path\n", " return d\n", "\n", @@ -262,6 +262,7 @@ " SliceWithMaxNumLabelsd(keys, \"label\"),\n", " SaveSliced(keys, data_dir),\n", "])\n", + "\n", "# Running the whole way through the dataset will create the 2D slices and save to file\n", "ds_2d = Dataset(data_dicts, transform_2d_slice)\n", "dl_2d = DataLoader(ds_2d, batch_size=1, num_workers=10)\n", @@ -303,8 +304,9 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys),\n", - " Lambdad(\"label\", lambda x: (x > 0).astype(\n", - " np.float64)), # make label binary\n", + " FromMetaTensord(keys),\n", + " Lambdad(\"label\", lambda x: (x > 0).to(\n", + " torch.float32)), # make label binary\n", " RandAffined(\n", " keys,\n", " prob=1.0,\n", @@ -1623,8 +1625,9 @@ "# Need minimal transforms just to be able to show the unmodified originals\n", "minimal_transforms = Compose([\n", " LoadImaged(keys),\n", - " Lambdad(\"label\", lambda x: (x > 0).astype(\n", - " np.float64)), # make label binary\n", + " FromMetaTensord(keys),\n", + " Lambdad(\"label\", lambda x: (x > 0).to(\n", + " torch.float32)), # make label binary\n", " ScaleIntensityd(\"image\"),\n", " EnsureTyped(keys),\n", "])\n", diff --git a/modules/learning_rate.ipynb b/modules/learning_rate.ipynb index 31afc6f1f5..04655ee496 100644 --- a/modules/learning_rate.ipynb +++ b/modules/learning_rate.ipynb @@ -113,6 +113,7 @@ " ScaleIntensityd,\n", " EnsureTyped,\n", " EnsureType,\n", + " FromMetaTensord,\n", ")\n", "from monai.utils import set_determinism\n", "from torch.utils.data import DataLoader\n", @@ -177,6 +178,7 @@ "transforms = Compose(\n", " [\n", " LoadImaged(keys=\"image\"),\n", + " FromMetaTensord(keys=\"image\"),\n", " AddChanneld(keys=\"image\"),\n", " ScaleIntensityd(keys=\"image\"),\n", " CenterSpatialCropd(keys=\"image\", roi_size=(20, 20)),\n", diff --git a/modules/load_medical_images.ipynb b/modules/load_medical_images.ipynb index c697db36bf..def7c3e953 100644 --- a/modules/load_medical_images.ipynb +++ b/modules/load_medical_images.ipynb @@ -122,7 +122,7 @@ "from monai.data import ITKReader, PILReader\n", "from monai.transforms import (\n", " LoadImage, LoadImaged, EnsureChannelFirstd,\n", - " Resized, EnsureTyped, Compose\n", + " Resized, EnsureTyped, Compose, FromMetaTensord,\n", ")\n", "from monai.config import print_config\n", "\n", @@ -198,9 +198,9 @@ } ], "source": [ - "data, meta = LoadImage()(filename)\n", + "data = LoadImage()(filename)\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -269,10 +269,10 @@ } ], "source": [ - "data, meta = LoadImage()(filenames)\n", + "data = LoadImage()(filenames)\n", "\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -336,10 +336,10 @@ } ], "source": [ - "data, meta = LoadImage()(filename)\n", + "data = LoadImage()(filename)\n", "\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -408,10 +408,10 @@ } ], "source": [ - "data, meta = LoadImage()(filenames)\n", + "data = LoadImage()(filenames)\n", "\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -481,10 +481,10 @@ } ], "source": [ - "data, meta = LoadImage()(sub_folder_path)\n", + "data = LoadImage()(sub_folder_path)\n", "\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -542,10 +542,10 @@ } ], "source": [ - "data, meta = LoadImage()(filename)\n", + "data = LoadImage()(filename)\n", "\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -584,10 +584,10 @@ "source": [ "loader = LoadImage()\n", "loader.register(ITKReader())\n", - "data, meta = loader(filename)\n", + "data = loader(filename)\n", "\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -623,10 +623,10 @@ ], "source": [ "loader = LoadImage(PILReader(converter=lambda image: image.convert(\"LA\")))\n", - "data, meta = loader(filename)\n", + "data = loader(filename)\n", "\n", "print(f\"image data shape:{data.shape}\")\n", - "print(f\"meta data:{meta}\")" + "print(f\"meta data:{data.meta}\")" ] }, { @@ -664,6 +664,7 @@ "transform = Compose([\n", " LoadImaged(keys=\"image\"),\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " FromMetaTensord(keys=\"image\"),\n", " Resized(keys=\"image\", spatial_size=[64, 64]),\n", " EnsureTyped(\"image\"),\n", "])\n", diff --git a/modules/mednist_GAN_workflow_dict.ipynb b/modules/mednist_GAN_workflow_dict.ipynb index 7c81c438f6..9596a638a6 100644 --- a/modules/mednist_GAN_workflow_dict.ipynb +++ b/modules/mednist_GAN_workflow_dict.ipynb @@ -64,6 +64,7 @@ " RandZoomD,\n", " ScaleIntensityD,\n", " EnsureTypeD,\n", + " FromMetaTensord,\n", ")\n", "from monai.networks.nets import Discriminator, Generator\n", "from monai.networks import normal_init\n", @@ -270,6 +271,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImageD(keys=[\"hand\"]),\n", + " FromMetaTensord(keys=[\"hand\"]),\n", " AddChannelD(keys=[\"hand\"]),\n", " ScaleIntensityD(keys=[\"hand\"]),\n", " RandRotateD(keys=[\"hand\"], range_x=np.pi /\n", diff --git a/modules/nifti_read_example.ipynb b/modules/nifti_read_example.ipynb index 5b19124dde..d79382be33 100644 --- a/modules/nifti_read_example.ipynb +++ b/modules/nifti_read_example.ipynb @@ -89,7 +89,6 @@ "\n", "import glob\n", "import os\n", - "import shutil\n", "import tempfile\n", "\n", "import nibabel as nib\n", @@ -106,36 +105,13 @@ " RandSpatialCrop,\n", " ScaleIntensity,\n", " EnsureType,\n", + " ToNumpy,\n", ")\n", "from monai.utils import first\n", "\n", "print_config()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup data directory\n", - "\n", - "You can specify a directory with the `MONAI_DATA_DIRECTORY` environment variable. \n", - "This allows you to save results and reuse downloads. \n", - "If not specified a temporary directory will be used." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\")\n", - "root_dir = tempfile.mkdtemp() if directory is None else directory\n", - "print(root_dir)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -149,6 +125,7 @@ "metadata": {}, "outputs": [], "source": [ + "root_dir = tempfile.mkdtemp()\n", "for i in range(5):\n", " im, seg = create_test_image_3d(128, 128, 128)\n", "\n", @@ -187,9 +164,10 @@ "\n", "imtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", - " ScaleIntensity(),\n", + " LoadImage(),\n", " AddChannel(),\n", + " ToNumpy(),\n", + " ScaleIntensity(),\n", " RandSpatialCrop((64, 64, 64), random_size=False),\n", " EnsureType(),\n", " ]\n", @@ -197,8 +175,9 @@ "\n", "segtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", " AddChannel(),\n", + " ToNumpy(),\n", " RandSpatialCrop((64, 64, 64), random_size=False),\n", " EnsureType(),\n", " ]\n", @@ -236,10 +215,10 @@ } ], "source": [ - "imtrans = Compose([LoadImage(image_only=True),\n", + "imtrans = Compose([LoadImage(), ToNumpy(),\n", " ScaleIntensity(), AddChannel(), EnsureType()])\n", "\n", - "segtrans = Compose([LoadImage(image_only=True), AddChannel(), EnsureType()])\n", + "segtrans = Compose([LoadImage(), ToNumpy(), AddChannel(), EnsureType()])\n", "\n", "ds = ArrayDataset(images, imtrans, segs, segtrans)\n", "patch_iter = PatchIter(patch_size=(64, 64, 64), start_pos=(0, 0, 0))\n", @@ -260,25 +239,6 @@ "im, seg = first(loader)\n", "print(\"image shapes:\", im.shape, seg.shape)" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cleanup data directory\n", - "\n", - "Remove directory if a temporary was used." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "if directory is None:\n", - " shutil.rmtree(root_dir)" - ] } ], "metadata": { diff --git a/modules/postprocessing_transforms.ipynb b/modules/postprocessing_transforms.ipynb index 2dc5092eb3..2ed8a75d55 100644 --- a/modules/postprocessing_transforms.ipynb +++ b/modules/postprocessing_transforms.ipynb @@ -66,6 +66,7 @@ " Spacingd,\n", " EnsureTyped,\n", " EnsureType,\n", + " FromMetaTensord,\n", ")\n", "from monai.networks.nets import UNet\n", "from monai.networks.layers import Norm\n", @@ -264,6 +265,7 @@ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", @@ -292,6 +294,7 @@ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", diff --git a/modules/resample_benchmark.ipynb b/modules/resample_benchmark.ipynb index 15c258eabc..064be7d3f9 100644 --- a/modules/resample_benchmark.ipynb +++ b/modules/resample_benchmark.ipynb @@ -449,7 +449,7 @@ "source": [ "img = monai.transforms.LoadImaged(keys=\"img\")({\"img\": f\"{root_dir}/mri.nii\"})[\"img\"]\n", "# W, H, D -> D, H, W\n", - "img = img.transpose((2, 1, 0))" + "img = img.numpy().transpose((2, 1, 0))" ] }, { diff --git a/modules/tcia_csv_processing.ipynb b/modules/tcia_csv_processing.ipynb index 1568a97523..55cac70572 100644 --- a/modules/tcia_csv_processing.ipynb +++ b/modules/tcia_csv_processing.ipynb @@ -63,7 +63,7 @@ "\n", "from monai.data import CSVDataset\n", "from monai.apps import download_url, download_and_extract\n", - "from monai.transforms import LoadImaged\n", + "from monai.transforms import Compose, FromMetaTensord, LoadImaged\n", "from monai.config import print_config\n", "from monai.utils import ensure_tuple\n", "\n", @@ -248,7 +248,10 @@ " filename=os.path.join(root_dir, \"ISPY1_Combined.csv\"),\n", " img_dir=os.path.join(root_dir, \"tcia_images\"),\n", " row_indices=[[0, 8]],\n", - " transform=LoadImaged(keys=\"image\"),\n", + " transform=Compose([\n", + " LoadImaged(keys=\"image\"),\n", + " FromMetaTensord(keys=\"image\"),\n", + " ])\n", ")" ] }, diff --git a/modules/transfer_mmar.ipynb b/modules/transfer_mmar.ipynb index 88da92434e..b3bc3b2cc6 100644 --- a/modules/transfer_mmar.ipynb +++ b/modules/transfer_mmar.ipynb @@ -146,6 +146,7 @@ "from monai.transforms import (\n", " AsDiscrete,\n", " EnsureChannelFirstd,\n", + " FromMetaTensord,\n", " Compose,\n", " LoadImaged,\n", " ScaleIntensityRanged,\n", @@ -331,6 +332,8 @@ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + "\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", @@ -351,7 +354,7 @@ " mode=('bilinear', 'nearest'),\n", " prob=0.5,\n", " spatial_size=(96, 96, 96),\n", - " rotate_range=(np.pi/18, np.pi/18, np.pi/5),\n", + " rotate_range=(np.pi / 18, np.pi / 18, np.pi / 5),\n", " scale_range=(0.05, 0.05, 0.05)\n", " ),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n", @@ -364,6 +367,7 @@ " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(\n", " keys=[\"image\"], a_min=-57, a_max=164,\n", " b_min=0.0, b_max=1.0, clip=True,\n", @@ -371,9 +375,9 @@ " RandRotated(\n", " keys=['image', 'label'],\n", " mode=('bilinear', 'nearest'),\n", - " range_x=np.pi/18,\n", - " range_y=np.pi/18,\n", - " range_z=np.pi/5,\n", + " range_x=np.pi / 18,\n", + " range_y=np.pi / 18,\n", + " range_z=np.pi / 5,\n", " prob=1.0,\n", " padding_mode=('reflection', 'reflection'),\n", " ),\n", diff --git a/modules/transform_visualization.ipynb b/modules/transform_visualization.ipynb index c64134e06d..7d6d6c94eb 100644 --- a/modules/transform_visualization.ipynb +++ b/modules/transform_visualization.ipynb @@ -76,6 +76,7 @@ " ScaleIntensityRanged,\n", " Spacingd,\n", " EnsureTyped,\n", + " FromMetaTensord,\n", ")\n", "from monai.data import DataLoader, Dataset\n", "from monai.config import print_config\n", @@ -214,6 +215,7 @@ " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"PLS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ScaleIntensityRanged(keys=[\"image\"], a_min=-57, a_max=164, b_min=0.0, b_max=1.0, clip=True),\n", " CropForegroundd(keys=[\"image\", \"label\"], source_key=\"image\"),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n",