Maskinöversättning · Engelskt original
HTDemucs & Open-Unmix - 4-Stem Music Separation
Open-Unmix HQ delar ett stereomusikspår i fyra oberoende stjälkar - Vocals, Trummor, basoch andra andraFyra oberoende BiLSTM-modeller (en per stam) producerar magnitudmasker över blandningen STFT; en valfri Wiener-postfilter försonar dem. Körningar på Apple Silicon via MLX.
Två motorer är tillgängliga: Open-Unmix HQ (Lätt, standard) och HTDemucs (Demucs v4) en högre kvalitet Hybrid Transformer modell vald med --engine htdemucsBåda springer på Apple Silicon via via MLX och mata ut samma fyra stjälkar på 44.1 KHz.
Ta bort sång och spara en instrumental Split en låt i fyra WAV stammar
Vad det är
- 4 stjälkar per spår — vokaler, trummor, bas, andra. Var och en är en 2-kanal 44,1 kHz stamfil.
- Magnitude-mask-modellen - varje stammodell förutspår en icke-negativ mask som appliceras på blandningsspektrogrammet; fasen tas från blandningen.
- Wiener post-filter (valfritt) - mjuk-mask raffinering över alla 4 stjälkar så att de sammanfattar koherent tillbaka till blandningen. Lägger till ~ 0,5 dB SDR.
- Små fotavtryck - 8,9M param per stam, ~ 136 MB totalt för alla 4 stammar.
- Apache-2.0 -- uppströms vikter under MIT, vår CoreML/MLX konvertering under Apache-2.0.
Arkitektur
Fyra oberoende stjälkar, varje kopia av samma nätverk:
| Steg | Shape/operation |
|---|---|
| STFT | 4096-punkt FFT, 1024-hop, periodiskt Hann fönster, reflektera-pad. 2049 frekvens bin per ram. |
| Input normaliserar | Gröda till 1487 bin (≈16 kHz), tillämpa lärd per bin menar + skala från träning. |
| Encoder | Linjär 2974 → 512 + BatchNorm + tanh. Input är 2 kanaler × 1487 bin. |
| BiLSTM | 3 lager, 256 dolda per riktning (512 effektiva). fångar temporal kontext över ramar. |
| Decoder | Skip-concat av kodare och LSTM-utgångar (1024) → Linjär 1024 → 512 + BN + ReLU → Linier 512 → 4098. |
| Utgångsdenorm + mask | Element-vis multiplicera med blandning magnitud; fas från blandning; iSTFT överlappad. |
| Wiener (valfritt) | Kraft-kvot masker över alla 4 stam uppskattningar. Refines fas så stammar summan till blandning. |
Modell
| Komponent | Värde |
|---|---|
| Parametrar / stam | 8,9M |
| Parametrar totalt (4 stammar) | ~35.6M |
| Provfrekvens | 44.1 kHz stereo |
| Chunk latens | Offline (fullspårig STFT) |
| Vikter | aufklarer/OpenUnmix-HQ-MLX (safetensorer, ~136 MB) |
| Upstream | sigsep/open-unmix-pytorch (Stöter et al., JOSS 2019) |
HTDemucs (Demuc v4)
För högre separationskvalitet – särskilt på bas och trummor – fartygen också HTDemucsMeta's Hybrid Transformer Demucs. Det sammanfogar en spektrogram gren och en vågform gren genom en cross-domain transformator; den skeppade htdemucs_ft variant är en påse med fyra finjusterade undermodeller, en per stam. Vikter nedladdning från HuggingFace vid första användning. På en riktnings MUSDB-sample benchmark (museval / BSSEval v4) det genomsnitt +3.01 dB SDR över UMX-HQ, med de största vinsterna på basen (+5.75 dB).
| Komponent | Värde |
|---|---|
| Parametrar | 168M (4 × 42M finjusterade undermodeller) |
| Provfrekvens | 44.1 kHz stereo |
| Fönster | 7,8 s segment, 25% överlappning, triangulär korsfaden |
| Vikter | aufklarer/HTDemucs-FT-MLX (fp16, ~320 MB) |
| Upstream | facebookresearch/demucs (Rouard et al., ICASSP 2023) |
Snabbstart - Swift
import SourceSeparation
import AudioCommon
let separator = try await SourceSeparator.fromPretrained()
let stereo = try AudioFileLoader.loadStereo(
url: URL(fileURLWithPath: "song.wav"),
targetSampleRate: 44100
)
let stems = separator.separate(audio: stereo, sampleRate: 44100)
// stems[.vocals], stems[.drums], stems[.bass], stems[.other]
// Each is [[Float]] — left channel, right channel.
try WAVWriter.writeStereo(
left: stems[.vocals]![0],
right: stems[.vocals]![1],
sampleRate: 44100,
to: URL(fileURLWithPath: "vocals.wav")
)
Pass wiener: true (standard) för bästa kvalitet. Pass targets: [.vocals] för att extrahera endast en delmängd av stjälkar och hoppa över de andra modellerna.
CLI
speech separate song.wav # all 4 stems into song_stems/ (Open-Unmix)
speech separate song.wav --engine htdemucs # Demucs v4 — higher quality
speech separate song.wav --engine htdemucs --htdemucs-precision int8 # smaller int8 bundle
speech separate song.wav --stems vocals # vocals only
speech separate song.wav --stems vocals,drums # subset
speech separate song.wav --output-dir /tmp/stems/ # custom output dir
speech separate song.wav --verbose # show timing
När man ska använda
...du behöver ett lätt, offline källseparationspass inuti en app eller pipeline på Apple Silicon. 8.9M-param per stam håller nedladdning och minne blygsamt. Magnitude-masking plus Wiener ger bra stjälkar på de flesta pop / rockinnehåll. För state-of-the-art vocal isolering på studiomaterial, byt till den buntade HTDemucs (Demucs v4) motor via --engine htdemucsOpen-Unmix förblir den lätta, skepps-i-your-app änden av avvägningen.