141.6 ms against 382.2 on an iPhone 16, at 248 MB against 1153. mlx/NOTES.md records the measurement and why quantization would not have closed the gap.
quantized duplicated precisions.json, which is authoritative for the
quantized/non-quantized partition. default expressed a per-repository
recommendation nothing consumed: the library resolves its own per-platform
default. Both are gone from the schema.
Adds library_name to the model card, and pipeline_tag where it was missing.
Brings the config and card licenses into agreement, and repairs the variant
declarations that did not match the files actually published here.
fp16 was validated against fp32 across 13 real photos and 40 detections: visible landmarks agree to 1.04 px, boxes to 0.653 px and scores to 0.072, with no detection crossing the confidence threshold. It is also faster (144.0 ms against 165.1), lighter (263 MB peak against 389 MB) and half the download, so there is no longer a reason to ship both.
v0.9.0 retains its own copy of the fp32 file; released versions are unaffected.
From export-scripts MR !18.
feat(coreml): add the fp16 build, pinned to CPU_AND_GPU
fp16 is correct on device only with both the CPU and the Neural Engine excluded. Measured at an iOS17 deployment target on an iPhone 16, against the fp32 build's 0.863: all 0.421, cpu_only 0.411, cpu_and_ne 0.422, cpu_and_gpu 0.862.
With CPU_AND_GPU it matches fp32 to 0.0008 confidence, 0.23 px box and 0.17 px landmark, and runs at 144.0 ms against 165.1 ms with a 263 MB peak against 389 MB, at half the download.
config.json makes fp16 the default variant; fp32 stays available and is unchanged.
Exported from export-scripts MR !18.
feat(coreml): add the fp16 build, pinned to CPU_AND_GPU
fp16 is correct on device only with both the CPU and the Neural Engine excluded. Measured at an iOS17 deployment target on an iPhone 16, against the fp32 build's 0.863: all 0.421, cpu_only 0.411, cpu_and_ne 0.422, cpu_and_gpu 0.862.
With CPU_AND_GPU it matches fp32 to 0.0008 confidence, 0.23 px box and 0.17 px landmark, and runs at 144.0 ms against 165.1 ms with a 263 MB peak against 389 MB, at half the download.
config.json makes fp16 the default variant; fp32 stays available and is unchanged.
Exported from export-scripts MR !18.
Revert the fp16 Core ML build: it returns no detections
On an iPhone 16 against a real photo the fp16 build returns zero
detections where the fp32 Core ML and XNNPACK builds both return the
same person at 0.863 confidence with matching boxes and landmarks.
The speed benchmark that motivated it ran on a synthetic scene that
detects nothing, so it never exercised the output.
Same graph and I/O as the fp32 build, lowered with compute_precision=FLOAT16.
The Neural Engine is fp16-only, so the fp32 build could never reach it; on an
iPhone 16 the fp16 build runs 122.7 ms against 159.9 ms for fp32 (raw execute,
20 iterations) at half the file size.
Replace the CoreML fp32 model with the previously-committed iOS16-all
variant, keeping the current file name.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>