Releases: Project-MONAI/MONAI
Releases · Project-MONAI/MONAI
1.5.1
Added
- PyTorch 2.7 and 2.8 support (#8429, #8530)
- Create SECURITY.md (#8546)
- Add kwargs in array and functional file (#8508)
- Add .coderabbit.yaml File (#8513)
- Add input validation to ImageStats class (#8501)
- Add support for optional conditioning in PatchInferer, SliceInferer, and SlidingWindowInferer (#8400)
- Add classifier free guidance unconditioned value (#8562)
- Improved
DiffusionModelEncoderto support output linear layers of different dimensions (#8578, #8580)
Fixed
- Fix for insecure zip file extraction to address GHSA-x6ww-pf9m-m73m (#8568)
- Fix for insecure use of
torch.loadandpickleto address GHSA-6vm5-6jv9-rjpj and GHSA-p8cm-mm2v-gwjm (#8566) - Torchvision fix for loading pretrained weights using current syntax (#8563)
- Fix bug in MAISI vae (#8517)
- Throw exception on invalid images in retinanet detector (#8515)
- Fix: HistogramNormalized doc (#8543)
- Fix build failure by pinning pyamg to versions below 5.3.0 (#8548)
- Fix hardcoded input dim in DiffusionModelEncoder (#8514)
- Fix for gdown downloading fails (#8576)
Changed
- Update README badges to add research paper citations number (#8494)
- CI: Add custom timeout to ci job in order to save resources (#8504)
- Improve documentation on the datalist format (#8539)
- Tests Cleanup and refactor (#8405, #8535)
- Improve Orientation transform to use the "space" (LPS vs RAS) of a metatensor by default (#8473)
- Updated supported version of Huggingface Transformers (#8574)
New Contributors
- @kitsiosk made their first contribution in #8504
- @IamTingTing made their first contribution in #8508
- @mauigna06 made their first contribution in #8494
- @Emdya made their first contribution in #8501
- @FinnBehrendt made their first contribution in #8400
- @gauthamk02 made their first contribution in #8543
- @DanielNobbe made their first contribution in #8539
- @CPBridge made their first contribution in #8473
- @h3rrr made their first contribution in #8546
Full Changelog: 1.5.0...1.5.1
1.5.0
Added
- Add platform-specific constraints to setup.cfg (#8260)
- Add PythonicWorkflow (#8151)
- Add SM architecture version check (#8199)
- Add MedNext implementation (#8004)
- Added a top button to CONSTRIBUTING.md (#8163)
- Adding CODEOWNERS (#8457)
- Restormer Implementation (#8312)
- Add rectified flow noise scheduler for accelerated diffusion model (#8374)
- Add prediction type for rflow scheduler (#8386)
- Add Average Precision to metrics (#8089)
- Implementation of a Masked Autoencoder for representation learning (#8152)
- Implement TorchIO transforms wrapper analogous to TorchVision transfo… (#7579)
- 8328 nnunet bundle integration (#8329)
- Adding Support Policy + Doc Updates (#8458)
- Classifier free guidance (#8460)
Fixed
- Fix Ruff Numpy2 deprecation rules (#8179)
- Fix
torch.load()frequently warning in PersistentDataset and GDSDataset (#8177) - Fix the logging of a nested dictionary metric in MLflow (#8169)
- Fix ImageFilter to allow Gaussian filter without filter_size (#8189)
- Fix fold_constants, test_handler switched to onnx (#8211)
- Fix TypeError in meshgrid (#8252)
- Fix PatchMerging duplicate merging (#8285)
- Fix test load image issue (#8297)
- Fix bundle download error from ngc source (#8307)
- Fix deprecated usage in zarr (#8313, #8477)
- Fix DataFrame subsets indexing in CSVDataset() (#8351)
- Fix
packagingimports in version comparison logic (#8347) - Fix CommonKeys docstring (#8342)
- Fix: correctly apply fftshift to real-valued data inputs (#8407)
- Fix OptionalImportError: required package
openslideis not installed (#8419) - Fix cosine noise scheduler (#8427)
- Fix AutoencoderKL docstrings. (#8445)
- Inverse Threading Fix (#8418)
- Fix normalize intensity (#8286)
- Fix path at test onnx trt export (#8361)
- Fix broken urls (#8481, #8483)
Changed
- [DOC] Update README.md (#8157)
- Streamlined Rearrange in SpatialAttentionBlock (#8130)
- Optimize VISTA3D (#8123)
- Skip torch trt convert test with torch newer than or equal to 2.5.0 (#8165)
- Enable redirection of all loggers by configuring a FileHandler within the bundle (#8142)
- Apply pyupgrade fixes for Python 3.9+ syntax (#8150)
- Update base image to 2410 (#8164)
- TRT support for MAISI (#8153)
- 8134 Add unit test for responsive inference (#8146)
- SwinUNETR refactor to accept additional parameters (#8212)
- Allow an arbitrary mask to be used in the self attention (#8235)
- Bump codecov/codecov-action from 4 to 5 (#8245)
- Docs: update brats classes description (#8246)
- Change default value of
patch_normto False inSwinUNETR(#8249) - Modify Dice, Jaccard and Tversky losses (#8138)
- Modify Workflow to Allow IterableDataset Inputs (#8263)
- Enhance download_and_extract (#8216)
- Relax gpu load check (#8282, #8275)
- Using LocalStore in Zarr v3 (#8299)
- Enable gpu load nifti (#8188)
- update pydicom reader to enable gpu load (#8283)
- Zarr compression tests only with versions before 3.0 (#8319)
- Changing utils.py to test_utils.py (#8335)
- Refactor testd (#8231)
- Recursive Item Mapping for Nested Lists in Compose (#8187)
- Bump min torch to 1.13.1 to mitigate CVE-2022-45907 unsafe usage of eval (#8296)
- Inferer modification - save_intermediates clashes with latent shape adjustment in latent diffusion inferers (#8343)
- Solves path problem in test_bundle_trt_export.py (#8357)
- Modify ControlNet inferer so that it takes in context when the diffus… (#8360)
- Update monaihosting download method (#8364)
- Bump torch minimum to mitigate CVE-2024-31580 & CVE-2024-31583 and enable numpy 2 compatibility (#8368)
- Auto3DSeg algo_template hash update (#8378)
- Enable Pytorch 2.6 (#8309)
- Auto3DSeg algo_template hash update (#8393, #8397)
- Update Dice Metric Docs (#8388)
- Auto3DSeg algo_template hash update (#8406)
- Update bundle download API (#8403)
- Add Skip test in TestTranschex (#8416)
- Update get latest bundle version function (#8420)
- Temporarily Restrict setuptools Version to 79.0.1 (#8441)
- Update default overlap value in occlusion_sensitivity to 0.6 (#8446)
- Enable code coverage comments on PRs in codecov configuration (#8402)
- Migrate to modern Python Logger API (#8449)
Deprecated
Removed
- Remove deprecated functionality for v1.5 (#8430)
- Remove deprecated
return_state_dictin bundleload(#8454) - Remove deprecated
net_namein test file (#8461) - Remove unused test cases in bundle load (#8463)
- selfattention block: Remove the fc linear layer if it is not used (#8325)
- Removed outdated
torchversion checks from transform functions (#8359)
New Contributors
- @Smoothengineer made their first contribution in #8157
- @Akhsuna07 made their first contribution in #8163
- @bnbqq8 made their first contribution in #8177
- @EloiNavet made their first contribution in #8189
- @vectorvp made their first contribution in #8246
- @zifuwanggg made their first contribution in #8138
- @Jerome-Hsieh made their first contribution in #8216
- @pooya-mohammadi made their first contribution in #8285
- @advcu987 made their first contribution in #8286
- @garciadias made their first contribution in #8231
- @nkaenzig made their first contribution in #8347
- @bartosz-grabowski made their first contribution in #8342
- @thibaultdvx made their first contribution in #8089
- @phisanti made their first contribution in #8312
- @SimoneBendazzoli93 made their first contribution in #8329
- @XwK-P made their first contribution in #8407
- @slavaheroes made their first contribution in #8427
- @kavin2003 made their first contribution in #8446
- @chrislevn made their first contribution in #8402
- @emmanuel-ferdman made their first contribution in #8449
- @kolasaniv1996 made their first contribution in #8477
Full Changelog: 1.4.0...1.5.0
1.4.0
Added
- Implemented Conjugate Gradient Solver to generate confidence maps. (#7876)
- Added norm parameter to
ResNet(#7752, #7805) - Introduced alpha parameter to
DiceFocalLossfor 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
ViTandUNETRmodels 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
MLPBlockfor 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
DiceCELossfor enhanced model calibration (#8000) - Add
include_fcanduse_combined_linearargument in theSABlock(#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
WriteFileMappingtransform to map between input image paths and their corresponding output paths (#7769) - Added
TrtHandlerto accelerate models using TensorRT (#7990, #8064) - Added box and points conversion transforms for more flexible spatial manipulation (#8053)
- Enhanced
RandSimulateLowResolutiondtransform with deterministic support (#8057) - Added a contiguous argument to the
Fourierclass to facilitate contiguous tensor outputs (#7969) - Allowed
ApplyTransformToPointsdto receive a sequence of reference keys for more versatile point manipulation (#8063) - Made
MetaTensoran optional print inDataStatsandDataStatsdfor more concise logging (#7814)
misc.
- Refactored Dataset to utilize Compose for handling transforms. (#7784)
- Combined
map_classes_to_indicesandgenerate_label_classes_crop_centersinto a unified function (#7712) - Introduced metadata schema directly into the codebase for improved structure and validation (#7409)
- Renamed
optional_packages_versiontorequired_packages_versionfor clearer package dependency management. (#7253) - Replaced
pkg_resourceswith 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, andCutOuttransforms (#7813) - Applied a minor correction to
AsDiscretetransform (#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.deviceobject had no attribute gpu_id during TensorRT export (#8019) - Corrected function for loading older weights in
DiffusionModelUNet(#8031) - Switched to
torch_tensorrt.Deviceinstead oftorch.deviceduring 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.ndimagenamespaces 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_loaderusage (#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-py3fromnvcr.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
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
- @alkamid made their first contribution in #7847
- @kephale made their first contribution in #7841
- @guopengf made their first contribution in #7875
- @dcfidalgo made their first contribution in #7984
- @K-Rilla made their first contribution in #7953
- @Han123su made their first contribution in #7934
- @mylapallilavanyaa made their first contribution in #7891
- @staydelight made their first contribution in #7769
- @ken-ni made their first contribution in #8055
- @borisfom made their first contribution in #7990
- @25benjaminli made their first contribution in #8057
- @bwittmann made their first contribution in #7969
- @slicepaste made their first contribution in #7814
- @che85 made their first contribution in #8091
Full Changelog: 1.3.2...1.4.0
1.3.2
1.3.1
Added
- Support for
by_measureargument inRemoveSmallObjects(#7137) - Support for
pretrainedflag inResNet(#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
ComponentStorefor storage purposes (#7159) - Added utilities used in MONAI Generative (#7134)
- Enabled Python 3.11 support for
convert_to_torchscriptandconvert_to_onnx(#7182) - Support for MLflow in
AutoRunner(#7176) fname_regexoption in PydicomReader (#7181)- Allowed setting AutoRunner parameters from config (#7175)
VoxelMorphUNetandVoxelMorph(#7178)- Enabled
cacheoption inGridPatchDataset(#7180) - Introduced
class_labelsoption inwrite_metrics_reportsfor improved readability (#7249) DiffusionLossfor image registration task (#7272)- Supported specifying
filenameinSaveimage(#7318) - Compile support in
SupervisedTrainerandSupervisedEvaluator(#7375) mlflow_experiment_namesupport inAuto3DSeg(#7442)- Arm support (#7500)
BarlowTwinsLossfor representation learning (#7530)SURELossandConjugateGradientfor diffusion models (#7308)- Support for
CutMix,CutOut, andMixUpaugmentation techniques (#7198) meta_fileandlogging_fileoptions toBundleWorkflow(#7549)properties_pathoption toBundleWorkflowfor 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_headoption inSABlockto set dimensions for each head (#7664) - Direct links to github source code to docs (#7738, #7779)
misc.
- Refactored
list_data_collateandcollate_meta_tensorto utilize the latest PyTorch API (#7165) - Added str method in
Metricbase 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_edtto 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_dimsinSwinTransformer(#7302) - Fixed learnable
position_embeddingsinPatchEmbeddingBlock(#7564, #7605) - Removed
memory_pool_limitin TRT config (#7647) - Propagated
kernel_sizetoConvBlockswithinAttentionUnet(#7734) - Addressed hard-coded activation layer in
ResNet(#7749)
bundle
- Resolved bundle download issue (#7280)
- Updated
bundle_rootdirectory forNNIGen(#7586) - Checked for
num_foldand failed early if incorrect (#7634) - Enhanced logging logic in
ConfigWorkflow(#7745)
misc.
- Enabled chaining in
Auto3DSegCLI (#7168) - Addressed useless error message in
nnUNetV2Runner(#7217) - Resolved typing and deprecation issues in Mypy (#7231)
- Quoted
$PY_EXEvariable 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_DEVICESsetting 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
nnUNetV2Runnerto 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_tensorrtcompile parameters to avoid warning (#7714) - Restrict
Auto3DSegfold input based on datalist (#7778)
Changed
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:24.03-py3fromnvcr.io/nvidia/pytorch:23.08-py3
Removed
1.3.0
Added
- Intensity transforms
ScaleIntensityFixedMeanandRandScaleIntensityFixedMean(#6542) UltrasoundConfidenceMapTransformused for computing confidence map from an ultrasound image (#6709)channel_wisesupport inRandScaleIntensityandRandShiftIntensity(#6793, #7025)RandSimulateLowResolutionandRandSimulateLowResolutiond(#6806)SignalFillEmptyd(#7011)- Euclidean distance transform
DistanceTransformEDTwith GPU support (#6981) - Port loss and metrics from
monai-generative(#6729, #6836) - Support
invert_imageandretain_statsinAdjustContrastandRandAdjustContrast(#6542) - New network
DAF3DandQuicknat(#6306) - Support
sincosposition embedding (#6986) ZarrAvgMergerused 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_fnsupport inIgniteMetricand renamed it toIgniteMetricHandler(#6695)CallableEventWithFilterandEventsoptions fortrigger_eventinGarbageCollector(#6663)- Support random sorting option to
GridPatch,RandGridPatch,GridPatchdandRandGridPatchd(#6701) - Support multi-threaded batch sampling in
PatchInferer(#6139) SoftclDiceLossandSoftDiceclDiceLoss(#6763)HausdorffDTLossandLogHausdorffDTLoss(#6994)- Documentation for
TensorFloat-32(#6770) - Docstring format guide (#6780)
GDSDatasetsupport for GDS (#6778)- PyTorch backend support for
MapLabelValue(#6872) filter_funcincopy_model_stateto filter the weights to be loaded andfilter_swinunetr(#6917)stats_sendertoMonaiAlgofor FL stats (#6984)freeze_layersto help freeze specific layers (#6970)
misc.
- Refactor multi-node running command used in
Auto3DSeginto dedicated functions (#6623) - Support str type annotation to
deviceinToTensorD(#6737) - Improve logging message and file name extenstion in
DataAnalyzerforAuto3DSeg(#6758) - Set
data_rangeas a property inSSIMLoss(#6788) - Unify environment variable access (#7084)
end_lrsupport inWarmupCosineSchedule(#6662)- Add
ClearMLas optional dependency (#6827) yandex.disksupport indownload_url(#6667)- Improve config expression error message (#6977)
Fixed
transforms
- Make
convert_box_to_maskthrow errors when box size larger than the image (#6637) - Fix lazy mode in
RandAffine(#6774) - Raise
ValueErrorwhenmap_itemsis bool inCompose(#6882) - Improve performance for
NormalizeIntensity(#6887) - Fix mismatched shape in
Spacing(#6912) - Avoid FutureWarning in
CropForeground(#6934) - Fix
Lazy=Trueignored when usingDatasetcall (#6975) - Shape check for arbitrary types for DataStats (#7082)
data
- Fix wrong spacing checking logic in
PydicomReaderand broken link inITKReader(#6660) - Fix boolean indexing of batched
MetaTensor(#6781) - Raise warning when multiprocessing in
DataLoader(#6830) - Remove
shuffleinDistributedWeightedRandomSampler(#6886) - Fix missing
SegmentDescriptioninPydicomReader(#6937) - Fix reading dicom series error in
ITKReader(#6943) - Fix KeyError in
PydicomReader(#6946) - Update
metatensor_to_itk_imageto accept RASMetaTensorand update default 'space' inNrrdReadertoSpaceKeys.LPS(#7000) - Collate common meta dictionary keys (#7054)
metrics and losses
- Fixed bug in
GeneralizedDiceLosswhenbatch=True(#6775) - Support for
BCEWithLogitsLossinDiceCELoss(#6924) - Support for
weightin Dice and related losses (#7098)
networks
- Use
np.prodinstead ofnp.product(#6639) - Fix dimension issue in
MBConvBlock(#6672) - Fix hard-coded
up_kernel_sizeinViTAutoEnc(#6735) - Remove hard-coded
bias_downsampleinresnet(#6848) - Fix unused
kernel_sizeinResBlock(#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_dataanddataset_datato unrequired in BundleProperty (#6607) - Set
Noneto properties that do not haveREF_ID(#6607) - Fix
AttributeErrorfor default value inget_parsed_contentforConfigParser(#6756) - Update
monai.bundle.scriptsto support NGC hosting (#6828, #6997) - Add
MetaProperties(#6835) - Add
create_workflowand updateloadfunction (#6835) - Add bundle root directory to Python search directories automatically (#6910)
- Generate properties for bundle docs automatically (#6918)
- Move
download_large_filesfrom 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_kwargsinmonai.bundle.scriptfor merging multiple configs (#7109)
engines and handlers
- Added int options for
iteration_logandepoch_loginTensorBoardStatsHandler(#7027) - Support to run validator at training start (#7108)
misc.
- Fix device fallback error in
DataAnalyzer(#6658) - Add int check for
current_modeinconvert_applied_interp_mode(#6719) - Consistent type in
convert_to_contiguous(#6849) - Label
argmaxinDataAnalyzerwhen retry on CPU (#6852) - Fix
DataAnalyzerwithhistogram_only=True(#6874) - Fix
AttributeErrorinRankFilterin single GPU environment (#6895) - Remove the default warning on
TORCH_ALLOW_TF32_CUBLAS_OVERRIDEand 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_retinanetby 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-py3fromnvcr.io/nvidia/pytorch:23.03-py3
Deprecated
allow_smaller=True;allow_smaller=Falsewill be the new default inCropForegroundandgenerate_spatial_bounding_box(#6736)dropout_probinVNetin favor ofdropout_prob_downanddropout_prob_up(#6768)workflowinBundleWorkflowin favor ofworkflow_type(#6768)pos_embedinPatchEmbeddingBlockin favor ofproj_type(#6986)net_nameandnet_kwargsindownloadin favor ofmodel(#7016)img_sizeparameter in SwinUNETR (#7093)
Removed
pad_val,stride,per_channelandupsamplerinOcclusionSensitivity(#6642)compute_meaniou(#7019)AsChannelFirst,AddChannelandSplitChannel(#7019)create_multigpu_supervised_trainerandcreate_multigpu_supervised_evaluator(#7019)runner_idinrun(#7019)data_src_cfg_filenameinAlgoEnsembleBuilder(#7019)get_validation_statsinEvaluatorandget_train_statsinTrainer(#7019)epoch_intervalanditeration_intervalinTensorBoardStatsHandler(#7019)- some self-hosted test (#7041)
1.2.0
Added
- Various Auto3DSeg enhancements and integration tests including multi-node multi-GPU optimization, major usability improvements
- TensorRT and ONNX support for
monai.bundleAPI 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.workflowsandmonai.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
ImageFilteredandRandImageFiltered - 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_metaoption for Lambda and derived transforms (#6385) - CLIP pre-trained text-to-vision embedding (#6282)
- Optional spacing to surface distances calculations (#6144)
WSIReaderread by power and mpp (#6244)- Support GPU tensor for
GridPatchandGridPatchDataset(#6246) SomeOftransform composer (#6143)- GridPatch with both count and threshold filtering (#6055)
Fixed
transforms
map_classes_to_indicesefficiency issue (#6468)- Adaptive resampling mode based on backends (#6429)
- Improve Compose encapsulation (#6224)
- User-provided
FolderLayoutinSaveImageandSaveImagedtransforms (#6213) SpacingDoutput shape compute stability (#6126)- No mutate ratio /user inputs
croppad(#6127) - A
warnflag to RandCropByLabelClasses (#6121) nanto indicateno_channel, split dim singleton (#6090)- Compatible padding mode (#6076)
- Allow for missing
filename_or_objkey (#5980) Spacingpixdim in-place change (#5950)- Add warning in
RandHistogramShift(#5877) - Exclude
cuCIMwrappers fromget_transform_backends(#5838)
data
__format__implementation of MetaTensor (#6523)channel_diminTiffFileWSIReaderandCuCIMWSIReader(#6514)- Prepend
"meta"toMetaTensor.__repr__andMetaTensor.__str__for easier identification (#6214) - MetaTensor slicing issue (#5845)
- Default writer flags (#6147)
WSIReaderdefaults and tensor conversion (#6058)- Remove redundant array copy for WSITiffFileReader (#6089)
- Fix unused arg in
SlidingPatchWSIDataset(#6047) reverse_indexingfor PILReader (#6008)- Use
np.linalgfor 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
RetinaNetthrow errors for NaN only when training (#6479) - Replace deprecated arg in torchvision models (#6401)
- Improves NVFuser import check (#6399)
- Add
deviceinHoVerNetNuclearTypePostProcessingandHoVerNetInstanceMapPostProcessing(#6333) - Enhance hovernet load pretrained function (#6269)
- Access to the
att_matin 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
DenseNetderived classes (#5846) - Flexible interpolation modes in
regunet(#5807)
bundle
- Optimized the
deepcopylogic 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)
pprinthead 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_versionissue on Windows (#5787)
engines and handlers
- MLflow handler run bug (#6446)
monai.enginetraining attribute check (#6132)- Update StatsHandler logging message (#6051)
- Added callable options for
iteration_logandepoch_login TensorBoard and MLFlow (#5976) CheckpointSaverlogging error (#6026)- Callable options for
iteration_logandepoch_login StatsHandler (#5965)
misc.
- Avoid creating cufile.log when
import monai(#6106) monai._extensionsmodule 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)
RankFilterto 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-py3fromnvcr.io/nvidia/pytorch:22.10-py3
Deprecated
resample=True;resample=Falsewill be the new default inSaveImagerandom_size=True;random_size=Falsewill be the new default for the random cropping transformsimage_only=False;image_only=Truewill be the new default inLoadImageAddChannelandAsChannelFirstin favor ofEnsureChannelFirst
Removed
- Deprecated APIs since v0.9, including WSIReader from
monai.apps,NiftiSaverandPNGSaverfrommonai.data - Support for PyTorch 1.8
- Support for Python 3.7
1.1.0
Added
- Hover-Net based digital pathology workflows including new network, loss, postprocessing, metric, training, and inference modules
- Various enhancements for Auto3dSeg
AutoRunnerincluding 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.scriptAPI to support model zoo query and download LossMetricmetric to compute loss as cumulative metric measurement- Transforms and base transform APIs including
RandomizableTraitandMedianSmooth runtime_cacheoption forCacheDatasetand the derived classes to allow for shared caching on the fly- Flexible name formatter for
SaveImagetransform pending_operationsMetaTensor property and basic APIs for lazy image resampling- Contrastive sensitivity for SSIM metric
- Extensible backbones for
FlexibleUNet - Generalize
SobelGradientsto 3D and any spatial axes warmup_multiplieroption 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
DataAnalyzerhandles minor image-label shape inconsistencies
Fixed
- Review and enhance previously untyped APIs with additional type annotations and casts
switch_endiannessin 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
itkMatrixF44for default collate) - Inconsistent of sform and qform when using different backends for
SaveImage MetaTensor.shapecall now returns atorch.Sizeinstead 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 NetAdaptercompatibility with Torchscript- Issue of
extract_levelsinRegUNet - Optional
bias_downsampleinResNet dtypeoverflow forShiftIntensitytransform- Randomized transforms such as
RandCuCIMnow inheritRandomizableTrait fg_indices.sizecompatibility 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 stdvariable type issue forRandRicianNoiseDataAnalyzeracceptsNoneas label key and checks empty labelsiter_patch_positionnow has a smaller memory footprintCumulativeAveragehas 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
DistributedSamplerraises a ValueError if there are too few devices- OpenCV and
VideoDatasetmodules are loaded lazily to avoid dependency issues deviceinmonai.engines.Workflowsupports string valuesActivationsandAsDiscretetakekwargsas additional argumentsDataAnalyzeris now more efficient and writes summary stats before detailed all case stats- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:22.10-py3fromnvcr.io/nvidia/pytorch:22.09-py3 - Simplified Conda environment file
environment-dev.yml - Versioneer dependency upgraded to
0.23from0.19
Deprecated
NibabelReaderinput argumentdtypeis deprecated, the reader will use the original dtype of the image
Removed
- Support for PyTorch 1.7
1.0.1
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
LoadImageissue whentrack_metaisFalse - 1D data output error in
VarAutoEncoder - An issue with resolution computing in
ImageStats
Added
- Flexible min/max pixdim options for Spacing
- Upsample mode
deconvgroupand 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
ClientAlgoStatsandMonaiAlgoStatsfor 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 SlidingWindowInfereradaptive device based oncpu_threshSegResNetDSwith 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-py3fromnvcr.io/nvidia/pytorch:22.08-py3 - Replace
Nonetype metadata content with"none"forcollate_fncompatibility - HoVerNet Mode and Branch to independent StrEnum
- Automatically infer device from the first item in random elastic deformation dict
- Add channel dim in
ComputeHoVerMapsandComputeHoVerMapsd - Remove batch dim in
SobelGradientsandSobelGradientsd
Deprecated
- Deprecating
compute_meandice,compute_meaniouinmonai.metrics, in favor of
compute_diceandcompute_iourespectively
1.0.0
Added
monai.auto3dsegbase APIs andmonai.apps.auto3dsegcomponents for automated machine learning (AutoML) workflowmonai.flmodule with base APIs andMonaiAlgofor federated learning client workflow- An initial backwards compatibility guide
- Initial release of accelerated MRI reconstruction components, including
CoilSensitivityModel - Support of
MetaTensorand new metadata attributes for various digital pathology components - Various
monai.bundleenhancements for MONAI model-zoo usability, including config debug mode andget_all_bundles_list - new
monai.transformscomponents includingSignalContinuousWaveletfor 1D signal,ComputeHoVerMapsfor digital pathology, andSobelGradientsfor spatial gradients VarianceMetricandLabelQualityScoremetrics for active learning- Dataset API for real-time stream and videos
- Several networks and building blocks including
FlexibleUNetandHoVerNet MeanIoUHandlerandLogfileHandlerworkflow event handlersWSIReaderwith the TiffFile backend- Multi-threading in
WSIReaderwith cuCIM backend get_statsAPI inmonai.engines.Workflowprune_meta_patterninmonai.transforms.LoadImagemax_interactionsfor deepedit interaction workflow- Various profiling utilities in
monai.utils.profiling
Changed
- Base Docker image upgraded to
nvcr.io/nvidia/pytorch:22.08-py3fromnvcr.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.ContrastiveLossnow infersbatch_sizeduringforward()- Rearrange the spatial axes in
RandSmoothDeformtransforms following PyTorch's convention - Unified several environment flags into
monai.utils.misc.MONAIEnvVars - Simplified
__str__implementation ofMetaTensorinstead of relying on the__repr__implementation
Fixed
- Improved error messages when both
monaiandmonai-weeklyare pip-installed - Inconsistent pseudo number sequences for different
num_workersinDataLoader - Issue of repeated sequences for
monai.data.ShuffleBuffer - Issue of not preserving the physical extent in
monai.transforms.Spacing - Issue of using
inception_v3as the backbone ofmonai.networks.nets.TorchVisionFCModel - Index device issue for
monai.transforms.Crop - Efficiency issue when converting the array dtype and contiguous memory
Deprecated
AddchannelandAsChannelFirsttransforms in favor ofEnsureChannelFirstmonai.apps.pathology.datacomponents in favor of the corresponding components frommonai.datamonai.apps.pathology.handlersin favor of the corresponding components frommonai.handlers
Removed
Statussection in the pull request template in favor of the pull request draft modemonai.engines.BaseWorkflowndimanddimensionsarguments in favor ofspatial_dimsn_classes,num_classesarguments inAsDiscretein favor ofto_onehotlogit_thresh,threshold_valuesarguments inAsDiscretein favor ofthresholdtorch.testing.assert_allclosein favor oftests.utils.assert_allclose