careamics 0.1.0rc1__py3-none-any.whl → 0.1.0rc3__py3-none-any.whl

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.

Files changed (132) hide show
  1. careamics/__init__.py +14 -4
  2. careamics/callbacks/__init__.py +6 -0
  3. careamics/callbacks/hyperparameters_callback.py +42 -0
  4. careamics/callbacks/progress_bar_callback.py +57 -0
  5. careamics/careamist.py +761 -0
  6. careamics/config/__init__.py +27 -3
  7. careamics/config/algorithm_model.py +167 -0
  8. careamics/config/architectures/__init__.py +17 -0
  9. careamics/config/architectures/architecture_model.py +29 -0
  10. careamics/config/architectures/custom_model.py +150 -0
  11. careamics/config/architectures/register_model.py +101 -0
  12. careamics/config/architectures/unet_model.py +96 -0
  13. careamics/config/architectures/vae_model.py +39 -0
  14. careamics/config/callback_model.py +92 -0
  15. careamics/config/configuration_factory.py +460 -0
  16. careamics/config/configuration_model.py +596 -0
  17. careamics/config/data_model.py +555 -0
  18. careamics/config/inference_model.py +283 -0
  19. careamics/config/noise_models.py +162 -0
  20. careamics/config/optimizer_models.py +181 -0
  21. careamics/config/references/__init__.py +45 -0
  22. careamics/config/references/algorithm_descriptions.py +131 -0
  23. careamics/config/references/references.py +38 -0
  24. careamics/config/support/__init__.py +33 -0
  25. careamics/config/support/supported_activations.py +24 -0
  26. careamics/config/support/supported_algorithms.py +18 -0
  27. careamics/config/support/supported_architectures.py +18 -0
  28. careamics/config/support/supported_data.py +82 -0
  29. careamics/{dataset/extraction_strategy.py → config/support/supported_extraction_strategies.py} +5 -2
  30. careamics/config/support/supported_loggers.py +8 -0
  31. careamics/config/support/supported_losses.py +25 -0
  32. careamics/config/support/supported_optimizers.py +55 -0
  33. careamics/config/support/supported_pixel_manipulations.py +15 -0
  34. careamics/config/support/supported_struct_axis.py +19 -0
  35. careamics/config/support/supported_transforms.py +23 -0
  36. careamics/config/tile_information.py +104 -0
  37. careamics/config/training_model.py +65 -0
  38. careamics/config/transformations/__init__.py +14 -0
  39. careamics/config/transformations/n2v_manipulate_model.py +63 -0
  40. careamics/config/transformations/nd_flip_model.py +32 -0
  41. careamics/config/transformations/normalize_model.py +31 -0
  42. careamics/config/transformations/transform_model.py +44 -0
  43. careamics/config/transformations/xy_random_rotate90_model.py +29 -0
  44. careamics/config/validators/__init__.py +5 -0
  45. careamics/config/validators/validator_utils.py +100 -0
  46. careamics/conftest.py +26 -0
  47. careamics/dataset/__init__.py +5 -0
  48. careamics/dataset/dataset_utils/__init__.py +19 -0
  49. careamics/dataset/dataset_utils/dataset_utils.py +100 -0
  50. careamics/dataset/dataset_utils/file_utils.py +140 -0
  51. careamics/dataset/dataset_utils/read_tiff.py +61 -0
  52. careamics/dataset/dataset_utils/read_utils.py +25 -0
  53. careamics/dataset/dataset_utils/read_zarr.py +56 -0
  54. careamics/dataset/in_memory_dataset.py +321 -131
  55. careamics/dataset/iterable_dataset.py +416 -0
  56. careamics/dataset/patching/__init__.py +8 -0
  57. careamics/dataset/patching/patch_transform.py +44 -0
  58. careamics/dataset/patching/patching.py +212 -0
  59. careamics/dataset/patching/random_patching.py +190 -0
  60. careamics/dataset/patching/sequential_patching.py +206 -0
  61. careamics/dataset/patching/tiled_patching.py +158 -0
  62. careamics/dataset/patching/validate_patch_dimension.py +60 -0
  63. careamics/dataset/zarr_dataset.py +149 -0
  64. careamics/lightning_datamodule.py +665 -0
  65. careamics/lightning_module.py +292 -0
  66. careamics/lightning_prediction_datamodule.py +390 -0
  67. careamics/lightning_prediction_loop.py +116 -0
  68. careamics/losses/__init__.py +4 -1
  69. careamics/losses/loss_factory.py +24 -13
  70. careamics/losses/losses.py +65 -5
  71. careamics/losses/noise_model_factory.py +40 -0
  72. careamics/losses/noise_models.py +524 -0
  73. careamics/model_io/__init__.py +8 -0
  74. careamics/model_io/bioimage/__init__.py +11 -0
  75. careamics/model_io/bioimage/_readme_factory.py +120 -0
  76. careamics/model_io/bioimage/bioimage_utils.py +48 -0
  77. careamics/model_io/bioimage/model_description.py +318 -0
  78. careamics/model_io/bmz_io.py +231 -0
  79. careamics/model_io/model_io_utils.py +80 -0
  80. careamics/models/__init__.py +4 -1
  81. careamics/models/activation.py +35 -0
  82. careamics/models/layers.py +244 -0
  83. careamics/models/model_factory.py +21 -202
  84. careamics/models/unet.py +46 -20
  85. careamics/prediction/__init__.py +1 -3
  86. careamics/prediction/stitch_prediction.py +73 -0
  87. careamics/transforms/__init__.py +41 -0
  88. careamics/transforms/n2v_manipulate.py +113 -0
  89. careamics/transforms/nd_flip.py +93 -0
  90. careamics/transforms/normalize.py +109 -0
  91. careamics/transforms/pixel_manipulation.py +383 -0
  92. careamics/transforms/struct_mask_parameters.py +18 -0
  93. careamics/transforms/tta.py +74 -0
  94. careamics/transforms/xy_random_rotate90.py +95 -0
  95. careamics/utils/__init__.py +10 -13
  96. careamics/utils/base_enum.py +32 -0
  97. careamics/utils/context.py +22 -2
  98. careamics/utils/metrics.py +0 -46
  99. careamics/utils/path_utils.py +24 -0
  100. careamics/utils/ram.py +13 -0
  101. careamics/utils/receptive_field.py +102 -0
  102. careamics/utils/running_stats.py +43 -0
  103. careamics/utils/torch_utils.py +89 -56
  104. careamics-0.1.0rc3.dist-info/METADATA +122 -0
  105. careamics-0.1.0rc3.dist-info/RECORD +109 -0
  106. {careamics-0.1.0rc1.dist-info → careamics-0.1.0rc3.dist-info}/WHEEL +1 -1
  107. careamics/bioimage/__init__.py +0 -15
  108. careamics/bioimage/docs/Noise2Void.md +0 -5
  109. careamics/bioimage/docs/__init__.py +0 -1
  110. careamics/bioimage/io.py +0 -271
  111. careamics/config/algorithm.py +0 -231
  112. careamics/config/config.py +0 -296
  113. careamics/config/config_filter.py +0 -44
  114. careamics/config/data.py +0 -194
  115. careamics/config/torch_optim.py +0 -118
  116. careamics/config/training.py +0 -534
  117. careamics/dataset/dataset_utils.py +0 -115
  118. careamics/dataset/patching.py +0 -493
  119. careamics/dataset/prepare_dataset.py +0 -174
  120. careamics/dataset/tiff_dataset.py +0 -211
  121. careamics/engine.py +0 -954
  122. careamics/manipulation/__init__.py +0 -4
  123. careamics/manipulation/pixel_manipulation.py +0 -158
  124. careamics/prediction/prediction_utils.py +0 -102
  125. careamics/utils/ascii_logo.txt +0 -9
  126. careamics/utils/augment.py +0 -65
  127. careamics/utils/normalization.py +0 -55
  128. careamics/utils/validators.py +0 -156
  129. careamics/utils/wandb.py +0 -121
  130. careamics-0.1.0rc1.dist-info/METADATA +0 -80
  131. careamics-0.1.0rc1.dist-info/RECORD +0 -46
  132. {careamics-0.1.0rc1.dist-info → careamics-0.1.0rc3.dist-info}/licenses/LICENSE +0 -0
