htdemucs-CoreML / README.md
TrevorJS's picture
htdemucs core for one 7.8 s segment, float32, coremltools 9.0
f46494c verified
|
Raw History Blame Contribute Delete
2.03 kB
---
license: mit
library_name: coreml
pipeline_tag: audio-to-audio
tags: [coreml, core-ml, source-separation, stem-separation, demucs, htdemucs, apple, on-device, slurper]
---
# htdemucs on Core ML
[htdemucs](https://github.com/facebookresearch/demucs) (Meta, MIT) as a Core ML `.mlpackage`, the drums, bass and other model behind [slurper](https://github.com/TrevorS/slurper). Runs on the GPU on macOS 15 and later.
## Graph
The model's real-valued core for one 7.8 s segment at 44.1 kHz, `HTDemucs.forward` from the normalization to just before `_mask`, in float32 because float16 overflows:
| name | shape | meaning |
|---|---|---|
| `mix` (input) | `[1, 2, 343980]` | stereo segment |
| `spec` (input) | `[1, 4, 2048, 336]` | `_magnitude(_spec(mix))`: left real, left imaginary, right real, right imaginary |
| `time` (output) | `[1, 8, 343980]` | denormalized time branch, `[source, channel]` |
| `freq` (output) | `[1, 16, 2048, 336]` | denormalized frequency branch, `[source, channel, real/imaginary]` |
Sources are drums, bass, other, vocals. The host computes the STFT (`_spec`: 4096-point periodic Hann, hop 1024, reflect padding, normalized), inverts `freq` with `_ispec`, adds `time`, and crossfades segments overlapping by a quarter as `apply_model` does. `Sources/SlurperKit/Demucs.swift` in slurper is a reference host.
## Conversion
`scripts/convert_htdemucs.py` in slurper: `torch.jit.trace` of the core with the attention fast path disabled, then coremltools 9.0 to an ML program with float32 precision. Before saving, the Core ML output on the GPU is compared with PyTorch on a synthetic segment: drums 114 dB, bass 128 dB, other 114 dB, vocals 100 dB SDR.
## Files
- `htdemucs_fp32.mlpackage/Manifest.json`
- `htdemucs_fp32.mlpackage/Data/com.apple.CoreML/model.mlmodel`
- `htdemucs_fp32.mlpackage/Data/com.apple.CoreML/weights/weight.bin` (209 MB)
## Attribution
Hybrid Transformer Demucs by Simon Rouard, Francisco Massa and Alexandre Défossez (Meta AI), MIT. This conversion is MIT as well.