All notable changes to MONAI are documented in this file.
The format is based on Keep a Changelog.
1.3.0 - 2023-10-12
- Intensity transforms
ScaleIntensityFixedMean
andRandScaleIntensityFixedMean
(#6542) UltrasoundConfidenceMapTransform
used for computing confidence map from an ultrasound image (#6709)channel_wise
support inRandScaleIntensity
andRandShiftIntensity
(#6793, #7025)RandSimulateLowResolution
andRandSimulateLowResolutiond
(#6806)SignalFillEmptyd
(#7011)- Euclidean distance transform
DistanceTransformEDT
with GPU support (#6981) - Port loss and metrics from
monai-generative
(#6729, #6836) - Support
invert_image
andretain_stats
inAdjustContrast
andRandAdjustContrast
(#6542) - New network
DAF3D
andQuicknat
(#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 inIgniteMetric
and renamed it toIgniteMetricHandler
(#6695)CallableEventWithFilter
andEvents
options fortrigger_event
inGarbageCollector
(#6663)- Support random sorting option to
GridPatch
,RandGridPatch
,GridPatchd
andRandGridPatchd
(#6701) - Support multi-threaded batch sampling in
PatchInferer
(#6139) SoftclDiceLoss
andSoftDiceclDiceLoss
(#6763)HausdorffDTLoss
andLogHausdorffDTLoss
(#6994)- Documentation for
TensorFloat-32
(#6770) - Docstring format guide (#6780)
GDSDataset
support for GDS (#6778)- PyTorch backend support for
MapLabelValue
(#6872) filter_func
incopy_model_state
to filter the weights to be loaded andfilter_swinunetr
(#6917)stats_sender
toMonaiAlgo
for FL stats (#6984)freeze_layers
to help freeze specific layers (#6970)
- Refactor multi-node running command used in
Auto3DSeg
into dedicated functions (#6623) - Support str type annotation to
device
inToTensorD
(#6737) - Improve logging message and file name extenstion in
DataAnalyzer
forAuto3DSeg
(#6758) - Set
data_range
as a property inSSIMLoss
(#6788) - Unify environment variable access (#7084)
end_lr
support inWarmupCosineSchedule
(#6662)- Add
ClearML
as optional dependency (#6827) yandex.disk
support indownload_url
(#6667)- Improve config expression error message (#6977)
- Make
convert_box_to_mask
throw errors when box size larger than the image (#6637) - Fix lazy mode in
RandAffine
(#6774) - Raise
ValueError
whenmap_items
is bool inCompose
(#6882) - Improve performance for
NormalizeIntensity
(#6887) - Fix mismatched shape in
Spacing
(#6912) - Avoid FutureWarning in
CropForeground
(#6934) - Fix
Lazy=True
ignored when usingDataset
call (#6975) - Shape check for arbitrary types for DataStats (#7082)
- Fix wrong spacing checking logic in
PydicomReader
and broken link inITKReader
(#6660) - Fix boolean indexing of batched
MetaTensor
(#6781) - Raise warning when multiprocessing in
DataLoader
(#6830) - Remove
shuffle
inDistributedWeightedRandomSampler
(#6886) - Fix missing
SegmentDescription
inPydicomReader
(#6937) - Fix reading dicom series error in
ITKReader
(#6943) - Fix KeyError in
PydicomReader
(#6946) - Update
metatensor_to_itk_image
to accept RASMetaTensor
and update default 'space' inNrrdReader
toSpaceKeys.LPS
(#7000) - Collate common meta dictionary keys (#7054)
- Fixed bug in
GeneralizedDiceLoss
whenbatch=True
(#6775) - Support for
BCEWithLogitsLoss
inDiceCELoss
(#6924) - Support for
weight
in Dice and related losses (#7098)
- Use
np.prod
instead ofnp.product
(#6639) - Fix dimension issue in
MBConvBlock
(#6672) - Fix hard-coded
up_kernel_size
inViTAutoEnc
(#6735) - Remove hard-coded
bias_downsample
inresnet
(#6848) - Fix unused
kernel_size
inResBlock
(#6999) - Allow for defining reference grid on non-integer coordinates (#7032)
- Padding option for autoencoder (#7068)
- Lower peak memory usage for SegResNetDS (#7066)
- Set
train_dataset_data
anddataset_data
to unrequired in BundleProperty (#6607) - Set
None
to properties that do not haveREF_ID
(#6607) - Fix
AttributeError
for default value inget_parsed_content
forConfigParser
(#6756) - Update
monai.bundle.scripts
to support NGC hosting (#6828, #6997) - Add
MetaProperties
(#6835) - Add
create_workflow
and updateload
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
inmonai.bundle.script
for merging multiple configs (#7109)
- Added int options for
iteration_log
andepoch_log
inTensorBoardStatsHandler
(#7027) - Support to run validator at training start (#7108)
- Fix device fallback error in
DataAnalyzer
(#6658) - Add int check for
current_mode
inconvert_applied_interp_mode
(#6719) - Consistent type in
convert_to_contiguous
(#6849) - Label
argmax
inDataAnalyzer
when retry on CPU (#6852) - Fix
DataAnalyzer
withhistogram_only=True
(#6874) - Fix
AttributeError
inRankFilter
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
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:23.08-py3
fromnvcr.io/nvidia/pytorch:23.03-py3
allow_smaller=True
;allow_smaller=False
will be the new default inCropForeground
andgenerate_spatial_bounding_box
(#6736)dropout_prob
inVNet
in favor ofdropout_prob_down
anddropout_prob_up
(#6768)workflow
inBundleWorkflow
in favor ofworkflow_type
(#6768)pos_embed
inPatchEmbeddingBlock
in favor ofproj_type
(#6986)net_name
andnet_kwargs
indownload
in favor ofmodel
(#7016)img_size
parameter in SwinUNETR (#7093)
pad_val
,stride
,per_channel
andupsampler
inOcclusionSensitivity
(#6642)compute_meaniou
(#7019)AsChannelFirst
,AddChannel
andSplitChannel
(#7019)create_multigpu_supervised_trainer
andcreate_multigpu_supervised_evaluator
(#7019)runner_id
inrun
(#7019)data_src_cfg_filename
inAlgoEnsembleBuilder
(#7019)get_validation_stats
inEvaluator
andget_train_stats
inTrainer
(#7019)epoch_interval
anditeration_interval
inTensorBoardStatsHandler
(#7019)- some self-hosted test (#7041)
1.2.0 - 2023-06-08
- 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
andmonai.fl.client
- Modular patch inference API including
PatchInferer
,merger
, andsplitter
- 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
andRandImageFiltered
- Trainable bilateral filters and joint bilateral filters
- ClearML stats and image handlers for experiment tracking
- 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
andGridPatchDataset
(#6246) SomeOf
transform composer (#6143)- GridPatch with both count and threshold filtering (#6055)
map_classes_to_indices
efficiency issue (#6468)- Adaptive resampling mode based on backends (#6429)
- Improve Compose encapsulation (#6224)
- User-provided
FolderLayout
inSaveImage
andSaveImaged
transforms (#6213) SpacingD
output shape compute stability (#6126)- No mutate ratio /user inputs
croppad
(#6127) - A
warn
flag to RandCropByLabelClasses (#6121) nan
to indicateno_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 fromget_transform_backends
(#5838)
__format__
implementation of MetaTensor (#6523)channel_dim
inTiffFileWSIReader
andCuCIMWSIReader
(#6514)- Prepend
"meta"
toMetaTensor.__repr__
andMetaTensor.__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)
- 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)
- Make
RetinaNet
throw errors for NaN only when training (#6479) - Replace deprecated arg in torchvision models (#6401)
- Improves NVFuser import check (#6399)
- Add
device
inHoVerNetNuclearTypePostProcessing
andHoVerNetInstanceMapPostProcessing
(#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)
- Optimized the
deepcopy
logic inConfigParser
(#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)
- MLflow handler run bug (#6446)
monai.engine
training attribute check (#6132)- Update StatsHandler logging message (#6051)
- Added callable options for
iteration_log
andepoch_log
in TensorBoard and MLFlow (#5976) CheckpointSaver
logging error (#6026)- Callable options for
iteration_log
andepoch_log
in StatsHandler (#5965)
- 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
- 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
fromnvcr.io/nvidia/pytorch:22.10-py3
resample=True
;resample=False
will be the new default inSaveImage
random_size=True
;random_size=False
will be the new default for the random cropping transformsimage_only=False
;image_only=True
will be the new default inLoadImage
AddChannel
andAsChannelFirst
in favor ofEnsureChannelFirst
- Deprecated APIs since v0.9, including WSIReader from
monai.apps
,NiftiSaver
andPNGSaver
frommonai.data
- Support for PyTorch 1.8
- Support for Python 3.7
1.1.0 - 2022-12-19
- 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 modenni_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
andMedianSmooth
runtime_cache
option forCacheDataset
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 forWarmupCosineSchedule
- 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
- 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
@
inmonai.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 atorch.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
inRegUNet
- Optional
bias_downsample
inResNet
dtype
overflow forShiftIntensity
transform- Randomized transforms such as
RandCuCIM
now inheritRandomizableTrait
fg_indices.size
compatibility issue ingenerate_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 forRandRicianNoise
DataAnalyzer
acceptsNone
as label key and checks empty labelsiter_patch_position
now has a smaller memory footprintCumulativeAverage
has been refactored and enhanced to allow for simple tracking of metric running stats.- Multi-threading issue for
MLFlowHandler
- 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
inmonai.engines.Workflow
supports string valuesActivations
andAsDiscrete
takekwargs
as additional argumentsDataAnalyzer
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
fromnvcr.io/nvidia/pytorch:22.09-py3
- Simplified Conda environment file
environment-dev.yml
- Versioneer dependency upgraded to
0.23
from0.19
NibabelReader
input argumentdtype
is deprecated, the reader will use the original dtype of the image
- Support for PyTorch 1.7
1.0.1 - 2022-10-24
- 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 whentrack_meta
isFalse
- 1D data output error in
VarAutoEncoder
- An issue with resolution computing in
ImageStats
- 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
andMonaiAlgoStats
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 oncpu_thresh
SegResNetDS
with deep supervision and non-isotropic kernel support- Premerge tests for Python 3.10
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:22.09-py3
fromnvcr.io/nvidia/pytorch:22.08-py3
- Replace
None
type metadata content with"none"
forcollate_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
andComputeHoVerMapsd
- Remove batch dim in
SobelGradients
andSobelGradientsd
- Deprecating
compute_meandice
,compute_meaniou
inmonai.metrics
, in favor ofcompute_dice
andcompute_iou
respectively
1.0.0 - 2022-09-16
monai.auto3dseg
base APIs andmonai.apps.auto3dseg
components for automated machine learning (AutoML) workflowmonai.fl
module with base APIs andMonaiAlgo
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 andget_all_bundles_list
- new
monai.transforms
components includingSignalContinuousWavelet
for 1D signal,ComputeHoVerMaps
for digital pathology, andSobelGradients
for spatial gradients VarianceMetric
andLabelQualityScore
metrics for active learning- Dataset API for real-time stream and videos
- Several networks and building blocks including
FlexibleUNet
andHoVerNet
MeanIoUHandler
andLogfileHandler
workflow event handlersWSIReader
with the TiffFile backend- Multi-threading in
WSIReader
with cuCIM backend get_stats
API inmonai.engines.Workflow
prune_meta_pattern
inmonai.transforms.LoadImage
max_interactions
for deepedit interaction workflow- Various profiling utilities in
monai.utils.profiling
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:22.08-py3
fromnvcr.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 infersbatch_size
duringforward()
- Rearrange the spatial axes in
RandSmoothDeform
transforms following PyTorch's convention - Unified several environment flags into
monai.utils.misc.MONAIEnvVars
- Simplified
__str__
implementation ofMetaTensor
instead of relying on the__repr__
implementation
- Improved error messages when both
monai
andmonai-weekly
are pip-installed - Inconsistent pseudo number sequences for different
num_workers
inDataLoader
- 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 ofmonai.networks.nets.TorchVisionFCModel
- Index device issue for
monai.transforms.Crop
- Efficiency issue when converting the array dtype and contiguous memory
Addchannel
andAsChannelFirst
transforms in favor ofEnsureChannelFirst
monai.apps.pathology.data
components in favor of the corresponding components frommonai.data
monai.apps.pathology.handlers
in favor of the corresponding components frommonai.handlers
Status
section in the pull request template in favor of the pull request draft modemonai.engines.BaseWorkflow
ndim
anddimensions
arguments in favor ofspatial_dims
n_classes
,num_classes
arguments inAsDiscrete
in favor ofto_onehot
logit_thresh
,threshold_values
arguments inAsDiscrete
in favor ofthreshold
torch.testing.assert_allclose
in favor oftests.utils.assert_allclose
0.9.1 - 2022-07-22
- 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
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:22.06-py3
fromnvcr.io/nvidia/pytorch:22.04-py3
- Optionally depend on PyTorch-Ignite v0.4.9 instead of v0.4.8
- 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
*_transforms
and*_meta_dict
fields in dictionary-based transforms in favor of MetaTensormeta_keys
,meta_key_postfix
,src_affine
arguments in various transforms, in favor of MetaTensorAsChannelFirst
andAddChannel
, in favor ofEnsureChannelFirst
transform
0.9.0 - 2022-06-08
monai.bundle
primary module with aConfigParser
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
- Simplified
TestTimeAugmentation
using de-collate and invertible transforms APIs - Refactoring
monai.apps.pathology
modules intomonai.handlers
andmonai.transforms
- Flexible activation and normalization layers for
TopologySearch
andDiNTS
- 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
fromnvcr.io/nvidia/pytorch:21.10-py3
collate_fn
generates more data-related debugging info withdev_collate
- 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
inUnetResBlock
- 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
inCSVDataset
- In-place modification in
Metric
reduction wrap_array
forensure_tuple
- Contribution guide for introducing new third-party dependencies
- Deprecated
nifti_writer
,png_writer
in favor ofmonai.data.image_writer
- Support for PyTorch 1.6
0.8.1 - 2022-02-16
- Support of
matshow3d
with givenchannel_dim
- Support of spatial 2D for
ViTAutoEnc
- Support of
dataframe
object input inCSVDataset
- Support of tensor backend for
Orientation
- Support of configurable delimiter for CSV writers
- A base workflow API
DataFunc
API for dataset-level preprocessingwrite_scalar
API for logging with additionalengine
parameter inTensorBoardHandler
- 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
forWSIReader
- Logging for the learning rate schedule handler
GridPatchDataset
as subclass ofmonai.data.IterableDataset
is_onehot
option inKeepLargestConnectedComponent
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
- Optionally depend on PyTorch-Ignite v0.4.8 instead of v0.4.6
monai.apps.mmars.load_from_mmar
defaults to the latest version
- 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 isTiffFile
- 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
andSpacing
inmonai.apps.deepgrow.dataset
- Additional deep supervision modules in
DynUnet
- Deprecated
reduction
argument forContrastiveLoss
- Decollate warning in
Workflow
- Unique label exception in
ROCAUCMetric
- Logger configuration logic in the event handlers
0.8.0 - 2021-11-25
- 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
andmatshow3d
RandGridDistortion
andSmoothField
inmonai.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
andpytorch_after
- Various usability enhancements such as
allow_smaller
when sampling ROI andwrap_sequence
when casting object types tifffile
support inWSIReader
- Regression tests for the fast training workflows
- Various tutorials and demos including educational contents at MONAI Bootcamp 2021
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:21.10-py3
fromnvcr.io/nvidia/pytorch:21.08-py3
- Decoupled
TraceKeys
andTraceableTransform
APIs fromInvertibleTransform
- Skipping affine-based resampling when
resample=False
inNiftiSaver
- Deprecated
threshold_values: bool
andnum_classes: int
inAsDiscrete
- Enhanced
apply_filter
for spatially 1D, 2D and 3D inputs with non-separable kernels - Logging with
logging
in downloading and model archives inmonai.apps
- API documentation site now defaults to
stable
instead oflatest
skip-magic-trailing-comma
in coding style enforcements- Pre-merge CI pipelines now include unit tests with Nvidia Ampere architecture
- Support for PyTorch 1.5
- The deprecated
DynUnetV1
and the related network blocks - GitHub self-hosted CI/CD pipelines for package releases
- 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 theMapTransform
- 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"
inFocalLoss
- Various usability issues reported by users
0.7.0 - 2021-09-24
- 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 analysisDatasetSummary
utility inmonai.data
WarmupCosineSchedule
- Deprecation warnings and documentation support for better backwards compatibility
- Padding with additional
kwargs
and different backend API - Additional options such as
dropout
andnorm
in various networks and their submodules
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:21.08-py3
fromnvcr.io/nvidia/pytorch:21.06-py3
- Deprecated input argument
n_classes
, in favor ofnum_classes
- Deprecated input argument
dimensions
andndims
, in favor ofspatial_dims
- Updated the Sphinx-based documentation theme for better readability
NdarrayTensor
type is replaced byNdarrayOrTensor
for simpler annotations- Self-attention-based network blocks now support both 2D and 3D inputs
- The deprecated
TransformInverter
, in favor ofmonai.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
- 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
andCrossEntropy
intermediate results inDiceCELoss
- Improved documentation, code examples, and warning messages in various modules
- Various usability issues reported by users
0.6.0 - 2021-07-08
- 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 forapply_transform
andCompose
- 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 forruntests.sh
- Initial support of pre-merge tests with Nvidia Blossom system
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:21.06-py3
fromnvcr.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 topostprocessing
,pre_transform
is renamed topreprocessing
- Unified the postprocessing transforms and event handlers to accept the "channel-first" data format
evenly_divisible_all_gather
andstring_list_all_gather
moved tomonai.utils.dist
- Support of 'batched' input for postprocessing transforms and event handlers
TorchVisionFullyConvModel
set_visible_devices
utility functionSegmentationSaver
andTransformsInverter
handlers
- 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
andoptmizier
usingCheckpointLoader
whenstrict_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
- Project default branch renamed to
dev
frommaster
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:21.04-py3
fromnvcr.io/nvidia/pytorch:21.02-py3
- Enhanced type checks for the
iteration_metric
handler - Enhanced
PersistentDataset
to usetempfile
during caching computation - Enhanced various info/error messages
- Enhanced performance of
RandAffine
- Enhanced performance of
SmartCacheDataset
- Optionally requires
cucim
when the platform isLinux
- Default
device
ofTestTimeAugmentation
changed tocpu
- 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 inSpacingD
- Dataset caching issue with the persistent data loader workers
- A memory issue in
permutohedral_cuda
- Dictionary key issue in
CopyItemsd
box_start
andbox_end
parameters for deepgrowSpatialCropForegroundd
- Tissue mask array transpose issue in
MaskedInferenceWSIDataset
- Various type hint errors
- Various docstring typos
- Support of
to_tensor
anddevice
arguments forTransformInverter
- Slicing options with SpatialCrop
- Class name alias for the networks for backward compatibility
k_divisible
option for CropForegroundmap_items
option forCompose
- Warnings of
inf
andnan
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
- 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
- Enhanced
list_data_collate
error handling - Unified iteration metric APIs
densenet*
extensions are renamed toDenseNet*
se_res*
network extensions are renamed toSERes*
- Transform base APIs are rearranged into
compose
,inverse
, andtransform
_do_transform
flag for the random augmentations is unified viaRandomizableTransform
- Decoupled post-processing steps, e.g.
softmax
,to_onehot_y
, from the metrics computations - Moved the distributed samplers to
monai.data.samplers
frommonai.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
fromnvcr.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
- 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
- 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 asqueeze_end_dims
flag- Fixed
*Saver
event handlers output filenames with adata_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
- 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
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:20.10-py3
fromnvcr.io/nvidia/pytorch:20.08-py3
monai.apps.CVDecathlonDataset
is extended to a genericmonai.apps.CrossValidation
with andataset_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
andDiceMetric
computation now returns an additionalnot_nans
flag to indicate valid resultsUpSample
optionalmode
now supports"deconv"
,"nontrainable"
,"pixelshuffle"
;interp_mode
is only used whenmode
is"nontrainable"
SegResNet
optionalupsample_mode
now supports"deconv"
,"nontrainable"
,"pixelshuffle"
monai.transforms.Compose
class inheritsmonai.transforms.Transform
- In
Rotate
,Rotated
,RandRotate
,RandRotated
transforms, theangle
related parameters are interpreted as angles in radians instead of degrees. SplitChannel
andSplitChanneld
moved fromtransforms.post
totransforms.utility
- Support of PyTorch 1.4
- 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
- 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
modulemonai.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
- Now fully compatible with PyTorch 1.6
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:20.08-py3
fromnvcr.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
MONAI/examples
folder (relocated intoProject-MONAI/tutorials
)MONAI/research
folder (relocated toProject-MONAI/research-contributions
)
dense_patch_slices
incorrect indexing- Data type issue in
GeneralizedWassersteinDiceLoss
ZipDataset
return value inconsistenciessliding_window_inference
indexing anddevice
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
- Overview document for feature highlights in v0.2.0
- Type hints and static type analysis support
MONAI/research
foldermonai.engine.workflow
APIs for supervised trainingmonai.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, includingMedNISTDataset
andDecathlonDataset
- Persistent caching,
ZipDataset
, andArrayDataset
inmonai.data
- Cross-platform CI tests supporting multiple Python versions
- Optional import mechanism
- Experimental features for third-party transforms integration
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
fromnvcr.io/nvidia/pytorch:19.10-py3
- Enhanced local testing tools
- Documentation website domain changed to https://docs.monai.io
- Support of Python < 3.6
- Automatic installation of optional dependencies including pytorch-ignite, nibabel, tensorboard, pillow, scipy, scikit-image
- 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
- 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