Skip to content

Commit cb6455a

Browse files
Update sample data loading
1 parent b63d534 commit cb6455a

19 files changed

Lines changed: 120 additions & 111 deletions

MIGRATION_GUIDE.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -696,8 +696,8 @@ shims default to sample A, size small and continue to honor the
696696
`BIOIMAGE_CPP_EXTERNAL_MULTICUT_PATH` and
697697
`BIOIMAGE_CPP_EXTERNAL_MULTICUT_CACHE` environment variables.
698698

699-
Lifted multicut problems (2D ISBI slice and full 3D volume, built by
700-
`examples/segmentation/serialize_lifted_problem.py`):
699+
Lifted multicut problems (2D ISBI slice, RAG-based 3D volume, and grid-graph
700+
volume):
701701

702702
```python
703703
problem = bic.graph.load_lifted_multicut_problem(size="2d")
@@ -711,6 +711,8 @@ objective = bic.graph.LiftedMulticutObjective(
711711
)
712712
```
713713

714+
Valid sizes are `"2d"`, `"3d"`, and `"grid"`.
715+
714716
Notes:
715717

716718
- Every download is integrity-checked against a SHA256 in the registry; a

development/graph/_grid_affinity_compatibility.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
from __future__ import annotations
22

33
import argparse
4-
from pathlib import Path
54
from statistics import median
65
from time import perf_counter
76
from typing import Callable
87

98
import numpy as np
109

10+
def load_problem():
11+
from bioimage_cpp._data import load_isbi_affinities
1112

12-
PROJECT_ROOT = Path(__file__).resolve().parents[2]
13-
DEFAULT_DATA_PREFIX = PROJECT_ROOT / "examples" / "segmentation" / "isbi-data-"
14-
15-
16-
def load_problem(data_prefix: Path | str = DEFAULT_DATA_PREFIX):
17-
from elf.segmentation.utils import load_mutex_watershed_problem
18-
19-
affinities, offsets = load_mutex_watershed_problem(prefix=str(data_prefix))
13+
affinities, offsets = load_isbi_affinities()
2014
return np.ascontiguousarray(affinities), [tuple(offset) for offset in offsets]
2115

2216

