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