Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 63 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,67 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).

## [Unreleased]

## [1.6.0] - 2026-05-??

## What's Changed
### Added
* Add `MAPEMetric` for regression evaluation (#8686)
* Add `CalibrationErrorMetric` and `CalibrationError` handler (#8707)
* Add `AUC-Margin Loss` for AUROC optimization (#8719)
* Add `MCCLoss` (Matthews Correlation Coefficient loss) (#8785)
* Add `EmbeddingCollapseMetric` for detecting representational collapse (#8815)
* Add 3D support and confusion matrix output to `PanopticQualityMetric` (#8684)
* Add `GradientAccumulation` utility for `SupervisedTrainer` (#8763)
* Add nested dot-notation access to `ConfigParser` (#8858)
* Add `allow_pickle` argument to relevant loaders (#8875)
* Add configurable GD-enhancing tumor label in `ConvertToMultiChannelBasedOnBratsClasses` (#8779)
* Enable global coordinates in spatial crop transforms (#8794)
* Generalize `TestTimeAugmentation` to non-spatial predictions (#8715)
* Add parameter to `DiceMetric` and `DiceHelper` classes (#8774)
* Support additional dtypes in `pad_nd` (#8672)

### Fixed
* Fix `Invertd` transform (#8651)
* Fix `PerceptualLoss` errors out after hitting maximum number of downloads (#8652)
* Prevent implicit conversion of `MetaTensor` to numpy array (#8654)
* Fix weights in alpha for `FocalLoss` (#8665)
* Fix align_corners mismatch in `AffineTransform` (#8690)
* Fix multi-axis shear transform to compose individual shear matrices (#8778)
* Fix incorrect `truncated` parameter in `make_gaussian_kernel` causing corrupted `LocalNormalizedCrossCorrelationLoss` (#8781, #8783)
* Fix batch size broadcasting bug in `GeneralizedWassersteinDiceLoss` (#8744)
* Fix `AutoencoderKLMaisi` forcing CUDA transfer on CPU inputs (#8736)
* Fix `TrainableBilateralFilter` 3D input validation (#8729)
* Fix GPU memory leak by checking both image and label tensors for CUDA device (#8708)
* Fix `compute_shape_offset` non-tuple indexing for PyTorch >=2.9 (#8776, #8812)
* Fix memory leak in `optional_import` traceback handling (#8782)
* Fix nested `Compose` `map_items` in forward and inverse paths (#8787)
* Fix `JukeboxLoss.forward` swapped `input_amplitude` and `target_amplitude` (#8821)
* Fix `EnsureChannelFirst` to pass `meta_data` when `track_meta` is False (#8835)
* Fix `RandSimulateLowResolution` to not alter `track_meta` state (#8837)
* Fix incomplete activation validation in `HausdorffDTLoss` (#8841)
* Fix `CrossAttentionBlock` instantiated unconditionally (#8848)
* Fix `GlobalMutualInformationLoss` bin_centers registered as buffer (#8869)
* Fix `SoftclDiceLoss` and `SoftDiceclDiceLoss` with `DiceLoss`-compatible API (#8703)
* Fix execution order of activation and masking in `MaskedDiceLoss` (#8704)
* Fix `load_old_state_dict` key mapping in `AutoencoderKL` (#8786)
* Fix missing `channel_wise` parameter in `RandScaleIntensityFixedMean` (#8741)
* Fix NibabelReader eager C-order copy (#8825)
* Fix `nnUNetV2Runner` to support MIG UUID and respect `CUDA_VISIBLE_DEVICES` (#8716)
* Fix Auto3DSeg device handling and safe no-grad cleanup (#8801, #8803)
* Replace deprecated `cuda.cudart` with `cuda.bindings.runtime` (#8790)
* Replace `Tensor | None` with `Optional[Tensor]` for TorchScript compatibility (#8879)
* Fix for [GHSA-rghg-q7wp-9767](https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-rghg-q7wp-9767) (#8885)

Comment thread
ericspod marked this conversation as resolved.
### Changed
* Replace `pickle` with JSON in Auto3DSeg algo serialization (#8695)
* Replace `flake8` with `ruff` and update lint rules (#8692, #8694)
* Modernize build commands for setuptools 80+ compatibility (#8728)
* Replace direct `np.random.*` calls with `np.random.RandomState` instances (#8798)
* Replace `BaseException` with `Exception` across codebase (#8859)
* Update base Docker image to 25.12 (#8738)
* Various performance improvements in engine utilities and core data structures (#8747, #8748, #8751)
* FFT utilities cleanup and update (#8762)

## [1.5.2] - 2026-01-28

## What's Changed
Expand Down Expand Up @@ -1267,7 +1328,8 @@ the postprocessing steps should be used before calling the metrics methods

[highlights]: https://github.com/Project-MONAI/MONAI/blob/master/docs/source/highlights.md

[Unreleased]: https://github.com/Project-MONAI/MONAI/compare/1.5.2...HEAD
[Unreleased]: https://github.com/Project-MONAI/MONAI/compare/1.6.0...HEAD
[1.6.0]: https://github.com/Project-MONAI/MONAI/compare/1.5.2...1.6.0
[1.5.2]: https://github.com/Project-MONAI/MONAI/compare/1.5.1...1.5.2
[1.5.1]: https://github.com/Project-MONAI/MONAI/compare/1.5.0...1.5.1
[1.5.0]: https://github.com/Project-MONAI/MONAI/compare/1.4.0...1.5.0
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ abstract: "AI Toolkit for Healthcare Imaging"
authors:
- name: "MONAI Consortium"
date-released: 2026-01-29
version: "1.5.2"
version: "1.6.0"
identifiers:
- description: "This DOI represents all versions of MONAI, and will always resolve to the latest one."
type: doi
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ cd docs/
make html
```

The above commands build html documentation, they are used to automatically generate [https://docs.monai.io](https://docs.monai.io).
The above commands build html documentation, they are used to automatically generate [monai.readthedocs.io](https://monai.readthedocs.io).

The Python code docstring are written in
[reStructuredText](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html) and
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ Please refer to [the installation guide](https://monai.readthedocs.io/en/latest/

Examples and notebook tutorials are located at [Project-MONAI/tutorials](https://github.com/Project-MONAI/tutorials).

Technical documentation is available at [docs.monai.io](https://docs.monai.io).
Technical documentation is available at [monai.readthedocs.io](https://monai.readthedocs.io).

## Docker

Expand Down
2 changes: 1 addition & 1 deletion docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Getting started

Examples and notebook tutorials are located at `Project-MONAI/tutorials <https://github.com/Project-MONAI/tutorials>`_.

Technical documentation is available at `docs.monai.io <https://docs.monai.io>`_.
Technical documentation is available at `monai.readthedocs.io <https://monai.readthedocs.io>`_.

.. toctree::
:maxdepth: 1
Expand Down
1 change: 1 addition & 0 deletions docs/source/whatsnew.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ What's New
.. toctree::
:maxdepth: 1

whatsnew_1_6.md
whatsnew_1_5_2.md
whatsnew_1_5_1.md
whatsnew_1_5.md
Expand Down
2 changes: 1 addition & 1 deletion docs/source/whatsnew_1_5_2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

# What's new in 1.5.2 🎉🎉
# What's new in 1.5.2

This is a minor update for MONAI to address a security concern.

Expand Down
57 changes: 57 additions & 0 deletions docs/source/whatsnew_1_6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@

# What's new in 1.6.0 🎉🎉
Comment thread
ericspod marked this conversation as resolved.

- New losses: AUC-Margin Loss, Matthews Correlation Coefficient (MCC) Loss
* AUC-Margin Loss: `AUCMarginLoss` directly optimizes the AUROC metric via a margin-based surrogate loss, enabling training workflows that target ranking-based performance rather than calibration-based objectives.
* Matthews Correlation Coefficient (MCC) Loss: `MCCLoss` provides a differentiable loss based on the Matthews Correlation Coefficient, which accounts for all four confusion matrix categories and is particularly robust for imbalanced segmentation tasks.
- New metric: `EmbeddingCollapseMetric` detects representational collapse in learned embedding spaces, useful for self-supervised and contrastive learning workflows in medical imaging to monitor embedding quality during training.
- Whole Slide Image (WSI) reader now supports retrieval at a specified microns-per-pixel (MPP) resolution. This simplifies multi-scanner workflows where consistent physical-space resolution is required regardless of scanner magnification levels.
- Nested dot-notation key access in `ConfigParser`.
- Auto3DSeg algo serialization migrated from pickle to JSON for improved security and portability.
- Global coordinates support in spatial crop transforms. These now support global coordinate mode, allowing crops to be specified in world/global coordinates rather than local image indices, improving interoperability with physical-space annotations.
- `SoftclDiceLoss` and `SoftDiceclDiceLoss` enhanced with `DiceLoss`-compatible API
- Variable expansion hardening has been added to the nnUNet app to eliminate code injection attacks when composing shell command lines, addressing concerns in [GHSA-rghg-q7wp-9767](https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-rghg-q7wp-9767).
- `NumpyReader` has been updated with an `allow_pickle` boolean argument to enable/disable pickle loading from `.npy/.npz` files. This was previously hard-coded to be enabled, but is now defined by this argument and disabled by default. This addresses [GHSA-qxq5-qhx6-94qw](https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-qxq5-qhx6-94qw).


MONAI now tests for Python 3.10 onwards, having dropped version 3.9 which is now out of support. PyTorch 2.8 onwards is now supported only, older versions will likely continue to function.

## Nested Dot-Notation Access in ConfigParser

`ConfigParser` now supports nested dot-notation key access, making it easier to read and override deeply nested configuration values programmatically.

For example, accessing a value from the parser with `parser["network_def.in_channels"]` can instead be `parser.network_def.in_channels`. This feature supports indexing and assignment, eg. `parser.network_def.in_channels[0] = 4` or `parser.A.B["C"] = 99`.

## Auto3DSeg: JSON-Based Algo Serialization

Auto3DSeg algorithm objects are now serialized using JSON instead of pickle. This removes a class of security risks associated with pickle deserialization and improves cross-environment portability of saved algorithm states. Using pickle for serialization can be re-enabled by setting the environment variable `MONAI_ALLOW_PICKLE` to `1` or the equivalent true value.

This was implemented to address [GHSA-qxq5-qhx6-94qw](https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-qxq5-qhx6-94qw).

## SoftclDiceLoss / SoftDiceclDiceLoss API Alignment

`SoftclDiceLoss` and `SoftDiceclDiceLoss` now accept the same arguments as `DiceLoss`, including `reduction`, `smooth_nr`, `smooth_dr`, and `batch` parameters, enabling drop-in use alongside the standard Dice loss in existing pipelines.

## Minor Changes

- `DiceMetric` and `DiceHelper` accept additional parameters for finer control of reduction behavior
- `ExtractDataKeyFromMetaKeyd` now works with `MetaTensor` inputs
- `ConvertToMultiChannelBasedOnBratsClasses` supports configurable GD-enhancing tumor label
- TorchScript compatibility: replaced `Tensor | None` union syntax with `Optional[Tensor]` across network modules
- `CrossAttentionBlock` is now only instantiated when `with_cross_attention=True`, reducing memory overhead
- `GlobalMutualInformationLoss` bin centers and `LocalNormalizedCrossCorrelationLoss` kernels registered as buffers for correct device handling (`#8869`, `#8818`)
- `NibabelReader` avoids eager C-order memory copies, reducing peak RAM usage for large NIfTI files
- Fixed `align_corners` mismatch in `AffineTransform`
- Fixed nested `Compose` `map_items` behaviour in forward and inverse paths
- Fixed anchor centering on grid cells in detection
- Fixed multi-axis shear transform matrix composition
- Fixed `JukeboxLoss` swapped `input_amplitude`/`target_amplitude` arguments
- Fixed memory leak in `optional_import` traceback handling
- Fixed `RandSimulateLowResolution` to use `F.interpolate` instead of `set_track_meta`
- Fixed GPU memory leak when checking image/label device in engine utilities
- Fixed `AutoencoderKL` `proj_attn` → `out_proj` key remapping in `load_old_state_dict`
- Fixed incorrect `truncated` parameter in `make_gaussian_kernel` affecting `LocalNormalizedCrossCorrelationLoss`
- Fixed `compute_shape_offset` non-tuple indexing for PyTorch ≥ 2.9
- Auto3DSeg: fixed incorrect device resolution in analyzer and precomputed crop handling
- Replaced `np.random.*` global calls with `np.random.RandomState` instances for reproducibility
- Replaced `BaseException` with `Exception` across the codebase
Loading