Kaynak Ayrımı
Open-Unmix HQ, bir stereo müzik parçasını dört bağımsız stem'e böler — vocals, drums, bass ve other. Dört bağımsız BiLSTM modeli (her stem için bir tane) karışımın STFT'si üzerinde büyüklük maskeleri üretir; isteğe bağlı bir Wiener son-filtresi bunları uzlaştırır. MLX üzerinden Apple Silicon'da çalışır.
Nedir
- Parça başına 4 stem — vocals, drums, bass, other. Her biri 2 kanallı 44.1 kHz bir stem dosyasıdır.
- Büyüklük-maske modeli — her stem modeli, karışımın spektrogramına uygulanan negatif olmayan bir maske öngörür; faz karışımdan alınır.
- Wiener son-filtresi (isteğe bağlı) — 4 stem'in tutarlı biçimde karışıma toplanması için yumuşak-maske iyileştirmesi. ~0.5 dB SDR ekler.
- Küçük ayak izi — stem başına 8.9M parametre, 4 stem için toplam ~136 MB.
- Apache-2.0 — yukarı akış ağırlıkları MIT, CoreML/MLX dönüşümümüz Apache-2.0 altında.
Mimari
Dört bağımsız stem, her biri aynı ağın bir kopyası:
| Aşama | Şekil / işlem |
|---|---|
| STFT | 4096 noktalı FFT, 1024 hop, periyodik Hann penceresi, reflect-pad. Çerçeve başına 2049 frekans bini. |
| Girdi normalleştirme | 1487 bin'e kırp (≈16 kHz), eğitimden öğrenilmiş bin başına ortalama + ölçek uygula. |
| Encoder | Linear 2974 → 512 + BatchNorm + tanh. Girdi 2 kanal × 1487 bin. |
| BiLSTM | 3 katman, yön başına 256 hidden (etkin 512). Çerçeveler boyunca zamansal bağlamı yakalar. |
| Decoder | Encoder ve LSTM çıktılarının skip-concat'i (1024) → Linear 1024 → 512 + BN + ReLU → Linear 512 → 4098. |
| Çıktı denorm + maske | Karışım büyüklüğü ile eleman-bazında çarpım; faz karışımdan; iSTFT overlap-add. |
| Wiener (isteğe bağlı) | Dört stem tahmininin tümü üzerinde güç-oranı maskeleri. Stem'lerin karışıma toplanması için fazı iyileştirir. |
Model
| Bileşen | Değer |
|---|---|
| Parametre / stem | 8.9M |
| Toplam parametre (4 stem) | ~35.6M |
| Örnekleme hızı | 44.1 kHz stereo |
| Parça gecikmesi | Çevrimdışı (tam-parça STFT) |
| Ağırlıklar | aufklarer/OpenUnmix-HQ-MLX (safetensors, ~136 MB) |
| Yukarı akış | sigsep/open-unmix-pytorch (Stöter ve ark., JOSS 2019) |
Hızlı başlangıç — 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")
)
En iyi kalite için wiener: true (varsayılan) iletin. Yalnızca stem'lerin bir alt kümesini çıkarmak ve diğer modelleri atlamak için targets: [.vocals] iletin.
CLI
speech separate song.wav # all 4 stems into song_stems/
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
Ne zaman kullanılır
…Apple Silicon üzerinde bir uygulama veya pipeline içinde hafif, çevrimdışı bir kaynak ayrımı adımına ihtiyacınız olduğunda. Stem başına 8.9M parametre, indirme boyutunu ve bellek kullanımını mütevazı tutar. Büyüklük-maskeleme artı Wiener, çoğu pop/rock içerikte iyi stem'ler verir. Stüdyo malzemesinde son teknoloji vokal izolasyonu için daha büyük Demucs/MDX-Net sınıfı bir modele başvurursunuz; bu paket, pratik, uygulamanızla birlikte gönderilebilecek tarafı hedefler.