Compare model size, phone-detection coverage, and actual processing speed on the gym clip. This page tests recorded frames—not your camera.
Same clip and thresholds: 0.40 to acquire, 0.18 to continue a nearby track. Coverage counts accepted phone tracks; it is not a general accuracy score. Confirm the box visually in the live check below.
| Model | Weights | Frames ≥ 0.40 | Tracked frames | CPU median |
|---|---|---|---|---|
| R50 · FP32 (baseline) | 175.4 MB | 3 / 9 | 7 / 9 | 240 ms |
| R50 · INT8 | 45.5 MB | 2 / 9 | 5 / 9 | 127 ms |
| R18 · FP32 | 82.6 MB | 2 / 9 | 6 / 9 | 116 ms |
| R18 · INT8 | 21.7 MB | 1 / 9 | 1 / 9 | 71 ms |
| R18 Objects365 · FP32 | 82.6 MB | 4 / 9 | 9 / 9 | 118 ms |
| R18 Objects365 · INT8 | 21.7 MB | 1 / 9 | 9 / 9 | 72 ms |
| R34 · INT8 | 33.3 MB | 0 / 9 | 0 / 9 | 94 ms |
All rows use one full-frame pass. Node / ONNX Runtime on Apple M5 Max; model loading and warmup excluded. Browser and phone timings will differ. The earlier R50 two-pass preview scored 9/9 at 478 ms.
The 21.7 MB R18 Objects365 INT8 model tracked 44 of 45 decoded frames, acquiring on the second frame. Its 82.6 MB FP32 version tracked 45 of 45. Only 11 and 19 frames respectively reached the acquisition threshold independently.
| Model / input | Median | P95 |
|---|---|---|
| R50 FP32 · two passes | 4946 ms | 4982 ms |
| R18 Objects365 FP32 · one pass | 1136 ms | 1181 ms |
| R18 Objects365 INT8 · one pass | 1162 ms | 1187 ms |
The verified 82.5 MB export runs on WebGPU. It matches the CPU phone boxes on nine identical clip samples and keeps the blank negative clear. The INT8 GPU export failed numerical validation and is disabled.
| Model / runtime | Median | P95 | Tracked |
|---|---|---|---|
| FP32 · WebGPU · run 1 | 38 ms | 48 ms | 150/150 |
| FP32 · WebGPU · run 2 | 38 ms | 48 ms | 151/151 |
| FP32 · WebAssembly | 1135 ms | 1137 ms | 8/20 |
The GPU keeps up with this 10 fps clip across repeated loops. Phone performance and broader detection accuracy still require testing. Each GPU run spans at least 15 seconds; model loading is excluded.
Measured October 15, 2026, on Apple M5 Max. One recorded gym clip and a blank negative control; this does not establish general accuracy. Runtime downloads and model loading are excluded from frame timing.
Inference runs continuously in a worker. The left panel uses the camera’s smoothing on live playback. The right panel shows fresh detections on the exact analyzed frame. No precomputed boxes. R18 Objects365 FP32 with WebGPU and one pass uses the same detector adapter as the camera.
Smoothed display: No box. Smoothing eases movement and holds the last box for at most 250 ms. Pause detections to check that the box expires.
Ready to test
Runtime for next run: WebGPU. GPU testing requires the locally prepared FP32 export (see SETUP.md). This is the current computer—not an iPhone benchmark. A phone trial is still required. Each new source frame is sampled once; inference capacity excludes waiting for the 10 fps clip. Coverage counts fresh detections only; a briefly held display box never increases detection coverage. The raw panel retains the last analyzed frame after a run, while the live overlay clears.