Skip to content

Commit eccefc5

Browse files
ericspodpre-commit-ci[bot]coderabbitai[bot]
authored
Release 1.6 Doc Updates (#8882)
Part of #8874 ### Description This updates documentation and other components for the 1.6.0 release. ### Types of changes <!--- Put an `x` in all the boxes that apply, and remove the not applicable items --> - [x] Non-breaking change (fix or new feature that would not break existing functionality). - [ ] Breaking change (fix or new feature that would cause existing functionality to change). - [ ] New tests added to cover the changes. - [ ] Integration tests passed locally by running `./runtests.sh -f -u --net --coverage`. - [ ] Quick tests passed locally by running `./runtests.sh --quick --unittests --disttests`. - [ ] In-line docstrings updated. - [x] Documentation updated, tested `make html` command in the `docs/` folder. --------- Signed-off-by: Eric Kerfoot <17726042+ericspod@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent 8a89dd5 commit eccefc5

8 files changed

Lines changed: 127 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,67 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
55

66
## [Unreleased]
77

8+
## [1.6.0] - 2026-06-12
9+
10+
## What's Changed
11+
### Added
12+
* Add `MAPEMetric` for regression evaluation (#8686)
13+
* Add `CalibrationErrorMetric` and `CalibrationError` handler (#8707)
14+
* Add `AUC-Margin Loss` for AUROC optimization (#8719)
15+
* Add `MCCLoss` (Matthews Correlation Coefficient loss) (#8785)
16+
* Add `EmbeddingCollapseMetric` for detecting representational collapse (#8815)
17+
* Add 3D support and confusion matrix output to `PanopticQualityMetric` (#8684)
18+
* Add `GradientAccumulation` utility for `SupervisedTrainer` (#8763)
19+
* Add nested dot-notation access to `ConfigParser` (#8858)
20+
* Add `allow_pickle` argument to relevant loaders (#8875)
21+
* Add configurable GD-enhancing tumor label in `ConvertToMultiChannelBasedOnBratsClasses` (#8779)
22+
* Enable global coordinates in spatial crop transforms (#8794)
23+
* Generalize `TestTimeAugmentation` to non-spatial predictions (#8715)
24+
* Add parameter to `DiceMetric` and `DiceHelper` classes (#8774)
25+
* Support additional dtypes in `pad_nd` (#8672)
26+
27+
### Fixed
28+
* Fix `Invertd` transform (#8651)
29+
* Fix `PerceptualLoss` errors out after hitting maximum number of downloads (#8652)
30+
* Prevent implicit conversion of `MetaTensor` to numpy array (#8654)
31+
* Fix weights in alpha for `FocalLoss` (#8665)
32+
* Fix align_corners mismatch in `AffineTransform` (#8690)
33+
* Fix multi-axis shear transform to compose individual shear matrices (#8778)
34+
* Fix incorrect `truncated` parameter in `make_gaussian_kernel` causing corrupted `LocalNormalizedCrossCorrelationLoss` (#8781, #8783)
35+
* Fix batch size broadcasting bug in `GeneralizedWassersteinDiceLoss` (#8744)
36+
* Fix `AutoencoderKLMaisi` forcing CUDA transfer on CPU inputs (#8736)
37+
* Fix `TrainableBilateralFilter` 3D input validation (#8729)
38+
* Fix GPU memory leak by checking both image and label tensors for CUDA device (#8708)
39+
* Fix `compute_shape_offset` non-tuple indexing for PyTorch >=2.9 (#8776, #8812)
40+
* Fix memory leak in `optional_import` traceback handling (#8782)
41+
* Fix nested `Compose` `map_items` in forward and inverse paths (#8787)
42+
* Fix `JukeboxLoss.forward` swapped `input_amplitude` and `target_amplitude` (#8821)
43+
* Fix `EnsureChannelFirst` to pass `meta_data` when `track_meta` is False (#8835)
44+
* Fix `RandSimulateLowResolution` to not alter `track_meta` state (#8837)
45+
* Fix incomplete activation validation in `HausdorffDTLoss` (#8841)
46+
* Fix `CrossAttentionBlock` instantiated unconditionally (#8848)
47+
* Fix `GlobalMutualInformationLoss` bin_centers registered as buffer (#8869)
48+
* Fix `SoftclDiceLoss` and `SoftDiceclDiceLoss` with `DiceLoss`-compatible API (#8703)
49+
* Fix execution order of activation and masking in `MaskedDiceLoss` (#8704)
50+
* Fix `load_old_state_dict` key mapping in `AutoencoderKL` (#8786)
51+
* Fix missing `channel_wise` parameter in `RandScaleIntensityFixedMean` (#8741)
52+
* Fix NibabelReader eager C-order copy (#8825)
53+
* Fix `nnUNetV2Runner` to support MIG UUID and respect `CUDA_VISIBLE_DEVICES` (#8716)
54+
* Fix Auto3DSeg device handling and safe no-grad cleanup (#8801, #8803)
55+
* Replace deprecated `cuda.cudart` with `cuda.bindings.runtime` (#8790)
56+
* Replace `Tensor | None` with `Optional[Tensor]` for TorchScript compatibility (#8879)
57+
* Fix for [GHSA-rghg-q7wp-9767](https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-rghg-q7wp-9767) (#8885)
58+
59+
### Changed
60+
* Replace `pickle` with JSON in Auto3DSeg algo serialization (#8695)
61+
* Replace `flake8` with `ruff` and update lint rules (#8692, #8694)
62+
* Modernize build commands for setuptools 80+ compatibility (#8728)
63+
* Replace direct `np.random.*` calls with `np.random.RandomState` instances (#8798)
64+
* Replace `BaseException` with `Exception` across codebase (#8859)
65+
* Update base Docker image to 25.12 (#8738)
66+
* Various performance improvements in engine utilities and core data structures (#8747, #8748, #8751)
67+
* FFT utilities cleanup and update (#8762)
68+
869
## [1.5.2] - 2026-01-28
970

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

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

1270-
[Unreleased]: https://github.com/Project-MONAI/MONAI/compare/1.5.2...HEAD
1331+
[Unreleased]: https://github.com/Project-MONAI/MONAI/compare/1.6.0...HEAD
1332+
[1.6.0]: https://github.com/Project-MONAI/MONAI/compare/1.5.2...1.6.0
12711333
[1.5.2]: https://github.com/Project-MONAI/MONAI/compare/1.5.1...1.5.2
12721334
[1.5.1]: https://github.com/Project-MONAI/MONAI/compare/1.5.0...1.5.1
12731335
[1.5.0]: https://github.com/Project-MONAI/MONAI/compare/1.4.0...1.5.0

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ title: "MONAI: Medical Open Network for AI"
66
abstract: "AI Toolkit for Healthcare Imaging"
77
authors:
88
- name: "MONAI Consortium"
9-
date-released: 2026-01-29
10-
version: "1.5.2"
9+
date-released: 2026-06-12
10+
version: "1.6.0"
1111
identifiers:
1212
- description: "This DOI represents all versions of MONAI, and will always resolve to the latest one."
1313
type: doi

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ cd docs/
165165
make html
166166
```
167167

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

170170
The Python code docstring are written in
171171
[reStructuredText](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html) and

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Please refer to [the installation guide](https://monai.readthedocs.io/en/latest/
5959

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

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

6464
## Docker
6565

docs/source/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Getting started
4141

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

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

4646
.. toctree::
4747
:maxdepth: 1

docs/source/whatsnew.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ What's New
66
.. toctree::
77
:maxdepth: 1
88

9+
whatsnew_1_6.md
910
whatsnew_1_5_2.md
1011
whatsnew_1_5_1.md
1112
whatsnew_1_5.md

docs/source/whatsnew_1_5_2.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
# What's new in 1.5.2 🎉🎉
2+
# What's new in 1.5.2
33

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

docs/source/whatsnew_1_6.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
2+
# What's new in 1.6.0 🎉🎉
3+
4+
- New losses: AUC-Margin Loss, Matthews Correlation Coefficient (MCC) Loss
5+
* 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.
6+
* 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.
7+
- 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.
8+
- 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.
9+
- Nested dot-notation key access in `ConfigParser`.
10+
- Auto3DSeg algo serialization migrated from pickle to JSON for improved security and portability.
11+
- 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.
12+
- `SoftclDiceLoss` and `SoftDiceclDiceLoss` enhanced with `DiceLoss`-compatible API
13+
- 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).
14+
- `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).
15+
16+
17+
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.
18+
19+
## Nested Dot-Notation Access in ConfigParser
20+
21+
`ConfigParser` now supports nested dot-notation key access, making it easier to read and override deeply nested configuration values programmatically.
22+
23+
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`.
24+
25+
## Auto3DSeg: JSON-Based Algo Serialization
26+
27+
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.
28+
29+
This was implemented to address [GHSA-qxq5-qhx6-94qw](https://github.com/Project-MONAI/MONAI/security/advisories/GHSA-qxq5-qhx6-94qw).
30+
31+
## SoftclDiceLoss / SoftDiceclDiceLoss API Alignment
32+
33+
`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.
34+
35+
## Minor Changes
36+
37+
- `DiceMetric` and `DiceHelper` accept additional parameters for finer control of reduction behavior
38+
- `ExtractDataKeyFromMetaKeyd` now works with `MetaTensor` inputs
39+
- `ConvertToMultiChannelBasedOnBratsClasses` supports configurable GD-enhancing tumor label
40+
- TorchScript compatibility: replaced `Tensor | None` union syntax with `Optional[Tensor]` across network modules
41+
- `CrossAttentionBlock` is now only instantiated when `with_cross_attention=True`, reducing memory overhead
42+
- `GlobalMutualInformationLoss` bin centers and `LocalNormalizedCrossCorrelationLoss` kernels registered as buffers for correct device handling (`#8869`, `#8818`)
43+
- `NibabelReader` avoids eager C-order memory copies, reducing peak RAM usage for large NIfTI files
44+
- Fixed `align_corners` mismatch in `AffineTransform`
45+
- Fixed nested `Compose` `map_items` behaviour in forward and inverse paths
46+
- Fixed anchor centering on grid cells in detection
47+
- Fixed multi-axis shear transform matrix composition
48+
- Fixed `JukeboxLoss` swapped `input_amplitude`/`target_amplitude` arguments
49+
- Fixed memory leak in `optional_import` traceback handling
50+
- Fixed `RandSimulateLowResolution` to use `F.interpolate` instead of `set_track_meta`
51+
- Fixed GPU memory leak when checking image/label device in engine utilities
52+
- Fixed `AutoencoderKL` `proj_attn``out_proj` key remapping in `load_old_state_dict`
53+
- Fixed incorrect `truncated` parameter in `make_gaussian_kernel` affecting `LocalNormalizedCrossCorrelationLoss`
54+
- Fixed `compute_shape_offset` non-tuple indexing for PyTorch ≥ 2.9
55+
- Auto3DSeg: fixed incorrect device resolution in analyzer and precomputed crop handling
56+
- Replaced `np.random.*` global calls with `np.random.RandomState` instances for reproducibility
57+
- Replaced `BaseException` with `Exception` across the codebase

0 commit comments

Comments
 (0)