Replace v2 with v3: membrane-first label priority
Browse filesDataset503_MicroridgeMembraneFirst. Same 477 tiles, same architecture,
same 100 epochs; only which class wins a contested label pixel changed.
v2 trained on labels where microridges had erased 69.6% of the membrane,
so it predicted a broken membrane and called membrane pixels microridge.
Frozen test: cell_membrane Dice 0.471 -> 0.707, boundary F1 0.659 -> 0.874,
microridge Dice 0.877 -> 0.852.
- README.md +170 -163
- nnUNet_results/{Dataset502_MicroridgeField → Dataset503_MicroridgeMembraneFirst}/nnUNetTrainer_100epochs__nnUNetPlans__2d/dataset.json +0 -0
- nnUNet_results/{Dataset502_MicroridgeField → Dataset503_MicroridgeMembraneFirst}/nnUNetTrainer_100epochs__nnUNetPlans__2d/fold_0/checkpoint_final.pth +2 -2
- nnUNet_results/{Dataset502_MicroridgeField → Dataset503_MicroridgeMembraneFirst}/nnUNetTrainer_100epochs__nnUNetPlans__2d/plans.json +1 -1
- registry.json +27 -25
README.md
CHANGED
|
@@ -1,163 +1,170 @@
|
|
| 1 |
-
---
|
| 2 |
-
license: cc-by-nc-sa-4.0
|
| 3 |
-
library_name: nnunetv2
|
| 4 |
-
pipeline_tag: image-segmentation
|
| 5 |
-
tags:
|
| 6 |
-
- biology
|
| 7 |
-
- microscopy
|
| 8 |
-
- cell-segmentation
|
| 9 |
-
- microridge
|
| 10 |
-
- nnunet
|
| 11 |
-
- zebrafish
|
| 12 |
-
---
|
| 13 |
-
|
| 14 |
-
# MicroridgeVectorAI —
|
| 15 |
-
|
| 16 |
-
A 2D nnU-Net that segments **actin microridges**, **cell regions** and **cell
|
| 17 |
-
membranes** in projected single-channel microscopy of epithelial tissue.
|
| 18 |
-
|
| 19 |
-
Companion application: <https://github.com/LBK888/MicroridgeVectorAI> (CellVector,
|
| 20 |
-
AGPL-3.0). The model runs standalone with nnU-Net v2 alone — CellVector is not
|
| 21 |
-
required.
|
| 22 |
-
|
| 23 |
-
| | |
|
| 24 |
-
|---|---|
|
| 25 |
-
| Model id | `
|
| 26 |
-
| Task | 2D semantic segmentation, 4 classes |
|
| 27 |
-
| Architecture | nnU-Net v2 PlainConvUNet, 8 stages, patch 512x512 |
|
| 28 |
-
| Trainer / folds | `nnUNetTrainer_100epochs`, fold 0 |
|
| 29 |
-
| Input | single-channel 2D image, any size |
|
| 30 |
-
| Snapshot hash | `dbe134f83c52b8ecae6cb62182310205496497ec297406ed8a2c912b60ba8cc9` |
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
|
| 41 |
-
|
|
| 42 |
-
|
|
| 43 |
-
| cell_membrane
|
| 44 |
-
|
|
| 45 |
-
| microridge
|
| 46 |
-
| microridge
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
0
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
- **
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
```
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
`
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
``
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: cc-by-nc-sa-4.0
|
| 3 |
+
library_name: nnunetv2
|
| 4 |
+
pipeline_tag: image-segmentation
|
| 5 |
+
tags:
|
| 6 |
+
- biology
|
| 7 |
+
- microscopy
|
| 8 |
+
- cell-segmentation
|
| 9 |
+
- microridge
|
| 10 |
+
- nnunet
|
| 11 |
+
- zebrafish
|
| 12 |
+
---
|
| 13 |
+
|
| 14 |
+
# MicroridgeVectorAI — v3
|
| 15 |
+
|
| 16 |
+
A 2D nnU-Net that segments **actin microridges**, **cell regions** and **cell
|
| 17 |
+
membranes** in projected single-channel microscopy of epithelial tissue.
|
| 18 |
+
|
| 19 |
+
Companion application: <https://github.com/LBK888/MicroridgeVectorAI> (CellVector,
|
| 20 |
+
AGPL-3.0). The model runs standalone with nnU-Net v2 alone — CellVector is not
|
| 21 |
+
required.
|
| 22 |
+
|
| 23 |
+
| | |
|
| 24 |
+
|---|---|
|
| 25 |
+
| Model id | `a619b15c-e00f-489b-887c-6386e3836c11` |
|
| 26 |
+
| Task | 2D semantic segmentation, 4 classes |
|
| 27 |
+
| Architecture | nnU-Net v2 PlainConvUNet, 8 stages, patch 512x512 |
|
| 28 |
+
| Trainer / folds | `nnUNetTrainer_100epochs`, fold 0 |
|
| 29 |
+
| Input | single-channel 2D image, any size |
|
| 30 |
+
| Snapshot hash | `dbe134f83c52b8ecae6cb62182310205496497ec297406ed8a2c912b60ba8cc9` |
|
| 31 |
+
| Label policy | `membrane-first-v2`, membrane 3 px, microridge 5 px |
|
| 32 |
+
|
| 33 |
+
Labels: `0` background, `1` cell_region, `2` cell_membrane, `3` microridge.
|
| 34 |
+
|
| 35 |
+
## Scores
|
| 36 |
+
|
| 37 |
+
Frozen test — 36 tiles from **3 fields the model never saw**. Splits are grouped
|
| 38 |
+
by source field, so no tile of a training field appears in the test set.
|
| 39 |
+
|
| 40 |
+
| Metric | Value | v2 |
|
| 41 |
+
|---|---|---|
|
| 42 |
+
| cell_region Dice | 0.943 | 0.944 |
|
| 43 |
+
| cell_membrane Dice | **0.707** | 0.471 |
|
| 44 |
+
| cell_membrane boundary F1 (1 px tolerance) | **0.874** | 0.659 |
|
| 45 |
+
| microridge Dice | 0.852 | 0.877 |
|
| 46 |
+
| microridge precision / recall | 0.899 / 0.822 | 0.911 / 0.855 |
|
| 47 |
+
| microridge skeleton length error | 0.105 | 0.100 |
|
| 48 |
+
|
| 49 |
+
nnU-Net's own fold-0 validation (89 tiles): cell_region 0.964, cell_membrane
|
| 50 |
+
0.696, microridge 0.886.
|
| 51 |
+
|
| 52 |
+
v2 was trained on labels in which the microridge class had erased 69.6% of the
|
| 53 |
+
membrane: classes are mutually exclusive and microridges were stroked last, so a
|
| 54 |
+
ridge running beside a cell edge overwrote it. v3 reverses that contest. The
|
| 55 |
+
membrane keeps all of its pixels and the microridge class yields 7.2% of its
|
| 56 |
+
own, which it can afford at a quarter of the frame. Nothing else changed — same
|
| 57 |
+
data, same architecture, same 100 epochs.
|
| 58 |
+
|
| 59 |
+
**Reading the membrane number.** Dice on a 3-pixel line covering under 3% of the
|
| 60 |
+
frame collapses when a prediction is offset by a pixel even where it follows the
|
| 61 |
+
right path, so it understates a thin structure. The boundary F1 of 0.874, which
|
| 62 |
+
allows one pixel of tolerance, is the more informative figure; the gap between
|
| 63 |
+
0.707 and 0.874 is the residual sub-pixel offset, not missing membrane.
|
| 64 |
+
|
| 65 |
+
## Limitations
|
| 66 |
+
|
| 67 |
+
- **Cell instances are approximate.** Cells are recovered as connected
|
| 68 |
+
components separated by the predicted membrane. On a frozen-test tile holding
|
| 69 |
+
10 cells this returns 9, against 1 for v2, whose membrane was too broken to
|
| 70 |
+
separate anything. Expect near-misses where the membrane is faint, not exact
|
| 71 |
+
instance segmentation.
|
| 72 |
+
- **The ground truth was not human-reviewed.** Labels were imported from
|
| 73 |
+
published raster masks and corrected only for import artifacts, not by an
|
| 74 |
+
expert. Treat this model as a proposal generator to be corrected, which is how
|
| 75 |
+
the companion application uses it.
|
| 76 |
+
- **Trained on 13 fields.** Train and validation loss diverge (-0.782 vs
|
| 77 |
+
-0.636), which is what a small number of independent acquisitions looks like.
|
| 78 |
+
More fields will help more than more epochs.
|
| 79 |
+
- **One fold, not an ensemble.** Only fold 0 was trained.
|
| 80 |
+
- Validated on zebrafish periderm-style epithelial microridge imagery. Behaviour
|
| 81 |
+
on other tissue, magnification or modality is unknown.
|
| 82 |
+
|
| 83 |
+
## Training data
|
| 84 |
+
|
| 85 |
+
Wide-field frames cut into 477 tiles of at most 512x512 from 19 fields, keeping
|
| 86 |
+
only regions whose raster truth is trustworthy. Uneven illumination leaves part
|
| 87 |
+
of such a frame too dark for the upstream segmentation to resolve anything, and
|
| 88 |
+
that failure is silent — the skeleton mask is empty while the cell mask still
|
| 89 |
+
looks complete. Blocks were kept only where skeleton density cleared both an
|
| 90 |
+
absolute floor and a share of the frame's own 90th percentile, **and** at least
|
| 91 |
+
95% of the block was attributed to a cell. 68.3% of the field pixels survived.
|
| 92 |
+
|
| 93 |
+
Labels were rasterized from vector geometry with a 3 px membrane and a 5 px
|
| 94 |
+
microridge stroke.
|
| 95 |
+
|
| 96 |
+
## Files
|
| 97 |
+
|
| 98 |
+
```text
|
| 99 |
+
registry.json provenance record, metrics, checksums
|
| 100 |
+
nnUNet_results/Dataset503_MicroridgeMembraneFirst/
|
| 101 |
+
└─ nnUNetTrainer_100epochs__nnUNetPlans__2d/
|
| 102 |
+
├─ dataset.json channel names and label map
|
| 103 |
+
├─ plans.json preprocessing and architecture
|
| 104 |
+
└─ fold_0/checkpoint_final.pth weights
|
| 105 |
+
```
|
| 106 |
+
|
| 107 |
+
Those three files under the trainer folder are the complete inference set. The
|
| 108 |
+
directory names encode the configuration — nnU-Net parses
|
| 109 |
+
`Dataset<ID>_<name>/<trainer>__<plans>__<configuration>` — so do not rename them.
|
| 110 |
+
|
| 111 |
+
The checkpoint is shipped unmodified so the `checkpoint_sha256` in
|
| 112 |
+
`registry.json` verifies. About half of it is optimizer state; stripping to
|
| 113 |
+
`network_weights`, `init_args`, `trainer_name` and
|
| 114 |
+
`inference_allowed_mirroring_axes` halves the size but invalidates that
|
| 115 |
+
checksum.
|
| 116 |
+
|
| 117 |
+
## Usage
|
| 118 |
+
|
| 119 |
+
```bash
|
| 120 |
+
pip install nnunetv2 huggingface_hub
|
| 121 |
+
hf download leobk/MicroridgeVectorAI --local-dir microridge-model
|
| 122 |
+
```
|
| 123 |
+
|
| 124 |
+
```python
|
| 125 |
+
import torch, numpy as np, tifffile
|
| 126 |
+
from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor
|
| 127 |
+
|
| 128 |
+
MODEL = ("microridge-model/nnUNet_results/Dataset503_MicroridgeMembraneFirst"
|
| 129 |
+
"/nnUNetTrainer_100epochs__nnUNetPlans__2d")
|
| 130 |
+
|
| 131 |
+
predictor = nnUNetPredictor(device=torch.device("cuda"))
|
| 132 |
+
predictor.initialize_from_trained_model_folder(
|
| 133 |
+
MODEL, use_folds=(0,), checkpoint_name="checkpoint_final.pth"
|
| 134 |
+
)
|
| 135 |
+
|
| 136 |
+
image = tifffile.imread("frame.tif").astype("float32")
|
| 137 |
+
segmentation = predictor.predict_single_npy_array(
|
| 138 |
+
image[None, None], {"spacing": (999.0, 1.0, 1.0)}, None, None, False
|
| 139 |
+
)
|
| 140 |
+
```
|
| 141 |
+
|
| 142 |
+
No nnU-Net environment variables are needed for this path. Roughly 13 s for a
|
| 143 |
+
512x512 tile on an RTX 4080 SUPER.
|
| 144 |
+
|
| 145 |
+
### Reimplementing the pipeline
|
| 146 |
+
|
| 147 |
+
The network takes `(1, 1, H, W)` and returns 4 logit channels, and exports to
|
| 148 |
+
TorchScript. If you drive it yourself, reproduce all of:
|
| 149 |
+
|
| 150 |
+
- **Normalization** — z-score using *each image's own* mean and standard
|
| 151 |
+
deviation (`use_mask_for_norm=False`). No dataset statistics;
|
| 152 |
+
`foreground_intensity_properties_per_channel` in `plans.json` is for CT
|
| 153 |
+
normalization and unused here.
|
| 154 |
+
- **Sliding window** — 512x512 patches, step 0.5, Gaussian-weighted overlap.
|
| 155 |
+
- **Test-time augmentation** — mirroring over axes `(0, 1)`.
|
| 156 |
+
- **Output** — argmax over the 4 channels.
|
| 157 |
+
|
| 158 |
+
Skipping the normalization or the Gaussian window degrades results noticeably
|
| 159 |
+
and without any error.
|
| 160 |
+
|
| 161 |
+
## Licensing note
|
| 162 |
+
|
| 163 |
+
These weights are released under **CC BY-NC-SA 4.0**: attribution required,
|
| 164 |
+
**non-commercial use only**, derivatives under the same terms. Note that this
|
| 165 |
+
differs from the companion application's code licence (AGPL-3.0) — the code and
|
| 166 |
+
the weights are covered separately.
|
| 167 |
+
|
| 168 |
+
The weights were trained on third-party imagery; if that source data carries its
|
| 169 |
+
own terms, they may constrain redistribution of this model independently of this
|
| 170 |
+
label.
|
nnUNet_results/{Dataset502_MicroridgeField → Dataset503_MicroridgeMembraneFirst}/nnUNetTrainer_100epochs__nnUNetPlans__2d/dataset.json
RENAMED
|
File without changes
|
nnUNet_results/{Dataset502_MicroridgeField → Dataset503_MicroridgeMembraneFirst}/nnUNetTrainer_100epochs__nnUNetPlans__2d/fold_0/checkpoint_final.pth
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c513cee01f60eb21f2b9ee74f9f0fd2d44a84d99437440d7e1836ccfd91e25bb
|
| 3 |
+
size 370825791
|
nnUNet_results/{Dataset502_MicroridgeField → Dataset503_MicroridgeMembraneFirst}/nnUNetTrainer_100epochs__nnUNetPlans__2d/plans.json
RENAMED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
{
|
| 2 |
-
"dataset_name": "
|
| 3 |
"plans_name": "nnUNetPlans",
|
| 4 |
"original_median_spacing_after_transp": [
|
| 5 |
999.0,
|
|
|
|
| 1 |
{
|
| 2 |
+
"dataset_name": "Dataset503_MicroridgeMembraneFirst",
|
| 3 |
"plans_name": "nnUNetPlans",
|
| 4 |
"original_median_spacing_after_transp": [
|
| 5 |
999.0,
|
registry.json
CHANGED
|
@@ -5,36 +5,38 @@
|
|
| 5 |
"artifact_sha256": {
|
| 6 |
"dataset.json": "aa6242b569dc3fa70ee707db38970fd7e97fbfb45f48aa7f1a68a1c7a5a899cf",
|
| 7 |
"dataset_fingerprint.json": "9234acf421a087a276d8271f214cbddfdd97c1b71f4974e18a71fe44f680c7b9",
|
| 8 |
-
"fold_0/checkpoint_best.pth": "
|
| 9 |
-
"fold_0/checkpoint_final.pth": "
|
| 10 |
-
"plans.json": "
|
| 11 |
},
|
| 12 |
"augmentation_profile_hash": "6f738a972b6f7eba84ee6a2cd5cbd01f83dbed2afa9633439b89e76bb3a5a4dd",
|
| 13 |
"backend_id": "nnunetv2-local",
|
| 14 |
"backend_version": "2.8.1",
|
| 15 |
"benchmark_id": null,
|
| 16 |
"checkpoint_path": "fold_0/checkpoint_final.pth",
|
| 17 |
-
"checkpoint_sha256": "
|
| 18 |
"configuration": {
|
| 19 |
"configuration": "2d",
|
| 20 |
-
"dataset_id":
|
| 21 |
-
"dataset_name": "
|
| 22 |
"epochs": 100,
|
| 23 |
"executed_locally": true,
|
| 24 |
"fold": 0,
|
|
|
|
| 25 |
"membrane_width_px": 3,
|
| 26 |
"microridge_width_px": 5,
|
| 27 |
-
"plan_command": "nnUNetv2_plan_and_preprocess -d
|
| 28 |
"plans": "nnUNetPlans",
|
| 29 |
"source_data": "full view field tiles, trustworthy regions only",
|
| 30 |
"split_grouping": "specimen:field_frame_uri",
|
|
|
|
| 31 |
"torch_version": "2.12.1+cu130",
|
| 32 |
-
"train_command": "nnUNetv2_train
|
| 33 |
"trainer": "nnUNetTrainer_100epochs",
|
| 34 |
-
"training_job_id": "
|
| 35 |
},
|
| 36 |
-
"created_at": "2026-
|
| 37 |
-
"dataset_artifact_hash": "
|
| 38 |
"folds_completed": [
|
| 39 |
0
|
| 40 |
],
|
|
@@ -43,19 +45,19 @@
|
|
| 43 |
"label_contract": "cellvector.annotation/1.0.0",
|
| 44 |
"metrics": {
|
| 45 |
"frozen_test_cases": 36,
|
| 46 |
-
"frozen_test_cell_membrane_boundary_f1": 0.
|
| 47 |
-
"frozen_test_cell_membrane_dice": 0.
|
| 48 |
-
"frozen_test_cell_region_dice": 0.
|
| 49 |
-
"frozen_test_cell_region_iou": 0.
|
| 50 |
-
"frozen_test_microridge_dice": 0.
|
| 51 |
-
"frozen_test_microridge_precision": 0.
|
| 52 |
-
"frozen_test_microridge_recall": 0.
|
| 53 |
-
"frozen_test_microridge_skeleton_length_error": 0.
|
| 54 |
-
"nnunet_validation_dice_cell_membrane": 0.
|
| 55 |
-
"nnunet_validation_dice_cell_region": 0.
|
| 56 |
-
"nnunet_validation_dice_microridge": 0.
|
| 57 |
},
|
| 58 |
-
"model_id": "
|
| 59 |
"parent_model_id": null,
|
| 60 |
"provenance_status": "verified",
|
| 61 |
"selected_at": null,
|
|
@@ -64,8 +66,8 @@
|
|
| 64 |
"snapshot_hash": "dbe134f83c52b8ecae6cb62182310205496497ec297406ed8a2c912b60ba8cc9",
|
| 65 |
"software_smoke_test": false,
|
| 66 |
"status": "trained",
|
| 67 |
-
"training_job_id": "
|
| 68 |
-
"updated_at": "2026-
|
| 69 |
}
|
| 70 |
],
|
| 71 |
"schema_version": "1.0.0"
|
|
|
|
| 5 |
"artifact_sha256": {
|
| 6 |
"dataset.json": "aa6242b569dc3fa70ee707db38970fd7e97fbfb45f48aa7f1a68a1c7a5a899cf",
|
| 7 |
"dataset_fingerprint.json": "9234acf421a087a276d8271f214cbddfdd97c1b71f4974e18a71fe44f680c7b9",
|
| 8 |
+
"fold_0/checkpoint_best.pth": "74ae48ea41fb2ebe5fefe00a775f5ee61b81d3bb91963e0ffc9c35630f3f1a3a",
|
| 9 |
+
"fold_0/checkpoint_final.pth": "c513cee01f60eb21f2b9ee74f9f0fd2d44a84d99437440d7e1836ccfd91e25bb",
|
| 10 |
+
"plans.json": "edadfcb32d5d88e1da2c466bc16cf0e34521c148596c91bf57805f33b94c1d4a"
|
| 11 |
},
|
| 12 |
"augmentation_profile_hash": "6f738a972b6f7eba84ee6a2cd5cbd01f83dbed2afa9633439b89e76bb3a5a4dd",
|
| 13 |
"backend_id": "nnunetv2-local",
|
| 14 |
"backend_version": "2.8.1",
|
| 15 |
"benchmark_id": null,
|
| 16 |
"checkpoint_path": "fold_0/checkpoint_final.pth",
|
| 17 |
+
"checkpoint_sha256": "c513cee01f60eb21f2b9ee74f9f0fd2d44a84d99437440d7e1836ccfd91e25bb",
|
| 18 |
"configuration": {
|
| 19 |
"configuration": "2d",
|
| 20 |
+
"dataset_id": 503,
|
| 21 |
+
"dataset_name": "MicroridgeMembraneFirst",
|
| 22 |
"epochs": 100,
|
| 23 |
"executed_locally": true,
|
| 24 |
"fold": 0,
|
| 25 |
+
"label_priority": "membrane-first-v2",
|
| 26 |
"membrane_width_px": 3,
|
| 27 |
"microridge_width_px": 5,
|
| 28 |
+
"plan_command": "nnUNetv2_plan_and_preprocess -d 503 -c 2d --verify_dataset_integrity",
|
| 29 |
"plans": "nnUNetPlans",
|
| 30 |
"source_data": "full view field tiles, trustworthy regions only",
|
| 31 |
"split_grouping": "specimen:field_frame_uri",
|
| 32 |
+
"supersedes": "Dataset502 (exclusive-v1) whose labels lost 71% of the membrane",
|
| 33 |
"torch_version": "2.12.1+cu130",
|
| 34 |
+
"train_command": "nnUNetv2_train 503 2d 0 -tr nnUNetTrainer_100epochs --npz",
|
| 35 |
"trainer": "nnUNetTrainer_100epochs",
|
| 36 |
+
"training_job_id": "064df461-43de-4393-aca9-51b2d97209e4"
|
| 37 |
},
|
| 38 |
+
"created_at": "2026-09-01T10:29:13.172184Z",
|
| 39 |
+
"dataset_artifact_hash": "f5a648f0dde8485a96df95d26d7b0edadd68482a8d9fa1c91420b1c58809d090",
|
| 40 |
"folds_completed": [
|
| 41 |
0
|
| 42 |
],
|
|
|
|
| 45 |
"label_contract": "cellvector.annotation/1.0.0",
|
| 46 |
"metrics": {
|
| 47 |
"frozen_test_cases": 36,
|
| 48 |
+
"frozen_test_cell_membrane_boundary_f1": 0.87437327255091,
|
| 49 |
+
"frozen_test_cell_membrane_dice": 0.7074205306372878,
|
| 50 |
+
"frozen_test_cell_region_dice": 0.9432985097912598,
|
| 51 |
+
"frozen_test_cell_region_iou": 0.8930619679511916,
|
| 52 |
+
"frozen_test_microridge_dice": 0.8519748198693858,
|
| 53 |
+
"frozen_test_microridge_precision": 0.8986679339680429,
|
| 54 |
+
"frozen_test_microridge_recall": 0.8215124251430418,
|
| 55 |
+
"frozen_test_microridge_skeleton_length_error": 0.10468182937528298,
|
| 56 |
+
"nnunet_validation_dice_cell_membrane": 0.6959348980123595,
|
| 57 |
+
"nnunet_validation_dice_cell_region": 0.9642334995848282,
|
| 58 |
+
"nnunet_validation_dice_microridge": 0.8858968681328583
|
| 59 |
},
|
| 60 |
+
"model_id": "a619b15c-e00f-489b-887c-6386e3836c11",
|
| 61 |
"parent_model_id": null,
|
| 62 |
"provenance_status": "verified",
|
| 63 |
"selected_at": null,
|
|
|
|
| 66 |
"snapshot_hash": "dbe134f83c52b8ecae6cb62182310205496497ec297406ed8a2c912b60ba8cc9",
|
| 67 |
"software_smoke_test": false,
|
| 68 |
"status": "trained",
|
| 69 |
+
"training_job_id": "064df461-43de-4393-aca9-51b2d97209e4",
|
| 70 |
+
"updated_at": "2026-09-01T10:29:13.172184Z"
|
| 71 |
}
|
| 72 |
],
|
| 73 |
"schema_version": "1.0.0"
|