From 841cf4a581b840f7269075751cc20f8df5a3b8a5 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 10:30:22 +0100 Subject: [PATCH 01/22] meta tensor --- 2d_registration/registration_mednist.ipynb | 2 ++ 3d_segmentation/brats_segmentation_3d.ipynb | 4 ++++ 3d_segmentation/spleen_segmentation_3d.ipynb | 3 +++ .../spleen_segmentation_3d_lightning.ipynb | 3 +++ 3d_segmentation/unet_segmentation_3d_catalyst.ipynb | 3 +++ 3d_segmentation/unet_segmentation_3d_ignite.ipynb | 13 +++++++++---- acceleration/automatic_mixed_precision.ipynb | 3 +++ acceleration/dataset_type_performance.ipynb | 3 +++ acceleration/fast_training_tutorial.ipynb | 3 +++ 9 files changed, 33 insertions(+), 4 deletions(-) diff --git a/2d_registration/registration_mednist.ipynb b/2d_registration/registration_mednist.ipynb index c927e257c1..94c419fa60 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", @@ -207,6 +208,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImageD(keys=[\"fixed_hand\", \"moving_hand\"]),\n", + " FromMetaTensord(keys=[\"fixed_hand\", \"moving_hand\"]),\n", " EnsureChannelFirstD(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", diff --git a/3d_segmentation/brats_segmentation_3d.ipynb b/3d_segmentation/brats_segmentation_3d.ipynb index 99d97661b8..fb1d5ccaa4 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", @@ -264,6 +265,7 @@ " [\n", " # load 4 Nifti images and stack them together\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", @@ -285,6 +287,7 @@ "val_transform = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", @@ -783,6 +786,7 @@ "val_org_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\"]),\n", " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", diff --git a/3d_segmentation/spleen_segmentation_3d.ipynb b/3d_segmentation/spleen_segmentation_3d.ipynb index cf9e8d0021..0e537e95c1 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", @@ -279,6 +280,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", @@ -311,6 +313,7 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", diff --git a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb index b86c1fa5ac..d79c15df12 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", @@ -269,6 +270,7 @@ " train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -309,6 +311,7 @@ " val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", diff --git a/3d_segmentation/unet_segmentation_3d_catalyst.ipynb b/3d_segmentation/unet_segmentation_3d_catalyst.ipynb index 2bb5c39bf6..3340b7145d 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", @@ -292,6 +293,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AsChannelFirstd(keys=[\"img\", \"seg\"], channel_dim=-1),\n", " ScaleIntensityd(keys=[\"img\", \"seg\"]),\n", " RandCropByPosNegLabeld(\n", @@ -309,6 +311,7 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AsChannelFirstd(keys=[\"img\", \"seg\"], channel_dim=-1),\n", " ScaleIntensityd(keys=[\"img\", \"seg\"]),\n", " EnsureTyped(keys=[\"img\", \"seg\"]),\n", diff --git a/3d_segmentation/unet_segmentation_3d_ignite.ipynb b/3d_segmentation/unet_segmentation_3d_ignite.ipynb index dd323f62de..ef567281c4 100644 --- a/3d_segmentation/unet_segmentation_3d_ignite.ipynb +++ b/3d_segmentation/unet_segmentation_3d_ignite.ipynb @@ -84,6 +84,7 @@ " Resize,\n", " ScaleIntensity,\n", " EnsureType,\n", + " ToNumpyd,\n", ")\n", "from monai.utils import first\n", "\n", @@ -193,7 +194,8 @@ "# Define transforms for image and segmentation\n", "imtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpyd(),\n", " ScaleIntensity(),\n", " AddChannel(),\n", " RandSpatialCrop((96, 96, 96), random_size=False),\n", @@ -202,7 +204,8 @@ ")\n", "segtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpyd(),\n", " AddChannel(),\n", " RandSpatialCrop((96, 96, 96), random_size=False),\n", " EnsureType(),\n", @@ -350,7 +353,8 @@ "# create a validation data loader\n", "val_imtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpyd(),\n", " ScaleIntensity(),\n", " AddChannel(),\n", " Resize((96, 96, 96)),\n", @@ -359,7 +363,8 @@ ")\n", "val_segtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpyd(),\n", " AddChannel(),\n", " Resize((96, 96, 96)),\n", " EnsureType(),\n", diff --git a/acceleration/automatic_mixed_precision.ipynb b/acceleration/automatic_mixed_precision.ipynb index 577f53a2f4..924eedb532 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", @@ -238,6 +239,7 @@ " train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -281,6 +283,7 @@ " val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", diff --git a/acceleration/dataset_type_performance.ipynb b/acceleration/dataset_type_performance.ipynb index 7ef8e4c280..8ebe549547 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", @@ -397,6 +398,7 @@ " train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -436,6 +438,7 @@ " val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", diff --git a/acceleration/fast_training_tutorial.ipynb b/acceleration/fast_training_tutorial.ipynb index 7c6c2fe4a8..a426f4abca 100644 --- a/acceleration/fast_training_tutorial.ipynb +++ b/acceleration/fast_training_tutorial.ipynb @@ -108,6 +108,7 @@ " Compose,\n", " CropForegroundd,\n", " FgBgToIndicesd,\n", + " FromMetaTensord,\n", " LoadImaged,\n", " Orientationd,\n", " RandCropByPosNegLabeld,\n", @@ -223,6 +224,7 @@ "def transformations(fast=False):\n", " train_transforms = [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -274,6 +276,7 @@ "\n", " val_transforms = [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", From db98f3c578a93e4247b2d46c15a495c07835519f Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 10:35:40 +0100 Subject: [PATCH 02/22] Registration tutorial to use MONAI_DATA_DIRECTORY --- 2d_registration/registration_mednist.ipynb | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/2d_registration/registration_mednist.ipynb b/2d_registration/registration_mednist.ipynb index c927e257c1..5e77f6badd 100644 --- a/2d_registration/registration_mednist.ipynb +++ b/2d_registration/registration_mednist.ipynb @@ -125,6 +125,28 @@ "set_determinism(42)" ] }, + { + "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": {}, + "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": { @@ -188,7 +210,7 @@ } ], "source": [ - "train_data = MedNISTDataset(root_dir=\"./\", section=\"training\", download=True, transform=None)\n", + "train_data = MedNISTDataset(root_dir=root_dir, section=\"training\", download=True, transform=None)\n", "training_datadict = [\n", " {\"fixed_hand\": item[\"image\"], \"moving_hand\": item[\"image\"]}\n", " for item in train_data.data if item[\"label\"] == 4 # label 4 is for xray hands\n", From 1167bafb4042bf92878564d803215411a64c552d Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 10:41:24 +0100 Subject: [PATCH 03/22] imports --- 2d_registration/registration_mednist.ipynb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/2d_registration/registration_mednist.ipynb b/2d_registration/registration_mednist.ipynb index 5e77f6badd..7bcbf3d66b 100644 --- a/2d_registration/registration_mednist.ipynb +++ b/2d_registration/registration_mednist.ipynb @@ -119,6 +119,8 @@ "import torch\n", "from torch.nn import MSELoss\n", "import matplotlib.pyplot as plt\n", + "import os\n", + "import tempfile\n", "\n", "\n", "print_config()\n", From 91f2171ec7f9e8aa7f6d501379d0ff16b523e351 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 11:08:16 +0100 Subject: [PATCH 04/22] more --- 2d_classification/mednist_tutorial.ipynb | 6 ++++-- deepgrow/ignite/inference_3d.ipynb | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/2d_classification/mednist_tutorial.ipynb b/2d_classification/mednist_tutorial.ipynb index c3100610d2..b595af2d2c 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/deepgrow/ignite/inference_3d.ipynb b/deepgrow/ignite/inference_3d.ipynb index 0cf2db6199..86663aa395 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", @@ -138,6 +139,8 @@ "\n", "pre_transforms = [\n", " LoadImaged(keys='image'),\n", + " FromMetaTensord(keys='image'),\n", + " ToNumpyd(keys=('image', 'image_meta_dict')),\n", " AsChannelFirstd(keys='image'),\n", " Spacingd(keys='image', pixdim=pixdim, mode='bilinear'),\n", " AddGuidanceFromPointsd(ref_image='image', guidance='guidance', foreground='foreground', background='background',\n", From b18beaf8e7648a6f2fb18984ae6621c880028b7f Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 11:14:56 +0100 Subject: [PATCH 05/22] more --- deepgrow/ignite/inference.ipynb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deepgrow/ignite/inference.ipynb b/deepgrow/ignite/inference.ipynb index 8cb376280e..32e3702c2d 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", @@ -419,6 +420,7 @@ "\n", "pre_transforms = [\n", " LoadImaged(keys='image'),\n", + " FromMetaTensord(keys='image'),\n", " AsChannelFirstd(keys='image'),\n", " Spacingd(keys='image', pixdim=pixdim, mode='bilinear'),\n", "\n", From 0cab15a4775df1baebb66f8cfb233383817f8f79 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 15:36:06 +0100 Subject: [PATCH 06/22] more fixes --- deployment/bentoml/mednist_classifier_bentoml.ipynb | 4 +++- modules/3d_image_transforms.ipynb | 6 +++++- modules/autoencoder_mednist.ipynb | 3 +++ modules/cross_validation_models_ensemble.ipynb | 3 +++ modules/integrate_3rd_party_transforms.ipynb | 4 ++++ modules/postprocessing_transforms.ipynb | 3 +++ modules/resample_benchmark.ipynb | 2 +- 7 files changed, 22 insertions(+), 3 deletions(-) diff --git a/deployment/bentoml/mednist_classifier_bentoml.ipynb b/deployment/bentoml/mednist_classifier_bentoml.ipynb index 5342759321..5f78cf7003 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 90af5d136b..d6f98ee78b 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,7 +280,8 @@ } ], "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", @@ -328,6 +330,8 @@ ], "source": [ "data_dict = loader(train_data_dicts[0])\n", + "from_meta_tensord = FromMetaTensord(keys=(\"image\", \"label\"))\n", + "data_dict = from_meta_tensord(data_dict)\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", diff --git a/modules/autoencoder_mednist.ipynb b/modules/autoencoder_mednist.ipynb index 8e497482f5..7f994a82ab 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/cross_validation_models_ensemble.ipynb b/modules/cross_validation_models_ensemble.ipynb index f3ba4842d9..7cd678e934 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", @@ -249,6 +250,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\", \"label\"]),\n", " RandCropByPosNegLabeld(\n", @@ -266,6 +268,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\", \"label\"]),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n", diff --git a/modules/integrate_3rd_party_transforms.ipynb b/modules/integrate_3rd_party_transforms.ipynb index 565eaa1e6b..a6a5ad6de8 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", @@ -265,6 +267,8 @@ "source": [ "monai_transforms = [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", + " ToNumpyd(keys=[\"image\", \"label\", \"image_meta_dict\", \"label_meta_dict\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", diff --git a/modules/postprocessing_transforms.ipynb b/modules/postprocessing_transforms.ipynb index cae7cc0376..565885f7f3 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", @@ -260,6 +261,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", @@ -288,6 +290,7 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", diff --git a/modules/resample_benchmark.ipynb b/modules/resample_benchmark.ipynb index b5c5036766..c8262e103e 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))" ] }, { From d6a60048b54017cfd0330528a5e4130ed8d12f7f Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 15:45:41 +0100 Subject: [PATCH 07/22] fixes --- modules/decollate_batch.ipynb | 2 ++ modules/interpretability/cats_and_dogs.ipynb | 2 ++ modules/interpretability/class_lung_lesion.ipynb | 3 +++ modules/interpretability/covid_classification.ipynb | 7 +++++-- modules/transform_visualization.ipynb | 2 ++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/modules/decollate_batch.ipynb b/modules/decollate_batch.ipynb index 38d7fd890e..48a9ceaa95 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", @@ -244,6 +245,7 @@ "preprocessing = Compose(\n", " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", + " FromMetaTensord(keys=[\"img\", \"seg\"]),\n", " EnsureChannelFirstd(keys=[\"img\", \"seg\"]),\n", " Orientationd(keys=\"img\", axcodes=\"RAS\"),\n", " Resized(keys=\"img\", spatial_size=(96, 96, 96), mode=\"trilinear\", align_corners=True),\n", diff --git a/modules/interpretability/cats_and_dogs.ipynb b/modules/interpretability/cats_and_dogs.ipynb index b71254bb63..c1787e84e5 100644 --- a/modules/interpretability/cats_and_dogs.ipynb +++ b/modules/interpretability/cats_and_dogs.ipynb @@ -34,6 +34,7 @@ " LoadImaged,\n", " Rotate90d,\n", " ScaleIntensityd,\n", + " FromMetaTensord,\n", ")\n", "from monai.networks.utils import eval_mode, train_mode\n", "from contextlib import nullcontext\n", @@ -145,6 +146,7 @@ "divisible_factor = 20\n", "transforms = Compose([\n", " LoadImaged(\"image\"),\n", + " FromMetaTensord(\"image\"),\n", " AsChannelFirstd(\"image\"),\n", " ScaleIntensityd(\"image\"),\n", " Rotate90d(\"image\", k=3),\n", diff --git a/modules/interpretability/class_lung_lesion.ipynb b/modules/interpretability/class_lung_lesion.ipynb index 10b279a288..246f91368e 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 0af18e2265..1ae0df6c12 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/transform_visualization.ipynb b/modules/transform_visualization.ipynb index c72f328547..0b3894a262 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", @@ -211,6 +212,7 @@ "source": [ "transform = Compose([\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " 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", From 9ce511172ba6ea1f6e6faf456dd4d5ccdddfb2be Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 22 Apr 2022 16:00:56 +0100 Subject: [PATCH 08/22] more fixes --- ...ansforms_and_test_time_augmentations.ipynb | 4 +++ modules/learning_rate.ipynb | 2 ++ modules/load_medical_images.ipynb | 35 ++++++++++--------- modules/mednist_GAN_workflow_dict.ipynb | 2 ++ modules/nifti_read_example.ipynb | 11 +++--- modules/tcia_csv_processing.ipynb | 7 ++-- 6 files changed, 38 insertions(+), 23 deletions(-) diff --git a/modules/inverse_transforms_and_test_time_augmentations.ipynb b/modules/inverse_transforms_and_test_time_augmentations.ipynb index 40403ecb68..1e4f388281 100644 --- a/modules/inverse_transforms_and_test_time_augmentations.ipynb +++ b/modules/inverse_transforms_and_test_time_augmentations.ipynb @@ -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", @@ -257,6 +258,7 @@ " os.makedirs(os.path.join(data_dir, key), exist_ok=True)\n", "transform_2d_slice = Compose([\n", " LoadImaged(keys),\n", + " FromMetaTensord(keys),\n", " AsChannelFirstd(\"image\"),\n", " AddChanneld(\"label\"),\n", " SliceWithMaxNumLabelsd(keys, \"label\"),\n", @@ -303,6 +305,7 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys),\n", + " FromMetaTensord(keys),\n", " Lambdad(\"label\", lambda x: (x > 0).astype(\n", " np.float64)), # make label binary\n", " RandAffined(\n", @@ -1623,6 +1626,7 @@ "# Need minimal transforms just to be able to show the unmodified originals\n", "minimal_transforms = Compose([\n", " LoadImaged(keys),\n", + " FromMetaTensord(keys),\n", " Lambdad(\"label\", lambda x: (x > 0).astype(\n", " np.float64)), # make label binary\n", " ScaleIntensityd(\"image\"),\n", diff --git a/modules/learning_rate.ipynb b/modules/learning_rate.ipynb index 760f38584b..0c8b8ed3ef 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 1affe05a7f..1b4b7e4d40 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}\")" ] }, { @@ -663,6 +663,7 @@ "source": [ "transform = Compose([\n", " LoadImaged(keys=\"image\"),\n", + " FromMetaTensord(keys=\"image\"),\n", " EnsureChannelFirstd(keys=\"image\"),\n", " Resized(keys=\"image\", spatial_size=[64, 64]),\n", " EnsureTyped(\"image\"),\n", diff --git a/modules/mednist_GAN_workflow_dict.ipynb b/modules/mednist_GAN_workflow_dict.ipynb index 32121b845d..b07605061f 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 f38618d5a6..6b2ff1fda3 100644 --- a/modules/nifti_read_example.ipynb +++ b/modules/nifti_read_example.ipynb @@ -106,6 +106,7 @@ " RandSpatialCrop,\n", " ScaleIntensity,\n", " EnsureType,\n", + " ToNumpy,\n", ")\n", "from monai.utils import first\n", "\n", @@ -187,7 +188,8 @@ "\n", "imtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpy(),\n", " ScaleIntensity(),\n", " AddChannel(),\n", " RandSpatialCrop((64, 64, 64), random_size=False),\n", @@ -197,7 +199,8 @@ "\n", "segtrans = Compose(\n", " [\n", - " LoadImage(image_only=True),\n", + " LoadImage(),\n", + " ToNumpy(),\n", " AddChannel(),\n", " RandSpatialCrop((64, 64, 64), random_size=False),\n", " EnsureType(),\n", @@ -236,10 +239,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", diff --git a/modules/tcia_csv_processing.ipynb b/modules/tcia_csv_processing.ipynb index 7bb646e649..10afdd3048 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", ")" ] }, From 332b8193dbe334b0f75d2c6f0b2d336ed79a07ef Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Wed, 4 May 2022 10:51:44 +0100 Subject: [PATCH 09/22] changes --- modules/batch_output_transform.ipynb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/batch_output_transform.ipynb b/modules/batch_output_transform.ipynb index 78e9d9809f..997aa2a27a 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", From e89f6223ad79c259913cd381850b24b9bd16cc1f Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Wed, 4 May 2022 15:51:30 +0100 Subject: [PATCH 10/22] TorchIO download data to MONAI_DATA_DIRECTORY --- .gitignore | 10 +++ modules/TorchIO_MONAI_PyTorch_Lightning.ipynb | 82 +++++++++++-------- 2 files changed, 60 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index 664d99fe3c..f13612f602 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,13 @@ tests/testing_data/*Hippocampus* # Ignore torch saves */torch/runs logs +*/runs +lightning_logs + +# ignore automatically created files +*.ts +nohup.out +deepgrow/ignite/_image.nii.gz +*.zip +deployment/bentoml/mednist_classifier_bentoml.py +deployment/ray/mednist_classifier_start.py diff --git a/modules/TorchIO_MONAI_PyTorch_Lightning.ipynb b/modules/TorchIO_MONAI_PyTorch_Lightning.ipynb index ca83c870c7..e527bf85d0 100644 --- a/modules/TorchIO_MONAI_PyTorch_Lightning.ipynb +++ b/modules/TorchIO_MONAI_PyTorch_Lightning.ipynb @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "id": "KvbbZuhmquRR" }, @@ -92,14 +92,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "id": "gduPdIturUIB" }, "outputs": [], "source": [ - "from pathlib import Path\n", "from datetime import datetime\n", + "import os\n", + "import tempfile\n", + "from glob import glob\n", "\n", "import torch\n", "from torch.utils.data import random_split, DataLoader\n", @@ -117,6 +119,36 @@ "%load_ext tensorboard" ] }, + { + "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": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/mnt/data/rbrown/Documents/Data/MONAI\n" + ] + } + ], + "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": { @@ -145,20 +177,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "id": "KuhTaRl3vf37" }, "outputs": [], "source": [ - "\n", - "\n", "class MedicalDecathlonDataModule(pl.LightningDataModule):\n", " def __init__(self, task, batch_size, train_val_ratio):\n", " super().__init__()\n", " self.task = task\n", " self.batch_size = batch_size\n", - " self.dataset_dir = Path(task)\n", + " self.base_dir = root_dir\n", + " self.dataset_dir = os.path.join(root_dir, task)\n", " self.train_val_ratio = train_val_ratio\n", " self.subjects = None\n", " self.test_subjects = None\n", @@ -175,16 +206,13 @@ " return shapes.max(axis=0)\n", "\n", " def download_data(self):\n", - " if not self.dataset_dir.is_dir():\n", - " url = 'https://msd-for-monai.s3-us-west-2.amazonaws.com/Task04_Hippocampus.tar'\n", - " monai.apps.download_and_extract(url=url, output_dir=\".\")\n", + " if not os.path.isdir(self.dataset_dir):\n", + " url = f'https://msd-for-monai.s3-us-west-2.amazonaws.com/{self.task}.tar'\n", + " monai.apps.download_and_extract(url=url, output_dir=self.base_dir)\n", "\n", - " def get_niis(d):\n", - " return sorted(p for p in d.glob('*.nii*') if not p.name.startswith('.'))\n", - "\n", - " image_training_paths = get_niis(self.dataset_dir / 'imagesTr')\n", - " label_training_paths = get_niis(self.dataset_dir / 'labelsTr')\n", - " image_test_paths = get_niis(self.dataset_dir / 'imagesTs')\n", + " image_training_paths = sorted(glob(os.path.join(self.dataset_dir, 'imagesTr', \"*.nii*\")))\n", + " label_training_paths = sorted(glob(os.path.join(self.dataset_dir, 'labelsTr', \"*.nii*\")))\n", + " image_test_paths = sorted(glob(os.path.join(self.dataset_dir, 'imagesTs', \"*.nii*\")))\n", " return image_training_paths, label_training_paths, image_test_paths\n", "\n", " def prepare_data(self):\n", @@ -260,7 +288,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "id": "hcHf9w2nLfyC" }, @@ -284,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -293,16 +321,6 @@ "outputId": "7cb39051-4c26-4811-b838-8a5e938e53a3" }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading...\n", - "From: https://drive.google.com/uc?id=1RzPB1_bqzQhlWvU-YGvZzhx2omcDh38C\n", - "To: /content/Task04_Hippocampus.tar\n", - "28.4MB [00:00, 82.8MB/s]\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -341,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "id": "1Ov3H12p6Qx1" }, @@ -395,7 +413,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" From 182db63083c2ccadb725c8b3ee465fdd943fcc76 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Wed, 4 May 2022 16:40:20 +0100 Subject: [PATCH 11/22] updates --- .../unet_segmentation_3d_catalyst.ipynb | 4 ++-- .../unet_segmentation_3d_ignite.ipynb | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/3d_segmentation/unet_segmentation_3d_catalyst.ipynb b/3d_segmentation/unet_segmentation_3d_catalyst.ipynb index 3340b7145d..c18c1940d0 100644 --- a/3d_segmentation/unet_segmentation_3d_catalyst.ipynb +++ b/3d_segmentation/unet_segmentation_3d_catalyst.ipynb @@ -293,8 +293,8 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\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", @@ -311,8 +311,8 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\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 ef567281c4..a5da2bb44e 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,7 +84,7 @@ " Resize,\n", " ScaleIntensity,\n", " EnsureType,\n", - " ToNumpyd,\n", + " Lambda,\n", ")\n", "from monai.utils import first\n", "\n", @@ -186,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" ] } ], @@ -195,9 +195,9 @@ "imtrans = Compose(\n", " [\n", " LoadImage(),\n", - " ToNumpyd(),\n", - " ScaleIntensity(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", + " ScaleIntensity(),\n", " RandSpatialCrop((96, 96, 96), random_size=False),\n", " EnsureType(),\n", " ]\n", @@ -205,8 +205,8 @@ "segtrans = Compose(\n", " [\n", " LoadImage(),\n", - " ToNumpyd(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", " RandSpatialCrop((96, 96, 96), random_size=False),\n", " EnsureType(),\n", " ]\n", @@ -354,9 +354,9 @@ "val_imtrans = Compose(\n", " [\n", " LoadImage(),\n", - " ToNumpyd(),\n", - " ScaleIntensity(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", + " ScaleIntensity(),\n", " Resize((96, 96, 96)),\n", " EnsureType(),\n", " ]\n", @@ -364,8 +364,8 @@ "val_segtrans = Compose(\n", " [\n", " LoadImage(),\n", - " ToNumpyd(),\n", " AddChannel(),\n", + " Lambda(lambda x: x.as_tensor()),\n", " Resize((96, 96, 96)),\n", " EnsureType(),\n", " ]\n", From 6cb40f32248fa88f24ffc0ca79f71417feefc6ba Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Wed, 4 May 2022 17:01:47 +0100 Subject: [PATCH 12/22] 3d_segmentation/spleen_segmentation_3d.ipynb --- .gitignore | 1 + 3d_segmentation/spleen_segmentation_3d.ipynb | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f13612f602..ffce7246c0 100644 --- a/.gitignore +++ b/.gitignore @@ -148,3 +148,4 @@ deepgrow/ignite/_image.nii.gz *.zip deployment/bentoml/mednist_classifier_bentoml.py deployment/ray/mednist_classifier_start.py +3d_segmentation/out diff --git a/3d_segmentation/spleen_segmentation_3d.ipynb b/3d_segmentation/spleen_segmentation_3d.ipynb index 0e537e95c1..77ebef0431 100644 --- a/3d_segmentation/spleen_segmentation_3d.ipynb +++ b/3d_segmentation/spleen_segmentation_3d.ipynb @@ -280,8 +280,8 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", @@ -313,8 +313,8 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", @@ -696,6 +696,7 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=\"bilinear\"),\n", @@ -790,6 +791,7 @@ " [\n", " LoadImaged(keys=\"image\"),\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " FromMetaTensord(keys=\"image\"),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=\"bilinear\"),\n", From 497069f3788e34e825f3dcb15fd56c5a0c8e2ae2 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Wed, 4 May 2022 17:11:35 +0100 Subject: [PATCH 13/22] fixes --- 3d_segmentation/spleen_segmentation_3d_lightning.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb index d79c15df12..a0b9be76ca 100644 --- a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb +++ b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb @@ -270,8 +270,8 @@ " train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", @@ -311,8 +311,8 @@ " val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", From f6e665d0ce38ff3313730b7f059d76c3af11417b Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Thu, 12 May 2022 17:03:19 +0100 Subject: [PATCH 14/22] fixes --- 2d_registration/registration_mednist.ipynb | 2 +- modules/decollate_batch.ipynb | 4 ++-- modules/load_medical_images.ipynb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/2d_registration/registration_mednist.ipynb b/2d_registration/registration_mednist.ipynb index a9b15a548b..8c99691d40 100644 --- a/2d_registration/registration_mednist.ipynb +++ b/2d_registration/registration_mednist.ipynb @@ -232,8 +232,8 @@ "train_transforms = Compose(\n", " [\n", " LoadImageD(keys=[\"fixed_hand\", \"moving_hand\"]),\n", - " FromMetaTensord(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/modules/decollate_batch.ipynb b/modules/decollate_batch.ipynb index 48a9ceaa95..1b85387d39 100644 --- a/modules/decollate_batch.ipynb +++ b/modules/decollate_batch.ipynb @@ -245,8 +245,8 @@ "preprocessing = Compose(\n", " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", - " FromMetaTensord(keys=[\"img\", \"seg\"]),\n", " EnsureChannelFirstd(keys=[\"img\", \"seg\"]),\n", + " FromMetaTensord(keys=[\"img\", \"seg\"]),\n", " Orientationd(keys=\"img\", axcodes=\"RAS\"),\n", " Resized(keys=\"img\", spatial_size=(96, 96, 96), mode=\"trilinear\", align_corners=True),\n", " ScaleIntensityd(keys=\"img\"),\n", @@ -290,7 +290,7 @@ " 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(keys=\"pred\", meta_keys=\"pred_meta_dict\", output_dir=tempfile.TemporaryDirectory().name, resample=False),\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/load_medical_images.ipynb b/modules/load_medical_images.ipynb index 1b4b7e4d40..7083a71371 100644 --- a/modules/load_medical_images.ipynb +++ b/modules/load_medical_images.ipynb @@ -663,8 +663,8 @@ "source": [ "transform = Compose([\n", " LoadImaged(keys=\"image\"),\n", - " FromMetaTensord(keys=\"image\"),\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " FromMetaTensord(keys=\"image\"),\n", " Resized(keys=\"image\", spatial_size=[64, 64]),\n", " EnsureTyped(\"image\"),\n", "])\n", From 2e21bfe7bbf50a046ae18d528523b2b832abb8a6 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Thu, 12 May 2022 17:35:53 +0100 Subject: [PATCH 15/22] fixes --- modules/image_dataset.ipynb | 10 ++++++---- modules/transfer_mmar.ipynb | 3 +++ modules/transform_visualization.ipynb | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/modules/image_dataset.ipynb b/modules/image_dataset.ipynb index 21cba9d824..5c0c73714f 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, _, data.affine = self.transforms[1](data, data.affine) # 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/transfer_mmar.ipynb b/modules/transfer_mmar.ipynb index 2a5d18afb5..d5739c40ba 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", @@ -328,6 +329,7 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", @@ -361,6 +363,7 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", diff --git a/modules/transform_visualization.ipynb b/modules/transform_visualization.ipynb index 0b3894a262..a1da9975be 100644 --- a/modules/transform_visualization.ipynb +++ b/modules/transform_visualization.ipynb @@ -212,8 +212,8 @@ "source": [ "transform = Compose([\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " FromMetaTensord(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", " ScaleIntensityRanged(keys=[\"image\"], a_min=-57, a_max=164, b_min=0.0, b_max=1.0, clip=True),\n", From 0e139382ac43db1ea348b4e2084de5ac75f4bc01 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Thu, 12 May 2022 17:46:11 +0100 Subject: [PATCH 16/22] fixes --- modules/3d_image_transforms.ipynb | 59 +++++++++++++++---------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/modules/3d_image_transforms.ipynb b/modules/3d_image_transforms.ipynb index d6f98ee78b..4e411f77a0 100644 --- a/modules/3d_image_transforms.ipynb +++ b/modules/3d_image_transforms.ipynb @@ -284,8 +284,7 @@ "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,12 +329,9 @@ ], "source": [ "data_dict = loader(train_data_dicts[0])\n", - "from_meta_tensord = FromMetaTensord(keys=(\"image\", \"label\"))\n", - "data_dict = from_meta_tensord(data_dict)\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}\")" ] }, { @@ -440,27 +436,28 @@ "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" ] } ], "source": [ - "data_dict = orientation(datac_dict)\n", + "data_dict = FromMetaTensord(keys=[\"image\", \"label\"])(datac_dict)\n", + "data_dict = orientation(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 Orientation:\\n{data_dict['image_meta_dict']['affine']}\")\n", + "print(f\"label affine after Orientation:\\n{data_dict['label_meta_dict']['affine']}\")" ] }, { @@ -526,18 +523,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" ] } ], From 71d7eee0d2ca47651048a502d28383920f3640fb Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 13 May 2022 11:20:25 +0100 Subject: [PATCH 17/22] fixes --- 3d_segmentation/brats_segmentation_3d.ipynb | 6 +++--- deepgrow/ignite/inference_3d.ipynb | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/3d_segmentation/brats_segmentation_3d.ipynb b/3d_segmentation/brats_segmentation_3d.ipynb index fb1d5ccaa4..522d5f54af 100644 --- a/3d_segmentation/brats_segmentation_3d.ipynb +++ b/3d_segmentation/brats_segmentation_3d.ipynb @@ -265,8 +265,8 @@ " [\n", " # load 4 Nifti images and stack them together\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -287,8 +287,8 @@ "val_transform = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -786,8 +786,8 @@ "val_org_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\"]),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\"], pixdim=(1.0, 1.0, 1.0), mode=\"bilinear\"),\n", diff --git a/deepgrow/ignite/inference_3d.ipynb b/deepgrow/ignite/inference_3d.ipynb index 86663aa395..63236d22cc 100644 --- a/deepgrow/ignite/inference_3d.ipynb +++ b/deepgrow/ignite/inference_3d.ipynb @@ -139,9 +139,9 @@ "\n", "pre_transforms = [\n", " LoadImaged(keys='image'),\n", + " AsChannelFirstd(keys='image'),\n", " FromMetaTensord(keys='image'),\n", " ToNumpyd(keys=('image', 'image_meta_dict')),\n", - " AsChannelFirstd(keys='image'),\n", " Spacingd(keys='image', pixdim=pixdim, mode='bilinear'),\n", " AddGuidanceFromPointsd(ref_image='image', guidance='guidance', foreground='foreground', background='background',\n", " dimensions=dimensions),\n", @@ -167,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", From ba4c709176ebb281e6369ab639ff6ca6d3b05cc0 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 13 May 2022 11:30:10 +0100 Subject: [PATCH 18/22] fixes --- deepedit/ignite/infoANDinference.ipynb | 41 ++++++++++---------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/deepedit/ignite/infoANDinference.ipynb b/deepedit/ignite/infoANDinference.ipynb index 938419748b..7af3c06192 100644 --- a/deepedit/ignite/infoANDinference.ipynb +++ b/deepedit/ignite/infoANDinference.ipynb @@ -98,6 +98,7 @@ "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", @@ -121,6 +122,7 @@ " SqueezeDimd,\n", " ToNumpyd,\n", " ToTensord,\n", + " FromMetaTensord,\n", ")\n", "\n", "print_config()" @@ -226,18 +228,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.ts\"\n", - "dst = \"pretrained_deepedit_dynunet-final.ts\"\n", - "if not os.path.exists(dst):\n", - " monai.apps.download_url(resource, dst)" + "model_path = os.path.join(data_dir, \"pretrained_deepedit_dynunet-final.ts\")\n", + "monai.apps.download_url(resource, model_path)" ] }, { @@ -277,11 +277,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" ] @@ -297,7 +298,7 @@ "spatial_size = [128, 128, 128]\n", "\n", "data = {\n", - " 'image': '_image.nii.gz',\n", + " 'image': image_path,\n", " 'guidance': {'spleen': [[66, 180, 105], [66, 180, 145]], 'background': []},\n", "}\n", "\n", @@ -308,6 +309,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", @@ -475,7 +478,6 @@ ], "source": [ "# Evaluation\n", - "model_path = 'pretrained_deepedit_dynunet-final.ts'\n", "model = jit.load(model_path)\n", "model.cuda()\n", "model.eval()\n", @@ -512,17 +514,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": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# remove downloaded files\n", - "os.remove('_image.nii.gz')\n", - "os.remove('pretrained_deepedit_dynunet-final.ts')" - ] } ], "metadata": { From ddec44f0beb9192e101a1295db5ff5e65ae88a71 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 13 May 2022 12:00:31 +0100 Subject: [PATCH 19/22] TTA --- ...ansforms_and_test_time_augmentations.ipynb | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/inverse_transforms_and_test_time_augmentations.ipynb b/modules/inverse_transforms_and_test_time_augmentations.ipynb index 1e4f388281..f941e229e4 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", @@ -229,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", @@ -244,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", @@ -258,12 +257,12 @@ " os.makedirs(os.path.join(data_dir, key), exist_ok=True)\n", "transform_2d_slice = Compose([\n", " LoadImaged(keys),\n", - " FromMetaTensord(keys),\n", " AsChannelFirstd(\"image\"),\n", " AddChanneld(\"label\"),\n", " 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", @@ -306,8 +305,8 @@ " [\n", " LoadImaged(keys),\n", " FromMetaTensord(keys),\n", - " Lambdad(\"label\", lambda x: (x > 0).astype(\n", - " np.float64)), # make label binary\n", + " Lambdad(\"label\", lambda x: (x > 0).to(\n", + " torch.float32)), # make label binary\n", " RandAffined(\n", " keys,\n", " prob=1.0,\n", @@ -1627,8 +1626,8 @@ "minimal_transforms = Compose([\n", " LoadImaged(keys),\n", " FromMetaTensord(keys),\n", - " Lambdad(\"label\", lambda x: (x > 0).astype(\n", - " np.float64)), # make label binary\n", + " Lambdad(\"label\", lambda x: (x > 0).to(\n", + " torch.float32)), # make label binary\n", " ScaleIntensityd(\"image\"),\n", " EnsureTyped(keys),\n", "])\n", From 669d7f933572f8330e96d1126135f756d80825c0 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 13 May 2022 12:02:50 +0100 Subject: [PATCH 20/22] pep8 --- modules/decollate_batch.ipynb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/decollate_batch.ipynb b/modules/decollate_batch.ipynb index 1b85387d39..a7300f4a68 100644 --- a/modules/decollate_batch.ipynb +++ b/modules/decollate_batch.ipynb @@ -290,7 +290,10 @@ " device=device,\n", " ),\n", " AsDiscreted(keys=\"pred\", threshold=0.5),\n", - " SaveImaged(keys=\"pred\", meta_keys=\"pred_meta_dict\", output_dir=tempfile.TemporaryDirectory().name, 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", From 0dc98b4012069c6e097bb07e978f3c367fe63246 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Thu, 19 May 2022 20:58:54 +0100 Subject: [PATCH 21/22] Meta tensor orientation (#722) * spleen_segmentation_3d * spleen_segmentation_3d_lightning.ipynb * brats_segmentation_3d.ipynb * fixes --- 3d_segmentation/brats_segmentation_3d.ipynb | 6 +-- 3d_segmentation/spleen_segmentation_3d.ipynb | 8 +-- .../spleen_segmentation_3d_lightning.ipynb | 4 +- modules/decollate_batch.ipynb | 2 +- modules/integrate_3rd_party_transforms.ipynb | 4 +- modules/interpretability/cats_and_dogs.ipynb | 4 +- modules/nifti_read_example.ipynb | 49 ++----------------- 7 files changed, 17 insertions(+), 60 deletions(-) diff --git a/3d_segmentation/brats_segmentation_3d.ipynb b/3d_segmentation/brats_segmentation_3d.ipynb index 0edb4810d0..ec60f3c5cf 100644 --- a/3d_segmentation/brats_segmentation_3d.ipynb +++ b/3d_segmentation/brats_segmentation_3d.ipynb @@ -266,9 +266,9 @@ " # load 4 Nifti images and stack them together\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " FromMetaTensord(keys=[\"image\", \"label\"]),\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", @@ -288,9 +288,9 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", + " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " FromMetaTensord(keys=[\"image\", \"label\"]),\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", @@ -787,9 +787,9 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\"]),\n", + " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\n", - " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", " Spacingd(keys=[\"image\"], pixdim=(1.0, 1.0, 1.0), mode=\"bilinear\"),\n", " NormalizeIntensityd(keys=\"image\", nonzero=True, channel_wise=True),\n", " EnsureTyped(keys=[\"image\", \"label\"]),\n", diff --git a/3d_segmentation/spleen_segmentation_3d.ipynb b/3d_segmentation/spleen_segmentation_3d.ipynb index 31a92c99e9..850b023c65 100644 --- a/3d_segmentation/spleen_segmentation_3d.ipynb +++ b/3d_segmentation/spleen_segmentation_3d.ipynb @@ -281,8 +281,8 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", " ScaleIntensityRanged(\n", @@ -314,8 +314,8 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", " ScaleIntensityRanged(\n", @@ -696,8 +696,8 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Spacingd(keys=[\"image\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=\"bilinear\"),\n", " ScaleIntensityRanged(\n", @@ -791,8 +791,8 @@ " [\n", " LoadImaged(keys=\"image\"),\n", " EnsureChannelFirstd(keys=\"image\"),\n", - " FromMetaTensord(keys=\"image\"),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=\"image\"),\n", " Spacingd(keys=[\"image\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=\"bilinear\"),\n", " ScaleIntensityRanged(\n", diff --git a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb index 7e8c6fc7cf..b82622e5bb 100644 --- a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb +++ b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb @@ -271,8 +271,8 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", " pixdim=(1.5, 1.5, 2.0),\n", @@ -312,8 +312,8 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", " pixdim=(1.5, 1.5, 2.0),\n", diff --git a/modules/decollate_batch.ipynb b/modules/decollate_batch.ipynb index 570f47358e..700e44f295 100644 --- a/modules/decollate_batch.ipynb +++ b/modules/decollate_batch.ipynb @@ -246,8 +246,8 @@ " [\n", " LoadImaged(keys=[\"img\", \"seg\"]),\n", " EnsureChannelFirstd(keys=[\"img\", \"seg\"]),\n", - " FromMetaTensord(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", diff --git a/modules/integrate_3rd_party_transforms.ipynb b/modules/integrate_3rd_party_transforms.ipynb index 02ff77f9c5..3709116bfe 100644 --- a/modules/integrate_3rd_party_transforms.ipynb +++ b/modules/integrate_3rd_party_transforms.ipynb @@ -267,10 +267,10 @@ "source": [ "monai_transforms = [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", - " ToNumpyd(keys=[\"image\", \"label\", \"image_meta_dict\", \"label_meta_dict\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", + " FromMetaTensord(keys=[\"image\", \"label\"]),\n", + " ToNumpyd(keys=[\"image\", \"label\", \"image_meta_dict\", \"label_meta_dict\"]),\n", " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", " ScaleIntensityRanged(keys=[\"image\"], a_min=-57,\n", diff --git a/modules/interpretability/cats_and_dogs.ipynb b/modules/interpretability/cats_and_dogs.ipynb index 2fcb526986..c00ea11174 100644 --- a/modules/interpretability/cats_and_dogs.ipynb +++ b/modules/interpretability/cats_and_dogs.ipynb @@ -165,8 +165,8 @@ "divisible_factor = 20\n", "transforms = Compose([\n", " LoadImaged(\"image\"),\n", - " FromMetaTensord(\"image\"),\n", " AsChannelFirstd(\"image\"),\n", + " FromMetaTensord(\"image\"),\n", " ScaleIntensityd(\"image\"),\n", " Rotate90d(\"image\", k=3),\n", " DivisiblePadd(\"image\", k=divisible_factor),\n", @@ -202,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/nifti_read_example.ipynb b/modules/nifti_read_example.ipynb index 6c39ce7891..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", @@ -113,30 +112,6 @@ "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": {}, @@ -150,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", @@ -189,9 +165,9 @@ "imtrans = Compose(\n", " [\n", " LoadImage(),\n", + " AddChannel(),\n", " ToNumpy(),\n", " ScaleIntensity(),\n", - " AddChannel(),\n", " RandSpatialCrop((64, 64, 64), random_size=False),\n", " EnsureType(),\n", " ]\n", @@ -200,8 +176,8 @@ "segtrans = Compose(\n", " [\n", " LoadImage(),\n", - " ToNumpy(),\n", " AddChannel(),\n", + " ToNumpy(),\n", " RandSpatialCrop((64, 64, 64), random_size=False),\n", " EnsureType(),\n", " ]\n", @@ -263,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": { From 550370d35d9779a0cc71b7c905a6393fad7f5e01 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Mon, 23 May 2022 16:26:39 +0100 Subject: [PATCH 22/22] update for Spacing MetaTensor --- 3d_segmentation/brats_segmentation_3d.ipynb | 10 +++++----- 3d_segmentation/spleen_segmentation_3d.ipynb | 8 ++++---- .../spleen_segmentation_3d_lightning.ipynb | 4 ++-- acceleration/automatic_mixed_precision.ipynb | 4 ++-- acceleration/dataset_type_performance.ipynb | 4 ++-- acceleration/fast_training_tutorial.ipynb | 4 ++-- deepgrow/ignite/inference.ipynb | 3 +-- deepgrow/ignite/inference_3d.ipynb | 2 +- modules/3d_image_transforms.ipynb | 12 ++++++------ modules/cross_validation_models_ensemble.ipynb | 4 ++-- modules/image_dataset.ipynb | 2 +- modules/integrate_3rd_party_transforms.ipynb | 4 ++-- modules/postprocessing_transforms.ipynb | 4 ++-- modules/transfer_mmar.ipynb | 13 +++++++------ modules/transform_visualization.ipynb | 2 +- 15 files changed, 40 insertions(+), 40 deletions(-) diff --git a/3d_segmentation/brats_segmentation_3d.ipynb b/3d_segmentation/brats_segmentation_3d.ipynb index ec60f3c5cf..ec374b04f7 100644 --- a/3d_segmentation/brats_segmentation_3d.ipynb +++ b/3d_segmentation/brats_segmentation_3d.ipynb @@ -267,13 +267,13 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", - " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\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", @@ -289,13 +289,13 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=\"image\"),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", - " ConvertToMultiChannelBasedOnBratsClassesd(keys=\"label\"),\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", @@ -788,9 +788,9 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\"]),\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", - " Spacingd(keys=[\"image\"], pixdim=(1.0, 1.0, 1.0), mode=\"bilinear\"),\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 850b023c65..8b1ece6a0d 100644 --- a/3d_segmentation/spleen_segmentation_3d.ipynb +++ b/3d_segmentation/spleen_segmentation_3d.ipynb @@ -282,9 +282,9 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\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,9 +315,9 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\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", @@ -697,9 +697,9 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\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", @@ -792,9 +792,9 @@ " LoadImaged(keys=\"image\"),\n", " EnsureChannelFirstd(keys=\"image\"),\n", " Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=\"image\"),\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 b82622e5bb..7134738584 100644 --- a/3d_segmentation/spleen_segmentation_3d_lightning.ipynb +++ b/3d_segmentation/spleen_segmentation_3d_lightning.ipynb @@ -272,12 +272,12 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", " 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", @@ -313,12 +313,12 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " Spacingd(\n", " keys=[\"image\", \"label\"],\n", " 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/acceleration/automatic_mixed_precision.ipynb b/acceleration/automatic_mixed_precision.ipynb index 6d7d6f5cc9..001ef29dea 100644 --- a/acceleration/automatic_mixed_precision.ipynb +++ b/acceleration/automatic_mixed_precision.ipynb @@ -239,7 +239,6 @@ " train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -247,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", @@ -283,7 +283,6 @@ " val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -291,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 777fb2bd78..71ea3b4950 100644 --- a/acceleration/dataset_type_performance.ipynb +++ b/acceleration/dataset_type_performance.ipynb @@ -398,7 +398,6 @@ " train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -406,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", @@ -438,7 +438,6 @@ " val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -446,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 20764e2493..4462215a8f 100644 --- a/acceleration/fast_training_tutorial.ipynb +++ b/acceleration/fast_training_tutorial.ipynb @@ -224,7 +224,6 @@ "def transformations(fast=False):\n", " train_transforms = [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -232,6 +231,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", @@ -276,7 +276,6 @@ "\n", " val_transforms = [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", " Spacingd(\n", @@ -284,6 +283,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/deepgrow/ignite/inference.ipynb b/deepgrow/ignite/inference.ipynb index fb38e6d312..6aaa98a269 100644 --- a/deepgrow/ignite/inference.ipynb +++ b/deepgrow/ignite/inference.ipynb @@ -420,10 +420,9 @@ "\n", "pre_transforms = [\n", " LoadImaged(keys='image'),\n", - " FromMetaTensord(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 63236d22cc..fdd91f2bd7 100644 --- a/deepgrow/ignite/inference_3d.ipynb +++ b/deepgrow/ignite/inference_3d.ipynb @@ -140,9 +140,9 @@ "pre_transforms = [\n", " 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", - " Spacingd(keys='image', pixdim=pixdim, mode='bilinear'),\n", " AddGuidanceFromPointsd(ref_image='image', guidance='guidance', foreground='foreground', background='background',\n", " dimensions=dimensions),\n", " AddChanneld(keys='image'),\n", diff --git a/modules/3d_image_transforms.ipynb b/modules/3d_image_transforms.ipynb index 67ec92d60f..ef06ff1d3a 100644 --- a/modules/3d_image_transforms.ipynb +++ b/modules/3d_image_transforms.ipynb @@ -452,12 +452,11 @@ } ], "source": [ - "data_dict = FromMetaTensord(keys=[\"image\", \"label\"])(datac_dict)\n", - "data_dict = orientation(data_dict)\n", + "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 Orientation:\\n{data_dict['image_meta_dict']['affine']}\")\n", - "print(f\"label affine after Orientation:\\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}\")" ] }, { @@ -542,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}\")" ] }, { @@ -622,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/cross_validation_models_ensemble.ipynb b/modules/cross_validation_models_ensemble.ipynb index b8688eb2a5..74bdfa88e4 100644 --- a/modules/cross_validation_models_ensemble.ipynb +++ b/modules/cross_validation_models_ensemble.ipynb @@ -250,8 +250,8 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(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", @@ -268,8 +268,8 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(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/image_dataset.ipynb b/modules/image_dataset.ipynb index 0910e767e2..9da53da161 100644 --- a/modules/image_dataset.ipynb +++ b/modules/image_dataset.ipynb @@ -176,7 +176,7 @@ " def __call__(self, data, meta):\n", " data = MetaTensor(data, meta=meta) # convert to MetaTensor\n", " data = self.transforms[0](data) # ensure channel first\n", - " data, _, data.affine = self.transforms[1](data, data.affine) # spacing\n", + " data = self.transforms[1](data) # spacing\n", " if len(self.transforms) == 3:\n", " return self.transforms[2](data), data.meta # image contrast\n", " return data, data.meta\n", diff --git a/modules/integrate_3rd_party_transforms.ipynb b/modules/integrate_3rd_party_transforms.ipynb index 3709116bfe..9b6ab2cbac 100644 --- a/modules/integrate_3rd_party_transforms.ipynb +++ b/modules/integrate_3rd_party_transforms.ipynb @@ -269,10 +269,10 @@ " LoadImaged(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", - " ToNumpyd(keys=[\"image\", \"label\", \"image_meta_dict\", \"label_meta_dict\"]),\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/postprocessing_transforms.ipynb b/modules/postprocessing_transforms.ipynb index 648a9de67d..2ed8a75d55 100644 --- a/modules/postprocessing_transforms.ipynb +++ b/modules/postprocessing_transforms.ipynb @@ -261,11 +261,11 @@ "train_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " 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", @@ -290,11 +290,11 @@ "val_transforms = Compose(\n", " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " AddChanneld(keys=[\"image\", \"label\"]),\n", " 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/transfer_mmar.ipynb b/modules/transfer_mmar.ipynb index 134f25a477..b3bc3b2cc6 100644 --- a/modules/transfer_mmar.ipynb +++ b/modules/transfer_mmar.ipynb @@ -329,10 +329,11 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " 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", @@ -353,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", @@ -363,10 +364,10 @@ " [\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(keys=[\"image\", \"label\"]),\n", " 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", @@ -374,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 a9ca4aea53..7d6d6c94eb 100644 --- a/modules/transform_visualization.ipynb +++ b/modules/transform_visualization.ipynb @@ -213,9 +213,9 @@ "transform = Compose([\n", " LoadImaged(keys=[\"image\", \"label\"]),\n", " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", - " FromMetaTensord(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",