monai-weekly 1.7.dev2642__tar.gz → 1.7.dev2643__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/PKG-INFO +1 -1
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/__init__.py +2 -1
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_version.py +3 -3
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/transforms/dictionary.py +0 -2
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/mmars/mmars.py +62 -116
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/mmars/model_desc.py +13 -1
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/transforms/post/dictionary.py +0 -2
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/image_reader.py +27 -5
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/nvimgcodec_pydicom_plugin.py +1 -1
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/inferers/merger.py +23 -16
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/active_learning_metrics.py +0 -2
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/confusion_matrix.py +49 -8
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/hausdorff_distance.py +14 -9
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/surface_distance.py +88 -18
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/segresnet_ds.py +10 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/utility/array.py +16 -1
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai_weekly.egg-info/PKG-INFO +1 -1
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/LICENSE +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/MANIFEST.in +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/README.md +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_extensions/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_extensions/gmm/gmm.cpp +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_extensions/gmm/gmm.h +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/_extensions/loader.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/__main__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/auto_runner.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/bundle_gen.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/data_analyzer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/hpo_gen.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/transforms.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/auto3dseg/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/datasets.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/deepedit/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/deepedit/interaction.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/deepedit/transforms.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/deepgrow/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/deepgrow/dataset.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/deepgrow/interaction.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/deepgrow/transforms.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/metrics/coco.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/metrics/matching.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/networks/retinanet_detector.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/networks/retinanet_network.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/transforms/box_ops.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/anchor_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/box_coder.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/box_selector.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/detector_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/utils/predict_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/generation/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/generation/maisi/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/generation/maisi/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/mmars/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/nnunet/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/nnunet/__main__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/nnunet/nnunet_bundle.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/nnunet/nnunetv2_runner.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/nnunet/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/nuclick/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/nuclick/transforms.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/transforms/post/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/transforms/stain/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/pathology/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/complex_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/fastmri_reader.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/mri_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/tcia/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/tcia/label_desc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/tcia/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/vista3d/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/vista3d/inferer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/vista3d/sampler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/vista3d/transforms.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/auto3dseg/algo_gen.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/auto3dseg/analyzer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/auto3dseg/operations.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/auto3dseg/seg_summarizer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/auto3dseg/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/__main__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/config_item.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/config_parser.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/properties.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/reference_resolver.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/scripts.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/bundle/workflows.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/config/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/config/__main__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/config/check_env.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/config/deviceconfig.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/config/print_dependencies.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/config/type_definitions.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/box_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/csv_saver.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/dataloader.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/dataset.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/dataset_summary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/decathlon_datalist.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/fft_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/folder_layout.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/grid_dataset.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/image_dataset.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/image_writer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/iterable_dataset.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/itk_torch_bridge.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/meta_obj.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/meta_tensor.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/samplers.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/synthetic.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/test_time_augmentation.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/thread_buffer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/torchscript_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/ultrasound_confidence_map.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/video_dataset.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/wsi_datasets.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/wsi_reader.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/engines/evaluator.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/engines/trainer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/engines/workflow.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/client/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/client/client_algo.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/client/monai_algo.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/utils/constants.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/utils/exchange_object.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/fl/utils/filters.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/average_precision.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/calibration.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/checkpoint_loader.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/checkpoint_saver.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/classification_saver.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/clearml_handlers.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/confusion_matrix.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/decollate_batch.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/earlystop_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/garbage_collector.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/hausdorff_distance.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/ignite_metric.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/logfile_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/lr_schedule_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/mean_dice.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/mean_iou.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/metric_logger.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/metrics_reloaded_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/metrics_saver.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/mlflow_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/nvtx_handlers.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/parameter_scheduler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/postprocessing.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/probability_maps.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/regression_metrics.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/roc_auc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/smartcache_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/stats_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/surface_distance.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/tensorboard_handlers.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/trt_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/handlers/validation_handler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/inferers/splitter.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/inferers/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/adversarial_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/aucm_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/barlow_twins.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/boundary_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/calibration.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/cldice.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/contrastive.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/deform.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/dice.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/ds_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/focal_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/giou_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/hausdorff_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/image_dissimilarity.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/mcc_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/multi_scale.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/nacl_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/perceptual.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/spatial_mask.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/spectral_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/ssim_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/sure_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/tversky.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/unified_focal_loss.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/losses/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/absolute_volume_difference.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/average_precision.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/calibration.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/cumulative_average.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/embedding_collapse.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/f_beta_score.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/fid.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/froc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/generalized_dice.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/loss_metric.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/meandice.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/meaniou.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/metric.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/mmd.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/regression.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/rocauc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/surface_dice.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/wrapper.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/acti_norm.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/activation.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/activation_checkpointing.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/aspp.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/attention_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/cablock.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/convolutions.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/crf.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/crossattention.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/denseblock.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/dints_block.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/downsample.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/dynunet_block.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/encoder.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/fcn.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/feature_pyramid_network.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/fft_utils_t.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/hyena.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/localnet_block.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/mednext_block.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/mlp.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/patchembedding.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/pos_embed_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/regunet_block.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/rel_pos_embedding.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/segresnet_block.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/selfattention.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/spade_norm.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/spatialattention.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/text_embedding.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/transformerblock.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/unetr_block.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/upsample.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/blocks/warp.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/conjugate_gradient.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/convutils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/drop_path.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/factories.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/filtering.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/gmm.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/simplelayers.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/spatial_transforms.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/vector_quantizer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/layers/weight_init.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/ahnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/attentionunet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/autoencoder.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/basic_unet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/basic_unetplusplus.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/cell_sam_wrapper.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/classifier.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/controlnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/daf3d.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/densenet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/dints.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/dynunet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/efficientnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/flexible_unet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/fullyconnectednet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/generator.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/highresnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/hovernet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/hyena_nd_unetr.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/mednext.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/milmodel.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/navit.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/netadapter.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/patchgan_discriminator.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/quicknat.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/regressor.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/regunet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/resnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/restormer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/segresnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/senet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/spade_autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/spade_network.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/swin_unetr.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/torchvision_fc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/transchex.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/transformer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/unet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/unetr.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/varautoencoder.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/vista3d.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/vit.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/vitautoenc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/vnet.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/voxelmorph.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/nets/vqvae.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/schedulers/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/schedulers/ddim.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/schedulers/ddpm.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/schedulers/pndm.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/schedulers/rectified_flow.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/schedulers/scheduler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/trt_compiler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/networks/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/optimizers/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/optimizers/lr_finder.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/optimizers/lr_scheduler.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/optimizers/novograd.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/optimizers/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/py.typed +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/adaptors.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/compose.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/croppad/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/croppad/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/croppad/batch.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/croppad/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/croppad/functional.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/intensity/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/intensity/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/intensity/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/inverse.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/inverse_batch_transform.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/io/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/io/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/io/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/lazy/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/lazy/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/lazy/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/lazy/functional.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/lazy/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/meta_utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/meta_utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/nvtx.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/post/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/post/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/regularization/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/regularization/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/regularization/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/signal/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/signal/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/signal/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/smooth_field/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/smooth_field/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/smooth_field/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/spatial/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/spatial/array.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/spatial/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/spatial/functional.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/traits.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/transform.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/utils_create_transform_ims.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/utils_morphological_ops.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/compare_sources.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/component_store.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/decorators.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/deprecate_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/dist.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/enums.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/jupyter_utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/misc.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/module.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/nvtx.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/ordering.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/profiling.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/safeeval.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/state_cacher.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/tf32.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/utils/type_conversion.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/visualize/__init__.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/visualize/class_activation_maps.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/visualize/gradient_based.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/visualize/img2tensorboard.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/visualize/occlusion_sensitivity.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/visualize/utils.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/visualize/visualizer.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai_weekly.egg-info/SOURCES.txt +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai_weekly.egg-info/dependency_links.txt +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai_weekly.egg-info/not-zip-safe +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai_weekly.egg-info/requires.txt +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai_weekly.egg-info/top_level.txt +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/pyproject.toml +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/setup.cfg +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/setup.py +0 -0
- {monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/versioneer.py +0 -0
|
@@ -86,6 +86,7 @@ from .utils.module import load_submodules # noqa: E402
|
|
|
86
86
|
# *.so files and folder "_C" may not exist when the cpp extensions are not compiled
|
|
87
87
|
excludes = "|".join(
|
|
88
88
|
[
|
|
89
|
+
"(.*(nvimgcodec_pydicom_plugin)$)",
|
|
89
90
|
"(^(monai.handlers))",
|
|
90
91
|
"(^(monai.bundle))",
|
|
91
92
|
"(^(monai.fl))",
|
|
@@ -136,4 +137,4 @@ except Exception:
|
|
|
136
137
|
|
|
137
138
|
if MONAIEnvVars.debug():
|
|
138
139
|
raise
|
|
139
|
-
__commit_id__ = "
|
|
140
|
+
__commit_id__ = "4f150a8f26664d1452a8e420d118f4541597f686"
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-10-
|
|
11
|
+
"date": "2026-10-25T02:15:18+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.7.
|
|
14
|
+
"full-revisionid": "08aa7d448a8733b13dadffc2f153f7bcb56f41cf",
|
|
15
|
+
"version": "1.7.dev2643"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
{monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/apps/detection/transforms/dictionary.py
RENAMED
|
@@ -258,7 +258,6 @@ class AffineBoxToImageCoordinated(MapTransform, InvertibleTransform):
|
|
|
258
258
|
Args:
|
|
259
259
|
box_keys: Keys to pick box data for transformation. The box mode is assumed to be ``StandardMode``.
|
|
260
260
|
box_ref_image_keys: The single key that represents the reference image to which ``box_keys`` are attached.
|
|
261
|
-
remove_empty: whether to remove the boxes that are actually empty
|
|
262
261
|
allow_missing_keys: don't raise exception if key is missing.
|
|
263
262
|
image_meta_key: explicitly indicate the key of the corresponding metadata dictionary.
|
|
264
263
|
for example, for data with key `image`, the metadata by default is in `image_meta_dict`.
|
|
@@ -347,7 +346,6 @@ class AffineBoxToWorldCoordinated(AffineBoxToImageCoordinated):
|
|
|
347
346
|
Args:
|
|
348
347
|
box_keys: Keys to pick box data for transformation. The box mode is assumed to be ``StandardMode``.
|
|
349
348
|
box_ref_image_keys: The single key that represents the reference image to which ``box_keys`` are attached.
|
|
350
|
-
remove_empty: whether to remove the boxes that are actually empty
|
|
351
349
|
allow_missing_keys: don't raise exception if key is missing.
|
|
352
350
|
image_meta_key: explicitly indicate the key of the corresponding metadata dictionary.
|
|
353
351
|
for example, for data with key `image`, the metadata by default is in `image_meta_dict`.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
# See the License for the specific language governing permissions and
|
|
10
10
|
# limitations under the License.
|
|
11
11
|
"""
|
|
12
|
-
|
|
12
|
+
Deprecated utilities for accessing Nvidia MMARs. Use MONAI Bundles instead.
|
|
13
13
|
|
|
14
14
|
See Also:
|
|
15
15
|
- https://docs.nvidia.com/clara/clara-train-sdk/pt/mmar.html
|
|
@@ -18,18 +18,13 @@ See Also:
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
20
|
import json
|
|
21
|
-
import os
|
|
22
|
-
import warnings
|
|
23
21
|
from collections.abc import Mapping
|
|
24
22
|
from pathlib import Path
|
|
25
23
|
from typing import Any
|
|
26
24
|
|
|
27
|
-
import
|
|
28
|
-
|
|
29
|
-
import monai.networks.nets as monai_nets
|
|
30
|
-
from monai.apps.utils import download_and_extract, logger
|
|
25
|
+
from monai.apps.utils import download_and_extract
|
|
31
26
|
from monai.config.type_definitions import PathLike
|
|
32
|
-
from monai.
|
|
27
|
+
from monai.utils.deprecate_utils import DeprecatedError, deprecated
|
|
33
28
|
from monai.utils.module import optional_import
|
|
34
29
|
|
|
35
30
|
from .model_desc import MODEL_DESC
|
|
@@ -38,8 +33,21 @@ from .model_desc import RemoteMMARKeys as Keys
|
|
|
38
33
|
__all__ = ["get_model_spec", "download_mmar", "load_from_mmar"]
|
|
39
34
|
|
|
40
35
|
|
|
41
|
-
def
|
|
42
|
-
"""
|
|
36
|
+
def _get_model_spec(idx: int | str) -> dict | Any:
|
|
37
|
+
"""
|
|
38
|
+
Look up a model specification without emitting a deprecation warning.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
idx: An index into ``MODEL_DESC`` or a model ID. Negative indices count from the end.
|
|
42
|
+
Model IDs ignore case and leading or trailing whitespace.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
The matching model specification. Unknown IDs and inputs other than integers or strings
|
|
46
|
+
are returned unchanged.
|
|
47
|
+
|
|
48
|
+
Raises:
|
|
49
|
+
IndexError: If an integer index is outside the range of ``MODEL_DESC``.
|
|
50
|
+
"""
|
|
43
51
|
if isinstance(idx, int):
|
|
44
52
|
return MODEL_DESC[idx]
|
|
45
53
|
if isinstance(idx, str):
|
|
@@ -50,6 +58,21 @@ def get_model_spec(idx: int | str) -> dict | Any:
|
|
|
50
58
|
return idx
|
|
51
59
|
|
|
52
60
|
|
|
61
|
+
@deprecated(
|
|
62
|
+
since="1.7.0",
|
|
63
|
+
removed="1.9.0",
|
|
64
|
+
msg_suffix="NVIDIA Clara MMAR support is deprecated. Please use MONAI Bundles instead.",
|
|
65
|
+
)
|
|
66
|
+
def get_model_spec(idx: int | str) -> dict | Any:
|
|
67
|
+
"""
|
|
68
|
+
Get a model specification by index or model ID.
|
|
69
|
+
|
|
70
|
+
.. deprecated:: 1.7.0
|
|
71
|
+
NVIDIA Clara MMAR support will be removed in version 1.9.0. Use MONAI Bundles instead.
|
|
72
|
+
"""
|
|
73
|
+
return _get_model_spec(idx)
|
|
74
|
+
|
|
75
|
+
|
|
53
76
|
def _get_all_ngc_models(pattern, page_index=0, page_size=50):
|
|
54
77
|
url = "https://api.ngc.nvidia.com/v2/search/catalog/resources/MODEL"
|
|
55
78
|
query_dict = {
|
|
@@ -99,16 +122,20 @@ def _get_ngc_url(model_name: str, version: str, model_prefix: str = "") -> str:
|
|
|
99
122
|
return f"https://api.ngc.nvidia.com/v2/models/{model_prefix}{model_name}/versions/{version}/zip"
|
|
100
123
|
|
|
101
124
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
125
|
+
@deprecated(
|
|
126
|
+
since="1.7.0",
|
|
127
|
+
removed="1.9.0",
|
|
128
|
+
msg_suffix="NVIDIA Clara MMAR support is deprecated. Please use MONAI Bundles instead.",
|
|
129
|
+
)
|
|
106
130
|
def download_mmar(
|
|
107
131
|
item: str | Mapping, mmar_dir: PathLike | None = None, progress: bool = True, api: bool = True, version: int = -1
|
|
108
132
|
) -> Path:
|
|
109
133
|
"""
|
|
110
134
|
Download and extract Medical Model Archive (MMAR) from Nvidia Clara Train.
|
|
111
135
|
|
|
136
|
+
.. deprecated:: 1.7.0
|
|
137
|
+
NVIDIA Clara MMAR support will be removed in version 1.9.0. Use MONAI Bundles instead.
|
|
138
|
+
|
|
112
139
|
See Also:
|
|
113
140
|
- https://docs.nvidia.com/clara/
|
|
114
141
|
- Nvidia NGC Registry CLI
|
|
@@ -165,7 +192,7 @@ def download_mmar(
|
|
|
165
192
|
return model_dir_list[0]
|
|
166
193
|
|
|
167
194
|
if not isinstance(item, Mapping):
|
|
168
|
-
item =
|
|
195
|
+
item = _get_model_spec(item)
|
|
169
196
|
ver = item.get(Keys.VERSION, 1)
|
|
170
197
|
if version > 0:
|
|
171
198
|
ver = str(version)
|
|
@@ -185,6 +212,11 @@ def download_mmar(
|
|
|
185
212
|
return model_dir
|
|
186
213
|
|
|
187
214
|
|
|
215
|
+
@deprecated(
|
|
216
|
+
since="1.7.0",
|
|
217
|
+
removed="1.9.0",
|
|
218
|
+
msg_suffix="NVIDIA Clara MMAR support is deprecated. Please use MONAI Bundles instead.",
|
|
219
|
+
)
|
|
188
220
|
def load_from_mmar(
|
|
189
221
|
item: Mapping | str | int,
|
|
190
222
|
mmar_dir: PathLike | None = None,
|
|
@@ -198,117 +230,31 @@ def load_from_mmar(
|
|
|
198
230
|
model_file: PathLike | None = None,
|
|
199
231
|
) -> Any:
|
|
200
232
|
"""
|
|
201
|
-
|
|
233
|
+
Disabled loader for NVIDIA Clara Medical Model Archive (MMAR) models.
|
|
234
|
+
|
|
235
|
+
.. deprecated:: 1.7.0
|
|
236
|
+
Loading MMAR models is disabled for security reasons. This function will be removed
|
|
237
|
+
in version 1.9.0. Use MONAI Bundles instead.
|
|
238
|
+
|
|
239
|
+
Every call raises :class:`monai.utils.DeprecatedError` before downloading or
|
|
240
|
+
loading a model. The arguments are kept for compatibility and are ignored.
|
|
241
|
+
Their former meanings are listed below.
|
|
202
242
|
|
|
203
243
|
Args:
|
|
204
244
|
item: the corresponding model item from `MODEL_DESC`.
|
|
205
|
-
mmar_dir:
|
|
245
|
+
mmar_dir: target directory to store the MMAR, default is mmars subfolder under `torch.hub get_dir()`.
|
|
206
246
|
progress: whether to display a progress bar when downloading the content.
|
|
207
247
|
version: version number of the MMAR. Set it to `-1` to use `item[Keys.VERSION]`.
|
|
208
248
|
map_location: pytorch API parameter for `torch.load` or `torch.jit.load`.
|
|
209
249
|
pretrained: whether to load the pretrained weights after initializing a network module.
|
|
210
250
|
weights_only: whether to load only the weights instead of initializing the network module and assign weights.
|
|
211
251
|
model_key: a key to search in the model file or config file for the model dictionary.
|
|
212
|
-
|
|
252
|
+
The model dictionary was expected to have
|
|
213
253
|
`{"[name|path]": "test.module", "args": {'kw': 'test'}}`.
|
|
214
|
-
api: whether to query NGC API to get model
|
|
254
|
+
api: whether to query NGC API to get model information.
|
|
215
255
|
model_file: the relative path to the model file within an MMAR.
|
|
216
256
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
>>> unet_model = load_from_mmar("clara_pt_prostate_mri_segmentation_1", mmar_dir=".", map_location="cpu")
|
|
220
|
-
>>> print(unet_model)
|
|
221
|
-
|
|
222
|
-
See Also:
|
|
223
|
-
https://docs.nvidia.com/clara/
|
|
224
|
-
"""
|
|
225
|
-
if api:
|
|
226
|
-
item = {Keys.NAME: get_model_spec(item)[Keys.NAME] if isinstance(item, int) else f"{item}"}
|
|
227
|
-
if not isinstance(item, Mapping):
|
|
228
|
-
item = get_model_spec(item)
|
|
229
|
-
model_dir = download_mmar(item=item, mmar_dir=mmar_dir, progress=progress, version=version, api=api)
|
|
230
|
-
if model_file is None:
|
|
231
|
-
model_file = os.path.join("models", "model.pt")
|
|
232
|
-
_model_file = model_dir / item.get(Keys.MODEL_FILE, model_file)
|
|
233
|
-
logger.info(f'\n*** "{item.get(Keys.NAME)}" available at {model_dir}.')
|
|
234
|
-
|
|
235
|
-
# loading with `torch.jit.load`
|
|
236
|
-
if _model_file.name.endswith(".ts"):
|
|
237
|
-
if not pretrained:
|
|
238
|
-
warnings.warn("Loading a ScriptModule, 'pretrained' option ignored.")
|
|
239
|
-
if weights_only:
|
|
240
|
-
warnings.warn("Loading a ScriptModule, 'weights_only' option ignored.")
|
|
241
|
-
return torch.jit.load(_model_file, map_location=map_location)
|
|
242
|
-
|
|
243
|
-
# loading with `torch.load`
|
|
244
|
-
model_dict = torch.load(_model_file, map_location=map_location, weights_only=True)
|
|
245
|
-
if weights_only:
|
|
246
|
-
return model_dict.get(model_key, model_dict) # model_dict[model_key] or model_dict directly
|
|
247
|
-
|
|
248
|
-
# 1. search `model_dict['train_config]` for model config spec.
|
|
249
|
-
model_config = _get_val(dict(model_dict).get("train_conf", {}), key=model_key, default={})
|
|
250
|
-
if not model_config or not isinstance(model_config, Mapping):
|
|
251
|
-
# 2. search json CONFIG_FILE for model config spec.
|
|
252
|
-
json_path = model_dir / item.get(Keys.CONFIG_FILE, os.path.join("config", "config_train.json"))
|
|
253
|
-
with open(json_path) as f:
|
|
254
|
-
conf_dict = json.load(f)
|
|
255
|
-
conf_dict = dict(conf_dict)
|
|
256
|
-
model_config = _get_val(conf_dict, key=model_key, default={})
|
|
257
|
-
if not model_config:
|
|
258
|
-
# 3. search `model_dict` for model config spec.
|
|
259
|
-
model_config = _get_val(dict(model_dict), key=model_key, default={})
|
|
260
|
-
|
|
261
|
-
if not (model_config and isinstance(model_config, Mapping)):
|
|
262
|
-
raise ValueError(
|
|
263
|
-
f"Could not load model config dictionary from config: {item.get(Keys.CONFIG_FILE)}, "
|
|
264
|
-
f"or from model file: {item.get(Keys.MODEL_FILE)}."
|
|
265
|
-
)
|
|
266
|
-
|
|
267
|
-
# parse `model_config` for model class and model parameters
|
|
268
|
-
if model_config.get("name"): # model config section is a "name"
|
|
269
|
-
model_name = model_config["name"]
|
|
270
|
-
model_cls = monai_nets.__dict__[model_name]
|
|
271
|
-
elif model_config.get("path"): # model config section is a "path"
|
|
272
|
-
# https://docs.nvidia.com/clara/clara-train-sdk/pt/byom.html
|
|
273
|
-
model_module, model_name = model_config.get("path", ".").rsplit(".", 1)
|
|
274
|
-
model_cls, has_cls = optional_import(module=model_module, name=model_name)
|
|
275
|
-
if not has_cls:
|
|
276
|
-
raise ValueError(
|
|
277
|
-
f"Could not load MMAR model config {model_config.get('path', '')}, "
|
|
278
|
-
f"Please make sure MMAR's sub-folders in '{model_dir}' is on the PYTHONPATH."
|
|
279
|
-
"See also: https://docs.nvidia.com/clara/clara-train-sdk/pt/byom.html"
|
|
280
|
-
)
|
|
281
|
-
else:
|
|
282
|
-
raise ValueError(f"Could not load model config {model_config}.")
|
|
283
|
-
|
|
284
|
-
logger.info(f"*** Model: {model_cls}")
|
|
285
|
-
model_kwargs = model_config.get("args", None)
|
|
286
|
-
if model_kwargs:
|
|
287
|
-
model_inst = model_cls(**model_kwargs)
|
|
288
|
-
logger.info(f"*** Model params: {model_kwargs}")
|
|
289
|
-
else:
|
|
290
|
-
model_inst = model_cls()
|
|
291
|
-
if pretrained:
|
|
292
|
-
_, changed, unchanged = copy_model_state(model_inst, model_dict.get(model_key, model_dict), inplace=True)
|
|
293
|
-
if not (changed and not unchanged): # not all model_inst variables are changed
|
|
294
|
-
logger.warning(f"*** Loading model state -- unchanged: {len(unchanged)}, changed: {len(changed)}.")
|
|
295
|
-
logger.info("\n---")
|
|
296
|
-
doc_url = item.get(Keys.DOC) or _get_ngc_doc_url(item[Keys.NAME], model_prefix="nvidia:med:")
|
|
297
|
-
logger.info(f"For more information, please visit {doc_url}\n")
|
|
298
|
-
return model_inst
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
def _get_val(input_dict: Mapping, key: str = "model", default: Any | None = None) -> Any | None:
|
|
302
|
-
"""
|
|
303
|
-
Search for the item with `key` in `config_dict`.
|
|
304
|
-
Returns: the first occurrence of `key` in a breadth first search.
|
|
257
|
+
Raises:
|
|
258
|
+
DeprecatedError: always, because MMAR loading is disabled for security reasons.
|
|
305
259
|
"""
|
|
306
|
-
|
|
307
|
-
return input_dict[key]
|
|
308
|
-
for sub_dict in input_dict:
|
|
309
|
-
val = input_dict[sub_dict]
|
|
310
|
-
if isinstance(val, Mapping):
|
|
311
|
-
found_val = _get_val(val, key=key, default=None)
|
|
312
|
-
if found_val is not None:
|
|
313
|
-
return found_val
|
|
314
|
-
return default
|
|
260
|
+
raise DeprecatedError("load_from_mmar is disabled for security reasons. Please use MONAI Bundles instead.")
|
|
@@ -20,19 +20,31 @@ from __future__ import annotations
|
|
|
20
20
|
import os
|
|
21
21
|
from typing import Any
|
|
22
22
|
|
|
23
|
+
from monai.utils.deprecate_utils import deprecated
|
|
24
|
+
|
|
23
25
|
__all__ = ["MODEL_DESC", "RemoteMMARKeys"]
|
|
24
26
|
|
|
25
27
|
|
|
28
|
+
@deprecated(
|
|
29
|
+
since="1.7.0",
|
|
30
|
+
removed="1.9.0",
|
|
31
|
+
msg_suffix="NVIDIA Clara MMAR support is deprecated. Please use MONAI Bundles instead.",
|
|
32
|
+
)
|
|
26
33
|
class RemoteMMARKeys:
|
|
27
34
|
"""
|
|
28
35
|
Data keys used for loading MMAR.
|
|
29
36
|
ID must uniquely define an MMAR.
|
|
37
|
+
|
|
38
|
+
.. deprecated:: 1.7.0
|
|
39
|
+
NVIDIA Clara MMAR support will be removed in version 1.9.0. Use MONAI Bundles instead.
|
|
40
|
+
Reading these constants or ``MODEL_DESC`` does not emit a warning; both will be removed
|
|
41
|
+
with the MMAR module in version 1.9.0.
|
|
30
42
|
"""
|
|
31
43
|
|
|
32
44
|
ID = "id" # unique MMAR
|
|
33
45
|
NAME = "name" # MMAR name for readability
|
|
34
46
|
URL = "url" # remote location of the MMAR, see also: `monai.apps.mmars.mmars._get_ngc_url`
|
|
35
|
-
DOC = "doc" # documentation page of the remote model
|
|
47
|
+
DOC = "doc" # documentation page of the remote model
|
|
36
48
|
FILE_TYPE = "file_type" # type of the compressed MMAR
|
|
37
49
|
HASH_TYPE = "hash_type" # hashing method for the compressed MMAR
|
|
38
50
|
HASH_VAL = "hash_val" # hashing value for the compressed MMAR
|
|
@@ -178,7 +178,6 @@ class GenerateInstanceBorderd(Transform):
|
|
|
178
178
|
border_key: the output key where instance border map is written. Defaults to `"border"`.
|
|
179
179
|
kernel_size: the size of the Sobel kernel. Defaults to 21.
|
|
180
180
|
dtype: target data content type to convert, default is np.float32.
|
|
181
|
-
allow_missing_keys: don't raise exception if key is missing.
|
|
182
181
|
|
|
183
182
|
Raises:
|
|
184
183
|
ValueError: when the `hover_map` has only one value.
|
|
@@ -259,7 +258,6 @@ class GenerateWatershedMarkersd(Transform):
|
|
|
259
258
|
min_object_size: objects smaller than this size are removed. Defaults to 10.
|
|
260
259
|
postprocess_fn: execute additional post transformation on marker. Defaults to None.
|
|
261
260
|
dtype: target data content type to convert, default is np.uint8.
|
|
262
|
-
allow_missing_keys: don't raise exception if key is missing.
|
|
263
261
|
"""
|
|
264
262
|
|
|
265
263
|
backend = GenerateWatershedMarkers.backend
|
|
@@ -1087,7 +1087,7 @@ class NvImgCodecPydicomReader(PydicomReader):
|
|
|
1087
1087
|
Load DICOM images using Pydicom with GPU-accelerated decompression via nvImageCodec.
|
|
1088
1088
|
|
|
1089
1089
|
This reader extends :py:class:`PydicomReader` and registers the nvImageCodec pydicom
|
|
1090
|
-
decoder plugin on
|
|
1090
|
+
decoder plugin lazily on first use. The plugin accelerates decoding of compressed pixel data
|
|
1091
1091
|
for JPEG, JPEG 2000, and HTJ2K transfer syntaxes when CUDA, CuPy and ``nvidia-nvimgcodec`` are available.
|
|
1092
1092
|
|
|
1093
1093
|
If nvImageCodec is not available, a warning is issued and the reader falls back to the
|
|
@@ -1117,8 +1117,8 @@ class NvImgCodecPydicomReader(PydicomReader):
|
|
|
1117
1117
|
|
|
1118
1118
|
This reader only declares ``@require_pkg(pkg_name="pydicom")`` so that :py:class:`monai.transforms.LoadImage`
|
|
1119
1119
|
can register it without hard-failing when GPU dependencies are missing. ``pydicom`` is required to construct
|
|
1120
|
-
the reader;
|
|
1121
|
-
default pydicom decoders
|
|
1120
|
+
the reader; nvImageCodec, CUDA, and CuPy availability is checked when a DICOM file is verified or read.
|
|
1121
|
+
If the plugin is unavailable or registration fails, the reader falls back to the default pydicom decoders.
|
|
1122
1122
|
|
|
1123
1123
|
Args:
|
|
1124
1124
|
channel_dim: the channel dimension of the input image, default is None.
|
|
@@ -1159,6 +1159,14 @@ class NvImgCodecPydicomReader(PydicomReader):
|
|
|
1159
1159
|
to_gpu=False,
|
|
1160
1160
|
**kwargs,
|
|
1161
1161
|
)
|
|
1162
|
+
|
|
1163
|
+
self._nvimgcodec_available = False
|
|
1164
|
+
self._setup_done = False
|
|
1165
|
+
|
|
1166
|
+
def _ensure_setup(self) -> None:
|
|
1167
|
+
"""Import and register the nvImageCodec plugin on first use only."""
|
|
1168
|
+
if self._setup_done:
|
|
1169
|
+
return
|
|
1162
1170
|
from monai.data.nvimgcodec_pydicom_plugin import is_nvimgcodec_available, register_as_decoder_plugin
|
|
1163
1171
|
|
|
1164
1172
|
self._nvimgcodec_available = is_nvimgcodec_available()
|
|
@@ -1167,14 +1175,28 @@ class NvImgCodecPydicomReader(PydicomReader):
|
|
|
1167
1175
|
"NvImgCodecPydicomReader: nvImageCodec decoder plugin did not register successfully. "
|
|
1168
1176
|
"Falling back to default pydicom decoders."
|
|
1169
1177
|
)
|
|
1178
|
+
self._setup_done = True
|
|
1170
1179
|
|
|
1171
1180
|
def verify_suffix(self, filename: Sequence[PathLike] | PathLike) -> bool:
|
|
1172
1181
|
"""
|
|
1173
1182
|
Verify whether the specified file or files are DICOM and nvImageCodec is available.
|
|
1174
1183
|
"""
|
|
1175
|
-
if not has_pydicom or not
|
|
1184
|
+
if not has_pydicom or not is_dicom_path(filename):
|
|
1176
1185
|
return False
|
|
1177
|
-
|
|
1186
|
+
self._ensure_setup()
|
|
1187
|
+
return self._nvimgcodec_available
|
|
1188
|
+
|
|
1189
|
+
def read(self, data: Sequence[PathLike] | PathLike, **kwargs):
|
|
1190
|
+
"""Read image data using the configured reader.
|
|
1191
|
+
|
|
1192
|
+
Args:
|
|
1193
|
+
data: Input image data or file path.
|
|
1194
|
+
**kwargs: Additional arguments passed to the underlying reader.
|
|
1195
|
+
|
|
1196
|
+
Returns:
|
|
1197
|
+
The image data returned by the underlying reader."""
|
|
1198
|
+
self._ensure_setup()
|
|
1199
|
+
return super().read(data, **kwargs)
|
|
1178
1200
|
|
|
1179
1201
|
|
|
1180
1202
|
@require_pkg(pkg_name="nibabel")
|
{monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/data/nvimgcodec_pydicom_plugin.py
RENAMED
|
@@ -66,7 +66,7 @@ def is_nvimgcodec_available() -> bool:
|
|
|
66
66
|
def register_as_decoder_plugin(module_path: str | None = None) -> bool:
|
|
67
67
|
"""Register the nvImageCodec pydicom decoder plugin."""
|
|
68
68
|
if not is_nvimgcodec_available():
|
|
69
|
-
_logger.
|
|
69
|
+
_logger.debug("nvImageCodec is not available; skipping pydicom decoder plugin registration.")
|
|
70
70
|
return False
|
|
71
71
|
if not has_pydicom_plugin:
|
|
72
72
|
return False
|
|
@@ -241,6 +241,7 @@ class ZarrAvgMerger(Merger):
|
|
|
241
241
|
If True, chunk shape will be guessed from `shape` and `dtype`.
|
|
242
242
|
If False, it will be set to `shape`, i.e., single chunk for the whole array.
|
|
243
243
|
If an int, the chunk size in each dimension will be given by the value of `chunks`.
|
|
244
|
+
thread_locking: whether to use thread locking during aggregation. Default is True.
|
|
244
245
|
"""
|
|
245
246
|
|
|
246
247
|
@deprecated_arg(
|
|
@@ -286,24 +287,28 @@ class ZarrAvgMerger(Merger):
|
|
|
286
287
|
self.value_dtype = value_dtype
|
|
287
288
|
self.count_dtype = count_dtype
|
|
288
289
|
self.store = store
|
|
289
|
-
|
|
290
|
+
# Use separate tmpdir attributes so both TemporaryDirectory objects remain alive
|
|
291
|
+
# for the full lifetime of this instance. Previously a single `self.tmpdir` was
|
|
292
|
+
# overwritten when both value_store and count_store were None, causing the first
|
|
293
|
+
# TemporaryDirectory to be garbage-collected immediately.
|
|
294
|
+
self.value_tmpdir: TemporaryDirectory | None = None
|
|
295
|
+
self.count_tmpdir: TemporaryDirectory | None = None
|
|
290
296
|
|
|
291
297
|
# Handle zarr v3 vs older versions
|
|
292
298
|
is_zarr_v3 = version_geq(get_package_version("zarr"), "3.0.0")
|
|
293
299
|
|
|
294
300
|
if is_zarr_v3:
|
|
295
301
|
if value_store is None:
|
|
296
|
-
self.
|
|
297
|
-
self.value_store = zarr.storage.LocalStore(self.
|
|
302
|
+
self.value_tmpdir = TemporaryDirectory()
|
|
303
|
+
self.value_store = zarr.storage.LocalStore(self.value_tmpdir.name) # type: ignore
|
|
298
304
|
else:
|
|
299
305
|
self.value_store = value_store # type: ignore
|
|
300
306
|
if count_store is None:
|
|
301
|
-
self.
|
|
302
|
-
self.count_store = zarr.storage.LocalStore(self.
|
|
307
|
+
self.count_tmpdir = TemporaryDirectory()
|
|
308
|
+
self.count_store = zarr.storage.LocalStore(self.count_tmpdir.name) # type: ignore
|
|
303
309
|
else:
|
|
304
310
|
self.count_store = count_store # type: ignore
|
|
305
311
|
else:
|
|
306
|
-
self.tmpdir = None
|
|
307
312
|
self.value_store = zarr.storage.TempStore() if value_store is None else value_store # type: ignore
|
|
308
313
|
self.count_store = zarr.storage.TempStore() if count_store is None else count_store # type: ignore
|
|
309
314
|
|
|
@@ -325,7 +330,6 @@ class ZarrAvgMerger(Merger):
|
|
|
325
330
|
if codecs is not None:
|
|
326
331
|
self.codecs = codecs
|
|
327
332
|
elif compressor is not None:
|
|
328
|
-
# Convert compressor to codec format
|
|
329
333
|
if isinstance(compressor, (list, tuple)):
|
|
330
334
|
self.codecs = compressor
|
|
331
335
|
else:
|
|
@@ -354,19 +358,22 @@ class ZarrAvgMerger(Merger):
|
|
|
354
358
|
self.count_codecs = None
|
|
355
359
|
else:
|
|
356
360
|
# For zarr v2, use compressors
|
|
357
|
-
if codecs
|
|
358
|
-
|
|
359
|
-
|
|
361
|
+
if isinstance(codecs, (list, tuple)):
|
|
362
|
+
self.codecs = codecs[0] if codecs else None
|
|
363
|
+
elif codecs is not None:
|
|
364
|
+
self.codecs = codecs
|
|
360
365
|
else:
|
|
361
366
|
self.codecs = compressor # type: ignore[assignment]
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
367
|
+
if isinstance(value_codecs, (list, tuple)):
|
|
368
|
+
self.value_codecs = value_codecs[0] if value_codecs else None
|
|
369
|
+
elif value_codecs is not None:
|
|
370
|
+
self.value_codecs = value_codecs
|
|
365
371
|
else:
|
|
366
372
|
self.value_codecs = value_compressor # type: ignore[assignment]
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
373
|
+
if isinstance(count_codecs, (list, tuple)):
|
|
374
|
+
self.count_codecs = count_codecs[0] if count_codecs else None
|
|
375
|
+
elif count_codecs is not None:
|
|
376
|
+
self.count_codecs = count_codecs
|
|
370
377
|
else:
|
|
371
378
|
self.count_codecs = count_compressor # type: ignore[assignment]
|
|
372
379
|
|
{monai_weekly-1.7.dev2642 → monai_weekly-1.7.dev2643}/monai/metrics/active_learning_metrics.py
RENAMED
|
@@ -79,8 +79,6 @@ class LabelQualityScore(Metric):
|
|
|
79
79
|
with uncertainty
|
|
80
80
|
Args:
|
|
81
81
|
include_background: Whether to include the background of the spatial image or channel 0 of the 1-D vector
|
|
82
|
-
spatial_map: Boolean, if set to True, spatial map of variance will be returned corresponding to i/p image
|
|
83
|
-
dimensions
|
|
84
82
|
scalar_reduction: reduction type of the metric, either 'sum' or 'mean' can be used
|
|
85
83
|
|
|
86
84
|
"""
|
|
@@ -43,12 +43,18 @@ class ConfusionMatrixMetric(CumulativeIterationMetric):
|
|
|
43
43
|
``"miss rate"``, ``"fall out"``, ``"false discovery rate"``, ``"false omission rate"``,
|
|
44
44
|
``"prevalence threshold"``, ``"threat score"``, ``"accuracy"``, ``"balanced accuracy"``,
|
|
45
45
|
``"f1 score"``, ``"matthews correlation coefficient"``, ``"fowlkes mallows index"``,
|
|
46
|
-
``"informedness"``, ``"markedness"``
|
|
46
|
+
``"informedness"``, ``"markedness"``, ``"positive likelihood ratio"``,
|
|
47
|
+
``"negative likelihood ratio"``, ``"diagnostic odds ratio"``]
|
|
47
48
|
Some of the metrics have multiple aliases (as shown in the wikipedia page aforementioned),
|
|
48
49
|
and you can also input those names instead.
|
|
49
50
|
Except for input only one metric, multiple metrics are also supported via input a sequence of metric names, such as
|
|
50
51
|
("sensitivity", "precision", "recall"), if ``compute_sample`` is ``True``, multiple ``f`` and ``not_nans`` will be
|
|
51
52
|
returned with the same order as input names when calling the class.
|
|
53
|
+
Note that for the likelihood-ratio family — ``"positive likelihood ratio"`` (``LR+ = tpr / fpr``),
|
|
54
|
+
``"negative likelihood ratio"`` (``LR- = fnr / tnr``) and ``"diagnostic odds ratio"``
|
|
55
|
+
(``DOR = (tp * tn) / (fp * fn)``) — a zero denominator yields ``NaN`` (e.g. ``LR+`` is undefined
|
|
56
|
+
when the false positive rate is ``0``, and ``DOR`` when either ``fp`` or ``fn`` is ``0``),
|
|
57
|
+
following the same convention as the other ratio-based metrics.
|
|
52
58
|
compute_sample: when reducing, if ``True``, each sample's metric will be computed based on each confusion matrix first.
|
|
53
59
|
if ``False``, compute reduction on the confusion matrices first, defaults to ``False``.
|
|
54
60
|
reduction: define mode of reduction to the metrics, will only apply reduction on `not-nan` values,
|
|
@@ -63,6 +69,7 @@ class ConfusionMatrixMetric(CumulativeIterationMetric):
|
|
|
63
69
|
Voxels with this label are excluded from the score, which is useful for padding, unlabeled regions,
|
|
64
70
|
or boundary artifacts. For federated or aggregated settings, ensure all clients use the same
|
|
65
71
|
ignore_index to keep score values comparable.
|
|
72
|
+
For a single-channel binary target, ignoring channel 0 excludes locations where the target is 1.
|
|
66
73
|
|
|
67
74
|
"""
|
|
68
75
|
|
|
@@ -153,11 +160,19 @@ def get_confusion_matrix(
|
|
|
153
160
|
The values should be binarized.
|
|
154
161
|
y: ground truth to compute the metric. It must be one-hot format and first dim is batch.
|
|
155
162
|
The values should be binarized.
|
|
163
|
+
A single channel is a binary membership indicator, not a map of class IDs.
|
|
156
164
|
include_background: whether to include metric computation on the first channel of
|
|
157
165
|
the predicted output. Defaults to True.
|
|
158
166
|
ignore_index: single integer class index (or sentinel value) to ignore from the metric computation.
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
For a valid class index, voxels belonging to that channel are excluded from all classes' counts.
|
|
168
|
+
The existing channel-exclusion behavior is retained for multi-channel targets. With a single-channel
|
|
169
|
+
binary target, ignore_index=0 excludes locations where the target is 1 without zeroing the channel.
|
|
170
|
+
Counts at valid single-channel locations do not depend on include_background. Out-of-range values use all-zero
|
|
171
|
+
locations for multi-channel targets and direct value comparison for single-channel targets.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
Tensor of shape [B, C, 4], containing true positive, false positive, true negative, and false negative
|
|
175
|
+
counts, in that order, for each sample and evaluated channel.
|
|
161
176
|
|
|
162
177
|
Raises:
|
|
163
178
|
ValueError: when `y_pred` and `y` have different shapes.
|
|
@@ -173,17 +188,23 @@ def get_confusion_matrix(
|
|
|
173
188
|
# get confusion matrix related metric
|
|
174
189
|
batch_size, n_class = y_pred.shape[:2]
|
|
175
190
|
|
|
176
|
-
#
|
|
177
|
-
if
|
|
191
|
+
# Single-channel targets need spatial exclusion only, preserving errors at valid locations.
|
|
192
|
+
if (
|
|
193
|
+
ignore_index is not None
|
|
194
|
+
and original_y.shape[1] > 1
|
|
195
|
+
and 0 <= ignore_index < (y_pred.shape[1] + (0 if include_background else 1))
|
|
196
|
+
):
|
|
178
197
|
ignore_channel = ignore_index if include_background else ignore_index - 1
|
|
179
198
|
if 0 <= ignore_channel < y_pred.shape[1]:
|
|
180
199
|
y_pred = y_pred.clone()
|
|
181
200
|
y = y.clone()
|
|
182
201
|
y_pred[:, ignore_channel] = 0
|
|
183
202
|
y[:, ignore_channel] = 0
|
|
184
|
-
|
|
203
|
+
if ignore_index is not None and 0 <= ignore_index < original_y.shape[1]:
|
|
204
|
+
# Every channel represents binary membership; comparison also supports boolean targets.
|
|
205
|
+
mask = (original_y[:, ignore_index : ignore_index + 1] == 0).float()
|
|
185
206
|
else:
|
|
186
|
-
mask = create_ignore_mask(original_y
|
|
207
|
+
mask = create_ignore_mask(original_y, ignore_index)
|
|
187
208
|
|
|
188
209
|
# convert to [BNS], where S is the number of pixels for one sample.
|
|
189
210
|
y_pred = y_pred.reshape(batch_size, n_class, -1)
|
|
@@ -226,7 +247,8 @@ def compute_confusion_matrix_metric(metric_name: str, confusion_matrix: torch.Te
|
|
|
226
247
|
``"miss rate"``, ``"fall out"``, ``"false discovery rate"``, ``"false omission rate"``,
|
|
227
248
|
``"prevalence threshold"``, ``"threat score"``, ``"accuracy"``, ``"balanced accuracy"``,
|
|
228
249
|
``"f1 score"``, ``"matthews correlation coefficient"``, ``"fowlkes mallows index"``,
|
|
229
|
-
``"informedness"``, ``"markedness"``
|
|
250
|
+
``"informedness"``, ``"markedness"``, ``"positive likelihood ratio"``,
|
|
251
|
+
``"negative likelihood ratio"``, ``"diagnostic odds ratio"``]
|
|
230
252
|
Some of the metrics have multiple aliases (as shown in the wikipedia page aforementioned),
|
|
231
253
|
and you can also input those names instead.
|
|
232
254
|
confusion_matrix: Please see the doc string of the function ``get_confusion_matrix`` for more details.
|
|
@@ -304,6 +326,19 @@ def compute_confusion_matrix_metric(metric_name: str, confusion_matrix: torch.Te
|
|
|
304
326
|
npv = torch.where((tn + fn) > 0, tn / (tn + fn), nan_tensor)
|
|
305
327
|
numerator = ppv + npv - 1.0
|
|
306
328
|
denominator = 1.0
|
|
329
|
+
elif metric == "plr":
|
|
330
|
+
# LR+ = sensitivity / (1 - specificity) = tpr / fpr; fpr == 0 yields NaN
|
|
331
|
+
tpr = torch.where(p > 0, tp / p, nan_tensor)
|
|
332
|
+
fpr = torch.where(n > 0, fp / n, nan_tensor)
|
|
333
|
+
numerator, denominator = tpr, fpr
|
|
334
|
+
elif metric == "nlr":
|
|
335
|
+
# LR- = (1 - sensitivity) / specificity = fnr / tnr; tnr == 0 yields NaN
|
|
336
|
+
fnr = torch.where(p > 0, fn / p, nan_tensor)
|
|
337
|
+
tnr = torch.where(n > 0, tn / n, nan_tensor)
|
|
338
|
+
numerator, denominator = fnr, tnr
|
|
339
|
+
elif metric == "dor":
|
|
340
|
+
# DOR = (LR+) / (LR-) = (tp * tn) / (fp * fn); fp * fn == 0 yields NaN
|
|
341
|
+
numerator, denominator = tp * tn, fp * fn
|
|
307
342
|
else:
|
|
308
343
|
raise NotImplementedError("the metric is not implemented.")
|
|
309
344
|
|
|
@@ -360,4 +395,10 @@ def check_confusion_matrix_metric_name(metric_name: str) -> str:
|
|
|
360
395
|
return "bm"
|
|
361
396
|
if metric_name in ["markedness", "deltap", "mk"]:
|
|
362
397
|
return "mk"
|
|
398
|
+
if metric_name in ["positive_likelihood_ratio", "plr", "lr+"]:
|
|
399
|
+
return "plr"
|
|
400
|
+
if metric_name in ["negative_likelihood_ratio", "nlr", "lr-"]:
|
|
401
|
+
return "nlr"
|
|
402
|
+
if metric_name in ["diagnostic_odds_ratio", "dor"]:
|
|
403
|
+
return "dor"
|
|
363
404
|
raise NotImplementedError("the metric is not implemented.")
|