@@ -255,7 +249,6 @@ def print_timing(name: str, first_name: str, first_timings: list[float],
255249

256250
def add_common_arguments(parser: argparse.ArgumentParser) -> None:
257251
parser.add_argument("--ndim", type=int, choices=(2, 3), default=2)
258-
parser.add_argument("--data-prefix", type=Path, default=DEFAULT_DATA_PREFIX)
259252
# Default bumped from 3 to 5 — median of 3 is the middle sample and is
260253
# noisy if anything (GC, cache eviction) lands inside one of the three
261254
# runs. With `time_call` doing one warm-up before this, 5 samples gives

development/graph/_rag_compatibility.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import argparse
4-
from pathlib import Path
54
from statistics import median
65
from time import perf_counter
76

@@ -10,15 +9,10 @@
109
from skimage.measure import label as label_components
1110
from skimage.segmentation import watershed
1211

12+
def load_problem():
13+
from bioimage_cpp._data import load_isbi_affinities
1314

14-
PROJECT_ROOT = Path(__file__).resolve().parents[2]
15-
DEFAULT_DATA_PREFIX = PROJECT_ROOT / "examples" / "segmentation" / "isbi-data-"
16-
17-
18-
def load_problem(data_prefix: Path | str = DEFAULT_DATA_PREFIX):
19-
from elf.segmentation.utils import load_mutex_watershed_problem
20-
21-
affinities, offsets = load_mutex_watershed_problem(prefix=str(data_prefix))
15+
affinities, offsets = load_isbi_affinities()
2216
return np.ascontiguousarray(affinities), [tuple(offset) for offset in offsets]
2317

2418

@@ -227,7 +221,6 @@ def run_compatibility_check(
227221
ndim: int,
228222
repeats: int,
229223
threads: int,
230-
data_prefix: Path,
231224
z: int,
232225
yx_shape: tuple[int, int],
233226
zyx_shape: tuple[int, int, int],
@@ -238,7 +231,7 @@ def run_compatibility_check(
238231
import bioimage_cpp as bic
239232
import nifty.graph.rag as nrag
240233

241-
affinities, offsets = load_problem(data_prefix)
234+
affinities, offsets = load_problem()
242235
if ndim == 2:
243236
direct_affinities, direct_offsets = prepare_2d_problem(affinities, offsets, z, yx_shape)
244237
elif ndim == 3:
@@ -310,7 +303,6 @@ def _print_timing(name: str, bic_timings: list[float], nifty_timings: list[float
310303

311304

312305
def add_common_arguments(parser: argparse.ArgumentParser) -> None:
313-
parser.add_argument("--data-prefix", type=Path, default=DEFAULT_DATA_PREFIX)
314306
parser.add_argument("--repeats", type=int, default=3)
315307
parser.add_argument("--threads", type=int, default=1)
316308
parser.add_argument("--watershed-min-distance", type=int, default=5)

development/graph/check_grid_affinity_edges.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838

3939
def run_check(args: argparse.Namespace) -> None:
40-
affinities, offsets = load_problem(args.data_prefix)
40+
affinities, offsets = load_problem()
4141
if args.ndim == 2:
4242
affinities, offsets = prepare_2d_problem(
4343
affinities, offsets, z=args.z, yx_shape=tuple(args.yx_shape)

development/graph/check_grid_affinity_lifted_edges.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434

3535
def run_check(args: argparse.Namespace) -> None:
36-
affinities, offsets = load_problem(args.data_prefix)
36+
affinities, offsets = load_problem()
3737
if args.ndim == 2:
3838
affinities, offsets = prepare_2d_problem(
3939
affinities, offsets, z=args.z, yx_shape=tuple(args.yx_shape)

development/graph/check_rag_2d.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ def main() -> None:
1818
ndim=2,
1919
repeats=args.repeats,
2020
threads=args.threads,
21-
data_prefix=args.data_prefix,
2221
z=args.z,
2322
yx_shape=tuple(args.shape),
2423
zyx_shape=(0, 0, 0),

development/graph/check_rag_3d.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ def main() -> None:
1717
ndim=3,
1818
repeats=args.repeats,
1919
threads=args.threads,
20-
data_prefix=args.data_prefix,
2120
z=0,
2221
yx_shape=(0, 0),
2322
zyx_shape=tuple(args.shape),

development/graph/lifted_multicut/_compatibility.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def parser(description: str) -> argparse.ArgumentParser:
1212
arg_parser = argparse.ArgumentParser(description=description)
1313
arg_parser.add_argument(
1414
"--size",
15-
choices=("2d", "3d"),
15+
choices=("2d", "3d", "grid"),
1616
default="3d",
1717
help="Lifted multicut problem instance to load (default: 3d).",
1818
)

development/segmentation/_mutex_watershed_equivalence.py

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
from __future__ import annotations
22

33
import argparse
4-
from pathlib import Path
54
from statistics import median
65
from time import perf_counter
76
from typing import Callable
87

98
import numpy as np
109

10+
def load_problem():
11+
from bioimage_cpp._data import load_isbi_affinities
1112

12-
PROJECT_ROOT = Path(__file__).resolve().parents[2]
13-
DEFAULT_DATA_PREFIX = PROJECT_ROOT / "examples" / "segmentation" / "isbi-data-"
14-
15-
16-
def load_problem(data_prefix: Path | str = DEFAULT_DATA_PREFIX):
17-
from elf.segmentation.utils import load_mutex_watershed_problem
18-
19-
affinities, offsets = load_mutex_watershed_problem(prefix=str(data_prefix))
13+
affinities, offsets = load_isbi_affinities()
2014
return np.ascontiguousarray(affinities), [tuple(offset) for offset in offsets]
2115

2216

@@ -201,12 +195,11 @@ def run_check(
201195
*,
202196
ndim: int,
203197
repeats: int,
204-
data_prefix: Path | str,
205198
z: int,
206199
yx_shape: tuple[int, int],
207200
zyx_shape: tuple[int, int, int],
208201
):
209-
affinities, offsets = load_problem(data_prefix)
202+
affinities, offsets = load_problem()
210203
if ndim == 2:
211204
affs, used_offsets, attractive_channels = prepare_2d_problem(
212205
affinities, offsets, z=z, yx_shape=yx_shape
@@ -237,15 +230,6 @@ def run_check(
237230

238231

239232
def add_common_arguments(parser: argparse.ArgumentParser) -> None:
240-
parser.add_argument(
241-
"--data-prefix",
242-
type=Path,
243-
default=DEFAULT_DATA_PREFIX,
244-
help=(
245-
"Path prefix for the ISBI mutex watershed data. The loader expects "
246-
"'test.h5' and 'train.h5' suffixes."
247-
),
248-
)
249233
parser.add_argument(
250234
"--repeats",
251235
type=int,

development/segmentation/check_mutex_watershed_2d.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ def main() -> None:
2929
run_check(
3030
ndim=2,
3131
repeats=args.repeats,
32-
data_prefix=args.data_prefix,
3332
z=args.z,
3433
yx_shape=tuple(args.shape),
3534
zyx_shape=(0, 0, 0),

0 commit comments

Comments
 (0)