careamics 0.0.6__tar.gz → 0.0.8__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.
Potentially problematic release.
This version of careamics might be problematic. Click here for more details.
- {careamics-0.0.6 → careamics-0.0.8}/.github/dependabot.yml +1 -0
- careamics-0.0.8/.github/pull_request_template.md +86 -0
- {careamics-0.0.6 → careamics-0.0.8}/PKG-INFO +5 -3
- {careamics-0.0.6 → careamics-0.0.8}/pyproject.toml +4 -2
- careamics-0.0.8/src/careamics/config/algorithms/care_algorithm_model.py +38 -0
- careamics-0.0.8/src/careamics/config/algorithms/n2n_algorithm_model.py +30 -0
- careamics-0.0.8/src/careamics/config/algorithms/n2v_algorithm_model.py +29 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/configuration_factories.py +84 -23
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/data/data_model.py +47 -2
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_algorithms.py +5 -1
- careamics-0.0.8/src/careamics/config/validators/__init__.py +16 -0
- careamics-0.0.8/src/careamics/config/validators/model_validators.py +84 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/progress_bar_callback.py +1 -1
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/train_data_module.py +10 -19
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/calibration.py +64 -57
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/lc_dataset.py +2 -1
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/multich_dataset.py +2 -2
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/types.py +1 -1
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/eval_utils.py +128 -128
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/lvae/likelihoods.py +2 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/lvae/lvae.py +13 -1
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/lvae/noise_models.py +280 -217
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/lvae/stochastic.py +1 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/metrics.py +25 -0
- careamics-0.0.8/src/careamics/utils/plotting.py +78 -0
- careamics-0.0.8/tests/config/algorithms/test_care_algorithm_model.py +32 -0
- careamics-0.0.8/tests/config/algorithms/test_n2n_algorithm_model.py +32 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/algorithms/test_n2v_algorithm_model.py +16 -4
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/data/test_data_model.py +10 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_configuration_factories.py +32 -4
- careamics-0.0.8/tests/config/validators/test_model_validators.py +52 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/models/lvae/test_noise_model.py +86 -9
- {careamics-0.0.6 → careamics-0.0.8}/tests/test_careamist.py +0 -11
- careamics-0.0.6/.github/pull_request_template.md +0 -39
- careamics-0.0.6/src/careamics/config/algorithms/care_algorithm_model.py +0 -50
- careamics-0.0.6/src/careamics/config/algorithms/n2n_algorithm_model.py +0 -42
- careamics-0.0.6/src/careamics/config/algorithms/n2v_algorithm_model.py +0 -35
- careamics-0.0.6/src/careamics/config/validators/__init__.py +0 -5
- {careamics-0.0.6 → careamics-0.0.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/ISSUE_TEMPLATE/example_report.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/ISSUE_TEMPLATE/interoperability_request.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/ISSUE_TEMPLATE/refactoring_suggestion.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/TEST_FAIL_TEMPLATE.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/workflows/ci.yml +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/workflows/codecov.yml +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.github/workflows/lvae.yml +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.gitignore +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/.pre-commit-config.yaml +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/CODE_OF_CONDUCT.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/LICENSE +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/README.md +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/codecov.yml +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/mypy.ini +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/scripts/export_bmz_readme.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/scripts/export_covers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/careamist.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/cli/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/cli/conf.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/cli/main.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/cli/utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/algorithms/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/algorithms/unet_algorithm_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/algorithms/vae_algorithm_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/architectures/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/architectures/architecture_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/architectures/lvae_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/architectures/unet_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/callback_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/care_configuration.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/configuration.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/configuration_io.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/data/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/data/n2v_data_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/inference_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/likelihood_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/loss_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/n2n_configuration.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/n2v_configuration.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/nm_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/optimizer_models.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_activations.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_architectures.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_data.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_loggers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_losses.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_optimizers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_pixel_manipulations.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_struct_axis.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/support/supported_transforms.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/tile_information.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/training_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/transformations/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/transformations/n2v_manipulate_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/transformations/normalize_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/transformations/transform_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/transformations/transform_unions.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/transformations/xy_flip_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/transformations/xy_random_rotate90_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/config/validators/validator_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/conftest.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/dataset_utils/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/dataset_utils/dataset_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/dataset_utils/file_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/dataset_utils/iterate_over_files.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/dataset_utils/running_stats.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/in_memory_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/in_memory_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/in_memory_tiled_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/iterable_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/iterable_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/iterable_tiled_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/patching/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/patching/patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/patching/random_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/patching/sequential_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/patching/validate_patch_dimension.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/tiling/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/tiling/collate_tiles.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/tiling/lvae_tiled_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/tiling/tiled_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/dataset/zarr_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/read/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/read/get_func.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/read/tiff.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/read/zarr.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/write/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/write/get_func.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/file_io/write/tiff.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/hyperparameters_callback.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/prediction_writer_callback/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/prediction_writer_callback/file_path_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/prediction_writer_callback/prediction_writer_callback.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/prediction_writer_callback/write_strategy.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/callbacks/prediction_writer_callback/write_strategy_factory.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/lightning_module.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lightning/predict_data_module.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/losses/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/losses/fcn/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/losses/fcn/losses.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/losses/loss_factory.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/losses/lvae/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/losses/lvae/loss_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/losses/lvae/losses.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/config.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/multifile_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/utils/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/utils/data_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/utils/empty_patch_fetcher.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/utils/index_manager.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/dataset/utils/index_switcher.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/get_config.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/lightning_module.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/metrics.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/train_lvae.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/lvae_training/train_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/bioimage/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/bioimage/_readme_factory.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/bioimage/bioimage_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/bioimage/cover_factory.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/bioimage/model_description.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/bmz_io.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/model_io/model_io_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/activation.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/layers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/lvae/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/lvae/layers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/lvae/utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/model_factory.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/models/unet.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/prediction_utils/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/prediction_utils/lvae_prediction.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/prediction_utils/lvae_tiling_manager.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/prediction_utils/prediction_outputs.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/prediction_utils/stitch_prediction.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/py.typed +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/compose.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/n2v_manipulate.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/normalize.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/pixel_manipulation.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/struct_mask_parameters.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/transform.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/tta.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/xy_flip.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/transforms/xy_random_rotate90.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/autocorrelation.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/base_enum.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/context.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/lightning_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/logging.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/path_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/ram.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/receptive_field.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/serializers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/src/careamics/utils/torch_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/cli/__init__.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/cli/test_conf.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/cli/test_main.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/architectures/test_architecture_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/architectures/test_lvae_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/architectures/test_unet_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/data/test_n2v_data_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/support/test_supported_data.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/support/test_supported_optimizers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_callback_models.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_configuration.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_configuration_io.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_inference_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_n2v_configuration.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_optimizers_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_tile_information.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_training_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_unet_algorithm_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/test_vae_algorithm_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/transformations/test_n2v_manipulate_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/transformations/test_normalize_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/transformations/test_xy_flip_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/transformations/test_xy_random_rotate90_model.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/config/validators/test_validator_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/conftest.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/dataset_utils/test_compute_normalization_stats.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/dataset_utils/test_list_files.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/patching/test_patching_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/patching/test_random_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/patching/test_sequential_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/test_in_memory_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/test_in_memory_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/test_in_memory_tiled_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/test_iterable_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/test_iterable_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/test_iterable_tiled_pred_dataset.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/tiling/test_collate_tiles.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/tiling/test_lvae_tiled_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/dataset/tiling/test_tiled_patching.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/file_io/read/test_get_read_func.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/file_io/read/test_read_tiff.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/file_io/write/test_get_write_func.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/file_io/write/test_write_tiff.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/callbacks/prediction_writer_callback/test_cache_tiles_write_strategy.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/callbacks/prediction_writer_callback/test_file_path_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/callbacks/prediction_writer_callback/test_prediction_writer_callback.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/callbacks/prediction_writer_callback/test_write_image_write_strategy.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/callbacks/prediction_writer_callback/test_write_strategy_factory.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/test_LVAE_lightning_module.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/test_lightning_api.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/test_lightning_module.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/test_lightning_module_onnx_exportability.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/test_predict_data_module.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/lightning/test_train_data_module.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/likelihood_modules/test_likelihoods.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/losses/test_lvae_losses.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/model_io/test_bmz_io.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/models/lvae/test_lvae_architecture.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/models/lvae/test_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/models/test_model_factory.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/models/test_unet.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/prediction_utils/test_lvae_prediction.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/prediction_utils/test_prediction_outputs.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/prediction_utils/test_stitch_prediction.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/test_conftest.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_compose.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_manipulate_n2v.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_normalize.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_pixel_manipulation.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_supported_transforms.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_tta.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_xy_flip.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/transforms/test_xy_random_rotate90.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_autocorrelation.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_base_enum.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_context.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_lightning_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_logging.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_metrics.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_serializers.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_torch_utils.py +0 -0
- {careamics-0.0.6 → careamics-0.0.8}/tests/utils/test_wandb.py +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
<!-- This section provides the necessary background and information for reviewers to
|
|
4
|
+
understand the code and have the correct mindset when examining changes. -->
|
|
5
|
+
|
|
6
|
+
> [!NOTE]
|
|
7
|
+
> **tldr**: <!-- Write a one sentence summary. -->
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Background - why do we need this PR?
|
|
11
|
+
|
|
12
|
+
<!-- What problem are you solving? Describe in a few sentences the state before
|
|
13
|
+
this PR. Use code examples if useful. -->
|
|
14
|
+
|
|
15
|
+
### Overview - what changed?
|
|
16
|
+
|
|
17
|
+
<!-- What aspects and mechanisms of the code base changed? Describe only the general
|
|
18
|
+
idea and overarching features. -->
|
|
19
|
+
|
|
20
|
+
### Implementation - how did you implement the changes?
|
|
21
|
+
|
|
22
|
+
<!-- How did you solve the issue technically? Explain why you chose this approach and
|
|
23
|
+
provide code examples if applicable (e.g. change in the API for users). -->
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## Changes Made
|
|
27
|
+
|
|
28
|
+
<!-- This section highlights the important features and files that reviewers should
|
|
29
|
+
pay attention to when reviewing. Only list important features or files, this is useful for
|
|
30
|
+
reviewers to correctly assess how deeply the modifications impact the code base.
|
|
31
|
+
|
|
32
|
+
For instance:
|
|
33
|
+
|
|
34
|
+
### New features or files
|
|
35
|
+
- `NewClass` added to `new_file.py`
|
|
36
|
+
- `new_function` added to `existing_file.py`
|
|
37
|
+
|
|
38
|
+
...
|
|
39
|
+
-->
|
|
40
|
+
|
|
41
|
+
### New features or files
|
|
42
|
+
|
|
43
|
+
<!-- List new features or files added. -->
|
|
44
|
+
-
|
|
45
|
+
|
|
46
|
+
### Modified features or files
|
|
47
|
+
|
|
48
|
+
<!-- List important modified features or files. -->
|
|
49
|
+
-
|
|
50
|
+
|
|
51
|
+
### Removed features or files
|
|
52
|
+
|
|
53
|
+
<!-- List removed features or files. -->
|
|
54
|
+
-
|
|
55
|
+
|
|
56
|
+
## How has this been tested?
|
|
57
|
+
|
|
58
|
+
<!-- Describe the tests that you ran to verify your changes. This can be a short
|
|
59
|
+
description of the tests added to the PR or code snippet to reproduce the change
|
|
60
|
+
in behaviour. -->
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
## Related Issues
|
|
64
|
+
|
|
65
|
+
<!-- Link to any related issues or discussions. Use keywords like "Fixes", "Resolves",
|
|
66
|
+
or "Closes" to link to issues automatically. -->
|
|
67
|
+
|
|
68
|
+
- Resolves #
|
|
69
|
+
|
|
70
|
+
## Breaking changes
|
|
71
|
+
|
|
72
|
+
<!-- Describe any breaking changes introduced by this PR. -->
|
|
73
|
+
|
|
74
|
+
## Additional Notes and Examples
|
|
75
|
+
|
|
76
|
+
<!-- Provide any additional information that will help reviewers understand the
|
|
77
|
+
changes. This can be links to documentations, forum posts, past discussions etc. -->
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
**Please ensure your PR meets the following requirements:**
|
|
82
|
+
|
|
83
|
+
- [ ] Code builds and passes tests locally, including doctests
|
|
84
|
+
- [ ] New tests have been added (for bug fixes/features)
|
|
85
|
+
- [ ] Pre-commit passes
|
|
86
|
+
- [ ] PR to the documentation exists (for bug fixes / features)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: careamics
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.8
|
|
4
4
|
Summary: Toolbox for running N2V and friends.
|
|
5
5
|
Project-URL: homepage, https://careamics.github.io/
|
|
6
6
|
Project-URL: repository, https://github.com/CAREamics/careamics
|
|
@@ -17,16 +17,18 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
17
17
|
Classifier: Typing :: Typed
|
|
18
18
|
Requires-Python: >=3.9
|
|
19
19
|
Requires-Dist: bioimageio-core==0.7
|
|
20
|
+
Requires-Dist: matplotlib<=3.10.0
|
|
20
21
|
Requires-Dist: numpy<2.0.0
|
|
21
22
|
Requires-Dist: pillow<=11.1.0
|
|
22
23
|
Requires-Dist: psutil<=6.1.1
|
|
23
24
|
Requires-Dist: pydantic<2.11,>=2.5
|
|
24
25
|
Requires-Dist: pytorch-lightning<=2.5.0.post0,>=2.2
|
|
25
26
|
Requires-Dist: pyyaml!=6.0.0,<=6.0.2
|
|
26
|
-
Requires-Dist: scikit-image<=0.25.
|
|
27
|
+
Requires-Dist: scikit-image<=0.25.1
|
|
27
28
|
Requires-Dist: tifffile<=2025.1.10
|
|
28
|
-
Requires-Dist: torch<=2.
|
|
29
|
+
Requires-Dist: torch<=2.6.0,>=2.0
|
|
29
30
|
Requires-Dist: torchvision<=0.20.1
|
|
31
|
+
Requires-Dist: torchvision<=0.21.0
|
|
30
32
|
Requires-Dist: typer<=0.15.1,>=0.12.3
|
|
31
33
|
Requires-Dist: zarr<3.0.0
|
|
32
34
|
Provides-Extra: dev
|
|
@@ -43,7 +43,8 @@ classifiers = [
|
|
|
43
43
|
]
|
|
44
44
|
dependencies = [
|
|
45
45
|
'numpy<2.0.0',
|
|
46
|
-
'torch>=2.0,<=2.
|
|
46
|
+
'torch>=2.0,<=2.6.0',
|
|
47
|
+
'torchvision<=0.21.0',
|
|
47
48
|
'torchvision<=0.20.1',
|
|
48
49
|
'bioimageio.core==0.7',
|
|
49
50
|
'tifffile<=2025.1.10',
|
|
@@ -52,9 +53,10 @@ dependencies = [
|
|
|
52
53
|
'pytorch_lightning>=2.2,<=2.5.0.post0',
|
|
53
54
|
'pyyaml<=6.0.2,!=6.0.0',
|
|
54
55
|
'typer>=0.12.3,<=0.15.1',
|
|
55
|
-
'scikit-image<=0.25.
|
|
56
|
+
'scikit-image<=0.25.1',
|
|
56
57
|
'zarr<3.0.0',
|
|
57
58
|
'pillow<=11.1.0',
|
|
59
|
+
'matplotlib<=3.10.0'
|
|
58
60
|
]
|
|
59
61
|
|
|
60
62
|
[project.optional-dependencies]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""CARE algorithm configuration."""
|
|
2
|
+
|
|
3
|
+
from typing import Annotated, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import AfterValidator
|
|
6
|
+
|
|
7
|
+
from careamics.config.architectures import UNetModel
|
|
8
|
+
from careamics.config.validators import (
|
|
9
|
+
model_without_final_activation,
|
|
10
|
+
model_without_n2v2,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
from .unet_algorithm_model import UNetBasedAlgorithm
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CAREAlgorithm(UNetBasedAlgorithm):
|
|
17
|
+
"""CARE algorithm configuration.
|
|
18
|
+
|
|
19
|
+
Attributes
|
|
20
|
+
----------
|
|
21
|
+
algorithm : "care"
|
|
22
|
+
CARE Algorithm name.
|
|
23
|
+
loss : {"mae", "mse"}
|
|
24
|
+
CARE-compatible loss function.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
algorithm: Literal["care"] = "care"
|
|
28
|
+
"""CARE Algorithm name."""
|
|
29
|
+
|
|
30
|
+
loss: Literal["mae", "mse"] = "mae"
|
|
31
|
+
"""CARE-compatible loss function."""
|
|
32
|
+
|
|
33
|
+
model: Annotated[
|
|
34
|
+
UNetModel,
|
|
35
|
+
AfterValidator(model_without_n2v2),
|
|
36
|
+
AfterValidator(model_without_final_activation),
|
|
37
|
+
]
|
|
38
|
+
"""UNet without a final activation function and without the `n2v2` modifications."""
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""N2N Algorithm configuration."""
|
|
2
|
+
|
|
3
|
+
from typing import Annotated, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import AfterValidator
|
|
6
|
+
|
|
7
|
+
from careamics.config.architectures import UNetModel
|
|
8
|
+
from careamics.config.validators import (
|
|
9
|
+
model_without_final_activation,
|
|
10
|
+
model_without_n2v2,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
from .unet_algorithm_model import UNetBasedAlgorithm
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class N2NAlgorithm(UNetBasedAlgorithm):
|
|
17
|
+
"""Noise2Noise Algorithm configuration."""
|
|
18
|
+
|
|
19
|
+
algorithm: Literal["n2n"] = "n2n"
|
|
20
|
+
"""N2N Algorithm name."""
|
|
21
|
+
|
|
22
|
+
loss: Literal["mae", "mse"] = "mae"
|
|
23
|
+
"""N2N-compatible loss function."""
|
|
24
|
+
|
|
25
|
+
model: Annotated[
|
|
26
|
+
UNetModel,
|
|
27
|
+
AfterValidator(model_without_n2v2),
|
|
28
|
+
AfterValidator(model_without_final_activation),
|
|
29
|
+
]
|
|
30
|
+
"""UNet without a final activation function and without the `n2v2` modifications."""
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
""""N2V Algorithm configuration."""
|
|
2
|
+
|
|
3
|
+
from typing import Annotated, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import AfterValidator
|
|
6
|
+
|
|
7
|
+
from careamics.config.architectures import UNetModel
|
|
8
|
+
from careamics.config.validators import (
|
|
9
|
+
model_matching_in_out_channels,
|
|
10
|
+
model_without_final_activation,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
from .unet_algorithm_model import UNetBasedAlgorithm
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class N2VAlgorithm(UNetBasedAlgorithm):
|
|
17
|
+
"""N2V Algorithm configuration."""
|
|
18
|
+
|
|
19
|
+
algorithm: Literal["n2v"] = "n2v"
|
|
20
|
+
"""N2V Algorithm name."""
|
|
21
|
+
|
|
22
|
+
loss: Literal["n2v"] = "n2v"
|
|
23
|
+
"""N2V loss function."""
|
|
24
|
+
|
|
25
|
+
model: Annotated[
|
|
26
|
+
UNetModel,
|
|
27
|
+
AfterValidator(model_matching_in_out_channels),
|
|
28
|
+
AfterValidator(model_without_final_activation),
|
|
29
|
+
]
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Convenience functions to create configurations for training and inference."""
|
|
2
2
|
|
|
3
|
-
from typing import Any, Literal, Optional, Union
|
|
3
|
+
from typing import Annotated, Any, Literal, Optional, Union
|
|
4
4
|
|
|
5
|
-
from pydantic import TypeAdapter
|
|
5
|
+
from pydantic import Discriminator, Tag, TypeAdapter
|
|
6
6
|
|
|
7
7
|
from careamics.config.algorithms import CAREAlgorithm, N2NAlgorithm, N2VAlgorithm
|
|
8
8
|
from careamics.config.architectures import UNetModel
|
|
@@ -12,6 +12,7 @@ from careamics.config.data import DataConfig, N2VDataConfig
|
|
|
12
12
|
from careamics.config.n2n_configuration import N2NConfiguration
|
|
13
13
|
from careamics.config.n2v_configuration import N2VConfiguration
|
|
14
14
|
from careamics.config.support import (
|
|
15
|
+
SupportedAlgorithm,
|
|
15
16
|
SupportedArchitecture,
|
|
16
17
|
SupportedPixelManipulation,
|
|
17
18
|
SupportedTransform,
|
|
@@ -26,6 +27,24 @@ from careamics.config.transformations import (
|
|
|
26
27
|
)
|
|
27
28
|
|
|
28
29
|
|
|
30
|
+
def _algorithm_config_discriminator(value: Union[dict, Configuration]) -> str:
|
|
31
|
+
"""Discriminate algorithm-specific configurations based on the algorithm.
|
|
32
|
+
|
|
33
|
+
Parameters
|
|
34
|
+
----------
|
|
35
|
+
value : Any
|
|
36
|
+
Value to discriminate.
|
|
37
|
+
|
|
38
|
+
Returns
|
|
39
|
+
-------
|
|
40
|
+
str
|
|
41
|
+
Discriminator value.
|
|
42
|
+
"""
|
|
43
|
+
if isinstance(value, dict):
|
|
44
|
+
return value["algorithm_config"]["algorithm"]
|
|
45
|
+
return value.algorithm_config.algorithm
|
|
46
|
+
|
|
47
|
+
|
|
29
48
|
def configuration_factory(
|
|
30
49
|
configuration: dict[str, Any]
|
|
31
50
|
) -> Union[N2VConfiguration, N2NConfiguration, CAREConfiguration]:
|
|
@@ -43,7 +62,14 @@ def configuration_factory(
|
|
|
43
62
|
Configuration for training CAREamics.
|
|
44
63
|
"""
|
|
45
64
|
adapter: TypeAdapter = TypeAdapter(
|
|
46
|
-
|
|
65
|
+
Annotated[
|
|
66
|
+
Union[
|
|
67
|
+
Annotated[N2VConfiguration, Tag(SupportedAlgorithm.N2V.value)],
|
|
68
|
+
Annotated[N2NConfiguration, Tag(SupportedAlgorithm.N2N.value)],
|
|
69
|
+
Annotated[CAREConfiguration, Tag(SupportedAlgorithm.CARE.value)],
|
|
70
|
+
],
|
|
71
|
+
Discriminator(_algorithm_config_discriminator),
|
|
72
|
+
]
|
|
47
73
|
)
|
|
48
74
|
return adapter.validate_python(configuration)
|
|
49
75
|
|
|
@@ -198,7 +224,8 @@ def _create_configuration(
|
|
|
198
224
|
logger: Literal["wandb", "tensorboard", "none"],
|
|
199
225
|
use_n2v2: bool = False,
|
|
200
226
|
model_params: Optional[dict] = None,
|
|
201
|
-
|
|
227
|
+
train_dataloader_params: Optional[dict[str, Any]] = None,
|
|
228
|
+
val_dataloader_params: Optional[dict[str, Any]] = None,
|
|
202
229
|
) -> Configuration:
|
|
203
230
|
"""
|
|
204
231
|
Create a configuration for training N2V, CARE or Noise2Noise.
|
|
@@ -236,8 +263,10 @@ def _create_configuration(
|
|
|
236
263
|
Whether to use N2V2, by default False.
|
|
237
264
|
model_params : dict
|
|
238
265
|
UNetModel parameters.
|
|
239
|
-
|
|
240
|
-
Parameters for the dataloader, see PyTorch notes, by default None.
|
|
266
|
+
train_dataloader_params : dict
|
|
267
|
+
Parameters for the training dataloader, see PyTorch notes, by default None.
|
|
268
|
+
val_dataloader_params : dict
|
|
269
|
+
Parameters for the validation dataloader, see PyTorch notes, by default None.
|
|
241
270
|
|
|
242
271
|
Returns
|
|
243
272
|
-------
|
|
@@ -268,8 +297,12 @@ def _create_configuration(
|
|
|
268
297
|
"patch_size": patch_size,
|
|
269
298
|
"batch_size": batch_size,
|
|
270
299
|
"transforms": augmentations,
|
|
271
|
-
"dataloader_params": dataloader_params,
|
|
272
300
|
}
|
|
301
|
+
# Don't override defaults set in DataConfig class
|
|
302
|
+
if train_dataloader_params is not None:
|
|
303
|
+
data["train_dataloader_params"] = train_dataloader_params
|
|
304
|
+
if val_dataloader_params is not None:
|
|
305
|
+
data["val_dataloader_params"] = val_dataloader_params
|
|
273
306
|
|
|
274
307
|
# training model
|
|
275
308
|
training = TrainingConfig(
|
|
@@ -305,7 +338,8 @@ def _create_supervised_configuration(
|
|
|
305
338
|
n_channels_out: Optional[int] = None,
|
|
306
339
|
logger: Literal["wandb", "tensorboard", "none"] = "none",
|
|
307
340
|
model_params: Optional[dict] = None,
|
|
308
|
-
|
|
341
|
+
train_dataloader_params: Optional[dict[str, Any]] = None,
|
|
342
|
+
val_dataloader_params: Optional[dict[str, Any]] = None,
|
|
309
343
|
) -> Configuration:
|
|
310
344
|
"""
|
|
311
345
|
Create a configuration for training CARE or Noise2Noise.
|
|
@@ -342,8 +376,10 @@ def _create_supervised_configuration(
|
|
|
342
376
|
Logger to use, by default "none".
|
|
343
377
|
model_params : dict, optional
|
|
344
378
|
UNetModel parameters, by default {}.
|
|
345
|
-
|
|
346
|
-
Parameters for the dataloader, see PyTorch notes, by default None.
|
|
379
|
+
train_dataloader_params : dict
|
|
380
|
+
Parameters for the training dataloader, see PyTorch notes, by default None.
|
|
381
|
+
val_dataloader_params : dict
|
|
382
|
+
Parameters for the validation dataloader, see PyTorch notes, by default None.
|
|
347
383
|
|
|
348
384
|
Returns
|
|
349
385
|
-------
|
|
@@ -390,7 +426,8 @@ def _create_supervised_configuration(
|
|
|
390
426
|
n_channels_out=n_channels_out,
|
|
391
427
|
logger=logger,
|
|
392
428
|
model_params=model_params,
|
|
393
|
-
|
|
429
|
+
train_dataloader_params=train_dataloader_params,
|
|
430
|
+
val_dataloader_params=val_dataloader_params,
|
|
394
431
|
)
|
|
395
432
|
|
|
396
433
|
|
|
@@ -408,7 +445,8 @@ def create_care_configuration(
|
|
|
408
445
|
n_channels_out: Optional[int] = None,
|
|
409
446
|
logger: Literal["wandb", "tensorboard", "none"] = "none",
|
|
410
447
|
model_params: Optional[dict] = None,
|
|
411
|
-
|
|
448
|
+
train_dataloader_params: Optional[dict[str, Any]] = None,
|
|
449
|
+
val_dataloader_params: Optional[dict[str, Any]] = None,
|
|
412
450
|
) -> Configuration:
|
|
413
451
|
"""
|
|
414
452
|
Create a configuration for training CARE.
|
|
@@ -461,8 +499,14 @@ def create_care_configuration(
|
|
|
461
499
|
Logger to use.
|
|
462
500
|
model_params : dict, default=None
|
|
463
501
|
UNetModel parameters.
|
|
464
|
-
|
|
465
|
-
Parameters for the dataloader, see PyTorch
|
|
502
|
+
train_dataloader_params : dict, optional
|
|
503
|
+
Parameters for the training dataloader, see the PyTorch docs for `DataLoader`.
|
|
504
|
+
If left as `None`, the dict `{"shuffle": True}` will be used, this is set in
|
|
505
|
+
the `GeneralDataConfig`.
|
|
506
|
+
val_dataloader_params : dict, optional
|
|
507
|
+
Parameters for the validation dataloader, see PyTorch the docs for `DataLoader`.
|
|
508
|
+
If left as `None`, the empty dict `{}` will be used, this is set in the
|
|
509
|
+
`GeneralDataConfig`.
|
|
466
510
|
|
|
467
511
|
Returns
|
|
468
512
|
-------
|
|
@@ -551,7 +595,8 @@ def create_care_configuration(
|
|
|
551
595
|
n_channels_out=n_channels_out,
|
|
552
596
|
logger=logger,
|
|
553
597
|
model_params=model_params,
|
|
554
|
-
|
|
598
|
+
train_dataloader_params=train_dataloader_params,
|
|
599
|
+
val_dataloader_params=val_dataloader_params,
|
|
555
600
|
)
|
|
556
601
|
|
|
557
602
|
|
|
@@ -569,7 +614,8 @@ def create_n2n_configuration(
|
|
|
569
614
|
n_channels_out: Optional[int] = None,
|
|
570
615
|
logger: Literal["wandb", "tensorboard", "none"] = "none",
|
|
571
616
|
model_params: Optional[dict] = None,
|
|
572
|
-
|
|
617
|
+
train_dataloader_params: Optional[dict[str, Any]] = None,
|
|
618
|
+
val_dataloader_params: Optional[dict[str, Any]] = None,
|
|
573
619
|
) -> Configuration:
|
|
574
620
|
"""
|
|
575
621
|
Create a configuration for training Noise2Noise.
|
|
@@ -622,8 +668,14 @@ def create_n2n_configuration(
|
|
|
622
668
|
Logger to use, by default "none".
|
|
623
669
|
model_params : dict, optional
|
|
624
670
|
UNetModel parameters, by default {}.
|
|
625
|
-
|
|
626
|
-
Parameters for the dataloader, see PyTorch
|
|
671
|
+
train_dataloader_params : dict, optional
|
|
672
|
+
Parameters for the training dataloader, see the PyTorch docs for `DataLoader`.
|
|
673
|
+
If left as `None`, the dict `{"shuffle": True}` will be used, this is set in
|
|
674
|
+
the `GeneralDataConfig`.
|
|
675
|
+
val_dataloader_params : dict, optional
|
|
676
|
+
Parameters for the validation dataloader, see PyTorch the docs for `DataLoader`.
|
|
677
|
+
If left as `None`, the empty dict `{}` will be used, this is set in the
|
|
678
|
+
`GeneralDataConfig`.
|
|
627
679
|
|
|
628
680
|
Returns
|
|
629
681
|
-------
|
|
@@ -712,7 +764,8 @@ def create_n2n_configuration(
|
|
|
712
764
|
n_channels_out=n_channels_out,
|
|
713
765
|
logger=logger,
|
|
714
766
|
model_params=model_params,
|
|
715
|
-
|
|
767
|
+
train_dataloader_params=train_dataloader_params,
|
|
768
|
+
val_dataloader_params=val_dataloader_params,
|
|
716
769
|
)
|
|
717
770
|
|
|
718
771
|
|
|
@@ -733,7 +786,8 @@ def create_n2v_configuration(
|
|
|
733
786
|
struct_n2v_span: int = 5,
|
|
734
787
|
logger: Literal["wandb", "tensorboard", "none"] = "none",
|
|
735
788
|
model_params: Optional[dict] = None,
|
|
736
|
-
|
|
789
|
+
train_dataloader_params: Optional[dict[str, Any]] = None,
|
|
790
|
+
val_dataloader_params: Optional[dict[str, Any]] = None,
|
|
737
791
|
) -> Configuration:
|
|
738
792
|
"""
|
|
739
793
|
Create a configuration for training Noise2Void.
|
|
@@ -812,8 +866,14 @@ def create_n2v_configuration(
|
|
|
812
866
|
Logger to use, by default "none".
|
|
813
867
|
model_params : dict, optional
|
|
814
868
|
UNetModel parameters, by default None.
|
|
815
|
-
|
|
816
|
-
Parameters for the dataloader, see PyTorch
|
|
869
|
+
train_dataloader_params : dict, optional
|
|
870
|
+
Parameters for the training dataloader, see the PyTorch docs for `DataLoader`.
|
|
871
|
+
If left as `None`, the dict `{"shuffle": True}` will be used, this is set in
|
|
872
|
+
the `GeneralDataConfig`.
|
|
873
|
+
val_dataloader_params : dict, optional
|
|
874
|
+
Parameters for the validation dataloader, see PyTorch the docs for `DataLoader`.
|
|
875
|
+
If left as `None`, the empty dict `{}` will be used, this is set in the
|
|
876
|
+
`GeneralDataConfig`.
|
|
817
877
|
|
|
818
878
|
Returns
|
|
819
879
|
-------
|
|
@@ -953,5 +1013,6 @@ def create_n2v_configuration(
|
|
|
953
1013
|
n_channels_out=n_channels,
|
|
954
1014
|
logger=logger,
|
|
955
1015
|
model_params=model_params,
|
|
956
|
-
|
|
1016
|
+
train_dataloader_params=train_dataloader_params,
|
|
1017
|
+
val_dataloader_params=val_dataloader_params,
|
|
957
1018
|
)
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from collections.abc import Sequence
|
|
6
6
|
from pprint import pformat
|
|
7
7
|
from typing import Annotated, Any, Literal, Optional, Union
|
|
8
|
+
from warnings import warn
|
|
8
9
|
|
|
9
10
|
import numpy as np
|
|
10
11
|
from numpy.typing import NDArray
|
|
@@ -100,8 +101,13 @@ class GeneralDataConfig(BaseModel):
|
|
|
100
101
|
"""List of transformations to apply to the data, available transforms are defined
|
|
101
102
|
in SupportedTransform."""
|
|
102
103
|
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
train_dataloader_params: dict[str, Any] = Field(
|
|
105
|
+
default={"shuffle": True}, validate_default=True
|
|
106
|
+
)
|
|
107
|
+
"""Dictionary of PyTorch training dataloader parameters."""
|
|
108
|
+
|
|
109
|
+
val_dataloader_params: dict[str, Any] = Field(default={})
|
|
110
|
+
"""Dictionary of PyTorch validation dataloader parameters."""
|
|
105
111
|
|
|
106
112
|
@field_validator("patch_size")
|
|
107
113
|
@classmethod
|
|
@@ -167,6 +173,45 @@ class GeneralDataConfig(BaseModel):
|
|
|
167
173
|
|
|
168
174
|
return axes
|
|
169
175
|
|
|
176
|
+
@field_validator("train_dataloader_params")
|
|
177
|
+
@classmethod
|
|
178
|
+
def shuffle_train_dataloader(
|
|
179
|
+
cls, train_dataloader_params: dict[str, Any]
|
|
180
|
+
) -> dict[str, Any]:
|
|
181
|
+
"""
|
|
182
|
+
Validate that "shuffle" is included in the training dataloader params.
|
|
183
|
+
|
|
184
|
+
A warning will be raised if `shuffle=False`.
|
|
185
|
+
|
|
186
|
+
Parameters
|
|
187
|
+
----------
|
|
188
|
+
train_dataloader_params : dict of {str: Any}
|
|
189
|
+
The training dataloader parameters.
|
|
190
|
+
|
|
191
|
+
Returns
|
|
192
|
+
-------
|
|
193
|
+
dict of {str: Any}
|
|
194
|
+
The validated training dataloader parameters.
|
|
195
|
+
|
|
196
|
+
Raises
|
|
197
|
+
------
|
|
198
|
+
ValueError
|
|
199
|
+
If "shuffle" is not included in the training dataloader params.
|
|
200
|
+
"""
|
|
201
|
+
if "shuffle" not in train_dataloader_params:
|
|
202
|
+
raise ValueError(
|
|
203
|
+
"Value for 'shuffle' was not included in the `train_dataloader_params`."
|
|
204
|
+
)
|
|
205
|
+
elif ("shuffle" in train_dataloader_params) and (
|
|
206
|
+
not train_dataloader_params["shuffle"]
|
|
207
|
+
):
|
|
208
|
+
warn(
|
|
209
|
+
"Dataloader parameters include `shuffle=False`, this will be passed to "
|
|
210
|
+
"the training dataloader and may result in bad results.",
|
|
211
|
+
stacklevel=1,
|
|
212
|
+
)
|
|
213
|
+
return train_dataloader_params
|
|
214
|
+
|
|
170
215
|
@model_validator(mode="after")
|
|
171
216
|
def std_only_with_mean(self: Self) -> Self:
|
|
172
217
|
"""
|
|
@@ -6,7 +6,11 @@ from careamics.utils import BaseEnum
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class SupportedAlgorithm(str, BaseEnum):
|
|
9
|
-
"""Algorithms available in CAREamics.
|
|
9
|
+
"""Algorithms available in CAREamics.
|
|
10
|
+
|
|
11
|
+
These definitions are the same as the keyword `name` of the algorithm
|
|
12
|
+
configurations.
|
|
13
|
+
"""
|
|
10
14
|
|
|
11
15
|
N2V = "n2v"
|
|
12
16
|
"""Noise2Void algorithm, a self-supervised approach based on blind denoising."""
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""Validator utilities."""
|
|
2
|
+
|
|
3
|
+
__all__ = [
|
|
4
|
+
"check_axes_validity",
|
|
5
|
+
"model_matching_in_out_channels",
|
|
6
|
+
"model_without_final_activation",
|
|
7
|
+
"model_without_n2v2",
|
|
8
|
+
"patch_size_ge_than_8_power_of_2",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
from .model_validators import (
|
|
12
|
+
model_matching_in_out_channels,
|
|
13
|
+
model_without_final_activation,
|
|
14
|
+
model_without_n2v2,
|
|
15
|
+
)
|
|
16
|
+
from .validator_utils import check_axes_validity, patch_size_ge_than_8_power_of_2
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Architecture model validators."""
|
|
2
|
+
|
|
3
|
+
from careamics.config.architectures import UNetModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def model_without_n2v2(model: UNetModel) -> UNetModel:
|
|
7
|
+
"""Validate that the Unet model does not have the n2v2 attribute.
|
|
8
|
+
|
|
9
|
+
Parameters
|
|
10
|
+
----------
|
|
11
|
+
model : UNetModel
|
|
12
|
+
Model to validate.
|
|
13
|
+
|
|
14
|
+
Returns
|
|
15
|
+
-------
|
|
16
|
+
UNetModel
|
|
17
|
+
The validated model.
|
|
18
|
+
|
|
19
|
+
Raises
|
|
20
|
+
------
|
|
21
|
+
ValueError
|
|
22
|
+
If the model has the `n2v2` attribute set to `True`.
|
|
23
|
+
"""
|
|
24
|
+
if model.n2v2:
|
|
25
|
+
raise ValueError(
|
|
26
|
+
"The algorithm does not support the `n2v2` attribute in the model. "
|
|
27
|
+
"Set it to `False`."
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
return model
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def model_without_final_activation(model: UNetModel) -> UNetModel:
|
|
34
|
+
"""Validate that the UNet model does not have the final_activation.
|
|
35
|
+
|
|
36
|
+
Parameters
|
|
37
|
+
----------
|
|
38
|
+
model : UNetModel
|
|
39
|
+
Model to validate.
|
|
40
|
+
|
|
41
|
+
Returns
|
|
42
|
+
-------
|
|
43
|
+
UNetModel
|
|
44
|
+
The validated model.
|
|
45
|
+
|
|
46
|
+
Raises
|
|
47
|
+
------
|
|
48
|
+
ValueError
|
|
49
|
+
If the model has the final_activation attribute set.
|
|
50
|
+
"""
|
|
51
|
+
if model.final_activation != "None":
|
|
52
|
+
raise ValueError(
|
|
53
|
+
"The algorithm does not support a `final_activation` in the model. "
|
|
54
|
+
'Set it to `"None"`.'
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
return model
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def model_matching_in_out_channels(model: UNetModel) -> UNetModel:
|
|
61
|
+
"""Validate that the UNet model has the same number of channel inputs and outputs.
|
|
62
|
+
|
|
63
|
+
Parameters
|
|
64
|
+
----------
|
|
65
|
+
model : UNetModel
|
|
66
|
+
Model to validate.
|
|
67
|
+
|
|
68
|
+
Returns
|
|
69
|
+
-------
|
|
70
|
+
UNetModel
|
|
71
|
+
Validated model.
|
|
72
|
+
|
|
73
|
+
Raises
|
|
74
|
+
------
|
|
75
|
+
ValueError
|
|
76
|
+
If the model has different number of input and output channels.
|
|
77
|
+
"""
|
|
78
|
+
if model.num_classes != model.in_channels:
|
|
79
|
+
raise ValueError(
|
|
80
|
+
"The algorithm requires the same number of input and output channels. "
|
|
81
|
+
"Make sure that `in_channels` and `num_classes` are equal."
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
return model
|