careamics 0.0.12__py3-none-any.whl → 0.0.14__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/careamist.py +4 -3
- careamics/cli/utils.py +1 -1
- careamics/config/algorithms/n2v_algorithm_model.py +1 -1
- careamics/config/architectures/unet_model.py +3 -0
- careamics/config/callback_model.py +23 -34
- careamics/config/configuration.py +47 -1
- careamics/config/configuration_factories.py +288 -23
- careamics/config/data/__init__.py +2 -0
- careamics/config/data/data_model.py +3 -3
- careamics/config/data/ng_data_model.py +381 -0
- careamics/config/data/patching_strategies/__init__.py +14 -0
- careamics/config/data/patching_strategies/_overlapping_patched_model.py +103 -0
- careamics/config/data/patching_strategies/_patched_model.py +56 -0
- careamics/config/data/patching_strategies/random_patching_model.py +21 -0
- careamics/config/data/patching_strategies/sequential_patching_model.py +25 -0
- careamics/config/data/patching_strategies/tiled_patching_model.py +40 -0
- careamics/config/data/patching_strategies/whole_patching_model.py +12 -0
- careamics/config/inference_model.py +6 -3
- careamics/config/support/supported_data.py +7 -0
- careamics/config/support/supported_patching_strategies.py +22 -0
- careamics/config/validators/validator_utils.py +4 -3
- careamics/dataset/dataset_utils/iterate_over_files.py +2 -2
- careamics/dataset/in_memory_dataset.py +2 -1
- careamics/dataset/iterable_dataset.py +2 -2
- careamics/dataset/iterable_pred_dataset.py +2 -2
- careamics/dataset/iterable_tiled_pred_dataset.py +2 -2
- careamics/dataset/patching/patching.py +3 -2
- careamics/dataset/tiling/lvae_tiled_patching.py +16 -6
- careamics/dataset/tiling/tiled_patching.py +2 -1
- careamics/dataset_ng/dataset.py +46 -50
- careamics/dataset_ng/demos/bsd68_demo.ipynb +28 -23
- careamics/dataset_ng/demos/care_U2OS_demo.ipynb +1 -1
- careamics/dataset_ng/demos/demo_custom_image_stack.ipynb +1 -1
- careamics/dataset_ng/demos/demo_datamodule.ipynb +50 -46
- careamics/dataset_ng/demos/demo_dataset.ipynb +32 -49
- careamics/dataset_ng/factory.py +58 -15
- careamics/dataset_ng/legacy_interoperability.py +3 -1
- careamics/dataset_ng/patch_extractor/demo_custom_image_stack_loader.py +1 -1
- careamics/dataset_ng/patch_extractor/image_stack/__init__.py +2 -0
- careamics/dataset_ng/patch_extractor/image_stack/czi_image_stack.py +360 -0
- careamics/dataset_ng/patch_extractor/image_stack/in_memory_image_stack.py +1 -1
- careamics/dataset_ng/patch_extractor/patch_extractor_factory.py +43 -1
- careamics/dataset_ng/patching_strategies/random_patching.py +4 -2
- careamics/dataset_ng/patching_strategies/sequential_patching.py +5 -5
- careamics/dataset_ng/patching_strategies/tiling_strategy.py +2 -1
- careamics/file_io/read/get_func.py +2 -1
- careamics/lightning/dataset_ng/__init__.py +1 -0
- careamics/lightning/dataset_ng/data_module.py +218 -28
- careamics/lightning/dataset_ng/lightning_modules/care_module.py +44 -5
- careamics/lightning/dataset_ng/lightning_modules/n2v_module.py +42 -3
- careamics/lightning/dataset_ng/lightning_modules/unet_module.py +73 -4
- careamics/lightning/lightning_module.py +2 -1
- careamics/lightning/predict_data_module.py +2 -1
- careamics/lightning/train_data_module.py +2 -1
- careamics/losses/loss_factory.py +2 -1
- careamics/lvae_training/dataset/multicrop_dset.py +1 -1
- careamics/model_io/bioimage/bioimage_utils.py +1 -1
- careamics/model_io/bioimage/model_description.py +1 -1
- careamics/model_io/bmz_io.py +1 -1
- careamics/model_io/model_io_utils.py +2 -2
- careamics/models/activation.py +2 -1
- careamics/models/unet.py +16 -10
- careamics/prediction_utils/prediction_outputs.py +1 -1
- careamics/prediction_utils/stitch_prediction.py +1 -1
- careamics/transforms/n2v_manipulate_torch.py +15 -9
- careamics/transforms/pixel_manipulation_torch.py +59 -92
- careamics/utils/lightning_utils.py +2 -2
- careamics/utils/metrics.py +2 -1
- careamics/utils/torch_utils.py +23 -0
- {careamics-0.0.12.dist-info → careamics-0.0.14.dist-info}/METADATA +10 -9
- {careamics-0.0.12.dist-info → careamics-0.0.14.dist-info}/RECORD +74 -63
- {careamics-0.0.12.dist-info → careamics-0.0.14.dist-info}/WHEEL +0 -0
- {careamics-0.0.12.dist-info → careamics-0.0.14.dist-info}/entry_points.txt +0 -0
- {careamics-0.0.12.dist-info → careamics-0.0.14.dist-info}/licenses/LICENSE +0 -0
|
@@ -6,7 +6,10 @@
|
|
|
6
6
|
"metadata": {},
|
|
7
7
|
"outputs": [],
|
|
8
8
|
"source": [
|
|
9
|
-
"from careamics.config.configuration_factories import
|
|
9
|
+
"from careamics.config.configuration_factories import (\n",
|
|
10
|
+
" _create_ng_data_configuration,\n",
|
|
11
|
+
" _list_spatial_augmentations,\n",
|
|
12
|
+
")\n",
|
|
10
13
|
"from careamics.lightning.dataset_ng.data_module import CareamicsDataModule"
|
|
11
14
|
]
|
|
12
15
|
},
|
|
@@ -70,20 +73,19 @@
|
|
|
70
73
|
"source": [
|
|
71
74
|
"# from path, train and val, no target\n",
|
|
72
75
|
"\n",
|
|
73
|
-
"config =
|
|
74
|
-
" experiment_name=\"bsd68_n2v\",\n",
|
|
76
|
+
"config = _create_ng_data_configuration(\n",
|
|
75
77
|
" data_type=\"tiff\",\n",
|
|
76
78
|
" axes=\"SYX\",\n",
|
|
77
79
|
" patch_size=(64, 64),\n",
|
|
78
80
|
" batch_size=64,\n",
|
|
79
|
-
"
|
|
81
|
+
" augmentations=_list_spatial_augmentations()\n",
|
|
80
82
|
")\n",
|
|
81
83
|
"\n",
|
|
82
|
-
"config.
|
|
83
|
-
"config.
|
|
84
|
+
"config.set_means_and_stds([image_mean], [image_std])\n",
|
|
85
|
+
"config.val_dataloader_params = {\"shuffle\": False}\n",
|
|
84
86
|
"\n",
|
|
85
87
|
"data_module = CareamicsDataModule(\n",
|
|
86
|
-
" data_config=config
|
|
88
|
+
" data_config=config,\n",
|
|
87
89
|
" train_data=train_path,\n",
|
|
88
90
|
" val_data=val_path,\n",
|
|
89
91
|
")\n",
|
|
@@ -112,13 +114,15 @@
|
|
|
112
114
|
"source": [
|
|
113
115
|
"# from path, only predict\n",
|
|
114
116
|
"\n",
|
|
115
|
-
"from careamics.config.
|
|
117
|
+
"from careamics.config.data import NGDataConfig\n",
|
|
116
118
|
"\n",
|
|
117
|
-
"config =
|
|
118
|
-
" model_config=config,\n",
|
|
119
|
+
"config = NGDataConfig(\n",
|
|
119
120
|
" data_type=\"tiff\",\n",
|
|
120
|
-
"
|
|
121
|
-
"
|
|
121
|
+
" patching={\n",
|
|
122
|
+
" \"name\": \"tiled\",\n",
|
|
123
|
+
" \"patch_size\": (128, 128),\n",
|
|
124
|
+
" \"overlaps\": (32, 32)\n",
|
|
125
|
+
" },\n",
|
|
122
126
|
" axes=\"YX\",\n",
|
|
123
127
|
" batch_size=8,\n",
|
|
124
128
|
" image_means=[image_mean],\n",
|
|
@@ -167,20 +171,19 @@
|
|
|
167
171
|
"source": [
|
|
168
172
|
"# from array, train and val, no target\n",
|
|
169
173
|
"\n",
|
|
170
|
-
"config =
|
|
171
|
-
" experiment_name=\"bsd68_n2v\",\n",
|
|
174
|
+
"config = _create_ng_data_configuration(\n",
|
|
172
175
|
" data_type=\"array\",\n",
|
|
173
176
|
" axes=\"SYX\",\n",
|
|
174
177
|
" patch_size=(64, 64),\n",
|
|
175
178
|
" batch_size=64,\n",
|
|
176
|
-
"
|
|
179
|
+
" augmentations=_list_spatial_augmentations()\n",
|
|
177
180
|
")\n",
|
|
178
181
|
"\n",
|
|
179
|
-
"config.
|
|
180
|
-
"config.
|
|
182
|
+
"config.set_means_and_stds([image_mean], [image_std])\n",
|
|
183
|
+
"config.val_dataloader_params = {\"shuffle\": False}\n",
|
|
181
184
|
"\n",
|
|
182
185
|
"data_module = CareamicsDataModule(\n",
|
|
183
|
-
" data_config=config
|
|
186
|
+
" data_config=config,\n",
|
|
184
187
|
" train_data=train_array,\n",
|
|
185
188
|
" val_data=val_array,\n",
|
|
186
189
|
")\n",
|
|
@@ -239,15 +242,14 @@
|
|
|
239
242
|
"metadata": {},
|
|
240
243
|
"outputs": [],
|
|
241
244
|
"source": [
|
|
242
|
-
"config =
|
|
243
|
-
" experiment_name=\"mitosis\",\n",
|
|
245
|
+
"config = _create_ng_data_configuration(\n",
|
|
244
246
|
" data_type=\"array\",\n",
|
|
245
247
|
" axes=\"YX\",\n",
|
|
246
248
|
" patch_size=(64, 64),\n",
|
|
247
249
|
" batch_size=64,\n",
|
|
248
|
-
"
|
|
250
|
+
" augmentations=_list_spatial_augmentations()\n",
|
|
249
251
|
")\n",
|
|
250
|
-
"config.
|
|
252
|
+
"config.set_means_and_stds(\n",
|
|
251
253
|
" [example_data.mean()],\n",
|
|
252
254
|
" [example_data.std()],\n",
|
|
253
255
|
" [segmentation.mean()],\n",
|
|
@@ -255,7 +257,7 @@
|
|
|
255
257
|
")\n",
|
|
256
258
|
"\n",
|
|
257
259
|
"data_module = CareamicsDataModule(\n",
|
|
258
|
-
" data_config=config
|
|
260
|
+
" data_config=config,\n",
|
|
259
261
|
" train_data=[example_data],\n",
|
|
260
262
|
" train_data_target=[segmentation],\n",
|
|
261
263
|
" val_data=[example_data],\n",
|
|
@@ -267,15 +269,17 @@
|
|
|
267
269
|
"train_batch = next(iter(data_module.train_dataloader()))\n",
|
|
268
270
|
"val_batch = next(iter(data_module.val_dataloader()))\n",
|
|
269
271
|
"\n",
|
|
270
|
-
"fig, ax = plt.subplots(
|
|
272
|
+
"fig, ax = plt.subplots(2, 8, figsize=(10, 3))\n",
|
|
271
273
|
"\n",
|
|
272
274
|
"for i in range(8):\n",
|
|
273
|
-
" ax[i].imshow(train_batch[0].data[i][0].numpy(), cmap=\"gray\")\n",
|
|
275
|
+
" ax[0][i].imshow(train_batch[0].data[i][0].numpy(), cmap=\"gray\")\n",
|
|
276
|
+
" ax[1][i].imshow(train_batch[1].data[i][0].numpy())\n",
|
|
274
277
|
"\n",
|
|
275
278
|
"\n",
|
|
276
|
-
"fig, ax = plt.subplots(
|
|
279
|
+
"fig, ax = plt.subplots(2, 8, figsize=(10, 3))\n",
|
|
277
280
|
"for i in range(8):\n",
|
|
278
|
-
" ax[i].imshow(val_batch[0].data[i][0].numpy(), cmap=\"gray\")"
|
|
281
|
+
" ax[0][i].imshow(val_batch[0].data[i][0].numpy(), cmap=\"gray\")\n",
|
|
282
|
+
" ax[1][i].imshow(val_batch[1].data[i][0].numpy())"
|
|
279
283
|
]
|
|
280
284
|
},
|
|
281
285
|
{
|
|
@@ -286,13 +290,15 @@
|
|
|
286
290
|
"source": [
|
|
287
291
|
"# from array, only predict, with target\n",
|
|
288
292
|
"\n",
|
|
289
|
-
"from careamics.config.
|
|
293
|
+
"from careamics.config.data import NGDataConfig\n",
|
|
290
294
|
"\n",
|
|
291
|
-
"config =
|
|
292
|
-
" model_config=config,\n",
|
|
295
|
+
"config = NGDataConfig(\n",
|
|
293
296
|
" data_type=\"array\",\n",
|
|
294
|
-
"
|
|
295
|
-
"
|
|
297
|
+
" patching={\n",
|
|
298
|
+
" \"name\": \"tiled\",\n",
|
|
299
|
+
" \"patch_size\": (128, 128),\n",
|
|
300
|
+
" \"overlaps\": (32, 32)\n",
|
|
301
|
+
" },\n",
|
|
296
302
|
" axes=\"YX\",\n",
|
|
297
303
|
" batch_size=8,\n",
|
|
298
304
|
" image_means=[image_mean],\n",
|
|
@@ -329,20 +335,19 @@
|
|
|
329
335
|
"metadata": {},
|
|
330
336
|
"outputs": [],
|
|
331
337
|
"source": [
|
|
332
|
-
"config =
|
|
333
|
-
" experiment_name=\"bsd68_n2v\",\n",
|
|
338
|
+
"config = _create_ng_data_configuration(\n",
|
|
334
339
|
" data_type=\"tiff\",\n",
|
|
335
340
|
" axes=\"SYX\",\n",
|
|
336
341
|
" patch_size=(64, 64),\n",
|
|
337
342
|
" batch_size=64,\n",
|
|
338
|
-
"
|
|
343
|
+
" augmentations=_list_spatial_augmentations()\n",
|
|
339
344
|
")\n",
|
|
340
345
|
"\n",
|
|
341
|
-
"config.
|
|
342
|
-
"config.
|
|
346
|
+
"config.set_means_and_stds([image_mean], [image_std])\n",
|
|
347
|
+
"config.val_dataloader_params = {\"shuffle\": False}\n",
|
|
343
348
|
"\n",
|
|
344
349
|
"data_module = CareamicsDataModule(\n",
|
|
345
|
-
" data_config=config
|
|
350
|
+
" data_config=config,\n",
|
|
346
351
|
" train_data=sorted(train_path.glob(\"*.tiff\")),\n",
|
|
347
352
|
" val_data=sorted(val_path.glob(\"*.tiff\")),\n",
|
|
348
353
|
")\n",
|
|
@@ -378,17 +383,16 @@
|
|
|
378
383
|
"metadata": {},
|
|
379
384
|
"outputs": [],
|
|
380
385
|
"source": [
|
|
381
|
-
"config =
|
|
382
|
-
" experiment_name=\"bsd68_n2v\",\n",
|
|
386
|
+
"config = _create_ng_data_configuration(\n",
|
|
383
387
|
" data_type=\"custom\",\n",
|
|
384
388
|
" axes=\"SYX\",\n",
|
|
385
389
|
" patch_size=(64, 64),\n",
|
|
386
390
|
" batch_size=64,\n",
|
|
387
|
-
"
|
|
391
|
+
" augmentations=_list_spatial_augmentations()\n",
|
|
388
392
|
")\n",
|
|
389
393
|
"\n",
|
|
390
|
-
"config.
|
|
391
|
-
"config.
|
|
394
|
+
"config.set_means_and_stds([image_mean], [image_std])\n",
|
|
395
|
+
"config.val_dataloader_params = {\"shuffle\": False}\n",
|
|
392
396
|
"\n",
|
|
393
397
|
"def read_source_func(path):\n",
|
|
394
398
|
" image = tifffile.imread(path)\n",
|
|
@@ -396,7 +400,7 @@
|
|
|
396
400
|
" return image\n",
|
|
397
401
|
"\n",
|
|
398
402
|
"data_module = CareamicsDataModule(\n",
|
|
399
|
-
" data_config=config
|
|
403
|
+
" data_config=config,\n",
|
|
400
404
|
" train_data=sorted(train_path.glob(\"*.tiff\")),\n",
|
|
401
405
|
" val_data=sorted(val_path.glob(\"*.tiff\")),\n",
|
|
402
406
|
" read_source_func=read_source_func\n",
|
|
@@ -421,7 +425,7 @@
|
|
|
421
425
|
],
|
|
422
426
|
"metadata": {
|
|
423
427
|
"kernelspec": {
|
|
424
|
-
"display_name": "
|
|
428
|
+
"display_name": "czi",
|
|
425
429
|
"language": "python",
|
|
426
430
|
"name": "python3"
|
|
427
431
|
},
|
|
@@ -435,7 +439,7 @@
|
|
|
435
439
|
"name": "python",
|
|
436
440
|
"nbconvert_exporter": "python",
|
|
437
441
|
"pygments_lexer": "ipython3",
|
|
438
|
-
"version": "3.
|
|
442
|
+
"version": "3.12.11"
|
|
439
443
|
}
|
|
440
444
|
},
|
|
441
445
|
"nbformat": 4,
|
|
@@ -14,9 +14,12 @@
|
|
|
14
14
|
"import skimage\n",
|
|
15
15
|
"import tifffile\n",
|
|
16
16
|
"\n",
|
|
17
|
-
"from careamics.config import
|
|
18
|
-
"
|
|
19
|
-
"
|
|
17
|
+
"from careamics.config.configuration_factories import (\n",
|
|
18
|
+
" _create_ng_data_configuration,\n",
|
|
19
|
+
" _list_spatial_augmentations,\n",
|
|
20
|
+
")\n",
|
|
21
|
+
"from careamics.dataset_ng.dataset import Mode\n",
|
|
22
|
+
"from careamics.dataset_ng.factory import create_dataset"
|
|
20
23
|
]
|
|
21
24
|
},
|
|
22
25
|
{
|
|
@@ -58,24 +61,21 @@
|
|
|
58
61
|
"source": [
|
|
59
62
|
"# 1. Train val from an array\n",
|
|
60
63
|
"\n",
|
|
61
|
-
"train_data_config =
|
|
62
|
-
" \"test_exp\",\n",
|
|
64
|
+
"train_data_config = _create_ng_data_configuration(\n",
|
|
63
65
|
" data_type=\"array\",\n",
|
|
64
66
|
" axes=\"YX\",\n",
|
|
65
67
|
" patch_size=(32, 32),\n",
|
|
66
68
|
" batch_size=1,\n",
|
|
67
|
-
"
|
|
68
|
-
")
|
|
69
|
+
" augmentations=_list_spatial_augmentations()\n",
|
|
70
|
+
")\n",
|
|
69
71
|
"\n",
|
|
70
|
-
"val_data_config =
|
|
71
|
-
" \"test_exp\",\n",
|
|
72
|
+
"val_data_config = _create_ng_data_configuration(\n",
|
|
72
73
|
" data_type=\"array\",\n",
|
|
73
74
|
" axes=\"YX\",\n",
|
|
74
75
|
" patch_size=(32, 32),\n",
|
|
75
76
|
" batch_size=1,\n",
|
|
76
|
-
" num_epochs=1,\n",
|
|
77
77
|
" augmentations=[],\n",
|
|
78
|
-
")
|
|
78
|
+
")\n",
|
|
79
79
|
"\n",
|
|
80
80
|
"\n",
|
|
81
81
|
"train_dataset = create_dataset(\n",
|
|
@@ -122,24 +122,21 @@
|
|
|
122
122
|
"tifffile.imwrite(\"example_data2.tiff\", example_data[:256, :256])\n",
|
|
123
123
|
"tifffile.imwrite(\"example_target2.tiff\", segmentation[:256, :256])\n",
|
|
124
124
|
"\n",
|
|
125
|
-
"train_data_config =
|
|
126
|
-
" \"test_exp\",\n",
|
|
125
|
+
"train_data_config = _create_ng_data_configuration(\n",
|
|
127
126
|
" data_type=\"tiff\",\n",
|
|
128
127
|
" axes=\"YX\",\n",
|
|
129
128
|
" patch_size=(32, 32),\n",
|
|
130
129
|
" batch_size=1,\n",
|
|
131
|
-
"
|
|
132
|
-
")
|
|
130
|
+
" augmentations=_list_spatial_augmentations()\n",
|
|
131
|
+
")\n",
|
|
133
132
|
"\n",
|
|
134
|
-
"val_data_config =
|
|
135
|
-
" \"test_exp\",\n",
|
|
133
|
+
"val_data_config = _create_ng_data_configuration(\n",
|
|
136
134
|
" data_type=\"tiff\",\n",
|
|
137
135
|
" axes=\"YX\",\n",
|
|
138
136
|
" patch_size=(32, 32),\n",
|
|
139
137
|
" batch_size=1,\n",
|
|
140
|
-
" num_epochs=1,\n",
|
|
141
138
|
" augmentations=[],\n",
|
|
142
|
-
")
|
|
139
|
+
")\n",
|
|
143
140
|
"\n",
|
|
144
141
|
"data = sorted(Path(\"./\").glob(\"example_data*.tiff\"))\n",
|
|
145
142
|
"targets = sorted(Path(\"./\").glob(\"example_target*.tiff\"))\n",
|
|
@@ -182,18 +179,21 @@
|
|
|
182
179
|
"metadata": {},
|
|
183
180
|
"outputs": [],
|
|
184
181
|
"source": [
|
|
185
|
-
"from careamics.config import
|
|
182
|
+
"from careamics.config.data import NGDataConfig\n",
|
|
186
183
|
"\n",
|
|
187
|
-
"prediction_config =
|
|
184
|
+
"prediction_config = NGDataConfig(\n",
|
|
188
185
|
" data_type=\"array\",\n",
|
|
189
|
-
"
|
|
190
|
-
"
|
|
186
|
+
" patching={\n",
|
|
187
|
+
" \"name\": \"tiled\",\n",
|
|
188
|
+
" \"patch_size\": (32, 32),\n",
|
|
189
|
+
" \"overlaps\": (16, 16),\n",
|
|
190
|
+
" },\n",
|
|
191
191
|
" axes=\"YX\",\n",
|
|
192
|
-
" image_means=(example_data.mean(),),\n",
|
|
193
|
-
" image_stds=(example_data.std(),),\n",
|
|
194
|
-
" tta_transforms=False,\n",
|
|
195
192
|
" batch_size=1,\n",
|
|
193
|
+
" image_means=[example_data.mean()],\n",
|
|
194
|
+
" image_stds=[example_data.std()],\n",
|
|
196
195
|
")\n",
|
|
196
|
+
"\n",
|
|
197
197
|
"prediction_dataset = create_dataset(\n",
|
|
198
198
|
" config=prediction_config,\n",
|
|
199
199
|
" mode=Mode.PREDICTING,\n",
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
"fig, ax = plt.subplots(1, 5, figsize=(10, 5))\n",
|
|
206
206
|
"ax[0].set_title(\"Prediction input\")\n",
|
|
207
207
|
"for i in range(5):\n",
|
|
208
|
-
" sample, _ = prediction_dataset[i]\n",
|
|
208
|
+
" sample, *_ = prediction_dataset[i]\n",
|
|
209
209
|
" ax[i].imshow(sample.data[0])"
|
|
210
210
|
]
|
|
211
211
|
},
|
|
@@ -224,14 +224,13 @@
|
|
|
224
224
|
"metadata": {},
|
|
225
225
|
"outputs": [],
|
|
226
226
|
"source": [
|
|
227
|
-
"train_data_config =
|
|
228
|
-
" \"test_exp\",\n",
|
|
227
|
+
"train_data_config = _create_ng_data_configuration(\n",
|
|
229
228
|
" data_type=\"custom\",\n",
|
|
230
229
|
" axes=\"YX\",\n",
|
|
231
230
|
" patch_size=(32, 32),\n",
|
|
232
231
|
" batch_size=1,\n",
|
|
233
|
-
"
|
|
234
|
-
")
|
|
232
|
+
" augmentations=_list_spatial_augmentations(),\n",
|
|
233
|
+
")\n",
|
|
235
234
|
"\n",
|
|
236
235
|
"\n",
|
|
237
236
|
"def read_data_func_test(example_data):\n",
|
|
@@ -253,27 +252,11 @@
|
|
|
253
252
|
" sample, _ = train_dataset[i]\n",
|
|
254
253
|
" ax[i].imshow(sample.data[0])"
|
|
255
254
|
]
|
|
256
|
-
},
|
|
257
|
-
{
|
|
258
|
-
"cell_type": "code",
|
|
259
|
-
"execution_count": null,
|
|
260
|
-
"id": "10",
|
|
261
|
-
"metadata": {},
|
|
262
|
-
"outputs": [],
|
|
263
|
-
"source": []
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
"cell_type": "code",
|
|
267
|
-
"execution_count": null,
|
|
268
|
-
"id": "11",
|
|
269
|
-
"metadata": {},
|
|
270
|
-
"outputs": [],
|
|
271
|
-
"source": []
|
|
272
255
|
}
|
|
273
256
|
],
|
|
274
257
|
"metadata": {
|
|
275
258
|
"kernelspec": {
|
|
276
|
-
"display_name": "
|
|
259
|
+
"display_name": "czi",
|
|
277
260
|
"language": "python",
|
|
278
261
|
"name": "python3"
|
|
279
262
|
},
|
|
@@ -287,7 +270,7 @@
|
|
|
287
270
|
"name": "python",
|
|
288
271
|
"nbconvert_exporter": "python",
|
|
289
272
|
"pygments_lexer": "ipython3",
|
|
290
|
-
"version": "3.
|
|
273
|
+
"version": "3.12.11"
|
|
291
274
|
}
|
|
292
275
|
},
|
|
293
276
|
"nbformat": 4,
|
careamics/dataset_ng/factory.py
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
from collections.abc import Sequence
|
|
2
2
|
from enum import Enum
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import Any, Optional
|
|
4
|
+
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from numpy.typing import NDArray
|
|
7
7
|
from typing_extensions import ParamSpec
|
|
8
8
|
|
|
9
|
-
from careamics.config import
|
|
9
|
+
from careamics.config.data.ng_data_model import NGDataConfig
|
|
10
10
|
from careamics.config.support import SupportedData
|
|
11
11
|
from careamics.dataset_ng.patch_extractor import ImageStackLoader, PatchExtractor
|
|
12
12
|
from careamics.dataset_ng.patch_extractor.image_stack import (
|
|
13
|
+
CziImageStack,
|
|
13
14
|
GenericImageStack,
|
|
14
15
|
ImageStack,
|
|
15
16
|
InMemoryImageStack,
|
|
@@ -19,6 +20,7 @@ from careamics.dataset_ng.patch_extractor.patch_extractor_factory import (
|
|
|
19
20
|
create_array_extractor,
|
|
20
21
|
create_custom_file_extractor,
|
|
21
22
|
create_custom_image_stack_extractor,
|
|
23
|
+
create_czi_extractor,
|
|
22
24
|
create_ome_zarr_extractor,
|
|
23
25
|
create_tiff_extractor,
|
|
24
26
|
)
|
|
@@ -38,6 +40,7 @@ class DatasetType(Enum):
|
|
|
38
40
|
LAZY_TIFF = "lazy_tiff"
|
|
39
41
|
IN_MEM_CUSTOM_FILE = "in_mem_custom_file"
|
|
40
42
|
OME_ZARR = "ome_zarr"
|
|
43
|
+
CZI = "czi"
|
|
41
44
|
CUSTOM_IMAGE_STACK = "custom_image_stack"
|
|
42
45
|
|
|
43
46
|
|
|
@@ -58,7 +61,7 @@ def determine_dataset_type(
|
|
|
58
61
|
Whether all the data should be loaded into memory. This is argument is ignored
|
|
59
62
|
unless the `data_type` is "tiff" or "custom".
|
|
60
63
|
read_func : ReadFunc, optional
|
|
61
|
-
A function that can
|
|
64
|
+
A function that can be used to load custom data. This argument is
|
|
62
65
|
ignored unless the `data_type` is "custom".
|
|
63
66
|
image_stack_loader : ImageStackLoader, optional
|
|
64
67
|
A function for custom image stack loading. This argument is ignored unless the
|
|
@@ -87,6 +90,8 @@ def determine_dataset_type(
|
|
|
87
90
|
return DatasetType.IN_MEM_TIFF
|
|
88
91
|
else:
|
|
89
92
|
return DatasetType.LAZY_TIFF
|
|
93
|
+
elif data_type == SupportedData.CZI:
|
|
94
|
+
return DatasetType.CZI
|
|
90
95
|
elif data_type == SupportedData.CUSTOM:
|
|
91
96
|
if read_func is not None:
|
|
92
97
|
if in_memory:
|
|
@@ -111,7 +116,7 @@ def determine_dataset_type(
|
|
|
111
116
|
# convenience function but should use `create_dataloader` function instead
|
|
112
117
|
# For lazy loading custom batch sampler also needs to be set.
|
|
113
118
|
def create_dataset(
|
|
114
|
-
config:
|
|
119
|
+
config: NGDataConfig,
|
|
115
120
|
mode: Mode,
|
|
116
121
|
inputs: Any,
|
|
117
122
|
targets: Any,
|
|
@@ -151,7 +156,7 @@ def create_dataset(
|
|
|
151
156
|
Returns
|
|
152
157
|
-------
|
|
153
158
|
CareamicsDataset[ImageStack]
|
|
154
|
-
The CAREamicsDataset
|
|
159
|
+
The CAREamicsDataset.
|
|
155
160
|
|
|
156
161
|
Raises
|
|
157
162
|
------
|
|
@@ -167,6 +172,8 @@ def create_dataset(
|
|
|
167
172
|
elif dataset_type == DatasetType.IN_MEM_TIFF:
|
|
168
173
|
return create_tiff_dataset(config, mode, inputs, targets)
|
|
169
174
|
# TODO: Lazy tiff
|
|
175
|
+
elif dataset_type == DatasetType.CZI:
|
|
176
|
+
return create_czi_dataset(config, mode, inputs, targets)
|
|
170
177
|
elif dataset_type == DatasetType.IN_MEM_CUSTOM_FILE:
|
|
171
178
|
if read_kwargs is None:
|
|
172
179
|
read_kwargs = {}
|
|
@@ -191,7 +198,7 @@ def create_dataset(
|
|
|
191
198
|
|
|
192
199
|
|
|
193
200
|
def create_array_dataset(
|
|
194
|
-
config:
|
|
201
|
+
config: NGDataConfig,
|
|
195
202
|
mode: Mode,
|
|
196
203
|
inputs: Sequence[NDArray[Any]],
|
|
197
204
|
targets: Optional[Sequence[NDArray[Any]]],
|
|
@@ -213,7 +220,7 @@ def create_array_dataset(
|
|
|
213
220
|
Returns
|
|
214
221
|
-------
|
|
215
222
|
CareamicsDataset[InMemoryImageStack]
|
|
216
|
-
A CAREamicsDataset
|
|
223
|
+
A CAREamicsDataset.
|
|
217
224
|
"""
|
|
218
225
|
input_extractor = create_array_extractor(source=inputs, axes=config.axes)
|
|
219
226
|
target_extractor: Optional[PatchExtractor[InMemoryImageStack]]
|
|
@@ -225,7 +232,7 @@ def create_array_dataset(
|
|
|
225
232
|
|
|
226
233
|
|
|
227
234
|
def create_tiff_dataset(
|
|
228
|
-
config:
|
|
235
|
+
config: NGDataConfig,
|
|
229
236
|
mode: Mode,
|
|
230
237
|
inputs: Sequence[Path],
|
|
231
238
|
targets: Optional[Sequence[Path]],
|
|
@@ -247,7 +254,7 @@ def create_tiff_dataset(
|
|
|
247
254
|
Returns
|
|
248
255
|
-------
|
|
249
256
|
CareamicsDataset[InMemoryImageStack]
|
|
250
|
-
A CAREamicsDataset
|
|
257
|
+
A CAREamicsDataset.
|
|
251
258
|
"""
|
|
252
259
|
input_extractor = create_tiff_extractor(
|
|
253
260
|
source=inputs,
|
|
@@ -262,8 +269,44 @@ def create_tiff_dataset(
|
|
|
262
269
|
return dataset
|
|
263
270
|
|
|
264
271
|
|
|
272
|
+
def create_czi_dataset(
|
|
273
|
+
config: NGDataConfig,
|
|
274
|
+
mode: Mode,
|
|
275
|
+
inputs: Sequence[Path],
|
|
276
|
+
targets: Optional[Sequence[Path]],
|
|
277
|
+
) -> CareamicsDataset[CziImageStack]:
|
|
278
|
+
"""
|
|
279
|
+
Create a dataset from CZI files.
|
|
280
|
+
|
|
281
|
+
Parameters
|
|
282
|
+
----------
|
|
283
|
+
config : DataConfig or InferenceConfig
|
|
284
|
+
The data configuration.
|
|
285
|
+
mode : Mode
|
|
286
|
+
Whether to create the dataset in "training", "validation" or "predicting" mode.
|
|
287
|
+
inputs : Any
|
|
288
|
+
The input sources to the dataset.
|
|
289
|
+
targets : Any, optional
|
|
290
|
+
The target sources to the dataset.
|
|
291
|
+
|
|
292
|
+
Returns
|
|
293
|
+
-------
|
|
294
|
+
CareamicsDataset[CziImageStack]
|
|
295
|
+
A CAREamicsDataset.
|
|
296
|
+
"""
|
|
297
|
+
|
|
298
|
+
input_extractor = create_czi_extractor(source=inputs, axes=config.axes)
|
|
299
|
+
target_extractor: Optional[PatchExtractor[CziImageStack]]
|
|
300
|
+
if targets is not None:
|
|
301
|
+
target_extractor = create_czi_extractor(source=targets, axes=config.axes)
|
|
302
|
+
else:
|
|
303
|
+
target_extractor = None
|
|
304
|
+
dataset = CareamicsDataset(config, mode, input_extractor, target_extractor)
|
|
305
|
+
return dataset
|
|
306
|
+
|
|
307
|
+
|
|
265
308
|
def create_ome_zarr_dataset(
|
|
266
|
-
config:
|
|
309
|
+
config: NGDataConfig,
|
|
267
310
|
mode: Mode,
|
|
268
311
|
inputs: Sequence[Path],
|
|
269
312
|
targets: Optional[Sequence[Path]],
|
|
@@ -285,7 +328,7 @@ def create_ome_zarr_dataset(
|
|
|
285
328
|
Returns
|
|
286
329
|
-------
|
|
287
330
|
CareamicsDataset[ZarrImageStack]
|
|
288
|
-
A CAREamicsDataset
|
|
331
|
+
A CAREamicsDataset.
|
|
289
332
|
"""
|
|
290
333
|
|
|
291
334
|
input_extractor = create_ome_zarr_extractor(source=inputs, axes=config.axes)
|
|
@@ -299,7 +342,7 @@ def create_ome_zarr_dataset(
|
|
|
299
342
|
|
|
300
343
|
|
|
301
344
|
def create_custom_file_dataset(
|
|
302
|
-
config:
|
|
345
|
+
config: NGDataConfig,
|
|
303
346
|
mode: Mode,
|
|
304
347
|
inputs: Sequence[Path],
|
|
305
348
|
targets: Optional[Sequence[Path]],
|
|
@@ -330,7 +373,7 @@ def create_custom_file_dataset(
|
|
|
330
373
|
Returns
|
|
331
374
|
-------
|
|
332
375
|
CareamicsDataset[InMemoryImageStack]
|
|
333
|
-
A CAREamicsDataset
|
|
376
|
+
A CAREamicsDataset.
|
|
334
377
|
"""
|
|
335
378
|
input_extractor = create_custom_file_extractor(
|
|
336
379
|
source=inputs, axes=config.axes, read_func=read_func, read_kwargs=read_kwargs
|
|
@@ -350,7 +393,7 @@ def create_custom_file_dataset(
|
|
|
350
393
|
|
|
351
394
|
|
|
352
395
|
def create_custom_image_stack_dataset(
|
|
353
|
-
config:
|
|
396
|
+
config: NGDataConfig,
|
|
354
397
|
mode: Mode,
|
|
355
398
|
inputs: Any,
|
|
356
399
|
targets: Optional[Any],
|
|
@@ -384,7 +427,7 @@ def create_custom_image_stack_dataset(
|
|
|
384
427
|
Returns
|
|
385
428
|
-------
|
|
386
429
|
CareamicsDataset[GenericImageStack]
|
|
387
|
-
A CAREamicsDataset
|
|
430
|
+
A CAREamicsDataset.
|
|
388
431
|
"""
|
|
389
432
|
input_extractor = create_custom_image_stack_extractor(
|
|
390
433
|
inputs,
|
|
@@ -74,7 +74,9 @@ def imageregions_to_tileinfos(
|
|
|
74
74
|
tile_info = _imageregion_to_tileinfo(image_region, last_tile)
|
|
75
75
|
tile_infos.append(tile_info)
|
|
76
76
|
|
|
77
|
-
return [
|
|
77
|
+
return [
|
|
78
|
+
(data, [tile_info]) for data, tile_info in zip(data, tile_infos, strict=False)
|
|
79
|
+
]
|
|
78
80
|
|
|
79
81
|
|
|
80
82
|
def _imageregion_to_tileinfo(
|
|
@@ -35,7 +35,7 @@ def create_zarr_array(file_path: Path, data_path: str, data: NDArray):
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def create_zarr(file_path: Path, data_paths: Sequence[str], data: Sequence[NDArray]):
|
|
38
|
-
for data_path, array in zip(data_paths, data):
|
|
38
|
+
for data_path, array in zip(data_paths, data, strict=False):
|
|
39
39
|
create_zarr_array(file_path=file_path, data_path=data_path, data=array)
|
|
40
40
|
|
|
41
41
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
__all__ = [
|
|
2
|
+
"CziImageStack",
|
|
2
3
|
"GenericImageStack",
|
|
3
4
|
"ImageStack",
|
|
4
5
|
"InMemoryImageStack",
|
|
5
6
|
"ZarrImageStack",
|
|
6
7
|
]
|
|
7
8
|
|
|
9
|
+
from .czi_image_stack import CziImageStack
|
|
8
10
|
from .image_stack_protocol import GenericImageStack, ImageStack
|
|
9
11
|
from .in_memory_image_stack import InMemoryImageStack
|
|
10
12
|
from .zarr_image_stack import ZarrImageStack
|