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.
- careamics/__init__.py +14 -4
- careamics/callbacks/__init__.py +6 -0
- careamics/callbacks/hyperparameters_callback.py +42 -0
- careamics/callbacks/progress_bar_callback.py +57 -0
- careamics/careamist.py +761 -0
- careamics/config/__init__.py +27 -3
- careamics/config/algorithm_model.py +167 -0
- careamics/config/architectures/__init__.py +17 -0
- careamics/config/architectures/architecture_model.py +29 -0
- careamics/config/architectures/custom_model.py +150 -0
- careamics/config/architectures/register_model.py +101 -0
- careamics/config/architectures/unet_model.py +96 -0
- careamics/config/architectures/vae_model.py +39 -0
- careamics/config/callback_model.py +92 -0
- careamics/config/configuration_factory.py +460 -0
- careamics/config/configuration_model.py +596 -0
- careamics/config/data_model.py +555 -0
- careamics/config/inference_model.py +283 -0
- careamics/config/noise_models.py +162 -0
- careamics/config/optimizer_models.py +181 -0
- careamics/config/references/__init__.py +45 -0
- careamics/config/references/algorithm_descriptions.py +131 -0
- careamics/config/references/references.py +38 -0
- careamics/config/support/__init__.py +33 -0
- careamics/config/support/supported_activations.py +24 -0
- careamics/config/support/supported_algorithms.py +18 -0
- careamics/config/support/supported_architectures.py +18 -0
- careamics/config/support/supported_data.py +82 -0
- careamics/{dataset/extraction_strategy.py → config/support/supported_extraction_strategies.py} +5 -2
- careamics/config/support/supported_loggers.py +8 -0
- careamics/config/support/supported_losses.py +25 -0
- careamics/config/support/supported_optimizers.py +55 -0
- careamics/config/support/supported_pixel_manipulations.py +15 -0
- careamics/config/support/supported_struct_axis.py +19 -0
- careamics/config/support/supported_transforms.py +23 -0
- careamics/config/tile_information.py +104 -0
- careamics/config/training_model.py +65 -0
- careamics/config/transformations/__init__.py +14 -0
- careamics/config/transformations/n2v_manipulate_model.py +63 -0
- careamics/config/transformations/nd_flip_model.py +32 -0
- careamics/config/transformations/normalize_model.py +31 -0
- careamics/config/transformations/transform_model.py +44 -0
- careamics/config/transformations/xy_random_rotate90_model.py +29 -0
- careamics/config/validators/__init__.py +5 -0
- careamics/config/validators/validator_utils.py +100 -0
- careamics/conftest.py +26 -0
- careamics/dataset/__init__.py +5 -0
- careamics/dataset/dataset_utils/__init__.py +19 -0
- careamics/dataset/dataset_utils/dataset_utils.py +100 -0
- careamics/dataset/dataset_utils/file_utils.py +140 -0
- careamics/dataset/dataset_utils/read_tiff.py +61 -0
- careamics/dataset/dataset_utils/read_utils.py +25 -0
- careamics/dataset/dataset_utils/read_zarr.py +56 -0
- careamics/dataset/in_memory_dataset.py +321 -131
- careamics/dataset/iterable_dataset.py +416 -0
- careamics/dataset/patching/__init__.py +8 -0
- careamics/dataset/patching/patch_transform.py +44 -0
- careamics/dataset/patching/patching.py +212 -0
- careamics/dataset/patching/random_patching.py +190 -0
- careamics/dataset/patching/sequential_patching.py +206 -0
- careamics/dataset/patching/tiled_patching.py +158 -0
- careamics/dataset/patching/validate_patch_dimension.py +60 -0
- careamics/dataset/zarr_dataset.py +149 -0
- careamics/lightning_datamodule.py +665 -0
- careamics/lightning_module.py +292 -0
- careamics/lightning_prediction_datamodule.py +390 -0
- careamics/lightning_prediction_loop.py +116 -0
- careamics/losses/__init__.py +4 -1
- careamics/losses/loss_factory.py +24 -13
- careamics/losses/losses.py +65 -5
- careamics/losses/noise_model_factory.py +40 -0
- careamics/losses/noise_models.py +524 -0
- careamics/model_io/__init__.py +8 -0
- careamics/model_io/bioimage/__init__.py +11 -0
- careamics/model_io/bioimage/_readme_factory.py +120 -0
- careamics/model_io/bioimage/bioimage_utils.py +48 -0
- careamics/model_io/bioimage/model_description.py +318 -0
- careamics/model_io/bmz_io.py +231 -0
- careamics/model_io/model_io_utils.py +80 -0
- careamics/models/__init__.py +4 -1
- careamics/models/activation.py +35 -0
- careamics/models/layers.py +244 -0
- careamics/models/model_factory.py +21 -202
- careamics/models/unet.py +46 -20
- careamics/prediction/__init__.py +1 -3
- careamics/prediction/stitch_prediction.py +73 -0
- careamics/transforms/__init__.py +41 -0
- careamics/transforms/n2v_manipulate.py +113 -0
- careamics/transforms/nd_flip.py +93 -0
- careamics/transforms/normalize.py +109 -0
- careamics/transforms/pixel_manipulation.py +383 -0
- careamics/transforms/struct_mask_parameters.py +18 -0
- careamics/transforms/tta.py +74 -0
- careamics/transforms/xy_random_rotate90.py +95 -0
- careamics/utils/__init__.py +10 -13
- careamics/utils/base_enum.py +32 -0
- careamics/utils/context.py +22 -2
- careamics/utils/metrics.py +0 -46
- careamics/utils/path_utils.py +24 -0
- careamics/utils/ram.py +13 -0
- careamics/utils/receptive_field.py +102 -0
- careamics/utils/running_stats.py +43 -0
- careamics/utils/torch_utils.py +89 -56
- careamics-0.1.0rc3.dist-info/METADATA +122 -0
- careamics-0.1.0rc3.dist-info/RECORD +109 -0
- {careamics-0.1.0rc1.dist-info → careamics-0.1.0rc3.dist-info}/WHEEL +1 -1
- careamics/bioimage/__init__.py +0 -15
- careamics/bioimage/docs/Noise2Void.md +0 -5
- careamics/bioimage/docs/__init__.py +0 -1
- careamics/bioimage/io.py +0 -271
- careamics/config/algorithm.py +0 -231
- careamics/config/config.py +0 -296
- careamics/config/config_filter.py +0 -44
- careamics/config/data.py +0 -194
- careamics/config/torch_optim.py +0 -118
- careamics/config/training.py +0 -534
- careamics/dataset/dataset_utils.py +0 -115
- careamics/dataset/patching.py +0 -493
- careamics/dataset/prepare_dataset.py +0 -174
- careamics/dataset/tiff_dataset.py +0 -211
- careamics/engine.py +0 -954
- careamics/manipulation/__init__.py +0 -4
- careamics/manipulation/pixel_manipulation.py +0 -158
- careamics/prediction/prediction_utils.py +0 -102
- careamics/utils/ascii_logo.txt +0 -9
- careamics/utils/augment.py +0 -65
- careamics/utils/normalization.py +0 -55
- careamics/utils/validators.py +0 -156
- careamics/utils/wandb.py +0 -121
- careamics-0.1.0rc1.dist-info/METADATA +0 -80
- careamics-0.1.0rc1.dist-info/RECORD +0 -46
- {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
|