monai-weekly 1.7.dev2626__tar.gz → 1.7.dev2627__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.dev2626/monai_weekly.egg-info → monai_weekly-1.7.dev2627}/PKG-INFO +1 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/__init__.py +1 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_version.py +3 -3
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/nnunetv2_runner.py +6 -2
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/utils.py +1 -9
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/transforms.py +0 -2
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/auto3dseg/utils.py +1 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/dataset.py +19 -25
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/image_reader.py +4 -4
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/utils.py +4 -15
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/inferers/merger.py +0 -3
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/deform.py +66 -17
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/image_dissimilarity.py +0 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/nacl_loss.py +1 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/__init__.py +1 -0
- monai_weekly-1.7.dev2627/monai/metrics/absolute_volume_difference.py +180 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/froc.py +7 -5
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/generalized_dice.py +0 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/utils.py +24 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/text_embedding.py +0 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/filtering.py +0 -3
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/simplelayers.py +0 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/basic_unet.py +0 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/basic_unetplusplus.py +0 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/array.py +1 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/dictionary.py +5 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/array.py +19 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/dictionary.py +11 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/functional.py +7 -2
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/utils.py +65 -26
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/profiling.py +0 -2
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627/monai_weekly.egg-info}/PKG-INFO +1 -1
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/SOURCES.txt +1 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/LICENSE +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/MANIFEST.in +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/README.md +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_extensions/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm.cpp +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm.h +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm_cpu.cpp +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm_cuda.cu +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_extensions/gmm/gmm_cuda_linalg.cuh +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/_extensions/loader.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/__main__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/auto_runner.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/bundle_gen.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/data_analyzer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/ensemble_builder.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/hpo_gen.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/transforms.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/auto3dseg/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/datasets.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/deepedit/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/deepedit/interaction.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/deepedit/transforms.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/dataset.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/interaction.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/deepgrow/transforms.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/metrics/coco.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/metrics/matching.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/networks/retinanet_detector.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/networks/retinanet_network.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/box_ops.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/transforms/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/ATSS_matcher.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/anchor_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/box_coder.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/box_selector.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/detector_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/hard_negative_sampler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/detection/utils/predict_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/generation/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/autoencoderkl_maisi.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/controlnet_maisi.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/generation/maisi/networks/diffusion_model_unet_maisi.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/mmars/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/mmars/mmars.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/mmars/model_desc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/__main__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/nnunet/nnunet_bundle.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/nuclick/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/nuclick/transforms.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/losses/hovernet_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/metrics/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/metrics/lesion_froc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/post/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/post/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/stain/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/stain/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/transforms/stain/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/pathology/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/complex_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/fastmri_reader.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/mri_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/blocks/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/blocks/varnetblock.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/complex_unet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/networks/nets/varnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/transforms/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/reconstruction/transforms/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/tcia/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/tcia/label_desc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/tcia/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/inferer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/apps/vista3d/sampler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/auto3dseg/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/auto3dseg/algo_gen.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/auto3dseg/analyzer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/auto3dseg/operations.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/auto3dseg/seg_summarizer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/__main__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/config_item.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/config_parser.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/properties.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/reference_resolver.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/scripts.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/bundle/workflows.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/config/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/config/deviceconfig.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/config/type_definitions.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/box_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/csv_saver.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/dataloader.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/dataset_summary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/decathlon_datalist.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/fft_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/folder_layout.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/grid_dataset.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/image_dataset.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/image_writer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/iterable_dataset.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/itk_torch_bridge.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/meta_obj.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/meta_tensor.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/samplers.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/synthetic.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/test_time_augmentation.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/thread_buffer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/torchscript_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/ultrasound_confidence_map.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/video_dataset.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/wsi_datasets.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/data/wsi_reader.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/engines/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/engines/evaluator.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/engines/trainer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/engines/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/engines/workflow.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/client/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/client/client_algo.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/client/monai_algo.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/utils/constants.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/utils/exchange_object.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/fl/utils/filters.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/average_precision.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/calibration.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/checkpoint_loader.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/checkpoint_saver.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/classification_saver.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/clearml_handlers.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/confusion_matrix.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/decollate_batch.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/earlystop_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/garbage_collector.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/hausdorff_distance.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/ignite_metric.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/logfile_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/lr_schedule_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/mean_dice.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/mean_iou.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/metric_logger.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/metrics_reloaded_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/metrics_saver.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/mlflow_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/nvtx_handlers.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/parameter_scheduler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/postprocessing.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/probability_maps.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/regression_metrics.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/roc_auc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/smartcache_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/stats_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/surface_distance.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/tensorboard_handlers.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/trt_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/handlers/validation_handler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/inferers/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/inferers/inferer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/inferers/splitter.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/inferers/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/adversarial_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/aucm_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/barlow_twins.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/cldice.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/contrastive.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/dice.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/ds_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/focal_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/giou_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/hausdorff_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/mcc_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/multi_scale.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/perceptual.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/spatial_mask.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/spectral_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/ssim_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/sure_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/tversky.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/unified_focal_loss.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/losses/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/active_learning_metrics.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/average_precision.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/calibration.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/confusion_matrix.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/cumulative_average.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/embedding_collapse.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/f_beta_score.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/fid.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/hausdorff_distance.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/loss_metric.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/meandice.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/meaniou.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/metric.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/mmd.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/panoptic_quality.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/regression.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/rocauc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/surface_dice.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/surface_distance.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/metrics/wrapper.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/acti_norm.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/activation.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/activation_checkpointing.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/aspp.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/attention_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/backbone_fpn_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/cablock.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/convolutions.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/crf.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/crossattention.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/denseblock.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/dints_block.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/downsample.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/dynunet_block.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/encoder.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/fcn.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/feature_pyramid_network.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/fft_utils_t.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/localnet_block.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/mednext_block.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/mlp.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/patchembedding.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/pos_embed_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/regunet_block.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/rel_pos_embedding.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/segresnet_block.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/selfattention.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/spade_norm.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/spatialattention.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/squeeze_and_excitation.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/transformerblock.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/unetr_block.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/upsample.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/blocks/warp.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/conjugate_gradient.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/convutils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/drop_path.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/factories.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/gmm.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/spatial_transforms.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/vector_quantizer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/layers/weight_init.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/ahnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/attentionunet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/autoencoder.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/cell_sam_wrapper.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/classifier.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/controlnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/daf3d.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/densenet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/dints.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/dynunet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/efficientnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/flexible_unet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/fullyconnectednet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/generator.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/highresnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/hovernet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/masked_autoencoder_vit.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/mednext.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/milmodel.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/netadapter.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/patchgan_discriminator.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/quicknat.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/regressor.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/regunet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/resnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/restormer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/segresnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/segresnet_ds.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/senet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/spade_autoencoderkl.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/spade_diffusion_model_unet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/spade_network.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/swin_unetr.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/torchvision_fc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/transchex.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/transformer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/unet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/unetr.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/varautoencoder.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/vista3d.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/vit.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/vitautoenc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/vnet.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/voxelmorph.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/nets/vqvae.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/ddim.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/ddpm.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/pndm.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/rectified_flow.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/schedulers/scheduler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/trt_compiler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/networks/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/optimizers/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/optimizers/lr_finder.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/optimizers/lr_scheduler.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/optimizers/novograd.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/optimizers/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/py.typed +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/adaptors.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/compose.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/batch.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/croppad/functional.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/intensity/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/intensity/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/intensity/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/inverse.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/inverse_batch_transform.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/io/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/io/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/io/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/functional.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/lazy/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/meta_utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/meta_utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/nvtx.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/post/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/post/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/post/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/regularization/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/regularization/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/regularization/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/signal/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/signal/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/signal/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/smooth_field/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/smooth_field/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/smooth_field/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/spatial/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/traits.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/transform.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/utility/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/utility/array.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/utility/dictionary.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/utils_create_transform_ims.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/utils_morphological_ops.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/transforms/utils_pytorch_numpy_unification.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/component_store.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/decorators.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/deprecate_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/dist.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/enums.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/jupyter_utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/misc.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/module.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/nvtx.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/ordering.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/state_cacher.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/tf32.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/utils/type_conversion.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/visualize/__init__.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/visualize/class_activation_maps.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/visualize/gradient_based.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/visualize/img2tensorboard.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/visualize/occlusion_sensitivity.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/visualize/utils.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai/visualize/visualizer.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/dependency_links.txt +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/not-zip-safe +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/requires.txt +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/monai_weekly.egg-info/top_level.txt +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/pyproject.toml +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/setup.cfg +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/setup.py +0 -0
- {monai_weekly-1.7.dev2626 → monai_weekly-1.7.dev2627}/versioneer.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-
|
|
11
|
+
"date": "2026-07-05T03:07:50+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.7.
|
|
14
|
+
"full-revisionid": "9c37af81ef49b616038685d338f97726a0266440",
|
|
15
|
+
"version": "1.7.dev2627"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -598,7 +598,11 @@ class nnUNetV2Runner: # noqa: N801
|
|
|
598
598
|
|
|
599
599
|
for _key, _value in kwargs.items():
|
|
600
600
|
prefix = "-" if _key in {"p", "pretrained_weights"} else "--"
|
|
601
|
-
|
|
601
|
+
if isinstance(_value, bool):
|
|
602
|
+
if _value:
|
|
603
|
+
cmd.append(f"{prefix}{_key}")
|
|
604
|
+
else:
|
|
605
|
+
cmd += [f"{prefix}{_key}", str(_value)]
|
|
602
606
|
|
|
603
607
|
cmd_str: list[str] = [str(c) for c in cmd]
|
|
604
608
|
|
|
@@ -758,7 +762,7 @@ class nnUNetV2Runner: # noqa: N801
|
|
|
758
762
|
kwargs: this optional parameter allows you to specify additional arguments defined in the
|
|
759
763
|
``train_single_model`` method.
|
|
760
764
|
"""
|
|
761
|
-
self.train_single_model(config=config, fold=fold,
|
|
765
|
+
self.train_single_model(config=config, fold=fold, val=True, **kwargs)
|
|
762
766
|
|
|
763
767
|
def validate(
|
|
764
768
|
self, configs: tuple = (M.N_3D_FULLRES, M.N_2D, M.N_3D_LOWRES, M.N_3D_CASCADE_FULLRES), **kwargs: Any
|
|
@@ -149,7 +149,6 @@ def create_new_dataset_json(
|
|
|
149
149
|
"""
|
|
150
150
|
new_json_data: dict = {}
|
|
151
151
|
|
|
152
|
-
# modality = self.input_info.pop("modality")
|
|
153
152
|
modality = ensure_tuple(modality) # type: ignore
|
|
154
153
|
|
|
155
154
|
new_json_data["channel_names"] = {}
|
|
@@ -161,18 +160,11 @@ def create_new_dataset_json(
|
|
|
161
160
|
for _j in range(num_foreground_classes):
|
|
162
161
|
new_json_data["labels"][f"class{_j + 1}"] = _j + 1
|
|
163
162
|
|
|
164
|
-
# new_json_data["numTraining"] = len(datalist_json["training"])
|
|
165
163
|
new_json_data["numTraining"] = num_training_data
|
|
166
164
|
new_json_data["file_ending"] = ".nii.gz"
|
|
167
165
|
|
|
168
166
|
ConfigParser.export_config_file(
|
|
169
|
-
config=new_json_data,
|
|
170
|
-
# filepath=os.path.join(raw_data_foldername, "dataset.json"),
|
|
171
|
-
filepath=output_filepath,
|
|
172
|
-
fmt="json",
|
|
173
|
-
sort_keys=True,
|
|
174
|
-
indent=4,
|
|
175
|
-
ensure_ascii=False,
|
|
167
|
+
config=new_json_data, filepath=output_filepath, fmt="json", sort_keys=True, indent=4, ensure_ascii=False
|
|
176
168
|
)
|
|
177
169
|
|
|
178
170
|
return
|
|
@@ -160,8 +160,6 @@ class VistaPostTransformd(MapTransform):
|
|
|
160
160
|
pred = pred.argmax(0).unsqueeze(0).float() + 1.0
|
|
161
161
|
pred[is_bk] = 0.0
|
|
162
162
|
else:
|
|
163
|
-
# AsDiscrete will remove NaN
|
|
164
|
-
# pred = monai.transforms.AsDiscrete(threshold=0.5)(pred)
|
|
165
163
|
pred[pred > 0] = 1.0
|
|
166
164
|
if "label_prompt" in data and data["label_prompt"] is not None:
|
|
167
165
|
pred += 0.5 # inplace mapping to avoid cloning pred
|
|
@@ -284,7 +284,7 @@ def verify_report_format(report: dict, report_format: dict) -> bool:
|
|
|
284
284
|
|
|
285
285
|
if isinstance(v_fmt, list) and isinstance(v, list):
|
|
286
286
|
if len(v_fmt) != 1:
|
|
287
|
-
|
|
287
|
+
warnings.warn("list length in report_format is not 1", stacklevel=2)
|
|
288
288
|
if len(v_fmt) > 0 and len(v) > 0:
|
|
289
289
|
return verify_report_format(v[0], v_fmt[0])
|
|
290
290
|
else:
|
|
@@ -210,8 +210,12 @@ class PersistentDataset(Dataset):
|
|
|
210
210
|
|
|
211
211
|
Cached data is expected to be tensors, primitives, or dictionaries keying to these values. Numpy arrays will
|
|
212
212
|
be converted to tensors, however any other object type returned by transforms will not be loadable since
|
|
213
|
-
`torch.load` will be used with `weights_only=True` to prevent loading of potentially malicious
|
|
214
|
-
Legacy cache files may not be loadable and may need to be recomputed.
|
|
213
|
+
`torch.load` will be used with `weights_only=True` by default to prevent loading of potentially malicious
|
|
214
|
+
objects. Legacy cache files may not be loadable and may need to be recomputed. MetaTensor objects can be saved
|
|
215
|
+
and loaded with their metadata preserved if `track_meta` is True, however the objects stored in the metadata
|
|
216
|
+
must be acceptable as serialisable by `torch.load` by default or if they have been white-listed with
|
|
217
|
+
`torch.serialization.add_safe_globals`. Any other object type may be stored but will fail to load and force
|
|
218
|
+
a cache recompute.
|
|
215
219
|
|
|
216
220
|
Lazy Resampling:
|
|
217
221
|
If you make use of the lazy resampling feature of `monai.transforms.Compose`, please refer to
|
|
@@ -245,8 +249,8 @@ class PersistentDataset(Dataset):
|
|
|
245
249
|
may share a common cache dir provided that the transforms pre-processing is consistent.
|
|
246
250
|
If `cache_dir` doesn't exist, will automatically create it.
|
|
247
251
|
If `cache_dir` is `None`, there is effectively no caching.
|
|
248
|
-
hash_func: a callable to compute hash from data items to be cached
|
|
249
|
-
|
|
252
|
+
hash_func: a callable to compute hash from data items to be cached, defaults to
|
|
253
|
+
`monai.data.utils.pickle_hashing` which uses sha256 (previously md5 so old caches will not work).
|
|
250
254
|
pickle_module: string representing the module used for pickling metadata and objects,
|
|
251
255
|
default to `"pickle"`. due to the pickle limitation in multi-processing of Dataloader,
|
|
252
256
|
we can't use `pickle` as arg directly, so here we use a string name instead.
|
|
@@ -266,17 +270,12 @@ class PersistentDataset(Dataset):
|
|
|
266
270
|
When this is enabled, the traced transform instance IDs will be removed from the cached MetaTensors.
|
|
267
271
|
This is useful for skipping the transform instance checks when inverting applied operations
|
|
268
272
|
using the cached content and with re-created transform instances.
|
|
269
|
-
track_meta: whether to track the meta information,
|
|
270
|
-
default to `False`. Cannot be used with `weights_only=True`.
|
|
273
|
+
track_meta: whether to track the meta information, defaults to False. If `True`, converts to `MetaTensor`.
|
|
271
274
|
weights_only: keyword argument passed to `torch.load` when reading cached files.
|
|
272
|
-
default to `True`. When
|
|
273
|
-
|
|
274
|
-
objects
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
Raises:
|
|
278
|
-
ValueError: When both `track_meta=True` and `weights_only=True`, since this combination
|
|
279
|
-
prevents cached MetaTensors from being reloaded and causes perpetual cache regeneration.
|
|
275
|
+
default to `True`. When `True`, `torch.load` restricts loading to tensors and other safe objects.
|
|
276
|
+
Setting to `False` should only be done if it's absolutely necessary to load unsafe pickled data,
|
|
277
|
+
eg. MetaTensor objects with unsafe objects in their metadata. Users must verify the safety of the data
|
|
278
|
+
they intend to load before doing so.
|
|
280
279
|
"""
|
|
281
280
|
super().__init__(data=data, transform=transform)
|
|
282
281
|
self.cache_dir = Path(cache_dir) if cache_dir is not None else None
|
|
@@ -292,11 +291,6 @@ class PersistentDataset(Dataset):
|
|
|
292
291
|
if hash_transform is not None:
|
|
293
292
|
self.set_transform_hash(hash_transform)
|
|
294
293
|
self.reset_ops_id = reset_ops_id
|
|
295
|
-
if track_meta and weights_only:
|
|
296
|
-
raise ValueError(
|
|
297
|
-
"Invalid argument combination: `track_meta=True` cannot be used with `weights_only=True`. "
|
|
298
|
-
"To cache and reload MetaTensors, set `track_meta=True` and `weights_only=False`."
|
|
299
|
-
)
|
|
300
294
|
self.track_meta = track_meta
|
|
301
295
|
self.weights_only = weights_only
|
|
302
296
|
|
|
@@ -390,9 +384,9 @@ class PersistentDataset(Dataset):
|
|
|
390
384
|
"""
|
|
391
385
|
hashfile = None
|
|
392
386
|
if self.cache_dir is not None:
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
hashfile = self.cache_dir / f"{
|
|
387
|
+
data_item_hash = self.hash_func(item_transformed).decode("utf-8")
|
|
388
|
+
data_item_hash += self.transform_hash
|
|
389
|
+
hashfile = self.cache_dir / f"{data_item_hash}.pt"
|
|
396
390
|
|
|
397
391
|
if hashfile is not None and hashfile.is_file(): # cache hit
|
|
398
392
|
try:
|
|
@@ -1624,9 +1618,9 @@ class GDSDataset(PersistentDataset):
|
|
|
1624
1618
|
hashfile = None
|
|
1625
1619
|
# compute a cache id
|
|
1626
1620
|
if self.cache_dir is not None:
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
hashfile = self.cache_dir / f"{
|
|
1621
|
+
data_item_hash = self.hash_func(item_transformed).decode("utf-8")
|
|
1622
|
+
data_item_hash += self.transform_hash
|
|
1623
|
+
hashfile = self.cache_dir / f"{data_item_hash}.pt"
|
|
1630
1624
|
|
|
1631
1625
|
if hashfile is not None and hashfile.is_file(): # cache hit
|
|
1632
1626
|
with cp.cuda.Device(self.device):
|
|
@@ -761,10 +761,10 @@ class PydicomReader(ImageReader):
|
|
|
761
761
|
if "lastImagePositionPatient" in metadata:
|
|
762
762
|
t1n, t2n, t3n = metadata["lastImagePositionPatient"]
|
|
763
763
|
n = metadata[MetaKeys.SPATIAL_SHAPE][-1]
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
764
|
+
if n > 1:
|
|
765
|
+
affine[0, 2] = (t1n - sx) / (n - 1)
|
|
766
|
+
affine[1, 2] = (t2n - sy) / (n - 1)
|
|
767
|
+
affine[2, 2] = (t3n - sz) / (n - 1)
|
|
768
768
|
|
|
769
769
|
if lps_to_ras:
|
|
770
770
|
affine = orientation_ras_lps(affine)
|
|
@@ -17,7 +17,6 @@ import logging
|
|
|
17
17
|
import math
|
|
18
18
|
import os
|
|
19
19
|
import pickle
|
|
20
|
-
import sys
|
|
21
20
|
from collections import abc, defaultdict
|
|
22
21
|
from collections.abc import Generator, Iterable, Mapping, Sequence, Sized
|
|
23
22
|
from copy import deepcopy
|
|
@@ -1370,13 +1369,8 @@ def json_hashing(item) -> bytes:
|
|
|
1370
1369
|
|
|
1371
1370
|
"""
|
|
1372
1371
|
# TODO: Find way to hash transforms content as part of the cache
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
cache_key = hashlib.md5(json.dumps(item, sort_keys=True).encode("utf-8")).hexdigest()
|
|
1376
|
-
else:
|
|
1377
|
-
cache_key = hashlib.md5(
|
|
1378
|
-
json.dumps(item, sort_keys=True).encode("utf-8"), usedforsecurity=False # type: ignore
|
|
1379
|
-
).hexdigest()
|
|
1372
|
+
dump = json.dumps(item, sort_keys=True).encode("utf-8")
|
|
1373
|
+
cache_key = hashlib.sha256(dump, usedforsecurity=False).hexdigest() # type: ignore
|
|
1380
1374
|
return f"{cache_key}".encode()
|
|
1381
1375
|
|
|
1382
1376
|
|
|
@@ -1391,13 +1385,8 @@ def pickle_hashing(item, protocol=pickle.HIGHEST_PROTOCOL) -> bytes:
|
|
|
1391
1385
|
Returns: the corresponding hash key
|
|
1392
1386
|
|
|
1393
1387
|
"""
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
cache_key = hashlib.md5(pickle.dumps(sorted_dict(item), protocol=protocol)).hexdigest()
|
|
1397
|
-
else:
|
|
1398
|
-
cache_key = hashlib.md5(
|
|
1399
|
-
pickle.dumps(sorted_dict(item), protocol=protocol), usedforsecurity=False # type: ignore
|
|
1400
|
-
).hexdigest()
|
|
1388
|
+
dump = pickle.dumps(sorted_dict(item), protocol=protocol)
|
|
1389
|
+
cache_key = hashlib.sha256(dump, usedforsecurity=False).hexdigest() # type: ignore
|
|
1401
1390
|
return f"{cache_key}".encode()
|
|
1402
1391
|
|
|
1403
1392
|
|
|
@@ -309,9 +309,6 @@ class ZarrAvgMerger(Merger):
|
|
|
309
309
|
|
|
310
310
|
self.chunks = chunks
|
|
311
311
|
|
|
312
|
-
# Handle compressor/codecs based on zarr version
|
|
313
|
-
is_zarr_v3 = version_geq(get_package_version("zarr"), "3.0.0")
|
|
314
|
-
|
|
315
312
|
# Initialize codecs/compressor attributes with proper types
|
|
316
313
|
self.codecs: list | None = None
|
|
317
314
|
self.value_codecs: list | None = None
|
|
@@ -44,9 +44,58 @@ def spatial_gradient(x: torch.Tensor, dim: int) -> torch.Tensor:
|
|
|
44
44
|
return (x[slicing_s] - x[slicing_e]) / 2.0
|
|
45
45
|
|
|
46
46
|
|
|
47
|
+
def spatial_gradient_squared(x: torch.Tensor, dim_1: int, dim_2: int) -> torch.Tensor:
|
|
48
|
+
"""
|
|
49
|
+
Calculate the second-order partial derivative of ``x`` with respect to spatial dims
|
|
50
|
+
``dim_1`` and ``dim_2`` using compact central finite differences.
|
|
51
|
+
|
|
52
|
+
For ``dim_1 == dim_2`` the pure second derivative uses the ``[1, -2, 1]`` stencil:
|
|
53
|
+
``d2x[i] = x[i+1] - 2 * x[i] + x[i-1]``.
|
|
54
|
+
|
|
55
|
+
For ``dim_1 != dim_2`` the mixed partial uses the compact 4-point stencil:
|
|
56
|
+
``d2x[i, j] = (x[i+1, j+1] - x[i+1, j-1] - x[i-1, j+1] + x[i-1, j-1]) / 4``.
|
|
57
|
+
|
|
58
|
+
Every spatial dimension is sliced to ``[1:-1]`` so the output shape is independent of
|
|
59
|
+
``(dim_1, dim_2)``; this lets terms be summed together. Requires ``x.shape[d] > 2``
|
|
60
|
+
for every spatial dim ``d``.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
x: the shape should be BCH(WD).
|
|
64
|
+
dim_1: first spatial dimension index.
|
|
65
|
+
dim_2: second spatial dimension index.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Tensor with batch and channel axes preserved and every spatial axis sliced to
|
|
69
|
+
``[1:-1]``.
|
|
70
|
+
"""
|
|
71
|
+
slice_inner = slice(1, -1)
|
|
72
|
+
slice_plus = slice(2, None)
|
|
73
|
+
slice_minus = slice(None, -2)
|
|
74
|
+
slice_all = slice(None)
|
|
75
|
+
|
|
76
|
+
def _idx(overrides: dict) -> list:
|
|
77
|
+
out: list = [slice_all, slice_all]
|
|
78
|
+
for d in range(2, x.ndim):
|
|
79
|
+
out.append(overrides.get(d, slice_inner))
|
|
80
|
+
return out
|
|
81
|
+
|
|
82
|
+
if dim_1 == dim_2:
|
|
83
|
+
return x[_idx({dim_1: slice_plus})] - 2 * x[_idx({})] + x[_idx({dim_1: slice_minus})]
|
|
84
|
+
return (
|
|
85
|
+
x[_idx({dim_1: slice_plus, dim_2: slice_plus})]
|
|
86
|
+
- x[_idx({dim_1: slice_plus, dim_2: slice_minus})]
|
|
87
|
+
- x[_idx({dim_1: slice_minus, dim_2: slice_plus})]
|
|
88
|
+
+ x[_idx({dim_1: slice_minus, dim_2: slice_minus})]
|
|
89
|
+
) / 4.0
|
|
90
|
+
|
|
91
|
+
|
|
47
92
|
class BendingEnergyLoss(_Loss):
|
|
48
93
|
"""
|
|
49
|
-
Calculate the bending energy based on second-order differentiation of ``pred
|
|
94
|
+
Calculate the bending energy based on second-order differentiation of ``pred``.
|
|
95
|
+
|
|
96
|
+
Pure second derivatives use the compact ``[1, -2, 1]`` stencil; mixed partials use a
|
|
97
|
+
compact 4-point central scheme. Both span three voxels per axis, so each spatial
|
|
98
|
+
dimension of ``pred`` only needs to be greater than 2.
|
|
50
99
|
|
|
51
100
|
For more information,
|
|
52
101
|
see https://github.com/Project-MONAI/tutorials/blob/main/modules/bending_energy_diffusion_loss_notes.ipynb.
|
|
@@ -79,41 +128,41 @@ class BendingEnergyLoss(_Loss):
|
|
|
79
128
|
Raises:
|
|
80
129
|
ValueError: When ``self.reduction`` is not one of ["mean", "sum", "none"].
|
|
81
130
|
ValueError: When ``pred`` is not 3-d, 4-d or 5-d.
|
|
82
|
-
ValueError: When any spatial dimension of ``pred`` has size less than or equal to
|
|
131
|
+
ValueError: When any spatial dimension of ``pred`` has size less than or equal to 2.
|
|
83
132
|
ValueError: When the number of channels of ``pred`` does not match the number of spatial dimensions.
|
|
84
133
|
|
|
85
134
|
"""
|
|
86
135
|
if pred.ndim not in [3, 4, 5]:
|
|
87
136
|
raise ValueError(f"Expecting 3-d, 4-d or 5-d pred, instead got pred of shape {pred.shape}")
|
|
88
137
|
for i in range(pred.ndim - 2):
|
|
89
|
-
if pred.shape[-i - 1] <=
|
|
90
|
-
raise ValueError(f"All spatial dimensions must be >
|
|
138
|
+
if pred.shape[-i - 1] <= 2:
|
|
139
|
+
raise ValueError(f"All spatial dimensions must be > 2, got spatial dimensions {pred.shape[2:]}")
|
|
91
140
|
if pred.shape[1] != pred.ndim - 2:
|
|
92
141
|
raise ValueError(
|
|
93
142
|
f"Number of vector components, i.e. number of channels of the input DDF, {pred.shape[1]}, "
|
|
94
143
|
f"does not match number of spatial dimensions, {pred.ndim - 2}"
|
|
95
144
|
)
|
|
96
145
|
|
|
97
|
-
# first order gradient
|
|
98
|
-
first_order_gradient = [spatial_gradient(pred, dim) for dim in range(2, pred.ndim)]
|
|
99
|
-
|
|
100
146
|
# spatial dimensions in a shape suited for broadcasting below
|
|
101
147
|
if self.normalize:
|
|
102
148
|
spatial_dims = torch.tensor(pred.shape, device=pred.device)[2:].reshape((1, -1) + (pred.ndim - 2) * (1,))
|
|
103
149
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
150
|
+
# Initialize on pred.device so a GPU `pred` does not get added to a CPU
|
|
151
|
+
# accumulator, and as a float so an integer-dtype `pred` still produces a
|
|
152
|
+
# floating-point energy (the compact pure-derivative stencil has no
|
|
153
|
+
# division, so a Long input would otherwise propagate as Long and fail
|
|
154
|
+
# `torch.mean` at the reduction step).
|
|
155
|
+
energy = torch.tensor(0.0, device=pred.device)
|
|
156
|
+
for dim_1 in range(2, pred.ndim):
|
|
157
|
+
d2 = spatial_gradient_squared(pred, dim_1, dim_1)
|
|
107
158
|
if self.normalize:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
else:
|
|
111
|
-
energy = energy + spatial_gradient(g, dim_1) ** 2
|
|
159
|
+
d2 = d2 * (pred.shape[dim_1] ** 2 / spatial_dims)
|
|
160
|
+
energy = energy + d2**2
|
|
112
161
|
for dim_2 in range(dim_1 + 1, pred.ndim):
|
|
162
|
+
d2_mixed = spatial_gradient_squared(pred, dim_1, dim_2)
|
|
113
163
|
if self.normalize:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
energy = energy + 2 * spatial_gradient(g, dim_2) ** 2
|
|
164
|
+
d2_mixed = d2_mixed * (pred.shape[dim_1] * pred.shape[dim_2] / spatial_dims)
|
|
165
|
+
energy = energy + 2 * d2_mixed**2
|
|
117
166
|
|
|
118
167
|
if self.reduction == LossReduction.MEAN.value:
|
|
119
168
|
energy = torch.mean(energy) # the batch and channel average
|
|
@@ -232,7 +232,6 @@ class GlobalMutualInformationLoss(_Loss):
|
|
|
232
232
|
sigma = torch.mean(bin_centers[1:] - bin_centers[:-1]) * sigma_ratio
|
|
233
233
|
self.kernel_type = look_up_option(kernel_type, ["gaussian", "b-spline"])
|
|
234
234
|
self.num_bins = num_bins
|
|
235
|
-
self.kernel_type = kernel_type
|
|
236
235
|
# declared as buffers so they move with the module (e.g. ``.to(device)``); only populated for the
|
|
237
236
|
# gaussian kernel, hence the ``Tensor`` annotation reflects the type at the use sites in that path.
|
|
238
237
|
self.preterm: torch.Tensor | None
|
|
@@ -138,7 +138,7 @@ class NACLLoss(_Loss):
|
|
|
138
138
|
if self.distance_type == "l1":
|
|
139
139
|
loss_conf = utargets.sub(inputs).abs_().mean()
|
|
140
140
|
elif self.distance_type == "l2":
|
|
141
|
-
loss_conf = utargets.sub(inputs).pow_(2).
|
|
141
|
+
loss_conf = utargets.sub(inputs).pow_(2).mean()
|
|
142
142
|
|
|
143
143
|
loss: torch.Tensor = loss_ce + self.alpha * loss_conf
|
|
144
144
|
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
+
from .absolute_volume_difference import AbsoluteVolumeDifferenceMetric, compute_absolute_volume_difference
|
|
14
15
|
from .active_learning_metrics import LabelQualityScore, VarianceMetric, compute_variance, label_quality_score
|
|
15
16
|
from .average_precision import AveragePrecisionMetric, compute_average_precision
|
|
16
17
|
from .calibration import CalibrationErrorMetric, CalibrationReduction, calibration_binning
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Copyright (c) MONAI Consortium
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import torch
|
|
15
|
+
|
|
16
|
+
from monai.metrics.utils import do_metric_reduction, ignore_background
|
|
17
|
+
from monai.utils import MetricReduction
|
|
18
|
+
|
|
19
|
+
from .metric import CumulativeIterationMetric
|
|
20
|
+
|
|
21
|
+
__all__ = ["AbsoluteVolumeDifferenceMetric", "compute_absolute_volume_difference"]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class AbsoluteVolumeDifferenceMetric(CumulativeIterationMetric):
|
|
25
|
+
"""
|
|
26
|
+
Compute the Absolute Volume Difference (AVD) between predicted and ground-truth
|
|
27
|
+
segmentation masks.
|
|
28
|
+
|
|
29
|
+
AVD measures the absolute difference in the number of foreground voxels between
|
|
30
|
+
prediction and ground truth, per class. It is particularly useful for small-object
|
|
31
|
+
segmentation (e.g. retinal fluid in OCT volumes) where Dice score is known to be
|
|
32
|
+
overly sensitive to volume size and does not directly reflect volume discrepancies.
|
|
33
|
+
|
|
34
|
+
.. note::
|
|
35
|
+
For 2D inputs this computes the difference in foreground **areas** rather than
|
|
36
|
+
volumes. In all cases the returned values are raw voxel/pixel counts and are
|
|
37
|
+
**not** scaled by the voxel/pixel spacing, so they are not expressed in the
|
|
38
|
+
physical units of the original image.
|
|
39
|
+
|
|
40
|
+
Reference:
|
|
41
|
+
Bogunovic et al. (2019). RETOUCH: The Retinal OCT Fluid Detection and
|
|
42
|
+
Segmentation Benchmark and Challenge.
|
|
43
|
+
IEEE Transactions on Medical Imaging, 38(8), 1858-1874.
|
|
44
|
+
https://ieeexplore.ieee.org/document/8653407
|
|
45
|
+
|
|
46
|
+
The inputs ``y_pred`` and ``y`` are expected to be binarized one-hot tensors with
|
|
47
|
+
shape BCHW[D]. If they contain continuous values (e.g. sigmoid outputs), binarize
|
|
48
|
+
them first with a suitable threshold transform.
|
|
49
|
+
|
|
50
|
+
The typical execution steps of this metric class follow
|
|
51
|
+
:py:class:`monai.metrics.metric.Cumulative`.
|
|
52
|
+
|
|
53
|
+
Example:
|
|
54
|
+
|
|
55
|
+
.. code-block:: python
|
|
56
|
+
|
|
57
|
+
import torch
|
|
58
|
+
from monai.metrics import AbsoluteVolumeDifferenceMetric
|
|
59
|
+
|
|
60
|
+
batch_size, n_classes = 4, 3
|
|
61
|
+
y_pred = torch.randint(0, 2, (batch_size, n_classes, 64, 64, 32)).float()
|
|
62
|
+
y = torch.randint(0, 2, (batch_size, n_classes, 64, 64, 32)).float()
|
|
63
|
+
|
|
64
|
+
metric = AbsoluteVolumeDifferenceMetric(include_background=False)
|
|
65
|
+
metric(y_pred, y) # accumulate
|
|
66
|
+
result = metric.aggregate() # shape: (n_classes - 1,) after mean reduction
|
|
67
|
+
metric.reset()
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
include_background: whether to include AVD computation on the first channel
|
|
71
|
+
(index 0), which is by convention assumed to be background. Defaults to
|
|
72
|
+
``True``. Set to ``False`` when the background class dominates and you only
|
|
73
|
+
care about foreground classes (e.g. fluid sub-types in OCT).
|
|
74
|
+
reduction: defines how to aggregate per-batch-per-class results. Available
|
|
75
|
+
modes are enumerated in :py:class:`monai.utils.enums.MetricReduction`.
|
|
76
|
+
Defaults to ``"mean"``.
|
|
77
|
+
get_not_nans: if ``True``, :meth:`aggregate` returns ``(metric, not_nans)``
|
|
78
|
+
where ``not_nans`` counts the number of valid (non-NaN) values.
|
|
79
|
+
Defaults to ``False``.
|
|
80
|
+
ignore_empty: if ``True``, cases where the ground-truth channel is entirely
|
|
81
|
+
empty (zero voxels) are excluded from aggregation by setting their value
|
|
82
|
+
to ``NaN``. If ``False``, the raw absolute difference (equal to the
|
|
83
|
+
predicted volume for that class) is returned. Defaults to ``True``.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
def __init__(
|
|
87
|
+
self,
|
|
88
|
+
include_background: bool = True,
|
|
89
|
+
reduction: MetricReduction | str = MetricReduction.MEAN,
|
|
90
|
+
get_not_nans: bool = False,
|
|
91
|
+
ignore_empty: bool = True,
|
|
92
|
+
) -> None:
|
|
93
|
+
super().__init__()
|
|
94
|
+
self.include_background = include_background
|
|
95
|
+
self.reduction = reduction
|
|
96
|
+
self.get_not_nans = get_not_nans
|
|
97
|
+
self.ignore_empty = ignore_empty
|
|
98
|
+
|
|
99
|
+
def _compute_tensor(self, y_pred: torch.Tensor, y: torch.Tensor) -> torch.Tensor: # type: ignore[override]
|
|
100
|
+
"""
|
|
101
|
+
Args:
|
|
102
|
+
y_pred: binarized prediction tensor, shape BCHW[D].
|
|
103
|
+
y: binarized ground-truth tensor, shape BCHW[D].
|
|
104
|
+
|
|
105
|
+
Raises:
|
|
106
|
+
ValueError: when ``y_pred`` has fewer than three dimensions.
|
|
107
|
+
"""
|
|
108
|
+
if y_pred.ndimension() < 3:
|
|
109
|
+
raise ValueError(
|
|
110
|
+
f"y_pred should have at least 3 dimensions (batch, channel, spatial), got {y_pred.ndimension()}."
|
|
111
|
+
)
|
|
112
|
+
return compute_absolute_volume_difference(
|
|
113
|
+
y_pred=y_pred, y=y, include_background=self.include_background, ignore_empty=self.ignore_empty
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
def aggregate(
|
|
117
|
+
self, reduction: MetricReduction | str | None = None
|
|
118
|
+
) -> torch.Tensor | tuple[torch.Tensor, torch.Tensor]:
|
|
119
|
+
"""
|
|
120
|
+
Execute reduction logic for the accumulated AVD values.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
reduction: optional override for the reduction mode set at construction.
|
|
124
|
+
"""
|
|
125
|
+
data = self.get_buffer()
|
|
126
|
+
if not isinstance(data, torch.Tensor):
|
|
127
|
+
raise ValueError("the data to aggregate must be a PyTorch Tensor.")
|
|
128
|
+
|
|
129
|
+
f, not_nans = do_metric_reduction(data, reduction or self.reduction)
|
|
130
|
+
return (f, not_nans) if self.get_not_nans else f
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def compute_absolute_volume_difference(
|
|
134
|
+
y_pred: torch.Tensor, y: torch.Tensor, include_background: bool = True, ignore_empty: bool = True
|
|
135
|
+
) -> torch.Tensor:
|
|
136
|
+
"""
|
|
137
|
+
Compute the Absolute Volume Difference (AVD) for a batch of segmentation predictions.
|
|
138
|
+
|
|
139
|
+
AVD is defined per class as::
|
|
140
|
+
|
|
141
|
+
AVD_c = | sum_{spatial}(y_pred_c) - sum_{spatial}(y_c) |
|
|
142
|
+
|
|
143
|
+
where the sum counts the number of foreground voxels in each channel.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
y_pred: binarized prediction tensor with shape BCHW[D].
|
|
147
|
+
y: binarized ground-truth tensor with shape BCHW[D].
|
|
148
|
+
include_background: whether to include the first channel (background).
|
|
149
|
+
Defaults to ``True``.
|
|
150
|
+
ignore_empty: if ``True``, entries where the ground-truth channel contains no
|
|
151
|
+
foreground voxels are set to ``NaN`` so they are excluded during reduction.
|
|
152
|
+
Defaults to ``True``.
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
AVD per batch item and per class, shape ``[batch_size, num_classes]``.
|
|
156
|
+
|
|
157
|
+
Raises:
|
|
158
|
+
ValueError: when ``y_pred`` and ``y`` have different shapes.
|
|
159
|
+
"""
|
|
160
|
+
if y_pred.ndim < 3:
|
|
161
|
+
raise ValueError(f"y_pred should have at least 3 dimensions (batch, channel, spatial), got {y_pred.ndim}.")
|
|
162
|
+
|
|
163
|
+
if not include_background:
|
|
164
|
+
y_pred, y = ignore_background(y_pred=y_pred, y=y)
|
|
165
|
+
|
|
166
|
+
if y_pred.shape != y.shape:
|
|
167
|
+
raise ValueError(f"y_pred and y should have the same shape, got {y_pred.shape} and {y.shape}.")
|
|
168
|
+
|
|
169
|
+
# sum over all spatial dimensions; keep batch (dim 0) and channel (dim 1)
|
|
170
|
+
reduce_axis = list(range(2, y_pred.ndim))
|
|
171
|
+
vol_pred = torch.sum(y_pred, dim=reduce_axis) # [B, C]
|
|
172
|
+
vol_true = torch.sum(y, dim=reduce_axis) # [B, C]
|
|
173
|
+
|
|
174
|
+
avd = torch.abs(vol_pred - vol_true) # [B, C]
|
|
175
|
+
|
|
176
|
+
if ignore_empty:
|
|
177
|
+
# mark cases with no ground-truth foreground as NaN
|
|
178
|
+
avd = torch.where(vol_true > 0, avd, torch.tensor(float("nan"), device=avd.device))
|
|
179
|
+
|
|
180
|
+
return avd
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
-
from typing import Any
|
|
14
|
+
from typing import Any
|
|
15
15
|
|
|
16
16
|
import numpy as np
|
|
17
17
|
import torch
|
|
@@ -67,12 +67,14 @@ def compute_fp_tp_probs_nd(
|
|
|
67
67
|
|
|
68
68
|
hittedlabel = evaluation_mask[tuple(coords.T)]
|
|
69
69
|
fp_probs = probs[np.where(hittedlabel == 0)]
|
|
70
|
+
num_targets = 0
|
|
70
71
|
for i in range(1, max_label + 1):
|
|
71
|
-
if i not in labels_to_exclude
|
|
72
|
-
|
|
72
|
+
if i not in labels_to_exclude:
|
|
73
|
+
num_targets += 1
|
|
74
|
+
if i in hittedlabel:
|
|
75
|
+
tp_probs[i - 1] = probs[np.where(hittedlabel == i)].max()
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
return fp_probs, tp_probs, cast(int, num_targets)
|
|
77
|
+
return fp_probs, tp_probs, num_targets
|
|
76
78
|
|
|
77
79
|
|
|
78
80
|
def compute_fp_tp_probs(
|