音声強調 — DeepFilterNet3

DeepFilterNet3を使用して音声録音から背景ノイズを除去します。モデルは効率的な推論のためにCoreML経由でNeural Engine上で実行され、すべての信号処理(STFT、ERBフィルターバンク、ディープフィルタリング)はAccelerate/vDSP経由でCPU上で実行されます。

公式 DF3 との同等性

DSP 全体を libdf に合わせ、解析スケール 1/960、正規化 alpha 0.99、深層フィルター端部のゼロパディング、NumPy の C/Fortran 行列順序を正しく扱います。固定した VoiceBank-DEMAND 20クリップでは、Swift の PESQ、STOI、SI-SDR は 3.097、0.964、19.12 dB、公式 Python DF3 は 3.029、0.962、18.31 dB でした。

処理前/後サンプル

ノイズ入り音声を DeepFilterNet3 で処理し、CoreML デノイザをローカルで動かす前に効果を確認できます。

ノイズ入り入力MP3, 48 kHz
DeepFilterNet3 出力MP3, 48 kHz

アーキテクチャ

DeepFilterNet3は、スペクトルエンベロープ強調ときめ細かいスペクトル詳細回復を分離するデュアルデコーダーアーキテクチャを使用します。

ステージ詳細
STFTvDSP経由の短時間フーリエ変換
エンコーダー4つのSepConv2dレイヤー + SqueezedGRU
ERBデコーダーERBスケール周波数バンドに適用されるシグモイドマスク
DFデコーダー5タップ複素フィルタリング係数
iSTFT時間領域信号を再構築する逆STFT

ERBデコーダーは、Equivalent Rectangular Bandwidth (ERB)スケールでゲインマスクを推定し、広範なスペクトル整形を処理します。DFデコーダーはきめ細かい詳細のための5タップ複素フィルタリング係数を予測し、周波数領域で学習されたフィルターを直接適用します。

処理パイプライン

  1. STFT — vDSPを使用してノイズのある音声を時間周波数表現に分解
  2. ERB特徴量 — STFTビンをERBスケール周波数バンドにマッピング
  3. ニューラルネットワーク — エンコーダーがNeural Engine上で特徴量を処理。ERBとDFのデコーダーが強調パラメーターを予測
  4. ERBマスキング — シグモイドゲインマスクを適用してスペクトルエンベロープ内のノイズを抑制
  5. ディープフィルタリング — 5タップ複素係数を適用してきめ細かいスペクトル詳細を回復
  6. iSTFT — 強調されたスペクトルからクリーンな音声を再構築

モデル

バリアントサイズ精度
デフォルト約2.2 MB8ビットパレット化重み、FP16演算

CLIの使用法

# Denoise audio (output to _denoised.wav)
.build/release/speech denoise noisy.wav

# Specify output file
.build/release/speech denoise noisy.wav -o clean.wav

# Use another compatible HuggingFace repository
.build/release/speech denoise noisy.wav --model owner/DeepFilterNet3-CoreML

オプション

オプション説明
--output, -o出力ファイルパス(デフォルトは<input>_denoised.wav
--model互換性のあるHuggingFaceモデルリポジトリID(デフォルト:aufklarer/DeepFilterNet3-CoreML
重要

DeepFilterNet3は、MLX経由のGPUではなく、CoreML経由でNeural Engine上で実行されます。つまり、他のGPUベースのモデル(ASR、TTS)が実行されている間でも効率的に動作します。metallibコンパイルは不要です。

モデルダウンロード

モデルサイズHuggingFace
DeepFilterNet3(CoreML、8ビットパレット化)約2.2 MBaufklarer/DeepFilterNet3-CoreML

他のモデルとの組み合わせ

音声強調は、他のモデルの前処理ステップとして特に有用です:

# Denoise then transcribe
.build/release/speech denoise noisy.wav -o clean.wav
.build/release/speech transcribe clean.wav

Swift API

import SpeechEnhancement

let model = try await SpeechEnhancer.fromPretrained()
let cleanAudio = try model.enhance(audio: noisySamples, sampleRate: 48000)

Android に加え、Speech Core(ONNX Runtime)経由で Linux と Windows でも利用できます。