File size: 5,947 Bytes
9496f98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
---
license: apache-2.0
library_name: onnxruntime
pipeline_tag: image-segmentation
base_model:
  - AnnotateIt/edgecrafter-ecseg-s-onnx
  - AnnotateIt/edgecrafter-ecseg-m-onnx
tags:
  - onnx
  - onnxruntime
  - onnxruntime-web
  - instance-segmentation
  - fp16
  - int8
  - quantization
  - webassembly
  - experimental
  - negative-results
---

# ECSeg ONNX optimization experiments

> [!WARNING]
> The ONNX files in this repository are experimental reproducibility artifacts. They are **not recommended
> for production inference or annotation workflows**. AnnotateIt continues to use the original FP32
> ECSeg-S and ECSeg-M checkpoints.

## Result

None of the tested graph-optimized, FP16, dynamic-INT8, or static-INT8 variants improved size, browser
latency, segmentation quality, and runtime stability simultaneously on ONNX Runtime Web 1.24.3 CPU/WASM.

| Model | Decision | Production artifact | FP32 warm p50 |
|---|---|---|---:|
| ECSeg-S | **REJECT optimized variants** | [Original FP32](https://huggingface.co/AnnotateIt/edgecrafter-ecseg-s-onnx) | 1299 ms |
| ECSeg-M | **REJECT optimized variants** | [Original FP32](https://huggingface.co/AnnotateIt/edgecrafter-ecseg-m-onnx) | 2093 ms |

Measurements were made on an Apple M4 Max using single-thread WASM, the configuration used by the
AnnotateIt Desktop and iOS targets. Chrome was the primary engine and WebKit was used as a cross-browser
check. See `results/` for the machine-readable data.

## Tested variants

| Variant | Storage result | Browser/runtime result | Quality result |
|---|---|---|---|
| Graph optimization | 1–2% larger | Warm latency unchanged | Bit-identical |
| FP16 | 49–51% smaller | 4–5% slower in Chrome WASM | Mean mask IoU 0.979–0.988, but individual masks reached IoU 0 |
| Dynamic INT8 | 58–59% smaller | Session creation fails with `ShapeInferenceError` | Not runnable |
| Static INT8 | 68–71% smaller | 12–17% slower | Zero instances at the production threshold |
| Selective static INT8 | 65–68% smaller | 12–15% slower | Zero instances at the production threshold |

The principal incompatibility is the DETR-style deformable-attention segmentation head, including
`GridSample`, `Einsum`, dynamic `TopK`, and `GatherElements`. The tested graph also failed to initialize on
threaded WASM and WebGPU in this runtime version.

## Included experimental artifacts

Only the two tested FP16 variants are retained as reproducibility artifacts. Broken INT8 variants and the
larger graph-optimized variants are deliberately omitted.

| File | Size | SHA-256 | Status |
|---|---:|---|---|
| `artifacts/ecseg-s.fp16.onnx` | 21,565,662 bytes | `508c79e144fa3d9a4691970798529ae03243992aff94b0c28794b4c877c4766c` | Experimental; do not deploy |
| `artifacts/ecseg-m.fp16.onnx` | 41,031,365 bytes | `e0d8865bc52e0c38f14638ece649a175ccd239dfa200274f6de38efa2e10eb90` | Experimental; do not deploy |

Both retain the production I/O contract:

- Input: `images`, float32 `[1,3,640,640]`
- Outputs: `labels` int64 `[1,300]`, `boxes` float32 `[1,300,4]`, `scores` float32 `[1,300]`,
  `masks` float32 `[1,300,160,160]`
- Opset 17, IR version 8

The FP16 conversion keeps public I/O in float32 with boundary casts. The smaller file size does not
translate to faster CPU/WASM execution because this target has no native FP16 compute path for the graph.

## Quality warning

Average agreement hides the failure tail. On the held-out comparison set:

- ECSeg-S FP16: mean mask IoU 0.988, worst-image mean 0.667, minimum individual-instance IoU 0.000.
- ECSeg-M FP16: mean mask IoU 0.979, worst-image mean 0.613, minimum individual-instance IoU 0.000.

For an annotation product, occasional fully incorrect masks are more important than the favorable average.
The artifacts must not be presented as drop-in optimized replacements.

## Repository contents

- `artifacts/`: the exact FP16 binaries used in the reported measurements and `SHA256SUMS`.
- `results/`: CSV and JSON size, latency, and correctness results.
- `images/`: qualitative benchmark comparisons, including the FP16 tail and collapsed static-INT8 output.
- `report/ecseg-quantization-report.md`: full methodology, limitations, tables, and verdicts.
- `scripts/`: reproducible conversion, validation, and browser-benchmark tooling.

The source tooling is also maintained in the
[AnnotateIt repository](https://github.com/yvolokitin/AnnotateIt_npm/tree/main/scripts/model-optimization).

## Reproduction

The exact commands are documented in `scripts/README.md`. In outline:

1. Download the immutable FP32 revisions and verify their pinned SHA-256 values.
2. Create an isolated Python 3.12 environment from `scripts/requirements.txt`.
3. Generate variants with `scripts/optimize.py`.
4. Compare raw outputs and final masks with `scripts/correctness.py`.
5. Benchmark in a real browser with `scripts/bench/bench_browser.mjs` and ONNX Runtime Web 1.24.3.

To verify the published binaries:

```bash
sha256sum -c artifacts/SHA256SUMS
```

On macOS, use `shasum -a 256` against the values in `artifacts/SHA256SUMS`.

## Limitations

- Replacement quality was evaluated as agreement against FP32 on 47 held-out images, not as full COCO AP.
- Static INT8 calibration used a separate 50-image COCO val2017 subset.
- Performance was measured on one Apple M4 Max; Chrome and WebKit were tested.
- Multi-thread WASM session creation hung for every ECSeg variant, including FP32, so latency comparisons use
  the production single-thread Desktop/iOS configuration.
- These results apply to ONNX Runtime Web 1.24.3. A future runtime or a redesigned/exported ECSeg head may
  justify rerunning the study.

## License and provenance

The ECSeg checkpoints are published under Apache-2.0. These files are numerical conversions of the
immutable AnnotateIt ECSeg-S and ECSeg-M ONNX releases; they are not newly trained models. The original
model repositories remain the authoritative production artifacts.