@@ -1,211 +0,0 @@
1
- """
2
- Tiff dataset module.
3
-
4
- This module contains the implementation of the TiffDataset class, which allows loading
5
- tiff files.
6
- """
7
- from pathlib import Path
8
- from typing import Callable, Dict, Generator, List, Optional, Tuple, Union
9
-
10
- import numpy as np
11
- import torch
12
-
13
- from ..utils import normalize
14
- from ..utils.logging import get_logger
15
- from .dataset_utils import (
16
- list_files,
17
- read_tiff,
18
- )
19
- from .extraction_strategy import ExtractionStrategy
20
- from .patching import generate_patches
21
-
22
- logger = get_logger(__name__)
23
-
24
-
25
- class TiffDataset(torch.utils.data.IterableDataset):
26
- """
27
- Dataset allowing extracting patches from tiff images.
28
-
29
- Parameters
30
- ----------
31
- data_path : Union[str, Path]
32
- Path to the data, must be a directory.
33
- data_format : str
34
- Extension of the files to load, without the period.
35
- axes : str
36
- Description of axes in format STCZYX.
37
- patch_extraction_method : Union[ExtractionStrategies, None]
38
- Patch extraction strategy, as defined in extraction_strategy.
39
- patch_size : Optional[Union[List[int], Tuple[int]]], optional
40
- Size of the patches in each dimension, by default None.
41
- patch_overlap : Optional[Union[List[int], Tuple[int]]], optional
42
- Overlap of the patches in each dimension, by default None.
43
- mean : Optional[float], optional
44
- Expected mean of the dataset, by default None.
45
- std : Optional[float], optional
46
- Expected standard deviation of the dataset, by default None.
47
- patch_transform : Optional[Callable], optional
48
- Patch transform callable, by default None.
49
- patch_transform_params : Optional[Dict], optional
50
- Patch transform parameters, by default None.
51
- """
52
-
53
- def __init__(
54
- self,
55
- data_path: Union[str, Path],
56
- data_format: str,
57
- axes: str,
58
- patch_extraction_method: Union[ExtractionStrategy, None],
59
- patch_size: Optional[Union[List[int], Tuple[int]]] = None,
60
- patch_overlap: Optional[Union[List[int], Tuple[int]]] = None,
61
- mean: Optional[float] = None,
62
- std: Optional[float] = None,
63
- patch_transform: Optional[Callable] = None,
64
- patch_transform_params: Optional[Dict] = None,
65
- ) -> None:
66
- """
67
- Constructor.
68
-
69
- Parameters
70
- ----------
71
- data_path : Union[str, Path]
72
- Path to the data, must be a directory.
73
- data_format : str
74
- Extension of the files to load, without the period.
75
- axes : str
76
- Description of axes in format STCZYX.
77
- patch_extraction_method : Union[ExtractionStrategies, None]
78
- Patch extraction strategy, as defined in extraction_strategy.
79
- patch_size : Optional[Union[List[int], Tuple[int]]], optional
80
- Size of the patches in each dimension, by default None.
81
- patch_overlap : Optional[Union[List[int], Tuple[int]]], optional
82
- Overlap of the patches in each dimension, by default None.
83
- mean : Optional[float], optional
84
- Mean of the dataset, by default None.
85
- std : Optional[float], optional
86
- Standard deviation of the dataset, by default None.
87
- patch_transform : Optional[Callable], optional
88
- Patch transform callable, by default None.
89
- patch_transform_params : Optional[Dict], optional
90
- Patch transform parameters, by default None.
91
-
92
- Raises
93
- ------
94
- ValueError
95
- If data_path is not a directory.
96
- """
97
- self.data_path = Path(data_path)
98
- if not self.data_path.is_dir():
99
- raise ValueError("Path to data should be an existing folder.")
100
-
101
- self.data_format = data_format
102
- self.axes = axes
103
-
104
- self.patch_transform = patch_transform
105
-
106
- self.files = list_files(self.data_path, self.data_format)
107
-
108
- self.mean = mean
109
- self.std = std
110
- if not mean or not std:
111
- self.mean, self.std = self._calculate_mean_and_std()
112
-
113
- self.patch_size = patch_size
114
- self.patch_overlap = patch_overlap
115
- self.patch_extraction_method = patch_extraction_method
116
- self.patch_transform = patch_transform
117
- self.patch_transform_params = patch_transform_params
118
-
119
- def _calculate_mean_and_std(self) -> Tuple[float, float]:
120
- """
121
- Calculate mean and std of the dataset.
122
-
123
- Returns
124
- -------
125
- Tuple[float, float]
126
- Tuple containing mean and standard deviation.
127
- """
128
- means, stds = 0, 0
129
- num_samples = 0
130
-
131
- for sample in self._iterate_files():
132
- means += sample.mean()
133
- stds += np.std(sample)
134
- num_samples += 1
135
-
136
- result_mean = means / num_samples
137
- result_std = stds / num_samples
138
-
139
- logger.info(f"Calculated mean and std for {num_samples} images")
140
- logger.info(f"Mean: {result_mean}, std: {result_std}")
141
- return result_mean, result_std
142
-
143
- def _iterate_files(self) -> Generator:
144
- """
145
- Iterate over data source and yield whole image.
146
-
147
- Yields
148
- ------
149
- np.ndarray
150
- Image.
151
- """
152
- # When num_workers > 0, each worker process will have a different copy of the
153
- # dataset object
154
- # Configuring each copy independently to avoid having duplicate data returned
155
- # from the workers
156
- worker_info = torch.utils.data.get_worker_info()
157
- worker_id = worker_info.id if worker_info is not None else 0
158
- num_workers = worker_info.num_workers if worker_info is not None else 1
159
-
160
- for i, filename in enumerate(self.files):
161
- if i % num_workers == worker_id:
162
- sample = read_tiff(filename, self.axes)
163
- yield sample
164
-
165
- def __iter__(self) -> Generator[np.ndarray, None, None]:
166
- """
167
- Iterate over data source and yield single patch.
168
-
169
- Yields
170
- ------
171
- np.ndarray
172
- Single patch.
173
- """
174
- assert (
175
- self.mean is not None and self.std is not None
176
- ), "Mean and std must be provided"
177
- for sample in self._iterate_files():
178
- # TODO patch_extraction_method should never be None!
179
- if self.patch_extraction_method:
180
- # TODO: move S and T unpacking logic from patch generator
181
- patches = generate_patches(
182
- sample,
183
- self.patch_extraction_method,
184
- self.patch_size,
185
- self.patch_overlap,
186
- )
187
-
188
- for patch in patches:
189
- if isinstance(patch, tuple):
190
- normalized_patch = normalize(
191
- img=patch[0], mean=self.mean, std=self.std
192
- )
193
- patch = (normalized_patch, *patch[1:])
194
- else:
195
- patch = normalize(img=patch, mean=self.mean, std=self.std)
196
-
197
- if self.patch_transform is not None:
198
- assert self.patch_transform_params is not None
199
- patch = self.patch_transform(
200
- patch, **self.patch_transform_params
201
- )
202
-
203
- yield patch
204
-
205
- else:
206
- # if S or T dims are not empty - assume every image is a separate
207
- # sample in dim 0
208
- for i in range(sample.shape[0]):
209
- item = np.expand_dims(sample[i], (0, 1))
210
- item = normalize(img=item, mean=self.mean, std=self.std)
211
- yield item