CellMap ONNX web models

Small 3D U-Nets for FIB-SEM organelle segmentation (mitochondria, nuclei, ER), exported to ONNX for in-browser inference with onnxruntime-web in the cellmap-flow serverless client.

Every file takes input float32 [1,1,z,y,x] and returns output float32 raw logits [1,C,z',y',x'] (apply sigmoid, or threshold at 0). Input normalization: uint8 / 255 * 2 - 1 ([{"name":"MinMaxNormalizer","min_value":0,"max_value":255},{"name":"LambdaNormalizer","expression":"2*x-1"}]). The input block size is fixed per file (_in<N> = N³ voxels); valid convolutions, so the output is N−88 per axis.

Two graph layouts of the same models (same weights, same outputs up to float rounding):

  • setup_XX/… — recommended: every Conv3d rewritten as Conv2d over a depth-folded batch (~16× faster on WebGPU, see below).
  • conv3d/setup_XX/… — native Conv3d nodes, for runtimes with a fast 3D conv (e.g. onnxruntime CUDA/CPU, TensorRT).

Models

folder target channels voxel (nm) architecture params checkpoint val F1
setup_54 mito_affinities mito_aff_z, mito_aff_y, mito_aff_x 16 ResUNet3DValid 10.7M 260000 0.958
setup_53 mito_affinities mito_aff_z, mito_aff_y, mito_aff_x 16 Unet3dIso 5.6M 340000 0.955
setup_56 nuc nuc 128 ResUNet3DValid 10.7M 350000 0.765
setup_55 nuc nuc 128 Unet3dIso 5.6M 330000 0.645
setup_61 nuc nuc 256 ResUNet3DValid 10.7M 20000 0.738
setup_67 er er 8 ResUNet3DValid 10.7M 20000 0.806

Download links and speed (recommended 2D-rewrite layout)

Times are steady-state ms per block on WebGPU (Chrome, Apple M-series GPU, real EM; see benchmark below). Lower ms is better; out Mvox/s = output voxels per second (higher is better). fp16 is 1.3–2.2× faster than fp32, halves download and GPU memory, and changes ≤0.05% of logit > 0 decisions. fp32 is exact and also runs on the WASM (CPU) fallback. The largest block of each model gives the best throughput (88 voxels of context are lost per axis per block).

model target voxel in → out fp32 fp32 ms fp16 fp16 ms fp16 speedup out Mvox/s fp32 / fp16
setup_54 mito_affinities (3 ch) 16 nm 148³ → 60³ fp32 (43 MB) 1203 fp16 (22 MB) 905 1.33× 0.18 / 0.24
setup_54 mito_affinities (3 ch) 16 nm 132³ → 44³ fp32 (43 MB) 796 fp16 (22 MB) 573 1.39× 0.11 / 0.15
setup_54 mito_affinities (3 ch) 16 nm 116³ → 28³ fp32 (43 MB) 516 fp16 (22 MB) 323 1.60× 0.04 / 0.07
setup_53 mito_affinities (3 ch) 16 nm 172³ → 84³ fp32 (23 MB) 1137 fp16 (11 MB) 741 1.53× 0.52 / 0.80
setup_53 mito_affinities (3 ch) 16 nm 140³ → 52³ fp32 (23 MB) 533 fp16 (11 MB) 336 1.59× 0.26 / 0.42
setup_53 mito_affinities (3 ch) 16 nm 124³ → 36³ fp32 (23 MB) 348 fp16 (11 MB) 157 2.22× 0.13 / 0.30
setup_56 nuc (1 ch) 128 nm 148³ → 60³ fp32 (43 MB) 1208 fp16 (22 MB) 921 1.31× 0.18 / 0.23
setup_56 nuc (1 ch) 128 nm 132³ → 44³ fp32 (43 MB) 811 fp16 (22 MB) 574 1.41× 0.11 / 0.15
setup_56 nuc (1 ch) 128 nm 116³ → 28³ fp32 (43 MB) 527 fp16 (22 MB) 324 1.63× 0.04 / 0.07
setup_55 nuc (1 ch) 128 nm 172³ → 84³ fp32 (23 MB) 1080 fp16 (11 MB) 758 1.42× 0.55 / 0.78
setup_55 nuc (1 ch) 128 nm 140³ → 52³ fp32 (23 MB) 506 fp16 (11 MB) 319 1.59× 0.28 / 0.44
setup_55 nuc (1 ch) 128 nm 124³ → 36³ fp32 (23 MB) 331 fp16 (11 MB) 156 2.12× 0.14 / 0.30
setup_61 nuc (1 ch) 256 nm 148³ → 60³ fp32 (43 MB) 1220 fp16 (22 MB) 900 1.36× 0.18 / 0.24
setup_61 nuc (1 ch) 256 nm 132³ → 44³ fp32 (43 MB) 809 fp16 (22 MB) 574 1.41× 0.11 / 0.15
setup_61 nuc (1 ch) 256 nm 116³ → 28³ fp32 (43 MB) 514 fp16 (22 MB) 322 1.60× 0.04 / 0.07
setup_67 er (1 ch) 8 nm 148³ → 60³ fp32 (43 MB) 1233 fp16 (22 MB) 890 1.39× 0.18 / 0.24
setup_67 er (1 ch) 8 nm 132³ → 44³ fp32 (43 MB) 809 fp16 (22 MB) 569 1.42× 0.11 / 0.15
setup_67 er (1 ch) 8 nm 116³ → 28³ fp32 (43 MB) 532 fp16 (22 MB) 323 1.65× 0.04 / 0.07

Native-3D versions of every file are under conv3d/ with the same names (e.g. https://huggingface.co/cellmap/onnx-web-models/resolve/main/conv3d/setup_54/setup_54_mito_affinities_16nm_in148_fp32.onnx). On WebGPU they are ~16× slower (setup_54 148³ fp32: 20.9 s vs 1.2 s per block) and fp16 does not help there (17–25 s), because onnxruntime-web runs Conv3d with a naive shader; use them for onnxruntime CUDA/CPU or TensorRT.

Compression variants

variant weights / compute file vs fp32 notes
fp32 fp32 / fp32 1× reference; best accuracy, works on WebGPU and WASM (CPU)
fp16 fp16 / fp16 ½ halves download and activation memory; WebGPU only (poor fp16 support on WASM)
int8w int8 per-channel / fp32 ¼ smaller download only (weights dequantized at load)
int8w_fp16 int8 per-channel / fp16 ¼ smallest download + fp16 activations

Graph rewrites for WebGPU

Both are exact (same math, same weights; verified against the PyTorch model):

  • Conv3d → Conv2d over a depth-folded batch. Each 3D conv is computed as a sum of 2D convs, one per depth tap, on the volume reshaped to [depth, C, H, W]. onnxruntime-web runs 3D convs with a naive WebGPU shader but 2D convs with tuned matmul kernels, so this is ~16× faster (setup_54, 148³ block, Apple M-series GPU: 20.9 s → 1.2 s).
  • 3D ConvTranspose → 1×1×1 conv + depth-to-space (Unet3dIso decoders); the WebGPU EP has no 3D ConvTranspose.

Peak memory is dominated by activations, not weights: the largest single tensor is ~40×N³ (ResUNet) or ~32×(N−2)³ (Unet3dIso) values, e.g. 259 MB fp16 / 519 MB fp32 at N=148. Pick a smaller block if your GPU's WebGPU maxBufferSize is lower.

Browser WebGPU benchmark

Measured in Chrome 154 on macOS, Apple GPU (WebGPU metal-3), onnxruntime-web 1.27.0-dev.20260506; best of 3 runs after one warm-up run.

Real EM (jrc_mus-liver, public OpenOrganelle data) at each model's voxel size. vs fp32 flip % = voxels whose logit > 0 decision differs from the same model's fp32 file on WebGPU.

model block variant ms / block output voxels / s max abs vs PyTorch (sampled) flip % vs fp32
setup_54 148³ fp32 1203 179,551 0.001 —
setup_54 148³ fp16 905 238,674 0.082 0.0
setup_54 148³ int8w 1216 177,632 0.106 0.0
setup_54 148³ int8w_fp16 879 245,734 0.153 0.0
setup_54 132³ fp32 796 107,015 0.0 —
setup_54 132³ fp16 573 148,663 0.072 0.0
setup_54 132³ int8w 1096 77,723 0.096 0.0
setup_54 132³ int8w_fp16 558 152,659 0.09 0.0
setup_54 116³ fp32 516 42,543 0.001 —
setup_54 116³ fp16 323 67,963 0.048 0.0
setup_54 116³ int8w 531 41,341 0.103 0.0
setup_54 116³ int8w_fp16 328 66,927 0.101 0.0
setup_53 172³ fp32 1137 521,288 0.001 —
setup_53 172³ fp16 741 799,870 0.071 0.0
setup_53 172³ int8w 1013 585,098 0.208 0.0
setup_53 172³ int8w_fp16 737 804,212 0.166 0.0
setup_53 140³ fp32 533 263,805 0.0 —
setup_53 140³ fp16 336 418,476 0.076 0.0
setup_53 140³ int8w 494 284,632 0.268 0.0
setup_53 140³ int8w_fp16 328 428,683 0.225 0.0
setup_53 124³ fp32 348 134,069 0.0 —
setup_53 124³ fp16 157 297,172 0.073 0.0
setup_53 124³ int8w 317 147,180 0.194 0.0
setup_53 124³ int8w_fp16 160 291,600 0.201 0.0
setup_56 148³ fp32 1208 178,808 0.001 —
setup_56 148³ fp16 921 234,528 0.2 0.0
setup_56 148³ int8w 1219 177,194 0.379 0.0
setup_56 148³ int8w_fp16 880 245,455 0.34 0.0
setup_56 132³ fp32 811 105,036 0.001 —
setup_56 132³ fp16 574 148,404 0.16 0.0
setup_56 132³ int8w 822 103,630 0.447 0.0
setup_56 132³ int8w_fp16 559 152,386 0.266 0.0
setup_56 116³ fp32 527 41,655 0.001 —
setup_56 116³ fp16 324 67,753 0.119 0.0
setup_56 116³ int8w 526 41,734 0.342 0.0
setup_56 116³ int8w_fp16 326 67,337 0.332 0.0
setup_55 172³ fp32 1080 548,800 0.001 —
setup_55 172³ fp16 758 781,931 0.117 0.0
setup_55 172³ int8w 989 599,296 0.558 0.0
setup_55 172³ int8w_fp16 736 805,304 0.65 0.0
setup_55 140³ fp32 506 277,881 0.001 —
setup_55 140³ fp16 319 440,777 0.131 0.0
setup_55 140³ int8w 481 292,324 0.531 0.0
setup_55 140³ int8w_fp16 336 418,476 0.512 0.0
setup_55 124³ fp32 331 140,955 0.001 —
setup_55 124³ fp16 156 299,077 0.103 0.0
setup_55 124³ int8w 315 148,114 0.314 0.0
setup_55 124³ int8w_fp16 160 291,600 0.402 0.0
setup_61 148³ fp32 1220 177,049 0.001 —
setup_61 148³ fp16 900 240,000 0.124 0.0019
setup_61 148³ int8w 1224 176,471 0.328 0.0032
setup_61 148³ int8w_fp16 869 248,562 0.362 0.0037
setup_61 132³ fp32 809 105,295 0.001 —
setup_61 132³ fp16 574 148,404 0.164 0.0
setup_61 132³ int8w 808 105,426 0.407 0.0
setup_61 132³ int8w_fp16 555 153,485 0.482 0.0
setup_61 116³ fp32 514 42,708 0.001 —
setup_61 116³ fp16 322 68,174 0.145 0.0
setup_61 116³ int8w 525 41,813 0.303 0.0
setup_61 116³ int8w_fp16 327 67,131 0.434 0.0
setup_67 148³ fp32 1233 175,182 0.0 —
setup_67 148³ fp16 890 242,697 0.03 0.0148
setup_67 148³ int8w 1221 176,904 0.042 0.0282
setup_67 148³ int8w_fp16 870 248,276 0.048 0.0356
setup_67 132³ fp32 809 105,295 0.0 —
setup_67 132³ fp16 569 149,708 0.035 0.0129
setup_67 132³ int8w 796 107,015 0.037 0.0399
setup_67 132³ int8w_fp16 556 153,209 0.047 0.0434
setup_67 116³ fp32 532 41,263 0.0 —
setup_67 116³ fp16 323 67,963 0.039 0.0501
setup_67 116³ int8w 529 41,497 0.043 0.0866
setup_67 116³ int8w_fp16 327 67,131 0.066 0.0729

Fidelity vs. fp32 PyTorch (onnxruntime CPU)

One real EM crop per model (jrc_c-elegans-comma-1 at the model's voxel size). flip % = voxels whose logit > 0 decision differs from PyTorch. A consistency check, not a re-run of F1 validation.

file MB in → out max abs logit diff mean abs diff flip %
setup_54/setup_54_mito_affinities_16nm_in148_fp32.onnx 42.9 148³ → 60³ 0.0005 0.0001 0.0000
setup_54/setup_54_mito_affinities_16nm_in148_fp16.onnx 21.6 148³ → 60³ 0.0142 0.0024 0.0009
setup_54/setup_54_mito_affinities_16nm_in148_int8w.onnx 10.9 148³ → 60³ 0.1366 0.0198 0.0094
setup_54/setup_54_mito_affinities_16nm_in148_int8w_fp16.onnx 10.9 148³ → 60³ 0.1139 0.0191 0.0080
setup_54/setup_54_mito_affinities_16nm_in132_fp32.onnx 42.9 132³ → 44³ 0.0003 0.0000 0.0000
setup_54/setup_54_mito_affinities_16nm_in132_fp16.onnx 21.6 132³ → 44³ 0.0149 0.0025 0.0000
setup_54/setup_54_mito_affinities_16nm_in132_int8w.onnx 10.9 132³ → 44³ 0.1452 0.0203 0.0192
setup_54/setup_54_mito_affinities_16nm_in132_int8w_fp16.onnx 10.9 132³ → 44³ 0.1202 0.0191 0.0160
setup_54/setup_54_mito_affinities_16nm_in116_fp32.onnx 42.9 116³ → 28³ 0.0001 0.0000 0.0000
setup_54/setup_54_mito_affinities_16nm_in116_fp16.onnx 21.6 116³ → 28³ 0.0134 0.0026 0.0015
setup_54/setup_54_mito_affinities_16nm_in116_int8w.onnx 10.9 116³ → 28³ 0.1302 0.0213 0.0137
setup_54/setup_54_mito_affinities_16nm_in116_int8w_fp16.onnx 10.9 116³ → 28³ 0.1188 0.0209 0.0076
setup_53/setup_53_mito_affinities_16nm_in172_fp32.onnx 22.5 172³ → 84³ 0.0000 0.0000 0.0000
setup_53/setup_53_mito_affinities_16nm_in172_fp16.onnx 11.3 172³ → 84³ 0.0618 0.0072 0.0044
setup_53/setup_53_mito_affinities_16nm_in172_int8w.onnx 5.8 172³ → 84³ 0.4799 0.0488 0.0380
setup_53/setup_53_mito_affinities_16nm_in172_int8w_fp16.onnx 5.8 172³ → 84³ 0.5517 0.0509 0.0351
setup_53/setup_53_mito_affinities_16nm_in140_fp32.onnx 22.5 140³ → 52³ 0.0000 0.0000 0.0000
setup_53/setup_53_mito_affinities_16nm_in140_fp16.onnx 11.3 140³ → 52³ 0.0618 0.0073 0.0009
setup_53/setup_53_mito_affinities_16nm_in140_int8w.onnx 5.8 140³ → 52³ 0.3368 0.0430 0.0085
setup_53/setup_53_mito_affinities_16nm_in140_int8w_fp16.onnx 5.8 140³ → 52³ 0.3255 0.0451 0.0092
setup_53/setup_53_mito_affinities_16nm_in124_fp32.onnx 22.5 124³ → 36³ 0.0000 0.0000 0.0000
setup_53/setup_53_mito_affinities_16nm_in124_fp16.onnx 11.3 124³ → 36³ 0.0396 0.0069 0.0007
setup_53/setup_53_mito_affinities_16nm_in124_int8w.onnx 5.8 124³ → 36³ 0.2672 0.0384 0.0129
setup_53/setup_53_mito_affinities_16nm_in124_int8w_fp16.onnx 5.8 124³ → 36³ 0.2747 0.0395 0.0157
setup_56/setup_56_nuc_128nm_in148_fp32.onnx 42.9 148³ → 60³ 0.0035 0.0003 0.0005
setup_56/setup_56_nuc_128nm_in148_fp16.onnx 21.6 148³ → 60³ 0.0539 0.0065 0.0069
setup_56/setup_56_nuc_128nm_in148_int8w.onnx 10.9 148³ → 60³ 0.5656 0.0669 0.0755
setup_56/setup_56_nuc_128nm_in148_int8w_fp16.onnx 10.9 148³ → 60³ 0.4653 0.0600 0.0560
setup_56/setup_56_nuc_128nm_in132_fp32.onnx 42.9 132³ → 44³ 0.0019 0.0002 0.0000
setup_56/setup_56_nuc_128nm_in132_fp16.onnx 21.6 132³ → 44³ 0.0543 0.0064 0.0012
setup_56/setup_56_nuc_128nm_in132_int8w.onnx 10.9 132³ → 44³ 0.4437 0.0661 0.0153
setup_56/setup_56_nuc_128nm_in132_int8w_fp16.onnx 10.9 132³ → 44³ 0.4508 0.0606 0.0117
setup_56/setup_56_nuc_128nm_in116_fp32.onnx 42.9 116³ → 28³ 0.0004 0.0001 0.0000
setup_56/setup_56_nuc_128nm_in116_fp16.onnx 21.6 116³ → 28³ 0.0405 0.0067 0.0046
setup_56/setup_56_nuc_128nm_in116_int8w.onnx 10.9 116³ → 28³ 0.4412 0.0668 0.0820
setup_56/setup_56_nuc_128nm_in116_int8w_fp16.onnx 10.9 116³ → 28³ 0.3753 0.0611 0.0638
setup_55/setup_55_nuc_128nm_in172_fp32.onnx 22.5 172³ → 84³ 0.0000 0.0000 0.0000
setup_55/setup_55_nuc_128nm_in172_fp16.onnx 11.3 172³ → 84³ 0.1344 0.0191 0.0235
setup_55/setup_55_nuc_128nm_in172_int8w.onnx 5.8 172³ → 84³ 0.5892 0.0901 0.0995
setup_55/setup_55_nuc_128nm_in172_int8w_fp16.onnx 5.8 172³ → 84³ 0.5302 0.0846 0.0957
setup_55/setup_55_nuc_128nm_in140_fp32.onnx 22.5 140³ → 52³ 0.0000 0.0000 0.0000
setup_55/setup_55_nuc_128nm_in140_fp16.onnx 11.3 140³ → 52³ 0.0801 0.0183 0.0036
setup_55/setup_55_nuc_128nm_in140_int8w.onnx 5.8 140³ → 52³ 0.4925 0.0885 0.0220
setup_55/setup_55_nuc_128nm_in140_int8w_fp16.onnx 5.8 140³ → 52³ 0.4770 0.0798 0.0171
setup_55/setup_55_nuc_128nm_in124_fp32.onnx 22.5 124³ → 36³ 0.0000 0.0000 0.0000
setup_55/setup_55_nuc_128nm_in124_fp16.onnx 11.3 124³ → 36³ 0.0660 0.0168 0.0021
setup_55/setup_55_nuc_128nm_in124_int8w.onnx 5.8 124³ → 36³ 0.4925 0.0864 0.0000
setup_55/setup_55_nuc_128nm_in124_int8w_fp16.onnx 5.8 124³ → 36³ 0.4770 0.0763 0.0000
setup_61/setup_61_nuc_256nm_in148_fp32.onnx 42.9 148³ → 60³ 0.0541 0.0053 0.0000
setup_61/setup_61_nuc_256nm_in148_fp16.onnx 21.6 148³ → 60³ 0.0977 0.0085 0.0000
setup_61/setup_61_nuc_256nm_in148_int8w.onnx 10.9 148³ → 60³ 1.2152 0.0847 0.0000
setup_61/setup_61_nuc_256nm_in148_int8w_fp16.onnx 10.9 148³ → 60³ 1.4691 0.0912 0.0000
setup_61/setup_61_nuc_256nm_in132_fp32.onnx 42.9 132³ → 44³ 0.0133 0.0015 0.0000
setup_61/setup_61_nuc_256nm_in132_fp16.onnx 21.6 132³ → 44³ 0.0425 0.0061 0.0000
setup_61/setup_61_nuc_256nm_in132_int8w.onnx 10.9 132³ → 44³ 0.7255 0.0742 0.0012
setup_61/setup_61_nuc_256nm_in132_int8w_fp16.onnx 10.9 132³ → 44³ 0.8130 0.0792 0.0012
setup_61/setup_61_nuc_256nm_in116_fp32.onnx 42.9 116³ → 28³ 0.0023 0.0003 0.0000
setup_61/setup_61_nuc_256nm_in116_fp16.onnx 21.6 116³ → 28³ 0.0283 0.0052 0.0000
setup_61/setup_61_nuc_256nm_in116_int8w.onnx 10.9 116³ → 28³ 0.4741 0.0666 0.0000
setup_61/setup_61_nuc_256nm_in116_int8w_fp16.onnx 10.9 116³ → 28³ 0.4942 0.0685 0.0000
setup_67/setup_67_er_8nm_in148_fp32.onnx 42.9 148³ → 60³ 0.0004 0.0000 0.0000
setup_67/setup_67_er_8nm_in148_fp16.onnx 21.6 148³ → 60³ 0.0127 0.0017 0.0019
setup_67/setup_67_er_8nm_in148_int8w.onnx 10.9 148³ → 60³ 0.1386 0.0136 0.0171
setup_67/setup_67_er_8nm_in148_int8w_fp16.onnx 10.9 148³ → 60³ 0.1204 0.0131 0.0153
setup_67/setup_67_er_8nm_in132_fp32.onnx 42.9 132³ → 44³ 0.0003 0.0000 0.0000
setup_67/setup_67_er_8nm_in132_fp16.onnx 21.6 132³ → 44³ 0.0091 0.0020 0.0000
setup_67/setup_67_er_8nm_in132_int8w.onnx 10.9 132³ → 44³ 0.0754 0.0144 0.0047
setup_67/setup_67_er_8nm_in132_int8w_fp16.onnx 10.9 132³ → 44³ 0.0841 0.0145 0.0012
setup_67/setup_67_er_8nm_in116_fp32.onnx 42.9 116³ → 28³ 0.0001 0.0000 0.0000
setup_67/setup_67_er_8nm_in116_fp16.onnx 21.6 116³ → 28³ 0.0090 0.0022 0.0364
setup_67/setup_67_er_8nm_in116_int8w.onnx 10.9 116³ → 28³ 0.0902 0.0194 0.2870
setup_67/setup_67_er_8nm_in116_int8w_fp16.onnx 10.9 116³ → 28³ 0.0838 0.0206 0.2824

Use in cellmap-flow serverless

ONNX model → remote URL https://huggingface.co/cellmap/onnx-web-models/resolve/main/<folder>/<file>.onnx (e.g. setup_54/setup_54_mito_affinities_16nm_in148_fp32.onnx); Input size N,N,N, Output size N-88,N-88,N-88, input/output voxel = the model's voxel size, Channels = number of channels (Has channel axis = true for the 3-channel affinity models). Each folder's manifest.json has the full metadata. Anonymous Hugging Face downloads are rate-limited (HTTP 429), so clients should cache the model bytes.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support