Skip to content

Latest commit

 

History

History
963 lines (915 loc) · 51.7 KB

CHANGELOG.md

File metadata and controls

963 lines (915 loc) · 51.7 KB

Changelog

All notable changes to MONAI are documented in this file.

The format is based on Keep a Changelog.

1.3.0 - 2023-10-12

Added

  • Intensity transforms ScaleIntensityFixedMean and RandScaleIntensityFixedMean (#6542)
  • UltrasoundConfidenceMapTransform used for computing confidence map from an ultrasound image (#6709)
  • channel_wise support in RandScaleIntensity and RandShiftIntensity (#6793, #7025)
  • RandSimulateLowResolution and RandSimulateLowResolutiond (#6806)
  • SignalFillEmptyd (#7011)
  • Euclidean distance transform DistanceTransformEDT with GPU support (#6981)
  • Port loss and metrics from monai-generative (#6729, #6836)
  • Support invert_image and retain_stats in AdjustContrast and RandAdjustContrast (#6542)
  • New network DAF3D and Quicknat (#6306)
  • Support sincos position embedding (#6986)
  • ZarrAvgMerger used for patch inference (#6633)
  • Dataset tracking support to MLFlowHandler (#6616)
  • Considering spacing and subvoxel borders in SurfaceDiceMetric (#6681)
  • CUCIM support for surface-related metrics (#7008)
  • loss_fn support in IgniteMetric and renamed it to IgniteMetricHandler (#6695)
  • CallableEventWithFilter and Events options for trigger_event in GarbageCollector (#6663)
  • Support random sorting option to GridPatch, RandGridPatch, GridPatchd and RandGridPatchd (#6701)
  • Support multi-threaded batch sampling in PatchInferer (#6139)
  • SoftclDiceLoss and SoftDiceclDiceLoss (#6763)
  • HausdorffDTLoss and LogHausdorffDTLoss (#6994)
  • Documentation for TensorFloat-32 (#6770)
  • Docstring format guide (#6780)
  • GDSDataset support for GDS (#6778)
  • PyTorch backend support for MapLabelValue (#6872)
  • filter_func in copy_model_state to filter the weights to be loaded and filter_swinunetr (#6917)
  • stats_sender to MonaiAlgo for FL stats (#6984)
  • freeze_layers to help freeze specific layers (#6970)

misc.

  • Refactor multi-node running command used in Auto3DSeg into dedicated functions (#6623)
  • Support str type annotation to device in ToTensorD (#6737)
  • Improve logging message and file name extenstion in DataAnalyzer for Auto3DSeg (#6758)
  • Set data_range as a property in SSIMLoss (#6788)
  • Unify environment variable access (#7084)
  • end_lr support in WarmupCosineSchedule (#6662)
  • Add ClearML as optional dependency (#6827)
  • yandex.disk support in download_url (#6667)
  • Improve config expression error message (#6977)

Fixed

transforms

  • Make convert_box_to_mask throw errors when box size larger than the image (#6637)
  • Fix lazy mode in RandAffine (#6774)
  • Raise ValueError when map_items is bool in Compose (#6882)
  • Improve performance for NormalizeIntensity (#6887)
  • Fix mismatched shape in Spacing (#6912)
  • Avoid FutureWarning in CropForeground (#6934)
  • Fix Lazy=True ignored when using Dataset call (#6975)
  • Shape check for arbitrary types for DataStats (#7082)

data

  • Fix wrong spacing checking logic in PydicomReader and broken link in ITKReader (#6660)
  • Fix boolean indexing of batched MetaTensor (#6781)
  • Raise warning when multiprocessing in DataLoader (#6830)
  • Remove shuffle in DistributedWeightedRandomSampler (#6886)
  • Fix missing SegmentDescription in PydicomReader (#6937)
  • Fix reading dicom series error in ITKReader (#6943)
  • Fix KeyError in PydicomReader (#6946)
  • Update metatensor_to_itk_image to accept RAS MetaTensor and update default 'space' in NrrdReader to SpaceKeys.LPS (#7000)
  • Collate common meta dictionary keys (#7054)

metrics and losses

  • Fixed bug in GeneralizedDiceLoss when batch=True (#6775)
  • Support for BCEWithLogitsLoss in DiceCELoss (#6924)
  • Support for weight in Dice and related losses (#7098)

networks

  • Use np.prod instead of np.product (#6639)
  • Fix dimension issue in MBConvBlock (#6672)
  • Fix hard-coded up_kernel_size in ViTAutoEnc (#6735)
  • Remove hard-coded bias_downsample in resnet (#6848)
  • Fix unused kernel_size in ResBlock (#6999)
  • Allow for defining reference grid on non-integer coordinates (#7032)
  • Padding option for autoencoder (#7068)
  • Lower peak memory usage for SegResNetDS (#7066)

bundle

  • Set train_dataset_data and dataset_data to unrequired in BundleProperty (#6607)
  • Set None to properties that do not have REF_ID (#6607)
  • Fix AttributeError for default value in get_parsed_content for ConfigParser (#6756)
  • Update monai.bundle.scripts to support NGC hosting (#6828, #6997)
  • Add MetaProperties (#6835)
  • Add create_workflow and update load function (#6835)
  • Add bundle root directory to Python search directories automatically (#6910)
  • Generate properties for bundle docs automatically (#6918)
  • Move download_large_files from model zoo to core (#6958)
  • Bundle syntax # as alias of :: (#6955)
  • Fix bundle download naming issue (#6969, #6963)
  • Simplify the usage of ckpt_export (#6965)
  • update_kwargs in monai.bundle.script for merging multiple configs (#7109)

engines and handlers

  • Added int options for iteration_log and epoch_log in TensorBoardStatsHandler (#7027)
  • Support to run validator at training start (#7108)

misc.

  • Fix device fallback error in DataAnalyzer (#6658)
  • Add int check for current_mode in convert_applied_interp_mode (#6719)
  • Consistent type in convert_to_contiguous (#6849)
  • Label argmax in DataAnalyzer when retry on CPU (#6852)
  • Fix DataAnalyzer with histogram_only=True (#6874)
  • Fix AttributeError in RankFilter in single GPU environment (#6895)
  • Remove the default warning on TORCH_ALLOW_TF32_CUBLAS_OVERRIDE and add debug print info (#6909)
  • Hide user information in print_config (#6913, #6922)
  • Optionally pass coordinates to predictor during sliding window (#6795)
  • Proper ensembling when trained with a sigmoid in AutoRunner (#6588)
  • Fixed test_retinanet by increasing absolute differences (#6615)
  • Add type check to avoid comparing a np.array with a string in _check_kwargs_are_present (#6624)
  • Fix md5 hashing with FIPS mode (#6635)
  • Capture failures from Auto3DSeg related subprocess calls (#6596)
  • Code formatting tool for user-specified directory (#7106)
  • Various docstring fixes

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:23.08-py3 from nvcr.io/nvidia/pytorch:23.03-py3

Deprecated

  • allow_smaller=True; allow_smaller=False will be the new default in CropForeground and generate_spatial_bounding_box (#6736)
  • dropout_prob in VNet in favor of dropout_prob_down and dropout_prob_up (#6768)
  • workflow in BundleWorkflow in favor of workflow_type(#6768)
  • pos_embed in PatchEmbeddingBlock in favor of proj_type(#6986)
  • net_name and net_kwargs in download in favor of model(#7016)
  • img_size parameter in SwinUNETR (#7093)

Removed

  • pad_val, stride, per_channel and upsampler in OcclusionSensitivity (#6642)
  • compute_meaniou (#7019)
  • AsChannelFirst, AddChanneland SplitChannel (#7019)
  • create_multigpu_supervised_trainer and create_multigpu_supervised_evaluator (#7019)
  • runner_id in run (#7019)
  • data_src_cfg_filename in AlgoEnsembleBuilder (#7019)
  • get_validation_stats in Evaluator and get_train_stats in Trainer (#7019)
  • epoch_interval and iteration_interval in TensorBoardStatsHandler (#7019)
  • some self-hosted test (#7041)

1.2.0 - 2023-06-08

Added

  • Various Auto3DSeg enhancements and integration tests including multi-node multi-GPU optimization, major usability improvements
  • TensorRT and ONNX support for monai.bundle API and the relevant models
  • nnU-Net V2 integration monai.apps.nnunet
  • Binary and categorical metrics and event handlers using MetricsReloaded
  • Python module and CLI entry point for bundle workflows in monai.bundle.workflows and monai.fl.client
  • Modular patch inference API including PatchInferer, merger, and splitter
  • Initial release of lazy resampling including transforms and MetaTensor implementations
  • Bridge for ITK Image object and MetaTensor monai.data.itk_torch_bridge
  • Sliding window inference memory efficiency optimization including SlidingWindowInfererAdapt
  • Generic kernel filtering transforms ImageFiltered and RandImageFiltered
  • Trainable bilateral filters and joint bilateral filters
  • ClearML stats and image handlers for experiment tracking

misc.

  • Utility functions to warn API default value changes (#5738)
  • Support of dot notation to access content of ConfigParser (#5813)
  • Softmax version to focal loss (#6544)
  • FROC metric for N-dimensional (#6528)
  • Extend SurfaceDiceMetric for 3D images (#6549)
  • A track_meta option for Lambda and derived transforms (#6385)
  • CLIP pre-trained text-to-vision embedding (#6282)
  • Optional spacing to surface distances calculations (#6144)
  • WSIReader read by power and mpp (#6244)
  • Support GPU tensor for GridPatch and GridPatchDataset (#6246)
  • SomeOf transform composer (#6143)
  • GridPatch with both count and threshold filtering (#6055)

Fixed

transforms

  • map_classes_to_indices efficiency issue (#6468)
  • Adaptive resampling mode based on backends (#6429)
  • Improve Compose encapsulation (#6224)
  • User-provided FolderLayout in SaveImage and SaveImaged transforms (#6213)
  • SpacingD output shape compute stability (#6126)
  • No mutate ratio /user inputs croppad (#6127)
  • A warn flag to RandCropByLabelClasses (#6121)
  • nan to indicate no_channel, split dim singleton (#6090)
  • Compatible padding mode (#6076)
  • Allow for missing filename_or_obj key (#5980)
  • Spacing pixdim in-place change (#5950)
  • Add warning in RandHistogramShift (#5877)
  • Exclude cuCIM wrappers from get_transform_backends (#5838)

data

  • __format__ implementation of MetaTensor (#6523)
  • channel_dim in TiffFileWSIReader and CuCIMWSIReader (#6514)
  • Prepend "meta" to MetaTensor.__repr__ and MetaTensor.__str__ for easier identification (#6214)
  • MetaTensor slicing issue (#5845)
  • Default writer flags (#6147)
  • WSIReader defaults and tensor conversion (#6058)
  • Remove redundant array copy for WSITiffFileReader (#6089)
  • Fix unused arg in SlidingPatchWSIDataset (#6047)
  • reverse_indexing for PILReader (#6008)
  • Use np.linalg for the small affine inverse (#5967)

metrics and losses

  • Removing L2-norm in contrastive loss (L2-norm already present in CosSim) (#6550)
  • Fixes the SSIM metric (#6250)
  • Efficiency issues of Dice metrics (#6412)
  • Generalized Dice issue (#5929)
  • Unify output tensor devices for multiple metrics (#5924)

networks

  • Make RetinaNet throw errors for NaN only when training (#6479)
  • Replace deprecated arg in torchvision models (#6401)
  • Improves NVFuser import check (#6399)
  • Add device in HoVerNetNuclearTypePostProcessing and HoVerNetInstanceMapPostProcessing (#6333)
  • Enhance hovernet load pretrained function (#6269)
  • Access to the att_mat in self-attention modules (#6493)
  • Optional swinunetr-v2 (#6203)
  • Add transform to handle empty box as training data for retinanet_detector (#6170)
  • GPU utilization of DiNTS network (#6050)
  • A pixelshuffle upsample shape mismatch problem (#5982)
  • GEGLU activation function for the MLP Block (#5856)
  • Constructors for DenseNet derived classes (#5846)
  • Flexible interpolation modes in regunet (#5807)

bundle

  • Optimized the deepcopy logic in ConfigParser (#6464)
  • Improve check and error message of bundle run (#6400)
  • Warn or raise ValueError on duplicated key in json/yaml config (#6252)
  • Default metadata and logging values for bundle run (#6072)
  • pprint head and tail in bundle script (#5969)
  • Config parsing issue for substring reference (#5932)
  • Fix instantiate for object instantiation with attribute path (#5866)
  • Fix _get_latest_bundle_version issue on Windows (#5787)

engines and handlers

  • MLflow handler run bug (#6446)
  • monai.engine training attribute check (#6132)
  • Update StatsHandler logging message (#6051)
  • Added callable options for iteration_log and epoch_log in TensorBoard and MLFlow (#5976)
  • CheckpointSaver logging error (#6026)
  • Callable options for iteration_log and epoch_log in StatsHandler (#5965)

misc.

  • Avoid creating cufile.log when import monai (#6106)
  • monai._extensions module compatibility with rocm (#6161)
  • Issue of repeated UserWarning: "TypedStorage is deprecated" (#6105)
  • Use logging config at module level (#5960)
  • Add ITK to the list of optional dependencies (#5858)
  • RankFilter to skip logging when the rank is not meeting criteria (#6243)
  • Various documentation issues

Changed

  • Overall more precise and consistent type annotations
  • Optionally depend on PyTorch-Ignite v0.4.11 instead of v0.4.10
  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:23.03-py3 from nvcr.io/nvidia/pytorch:22.10-py3

Deprecated

  • resample=True; resample=False will be the new default in SaveImage
  • random_size=True; random_size=False will be the new default for the random cropping transforms
  • image_only=False; image_only=True will be the new default in LoadImage
  • AddChannel and AsChannelFirst in favor of EnsureChannelFirst

Removed

  • Deprecated APIs since v0.9, including WSIReader from monai.apps, NiftiSaver and PNGSaver from monai.data
  • Support for PyTorch 1.8
  • Support for Python 3.7

1.1.0 - 2022-12-19

Added

  • Hover-Net based digital pathology workflows including new network, loss, postprocessing, metric, training, and inference modules
  • Various enhancements for Auto3dSeg AutoRunner including template caching, selection, and a dry-run mode nni_dry_run
  • Various enhancements for Auto3dSeg algo templates including new state-of-the-art configurations, optimized GPU memory utilization
  • New bundle API and configurations to support experiment management including MLFlowHandler
  • New bundle.script API to support model zoo query and download
  • LossMetric metric to compute loss as cumulative metric measurement
  • Transforms and base transform APIs including RandomizableTrait and MedianSmooth
  • runtime_cache option for CacheDataset and the derived classes to allow for shared caching on the fly
  • Flexible name formatter for SaveImage transform
  • pending_operations MetaTensor property and basic APIs for lazy image resampling
  • Contrastive sensitivity for SSIM metric
  • Extensible backbones for FlexibleUNet
  • Generalize SobelGradients to 3D and any spatial axes
  • warmup_multiplier option for WarmupCosineSchedule
  • F beta score metric based on confusion matrix metric
  • Support of key overwriting in Lambdad
  • Basic premerge tests for Python 3.11
  • Unit and integration tests for CUDA 11.6, 11.7 and A100 GPU
  • DataAnalyzer handles minor image-label shape inconsistencies

Fixed

  • Review and enhance previously untyped APIs with additional type annotations and casts
  • switch_endianness in LoadImage now supports tensor input
  • Reduced memory footprint for various Auto3dSeg tests
  • Issue of @ in monai.bundle.ReferenceResolver
  • Compatibility issue with ITK-Python 5.3 (converting itkMatrixF44 for default collate)
  • Inconsistent of sform and qform when using different backends for SaveImage
  • MetaTensor.shape call now returns a torch.Size instead of tuple
  • Issue of channel reduction in GeneralizedDiceLoss
  • Issue of background handling before softmax in DiceFocalLoss
  • Numerical issue of LocalNormalizedCrossCorrelationLoss
  • Issue of incompatible view size in ConfusionMatrixMetric
  • NetAdapter compatibility with Torchscript
  • Issue of extract_levels in RegUNet
  • Optional bias_downsample in ResNet
  • dtype overflow for ShiftIntensity transform
  • Randomized transforms such as RandCuCIM now inherit RandomizableTrait
  • fg_indices.size compatibility issue in generate_pos_neg_label_crop_centers
  • Issue when inverting ToTensor
  • Issue of capital letters in filename suffixes check in LoadImage
  • Minor tensor compatibility issues in apps.nuclick.transforms
  • Issue of float16 in verify_net_in_out
  • std variable type issue for RandRicianNoise
  • DataAnalyzer accepts None as label key and checks empty labels
  • iter_patch_position now has a smaller memory footprint
  • CumulativeAverage has been refactored and enhanced to allow for simple tracking of metric running stats.
  • Multi-threading issue for MLFlowHandler

Changed

  • Printing a MetaTensor now generates a less verbose representation
  • DistributedSampler raises a ValueError if there are too few devices
  • OpenCV and VideoDataset modules are loaded lazily to avoid dependency issues
  • device in monai.engines.Workflow supports string values
  • Activations and AsDiscrete take kwargs as additional arguments
  • DataAnalyzer is now more efficient and writes summary stats before detailed all case stats
  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:22.10-py3 from nvcr.io/nvidia/pytorch:22.09-py3
  • Simplified Conda environment file environment-dev.yml
  • Versioneer dependency upgraded to 0.23 from 0.19

Deprecated

  • NibabelReader input argument dtype is deprecated, the reader will use the original dtype of the image

Removed

  • Support for PyTorch 1.7

1.0.1 - 2022-10-24

Fixes

  • DiceCELoss for multichannel targets
  • Auto3DSeg DataAnalyzer out-of-memory error and other minor issues
  • An optional flag issue in the RetinaNet detector
  • An issue with output offset for Spacing
  • A LoadImage issue when track_meta is False
  • 1D data output error in VarAutoEncoder
  • An issue with resolution computing in ImageStats

Added

  • Flexible min/max pixdim options for Spacing
  • Upsample mode deconvgroup and optional kernel sizes
  • Docstrings for gradient-based saliency maps
  • Occlusion sensitivity to use sliding window inference
  • Enhanced Gaussian window and device assignments for sliding window inference
  • Multi-GPU support for MonaiAlgo
  • ClientAlgoStats and MonaiAlgoStats for federated summary statistics
  • MetaTensor support for OneOf
  • Add a file check for bundle logging config
  • Additional content and an authentication token option for bundle info API
  • An anti-aliasing option for Resized
  • SlidingWindowInferer adaptive device based on cpu_thresh
  • SegResNetDS with deep supervision and non-isotropic kernel support
  • Premerge tests for Python 3.10

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:22.09-py3 from nvcr.io/nvidia/pytorch:22.08-py3
  • Replace None type metadata content with "none" for collate_fn compatibility
  • HoVerNet Mode and Branch to independent StrEnum
  • Automatically infer device from the first item in random elastic deformation dict
  • Add channel dim in ComputeHoVerMaps and ComputeHoVerMapsd
  • Remove batch dim in SobelGradients and SobelGradientsd

Deprecated

  • Deprecating compute_meandice, compute_meaniou in monai.metrics, in favor of compute_dice and compute_iou respectively

1.0.0 - 2022-09-16

Added

  • monai.auto3dseg base APIs and monai.apps.auto3dseg components for automated machine learning (AutoML) workflow
  • monai.fl module with base APIs and MonaiAlgo for federated learning client workflow
  • An initial backwards compatibility guide
  • Initial release of accelerated MRI reconstruction components, including CoilSensitivityModel
  • Support of MetaTensor and new metadata attributes for various digital pathology components
  • Various monai.bundle enhancements for MONAI model-zoo usability, including config debug mode and get_all_bundles_list
  • new monai.transforms components including SignalContinuousWavelet for 1D signal, ComputeHoVerMaps for digital pathology, and SobelGradients for spatial gradients
  • VarianceMetric and LabelQualityScore metrics for active learning
  • Dataset API for real-time stream and videos
  • Several networks and building blocks including FlexibleUNet and HoVerNet
  • MeanIoUHandler and LogfileHandler workflow event handlers
  • WSIReader with the TiffFile backend
  • Multi-threading in WSIReader with cuCIM backend
  • get_stats API in monai.engines.Workflow
  • prune_meta_pattern in monai.transforms.LoadImage
  • max_interactions for deepedit interaction workflow
  • Various profiling utilities in monai.utils.profiling

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:22.08-py3 from nvcr.io/nvidia/pytorch:22.06-py3
  • Optionally depend on PyTorch-Ignite v0.4.10 instead of v0.4.9
  • The cache-based dataset now matches the transform information when read/write the cache
  • monai.losses.ContrastiveLoss now infers batch_size during forward()
  • Rearrange the spatial axes in RandSmoothDeform transforms following PyTorch's convention
  • Unified several environment flags into monai.utils.misc.MONAIEnvVars
  • Simplified __str__ implementation of MetaTensor instead of relying on the __repr__ implementation

Fixed

  • Improved error messages when both monai and monai-weekly are pip-installed
  • Inconsistent pseudo number sequences for different num_workers in DataLoader
  • Issue of repeated sequences for monai.data.ShuffleBuffer
  • Issue of not preserving the physical extent in monai.transforms.Spacing
  • Issue of using inception_v3 as the backbone of monai.networks.nets.TorchVisionFCModel
  • Index device issue for monai.transforms.Crop
  • Efficiency issue when converting the array dtype and contiguous memory

Deprecated

  • Addchannel and AsChannelFirst transforms in favor of EnsureChannelFirst
  • monai.apps.pathology.data components in favor of the corresponding components from monai.data
  • monai.apps.pathology.handlers in favor of the corresponding components from monai.handlers

Removed

  • Status section in the pull request template in favor of the pull request draft mode
  • monai.engines.BaseWorkflow
  • ndim and dimensions arguments in favor of spatial_dims
  • n_classes, num_classes arguments in AsDiscrete in favor of to_onehot
  • logit_thresh, threshold_values arguments in AsDiscrete in favor of threshold
  • torch.testing.assert_allclose in favor of tests.utils.assert_allclose

0.9.1 - 2022-07-22

Added

  • Support of monai.data.MetaTensor as core data structure across the modules
  • Support of inverse in array-based transforms
  • monai.apps.TciaDataset APIs for The Cancer Imaging Archive (TCIA) datasets, including a pydicom-backend reader
  • Initial release of components for MRI reconstruction in monai.apps.reconstruction, including various FFT utilities
  • New metrics and losses, including mean IoU and structural similarity index
  • monai.utils.StrEnum class to simplify Enum-based type annotations

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:22.06-py3 from nvcr.io/nvidia/pytorch:22.04-py3
  • Optionally depend on PyTorch-Ignite v0.4.9 instead of v0.4.8

Fixed

  • Fixed issue of not skipping post activations in Convolution when input arguments are None
  • Fixed issue of ignoring dropout arguments in DynUNet
  • Fixed issue of hard-coded non-linear function in ViT classification head
  • Fixed issue of in-memory config overriding with monai.bundle.ConfigParser.update
  • 2D SwinUNETR incompatible shapes
  • Fixed issue with monai.bundle.verify_metadata not raising exceptions
  • Fixed issue with monai.transforms.GridPatch returns inconsistent type location when padding
  • Wrong generalized Dice score metric when denominator is 0 but prediction is non-empty
  • Docker image build error due to NGC CLI upgrade
  • Optional default value when parsing id unavailable in a ConfigParser instance
  • Immutable data input for the patch-based WSI datasets

Deprecated

  • *_transforms and *_meta_dict fields in dictionary-based transforms in favor of MetaTensor
  • meta_keys, meta_key_postfix, src_affine arguments in various transforms, in favor of MetaTensor
  • AsChannelFirst and AddChannel, in favor of EnsureChannelFirst transform

0.9.0 - 2022-06-08

Added

  • monai.bundle primary module with a ConfigParser and command-line interfaces for configuration-based workflows
  • Initial release of MONAI bundle specification
  • Initial release of volumetric image detection modules including bounding boxes handling, RetinaNet-based architectures
  • API preview monai.data.MetaTensor
  • Unified monai.data.image_writer to support flexible IO backends including an ITK writer
  • Various new network blocks and architectures including SwinUNETR
  • DeepEdit interactive training/validation workflow
  • NuClick interactive segmentation transforms
  • Patch-based readers and datasets for whole-slide imaging
  • New losses and metrics including SurfaceDiceMetric, GeneralizedDiceFocalLoss
  • New pre-processing transforms including RandIntensityRemap, SpatialResample
  • Multi-output and slice-based inference for SlidingWindowInferer
  • NrrdReader for NRRD file support
  • Torchscript utilities to save models with meta information
  • Gradient-based visualization module SmoothGrad
  • Automatic regular source code scanning for common vulnerabilities and coding errors

Changed

  • Simplified TestTimeAugmentation using de-collate and invertible transforms APIs
  • Refactoring monai.apps.pathology modules into monai.handlers and monai.transforms
  • Flexible activation and normalization layers for TopologySearch and DiNTS
  • Anisotropic first layers for 3D resnet
  • Flexible ordering of activation, normalization in UNet
  • Enhanced performance of connected-components analysis using Cupy
  • INSTANCE_NVFUSER for enhanced performance in 3D instance norm
  • Support of string representation of dtype in convert_data_type
  • Added new options iteration_log, iteration_log to the logging handlers
  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:22.04-py3 from nvcr.io/nvidia/pytorch:21.10-py3
  • collate_fn generates more data-related debugging info with dev_collate

Fixed

  • Unified the spellings of "meta data", "metadata", "meta-data" to "metadata"
  • Various inaccurate error messages when input data are in invalid shapes
  • Issue of computing symmetric distances in compute_average_surface_distance
  • Unnecessary layer self.conv3 in UnetResBlock
  • Issue of torchscript compatibility for ViT and self-attention blocks
  • Issue of hidden layers in UNETR
  • allow_smaller in spatial cropping transforms
  • Antialiasing in Resize
  • Issue of bending energy loss value at different resolutions
  • kwargs_read_csv in CSVDataset
  • In-place modification in Metric reduction
  • wrap_array for ensure_tuple
  • Contribution guide for introducing new third-party dependencies

Removed

  • Deprecated nifti_writer, png_writer in favor of monai.data.image_writer
  • Support for PyTorch 1.6

0.8.1 - 2022-02-16

Added

  • Support of matshow3d with given channel_dim
  • Support of spatial 2D for ViTAutoEnc
  • Support of dataframe object input in CSVDataset
  • Support of tensor backend for Orientation
  • Support of configurable delimiter for CSV writers
  • A base workflow API
  • DataFunc API for dataset-level preprocessing
  • write_scalar API for logging with additional engine parameter in TensorBoardHandler
  • Enhancements for NVTX Range transform logging
  • Enhancements for set_determinism
  • Performance enhancements in the cache-based datasets
  • Configurable metadata keys for monai.data.DatasetSummary
  • Flexible kwargs for WSIReader
  • Logging for the learning rate schedule handler
  • GridPatchDataset as subclass of monai.data.IterableDataset
  • is_onehot option in KeepLargestConnectedComponent
  • channel_dim in the image readers and support of stacking images with channels
  • Skipping workflow run if epoch length is 0
  • Enhanced CacheDataset to avoid duplicated cache items
  • save_state utility function

Changed

  • Optionally depend on PyTorch-Ignite v0.4.8 instead of v0.4.6
  • monai.apps.mmars.load_from_mmar defaults to the latest version

Fixed

  • Issue when caching large items with pickle
  • Issue of hard-coded activation functions in ResBlock
  • Issue of create_file_name assuming local disk file creation
  • Issue of WSIReader when the backend is TiffFile
  • Issue of deprecated_args when the function signature contains kwargs
  • Issue of channel_wise computations for the intensity-based transforms
  • Issue of inverting OneOf
  • Issue of removing temporary caching file for the persistent dataset
  • Error messages when reader backend is not available
  • Output type casting issue in ScaleIntensityRangePercentiles
  • Various docstring typos and broken URLs
  • mode in the evaluator engine
  • Ordering of Orientation and Spacing in monai.apps.deepgrow.dataset

Removed

  • Additional deep supervision modules in DynUnet
  • Deprecated reduction argument for ContrastiveLoss
  • Decollate warning in Workflow
  • Unique label exception in ROCAUCMetric
  • Logger configuration logic in the event handlers

0.8.0 - 2021-11-25

Added

  • Overview of new features in v0.8
  • Network modules for differentiable neural network topology search (DiNTS)
  • Multiple Instance Learning transforms and models for digital pathology WSI analysis
  • Vision transformers for self-supervised representation learning
  • Contrastive loss for self-supervised learning
  • Finalized major improvements of 200+ components in monai.transforms to support input and backend in PyTorch and NumPy
  • Initial registration module benchmarking with GlobalMutualInformationLoss as an example
  • monai.transforms documentation with visual examples and the utility functions
  • Event handler for MLfLow integration
  • Enhanced data visualization functions including blend_images and matshow3d
  • RandGridDistortion and SmoothField in monai.transforms
  • Support of randomized shuffle buffer in iterable datasets
  • Performance review and enhancements for data type casting
  • Cumulative averaging API with distributed environment support
  • Module utility functions including require_pkg and pytorch_after
  • Various usability enhancements such as allow_smaller when sampling ROI and wrap_sequence when casting object types
  • tifffile support in WSIReader
  • Regression tests for the fast training workflows
  • Various tutorials and demos including educational contents at MONAI Bootcamp 2021

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:21.10-py3 from nvcr.io/nvidia/pytorch:21.08-py3
  • Decoupled TraceKeys and TraceableTransform APIs from InvertibleTransform
  • Skipping affine-based resampling when resample=False in NiftiSaver
  • Deprecated threshold_values: bool and num_classes: int in AsDiscrete
  • Enhanced apply_filter for spatially 1D, 2D and 3D inputs with non-separable kernels
  • Logging with logging in downloading and model archives in monai.apps
  • API documentation site now defaults to stable instead of latest
  • skip-magic-trailing-comma in coding style enforcements
  • Pre-merge CI pipelines now include unit tests with Nvidia Ampere architecture

Removed

  • Support for PyTorch 1.5
  • The deprecated DynUnetV1 and the related network blocks
  • GitHub self-hosted CI/CD pipelines for package releases

Fixed

  • Support of path-like objects as file path inputs in most modules
  • Issue of decollate_batch for dictionary of empty lists
  • Typos in documentation and code examples in various modules
  • Issue of no available keys when allow_missing_keys=True for the MapTransform
  • Issue of redundant computation when normalization factors are 0.0 and 1.0 in ScaleIntensity
  • Incorrect reports of registered readers in ImageReader
  • Wrong numbering of iterations in StatsHandler
  • Naming conflicts in network modules and aliases
  • Incorrect output shape when reduction="none" in FocalLoss
  • Various usability issues reported by users

0.7.0 - 2021-09-24

Added

  • Overview of new features in v0.7
  • Initial phase of major usability improvements in monai.transforms to support input and backend in PyTorch and NumPy
  • Performance enhancements, with profiling and tuning guides for typical use cases
  • Reproducing training modules and workflows of state-of-the-art Kaggle competition solutions
  • 24 new transforms, including
    • OneOf meta transform
    • DeepEdit guidance signal transforms for interactive segmentation
    • Transforms for self-supervised pre-training
    • Integration of NVIDIA Tools Extension (NVTX)
    • Integration of cuCIM
    • Stain normalization and contextual grid for digital pathology
  • Transchex network for vision-language transformers for chest X-ray analysis
  • DatasetSummary utility in monai.data
  • WarmupCosineSchedule
  • Deprecation warnings and documentation support for better backwards compatibility
  • Padding with additional kwargs and different backend API
  • Additional options such as dropout and norm in various networks and their submodules

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:21.08-py3 from nvcr.io/nvidia/pytorch:21.06-py3
  • Deprecated input argument n_classes, in favor of num_classes
  • Deprecated input argument dimensions and ndims, in favor of spatial_dims
  • Updated the Sphinx-based documentation theme for better readability
  • NdarrayTensor type is replaced by NdarrayOrTensor for simpler annotations
  • Self-attention-based network blocks now support both 2D and 3D inputs

Removed

  • The deprecated TransformInverter, in favor of monai.transforms.InvertD
  • GitHub self-hosted CI/CD pipelines for nightly and post-merge tests
  • monai.handlers.utils.evenly_divisible_all_gather
  • monai.handlers.utils.string_list_all_gather

Fixed

  • A Multi-thread cache writing issue in LMDBDataset
  • Output shape convention inconsistencies of the image readers
  • Output directory and file name flexibility issue for NiftiSaver, PNGSaver
  • Requirement of the label field in test-time augmentation
  • Input argument flexibility issues for ThreadDataLoader
  • Decoupled Dice and CrossEntropy intermediate results in DiceCELoss
  • Improved documentation, code examples, and warning messages in various modules
  • Various usability issues reported by users

0.6.0 - 2021-07-08

Added

  • 10 new transforms, a masked loss wrapper, and a NetAdapter for transfer learning
  • APIs to load networks and pre-trained weights from Clara Train Medical Model ARchives (MMARs)
  • Base metric and cumulative metric APIs, 4 new regression metrics
  • Initial CSV dataset support
  • Decollating mini-batch as the default first postprocessing step, Migrating your v0.5 code to v0.6 wiki shows how to adapt to the breaking changes
  • Initial backward compatibility support via monai.utils.deprecated
  • Attention-based vision modules and UNETR for segmentation
  • Generic module loaders and Gaussian mixture models using the PyTorch JIT compilation
  • Inverse of image patch sampling transforms
  • Network block utilities get_[norm, act, dropout, pool]_layer
  • unpack_items mode for apply_transform and Compose
  • New event INNER_ITERATION_STARTED in the deepgrow interactive workflow
  • set_data API for cache-based datasets to dynamically update the dataset content
  • Fully compatible with PyTorch 1.9
  • --disttests and --min options for runtests.sh
  • Initial support of pre-merge tests with Nvidia Blossom system

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:21.06-py3 from nvcr.io/nvidia/pytorch:21.04-py3
  • Optionally depend on PyTorch-Ignite v0.4.5 instead of v0.4.4
  • Unified the demo, tutorial, testing data to the project shared drive, and Project-MONAI/MONAI-extra-test-data
  • Unified the terms: post_transform is renamed to postprocessing, pre_transform is renamed to preprocessing
  • Unified the postprocessing transforms and event handlers to accept the "channel-first" data format
  • evenly_divisible_all_gather and string_list_all_gather moved to monai.utils.dist

Removed

  • Support of 'batched' input for postprocessing transforms and event handlers
  • TorchVisionFullyConvModel
  • set_visible_devices utility function
  • SegmentationSaver and TransformsInverter handlers

Fixed

  • Issue of handling big-endian image headers
  • Multi-thread issue for non-random transforms in the cache-based datasets
  • Persistent dataset issue when multiple processes sharing a non-exist cache location
  • Typing issue with Numpy 1.21.0
  • Loading checkpoint with both model and optmizier using CheckpointLoader when strict_shape=False
  • SplitChannel has different behaviour depending on numpy/torch inputs
  • Transform pickling issue caused by the Lambda functions
  • Issue of filtering by name in generate_param_groups
  • Inconsistencies in the return value types of class_activation_maps
  • Various docstring typos
  • Various usability enhancements in monai.transforms

0.5.3 - 2021-05-28

Changed

  • Project default branch renamed to dev from master
  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:21.04-py3 from nvcr.io/nvidia/pytorch:21.02-py3
  • Enhanced type checks for the iteration_metric handler
  • Enhanced PersistentDataset to use tempfile during caching computation
  • Enhanced various info/error messages
  • Enhanced performance of RandAffine
  • Enhanced performance of SmartCacheDataset
  • Optionally requires cucim when the platform is Linux
  • Default device of TestTimeAugmentation changed to cpu

Fixed

  • Download utilities now provide better default parameters
  • Duplicated key_transforms in the patch-based transforms
  • A multi-GPU issue in ClassificationSaver
  • A default meta_data issue in SpacingD
  • Dataset caching issue with the persistent data loader workers
  • A memory issue in permutohedral_cuda
  • Dictionary key issue in CopyItemsd
  • box_start and box_end parameters for deepgrow SpatialCropForegroundd
  • Tissue mask array transpose issue in MaskedInferenceWSIDataset
  • Various type hint errors
  • Various docstring typos

Added

  • Support of to_tensor and device arguments for TransformInverter
  • Slicing options with SpatialCrop
  • Class name alias for the networks for backward compatibility
  • k_divisible option for CropForeground
  • map_items option for Compose
  • Warnings of inf and nan for surface distance computation
  • A print_log flag to the image savers
  • Basic testing pipelines for Python 3.9

0.5.0 - 2021-04-09

Added

  • Overview document for feature highlights in v0.5.0
  • Invertible spatial transforms
    • InvertibleTransform base APIs
    • Batch inverse and decollating APIs
    • Inverse of Compose
    • Batch inverse event handling
    • Test-time augmentation as an application
  • Initial support of learning-based image registration:
    • Bending energy, LNCC, and global mutual information loss
    • Fully convolutional architectures
    • Dense displacement field, dense velocity field computation
    • Warping with high-order interpolation with C++/CUDA implementations
  • Deepgrow modules for interactive segmentation:
    • Workflows with simulations of clicks
    • Distance-based transforms for guidance signals
  • Digital pathology support:
    • Efficient whole slide imaging IO and sampling with Nvidia cuCIM and SmartCache
    • FROC measurements for lesion
    • Probabilistic post-processing for lesion detection
    • TorchVision classification model adaptor for fully convolutional analysis
  • 12 new transforms, grid patch dataset, ThreadDataLoader, EfficientNets B0-B7
  • 4 iteration events for the engine for finer control of workflows
  • New C++/CUDA extensions:
    • Conditional random field
    • Fast bilateral filtering using the permutohedral lattice
  • Metrics summary reporting and saving APIs
  • DiceCELoss, DiceFocalLoss, a multi-scale wrapper for segmentation loss computation
  • Data loading utilities:
    • decollate_batch
    • PadListDataCollate with inverse support
  • Support of slicing syntax for Dataset
  • Initial Torchscript support for the loss modules
  • Learning rate finder
  • Allow for missing keys in the dictionary-based transforms
  • Support of checkpoint loading for transfer learning
  • Various summary and plotting utilities for Jupyter notebooks
  • Contributor Covenant Code of Conduct
  • Major CI/CD enhancements covering the tutorial repository
  • Fully compatible with PyTorch 1.8
  • Initial nightly CI/CD pipelines using Nvidia Blossom Infrastructure

Changed

  • Enhanced list_data_collate error handling
  • Unified iteration metric APIs
  • densenet* extensions are renamed to DenseNet*
  • se_res* network extensions are renamed to SERes*
  • Transform base APIs are rearranged into compose, inverse, and transform
  • _do_transform flag for the random augmentations is unified via RandomizableTransform
  • Decoupled post-processing steps, e.g. softmax, to_onehot_y, from the metrics computations
  • Moved the distributed samplers to monai.data.samplers from monai.data.utils
  • Engine's data loaders now accept generic iterables as input
  • Workflows now accept additional custom events and state properties
  • Various type hints according to Numpy 1.20
  • Refactored testing utility runtests.sh to have --unittest and --net (integration tests) options
  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:21.02-py3 from nvcr.io/nvidia/pytorch:20.10-py3
  • Docker images are now built with self-hosted environments
  • Primary contact email updated to [email protected]
  • Now using GitHub Discussions as the primary communication forum

Removed

  • Compatibility tests for PyTorch 1.5.x
  • Format specific loaders, e.g. LoadNifti, NiftiDataset
  • Assert statements from non-test files
  • from module import * statements, addressed flake8 F403

Fixed

  • Uses American English spelling for code, as per PyTorch
  • Code coverage now takes multiprocessing runs into account
  • SmartCache with initial shuffling
  • ConvertToMultiChannelBasedOnBratsClasses now supports channel-first inputs
  • Checkpoint handler to save with non-root permissions
  • Fixed an issue for exiting the distributed unit tests
  • Unified DynUNet to have single tensor output w/o deep supervision
  • SegmentationSaver now supports user-specified data types and a squeeze_end_dims flag
  • Fixed *Saver event handlers output filenames with a data_root_dir option
  • Load image functions now ensure little-endian
  • Fixed the test runner to support regex-based test case matching
  • Usability issues in the event handlers

0.4.0 - 2020-12-15

Added

  • Overview document for feature highlights in v0.4.0
  • Torchscript support for the net modules
  • New networks and layers:
    • Discrete Gaussian kernels
    • Hilbert transform and envelope detection
    • Swish and mish activation
    • Acti-norm-dropout block
    • Upsampling layer
    • Autoencoder, Variational autoencoder
    • FCNet
  • Support of initialisation from pretrained weights for densenet, senet, multichannel AHNet
  • Layer-wise learning rate API
  • New model metrics and event handlers based on occlusion sensitivity, confusion matrix, surface distance
  • CAM/GradCAM/GradCAM++
  • File format-agnostic image loader APIs with Nibabel, ITK readers
  • Enhancements for dataset partition, cross-validation APIs
  • New data APIs:
    • LMDB-based caching dataset
    • Cache-N-transforms dataset
    • Iterable dataset
    • Patch dataset
  • Weekly PyPI release
  • Fully compatible with PyTorch 1.7
  • CI/CD enhancements:
    • Skipping, speed up, fail fast, timed, quick tests
    • Distributed training tests
    • Performance profiling utilities
  • New tutorials and demos:
    • Autoencoder, VAE tutorial
    • Cross-validation demo
    • Model interpretability tutorial
    • COVID-19 Lung CT segmentation challenge open-source baseline
    • Threadbuffer demo
    • Dataset partitioning tutorial
    • Layer-wise learning rate demo
    • MONAI Bootcamp 2020

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:20.10-py3 from nvcr.io/nvidia/pytorch:20.08-py3

Backwards Incompatible Changes

  • monai.apps.CVDecathlonDataset is extended to a generic monai.apps.CrossValidation with an dataset_cls option
  • Cache dataset now requires a monai.transforms.Compose instance as the transform argument
  • Model checkpoint file name extensions changed from .pth to .pt
  • Readers' get_spatial_shape returns a numpy array instead of list
  • Decoupled postprocessing steps such as sigmoid, to_onehot_y, mutually_exclusive, logit_thresh from metrics and event handlers, the postprocessing steps should be used before calling the metrics methods
  • ConfusionMatrixMetric and DiceMetric computation now returns an additional not_nans flag to indicate valid results
  • UpSample optional mode now supports "deconv", "nontrainable", "pixelshuffle"; interp_mode is only used when mode is "nontrainable"
  • SegResNet optional upsample_mode now supports "deconv", "nontrainable", "pixelshuffle"
  • monai.transforms.Compose class inherits monai.transforms.Transform
  • In Rotate, Rotated, RandRotate, RandRotated transforms, the angle related parameters are interpreted as angles in radians instead of degrees.
  • SplitChannel and SplitChanneld moved from transforms.post to transforms.utility

Removed

  • Support of PyTorch 1.4

Fixed

  • Enhanced loss functions for stability and flexibility
  • Sliding window inference memory and device issues
  • Revised transforms:
    • Normalize intensity datatype and normalizer types
    • Padding modes for zoom
    • Crop returns coordinates
    • Select items transform
    • Weighted patch sampling
    • Option to keep aspect ratio for zoom
  • Various CI/CD issues

0.3.0 - 2020-10-02

Added

  • Overview document for feature highlights in v0.3.0
  • Automatic mixed precision support
  • Multi-node, multi-GPU data parallel model training support
  • 3 new evaluation metric functions
  • 11 new network layers and blocks
  • 6 new network architectures
  • 14 new transforms, including an I/O adaptor
  • Cross validation module for DecathlonDataset
  • Smart Cache module in dataset
  • monai.optimizers module
  • monai.csrc module
  • Experimental feature of ImageReader using ITK, Nibabel, Numpy, Pillow (PIL Fork)
  • Experimental feature of differentiable image resampling in C++/CUDA
  • Ensemble evaluator module
  • GAN trainer module
  • Initial cross-platform CI environment for C++/CUDA code
  • Code style enforcement now includes isort and clang-format
  • Progress bar with tqdm

Changed

  • Now fully compatible with PyTorch 1.6
  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:20.08-py3 from nvcr.io/nvidia/pytorch:20.03-py3
  • Code contributions now require signing off on the Developer Certificate of Origin (DCO)
  • Major work in type hinting finished
  • Remote datasets migrated to Open Data on AWS
  • Optionally depend on PyTorch-Ignite v0.4.2 instead of v0.3.0
  • Optionally depend on torchvision, ITK
  • Enhanced CI tests with 8 new testing environments

Removed

Fixed

  • dense_patch_slices incorrect indexing
  • Data type issue in GeneralizedWassersteinDiceLoss
  • ZipDataset return value inconsistencies
  • sliding_window_inference indexing and device issues
  • importing monai modules may cause namespace pollution
  • Random data splits issue in DecathlonDataset
  • Issue of randomising a Compose transform
  • Various issues in function type hints
  • Typos in docstring and documentation
  • PersistentDataset issue with existing file folder
  • Filename issue in the output writers

0.2.0 - 2020-07-02

Added

  • Overview document for feature highlights in v0.2.0
  • Type hints and static type analysis support
  • MONAI/research folder
  • monai.engine.workflow APIs for supervised training
  • monai.inferers APIs for validation and inference
  • 7 new tutorials and examples
  • 3 new loss functions
  • 4 new event handlers
  • 8 new layers, blocks, and networks
  • 12 new transforms, including post-processing transforms
  • monai.apps.datasets APIs, including MedNISTDataset and DecathlonDataset
  • Persistent caching, ZipDataset, and ArrayDataset in monai.data
  • Cross-platform CI tests supporting multiple Python versions
  • Optional import mechanism
  • Experimental features for third-party transforms integration

Changed

For more details please visit the project wiki

  • Core modules now require numpy >= 1.17
  • Categorized monai.transforms modules into crop and pad, intensity, IO, post-processing, spatial, and utility.
  • Most transforms are now implemented with PyTorch native APIs
  • Code style enforcement and automated formatting workflows now use autopep8 and black
  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:20.03-py3 from nvcr.io/nvidia/pytorch:19.10-py3
  • Enhanced local testing tools
  • Documentation website domain changed to https://docs.monai.io

Removed

  • Support of Python < 3.6
  • Automatic installation of optional dependencies including pytorch-ignite, nibabel, tensorboard, pillow, scipy, scikit-image

Fixed

  • Various issues in type and argument names consistency
  • Various issues in docstring and documentation site
  • Various issues in unit and integration tests
  • Various issues in examples and notebooks

0.1.0 - 2020-04-17

Added

  • Public alpha source code release under the Apache 2.0 license (highlights)
  • Various tutorials and examples
    • Medical image classification and segmentation workflows
    • Spacing/orientation-aware preprocessing with CPU/GPU and caching
    • Flexible workflows with PyTorch Ignite and Lightning
  • Various GitHub Actions
    • CI/CD pipelines via self-hosted runners
    • Documentation publishing via readthedocs.org
    • PyPI package publishing
  • Contributing guidelines
  • A project logo and badges