File size: 3,017 Bytes
2ebbe9d
 
 
 
 
 
 
 
 
 
 
 
 
 
87f26a5
 
 
2ebbe9d
87f26a5
 
 
 
 
2ebbe9d
87f26a5
 
 
2ebbe9d
87f26a5
2ebbe9d
 
 
 
 
 
 
 
 
 
 
 
 
87f26a5
2ebbe9d
87f26a5
 
2ebbe9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87f26a5
2ebbe9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: mit
library_name: onnx
pipeline_tag: audio-to-audio
tags:
  - onnx
  - onnxruntime-web
  - source-separation
  - music-source-separation
  - open-unmix
---

# Open-Unmix UMX-HQ (ONNX)

An ONNX export of the **vocals** stem of **UMX-HQ**, the
[Open-Unmix](https://github.com/sigsep/open-unmix-pytorch) music source
separation models trained on MUSDB18-HQ.

| | |
| --- | --- |
| File | `vocals.onnx` |
| Size | 17,820,856 bytes (17.0 MiB) |
| SHA-256 | `3d05709ff7197bbd4a33aee759e4e82002acb491f41c94770227ab57507b6ccb` |

Open-Unmix has one independent graph per stem (vocals / drums / bass / other);
only vocals is published here. The other three can be exported from the same
upstream weights with the same procedure — see the signal parameters below.

This is an export of the published UMX-HQ PyTorch weights
([Zenodo record 3370489](https://zenodo.org/records/3370489)) — the **spectrogram
model only**. The STFT, the mask application and the ISTFT are deliberately left
outside the graph so a host can implement them in whatever environment it runs
in; the parameters are given below.

## Tensor contract

The graph maps a magnitude spectrogram to an estimated magnitude spectrogram for
its stem. Read input/output names off the graph rather than hardcoding them.

- **Input** — `float32[1, 2, 2049, frames]`: STFT magnitudes as
  `(batch, channels, bins, frames)` — batch 1, 2 channels (stereo),
  `nb_bins = 2049`.
- **Output** — the same shape, the vocals estimate.

Every Open-Unmix stem graph takes the **same** mixture tensor, so a caller running
more than one builds the spectrogram once and reuses it across sessions.

## Signal parameters

These must match or the output is wrong:

| | |
| --- | --- |
| Sample rate | 44,100 Hz, **stereo** |
| FFT size | 4096 |
| Hop | 1024 |
| Window | Hann (periodic), centred (reflect-padded by `n_fft / 2`) |
| Bins | 2049 (`n_fft / 2 + 1`) |

To reconstruct audio, apply the estimated magnitudes as a ratio mask over the
**mixture's phase** and inverse-STFT. That is Open-Unmix's `niter=0` path — no
Wiener/EM refinement — which is what this export is validated against.

## Why UMX-HQ rather than UMX-L

UMX-HQ is the same architecture at half the LSTM width (`hidden_size` 512 vs
1024). It separates slightly less cleanly than UMX-L, and it is **MIT-licensed**,
whereas the UMX-L weights are CC BY-NC-SA 4.0 (non-commercial).

> An MIT licence on the *model* grants no rights over the audio you run through
> it. Separating a copyrighted recording still needs its own clearance.

## Licence and credit

Weights are **MIT**, from [sigsep/open-unmix-pytorch](https://github.com/sigsep/open-unmix-pytorch).
Please cite:

```bibtex
@article{stoter19,
  author  = {St\"oter, Fabian-Robert and Uhlich, Stefan and Liutkus, Antoine and Mitsufuji, Yuki},
  title   = {Open-Unmix - A Reference Implementation for Music Source Separation},
  journal = {Journal of Open Source Software},
  year    = 2019,
  doi     = {10.21105/joss.01667}
}
```