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.

Vad det är

Arkitektur

Fyra oberoende stjälkar, varje kopia av samma nätverk:

StegShape/operation
STFT4096-punkt FFT, 1024-hop, periodiskt Hann fönster, reflektera-pad. 2049 frekvens bin per ram.
Input normaliserarGröda till 1487 bin (≈16 kHz), tillämpa lärd per bin menar + skala från träning.
EncoderLinjär 2974 → 512 + BatchNorm + tanh. Input är 2 kanaler × 1487 bin.
BiLSTM3 lager, 256 dolda per riktning (512 effektiva). fångar temporal kontext över ramar.
DecoderSkip-concat av kodare och LSTM-utgångar (1024) → Linjär 1024 → 512 + BN + ReLU → Linier 512 → 4098.
Utgångsdenorm + maskElement-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

KomponentVärde
Parametrar / stam8,9M
Parametrar totalt (4 stammar)~35.6M
Provfrekvens44.1 kHz stereo
Chunk latensOffline (fullspårig STFT)
Vikteraufklarer/OpenUnmix-HQ-MLX (safetensorer, ~136 MB)
Upstreamsigsep/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).

KomponentVärde
Parametrar168M (4 × 42M finjusterade undermodeller)
Provfrekvens44.1 kHz stereo
Fönster7,8 s segment, 25% överlappning, triangulär korsfaden
Vikteraufklarer/HTDemucs-FT-MLX (fp16, ~320 MB)
Upstreamfacebookresearch/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

Open-Unmix passar när...

...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.