Skip to content

Releases: Project-MONAI/MONAI

1.4.0

17 Oct 00:54
Compare
Choose a tag to compare

Added

  • Implemented Conjugate Gradient Solver to generate confidence maps. (#7876)
  • Added norm parameter to ResNet (#7752, #7805)
  • Introduced alpha parameter to DiceFocalLoss for improved flexibility (#7841)
  • Integrated Tailored ControlNet Implementations (#7875)
  • Integrated Tailored Auto-Encoder Model (#7861)
  • Integrated Tailored Diffusion U-Net Model (7867)
  • Added Maisi morphological functions (#7893)
  • Added support for downloading bundles from NGC private registry (#7907, #7929, #8076)
  • Integrated generative refactor into the core (#7886, #7962)
  • Made ViT and UNETR models compatible with TorchScript (#7937)
  • Implemented post-download checks for MONAI bundles and compatibility warnings (#7938)
  • Added NGC prefix argument when downloading bundles (7974)
  • Added flash attention support in the attention block for improved performance (#7977)
  • Enhanced MLPBlock for compatibility with VISTA-3D (#7995)
  • Added support for Neighbor-Aware Calibration Loss (NACL) for calibrated models in segmentation tasks (#7819)
  • Added label_smoothing parameter to DiceCELoss for enhanced model calibration (#8000)
  • Add include_fc and use_combined_linear argument in the SABlock (#7996)
  • Added utilities, networks, and an inferer specific to VISTA-3D (#7999, #7987, #8047, #8059, #8021)
  • Integrated a new network, CellSamWrapper, for cell-based applications (#7981)
  • Introduced WriteFileMapping transform to map between input image paths and their corresponding output paths (#7769)
  • Added TrtHandler to accelerate models using TensorRT (#7990, #8064)
  • Added box and points conversion transforms for more flexible spatial manipulation (#8053)
  • Enhanced RandSimulateLowResolutiond transform with deterministic support (#8057)
  • Added a contiguous argument to the Fourier class to facilitate contiguous tensor outputs (#7969)
  • Allowed ApplyTransformToPointsd to receive a sequence of reference keys for more versatile point manipulation (#8063)
  • Made MetaTensor an optional print in DataStats and DataStatsd for more concise logging (#7814)

misc.

  • Refactored Dataset to utilize Compose for handling transforms. (#7784)
  • Combined map_classes_to_indices and generate_label_classes_crop_centers into a unified function (#7712)
  • Introduced metadata schema directly into the codebase for improved structure and validation (#7409)
  • Renamed optional_packages_version to required_packages_version for clearer package dependency management. (#7253)
  • Replaced pkg_resources with the more modern packaging module for package handling (#7953)
  • Refactored MAISI-related networks to align with the new generative components (#7989, #7993, #8005)
  • Added a badge displaying monthly download statistics to enhance project visibility (#7891)

Fixed

transforms

  • Ensured deterministic behavior in MixUp, CutMix, and CutOut transforms (#7813)
  • Applied a minor correction to AsDiscrete transform (#7984)
  • Fixed handling of integer weightmaps in RandomWeightedCrop (#8097)
  • Resolved data type bug in ScaleIntensityRangePercentile (#8109)

data

  • Fixed negative strides issue in the NrrdReader (#7809)
  • Addressed wsireader issue with retrieving MPP (7921)
  • Ensured location is returned as a tuple in wsireader (#8007)
  • Corrected interpretation of space directions in nrrd reader (#8091)

metrics and losses

  • Improved memory management for NACLLoss (#8020)
  • Fixed reduction logic in GeneralizedDiceScore (#7970)

networks

  • Resolved issue with loading pre-trained weights in ResNet (#7924)
  • Fixed error where torch.device object had no attribute gpu_id during TensorRT export (#8019)
  • Corrected function for loading older weights in DiffusionModelUNet (#8031)
  • Switched to torch_tensorrt.Device instead of torch.device during TensorRT compilation (#8051)

engines and handlers

  • Attempted to resolve the "experiment already exists" issue in MLFlowHandler (#7916)
  • Refactored the model export process for conversion and saving (#7934)

misc.

  • Adjusted requirements to exclude version 2.0 (#7859)
  • Updated deprecated scipy.ndimage namespaces in optional imports (#7847, #7897)
  • Resolved load_module() deprecation in Python 3.12 (#7881)
  • Fixed Ruff type check issues (#7885)
  • Cleaned disk space in the conda test pipeline (#7902)
  • Replaced deprecated pkgutil.find_loader usage (#7906)
  • Enhanced docstrings in various modules (#7913, #8055)
  • Test cases fixing (#7905, #7794, #7808)
  • Fix mypy issue introduced in 1.11.0 (#7941)
  • Cleaned up warnings during test collection (#7914)
  • Fix incompatible types in assignment issue (#7950)
  • Fix outdated link in the docs (#7971)
  • Addressed CI issues (#7983, #8013)
  • Fix module can not import correctly issue (#8015)
  • Fix AttributeError when using torch.min and max (#8041)
  • Ensure synchronization by adding cuda.synchronize (#8058)
  • Ignore warning from nptyping as workaround (#8062)
  • Suppress deprecated warning when importing monai (#8067)
  • Fix link in test bundle under MONAI-extra-test-data (#8092)

Changed

  • Base Docker image upgraded to nvcr.io/nvidia/pytorch:24.08-py3 from nvcr.io/nvidia/pytorch:23.08-py3
  • Change blossom-ci to ACL security format (#7843)
  • Move PyType test to weekly test (#8025)
  • Adjusted to meet Numpy 2.0 requirements (#7857)

Deprecated

  • Dropped support for Python 3.8 (#7909)
  • Remove deprecated arguments and class for v1.4 (#8079)

Removed

  • Remove use of deprecated python 3.12 strtobool (#7900)
  • Removed the pipeline for publishing to testpypi (#8086)
  • Cleaning up some very old and now obsolete infrastructure (#8113, #8118, #8121)

New Contributors

Full Changelog: 1.3.2...1.4.0

1.3.2

26 Jun 07:23
59a7211
Compare
Choose a tag to compare

Fixed

misc.

  • Updated Numpy version constraint to < 2.0 (#7859)

1.3.1

21 May 08:24
96bfda0
Compare
Choose a tag to compare

Added

  • Support for by_measure argument in RemoveSmallObjects (#7137)
  • Support for pretrained flag in ResNet (#7095)
  • Support for uploading and downloading bundles to and from the Hugging Face Hub (#6454)
  • Added weight parameter in DiceLoss to apply weight to voxels of each class (#7158)
  • Support for returning dice for each class in DiceMetric (#7163)
  • Introduced ComponentStore for storage purposes (#7159)
  • Added utilities used in MONAI Generative (#7134)
  • Enabled Python 3.11 support for convert_to_torchscript and convert_to_onnx (#7182)
  • Support for MLflow in AutoRunner (#7176)
  • fname_regex option in PydicomReader (#7181)
  • Allowed setting AutoRunner parameters from config (#7175)
  • VoxelMorphUNet and VoxelMorph (#7178)
  • Enabled cache option in GridPatchDataset (#7180)
  • Introduced class_labels option in write_metrics_reports for improved readability (#7249)
  • DiffusionLoss for image registration task (#7272)
  • Supported specifying filename in Saveimage (#7318)
  • Compile support in SupervisedTrainer and SupervisedEvaluator (#7375)
  • mlflow_experiment_name support in Auto3DSeg (#7442)
  • Arm support (#7500)
  • BarlowTwinsLoss for representation learning (#7530)
  • SURELoss and ConjugateGradient for diffusion models (#7308)
  • Support for CutMix, CutOut, and MixUp augmentation techniques (#7198)
  • meta_file and logging_file options to BundleWorkflow (#7549)
  • properties_path option to BundleWorkflow for customized properties (#7542)
  • Support for both soft and hard clipping in ClipIntensityPercentiles (#7535)
  • Support for not saving artifacts in MLFlowHandler (#7604)
  • Support for multi-channel images in PerceptualLoss (#7568)
  • Added ResNet backbone for FlexibleUNet (#7571)
  • Introduced dim_head option in SABlock to set dimensions for each head (#7664)
  • Direct links to github source code to docs (#7738, #7779)

misc.

  • Refactored list_data_collate and collate_meta_tensor to utilize the latest PyTorch API (#7165)
  • Added str method in Metric base class (#7487)
  • Made enhancements for testing files (#7662, #7670, #7663, #7671, #7672)
  • Improved documentation for bundles (#7116)

Fixed

transforms

  • Addressed issue where lazy mode was ignored in SpatialPadd (#7316)
  • Tracked applied operations in ImageFilter (#7395)
  • Warnings are now given only if missing class is not set to 0 in generate_label_classes_crop_centers (#7602)
  • Input is now always converted to C-order in distance_transform_edt to ensure consistent behavior (#7675)

data

  • Modified .npz file behavior to use keys in NumpyReader (#7148)
  • Handled corrupted cached files in PersistentDataset (#7244)
  • Corrected affine update in NrrdReader (#7415)

metrics and losses

  • Addressed precision issue in get_confusion_matrix (#7187)
  • Harmonized and clarified documentation and tests for dice losses variants (#7587)

networks

  • Removed hard-coded spatial_dims in SwinTransformer (#7302)
  • Fixed learnable position_embeddings in PatchEmbeddingBlock (#7564, #7605)
  • Removed memory_pool_limit in TRT config (#7647)
  • Propagated kernel_size to ConvBlocks within AttentionUnet (#7734)
  • Addressed hard-coded activation layer in ResNet (#7749)

bundle

  • Resolved bundle download issue (#7280)
  • Updated bundle_root directory for NNIGen (#7586)
  • Checked for num_fold and failed early if incorrect (#7634)
  • Enhanced logging logic in ConfigWorkflow (#7745)

misc.

  • Enabled chaining in Auto3DSeg CLI (#7168)
  • Addressed useless error message in nnUNetV2Runner (#7217)
  • Resolved typing and deprecation issues in Mypy (#7231)
  • Quoted $PY_EXE variable to handle Python path that contains spaces in Bash (#7268)
  • Improved documentation, code examples, and warning messages in various modules (#7234, #7213, #7271, #7326, #7569, #7584)
  • Fixed typos in various modules (#7321, #7322, #7458, #7595, #7612)
  • Enhanced docstrings in various modules (#7245, #7381, #7746)
  • Handled error when data is on CPU in DataAnalyzer (#7310)
  • Updated version requirements for third-party packages (#7343, #7344, #7384, #7448, #7659, #7704, #7744, #7742, #7780)
  • Addressed incorrect slice compute in ImageStats (#7374)
  • Avoided editing a loop's mutable iterable to address B308 (#7397)
  • Fixed issue with CUDA_VISIBLE_DEVICES setting being ignored (#7408, #7581)
  • Avoided changing Python version in CICD (#7424)
  • Renamed partial to callable in instantiate mode (#7413)
  • Imported AttributeError for Python 3.12 compatibility (#7482)
  • Updated nnUNetV2Runner to support nnunetv2 2.2 (#7483)
  • Used uint8 instead of int8 in LabelStats (#7489)
  • Utilized subprocess for nnUNet training (#7576)
  • Addressed deprecated warning in ruff (#7625)
  • Fixed downloading failure on FIPS machine (#7698)
  • Updated torch_tensorrt compile parameters to avoid warning (#7714)
  • Restrict Auto3DSeg fold input based on datalist (#7778)

Changed

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

Removed

  • Removed unrecommended star-arg unpacking after a keyword argument, addressed B026 (#7262)
  • Skipped old PyTorch version test for SwinUNETR (#7266)
  • Dropped docker build workflow and migrated to Nvidia Blossom system (#7450)
  • Dropped Python 3.8 test on quick-py3 workflow (#7719)

1.3.0

12 Oct 17:37
865972f
Compare
Choose a tag to compare

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

08 Jun 17:16
c33f1ba
Compare
Choose a tag to compare

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

19 Dec 21:05
a2ec375
Compare
Choose a tag to compare

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

24 Oct 17:54
8271a19
Compare
Choose a tag to compare

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

16 Sep 14:56
1700933
Compare
Choose a tag to compare

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

25 Jul 18:28
356d2d2
Compare
Choose a tag to compare

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

13 Jun 18:12
af0e0e9
Compare
Choose a tag to compare

Added

  • monai.bundle primary module with a ConfigParser and command-line interfaces for config-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