音声強調 — DeepFilterNet3
DeepFilterNet3を使用して音声録音から背景ノイズを除去します。モデルは効率的な推論のためにCoreML経由でNeural Engine上で実行され、すべての信号処理(STFT、ERBフィルターバンク、ディープフィルタリング)はAccelerate/vDSP経由でCPU上で実行されます。
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 デノイザをローカルで動かす前に効果を確認できます。
アーキテクチャ
DeepFilterNet3は、スペクトルエンベロープ強調ときめ細かいスペクトル詳細回復を分離するデュアルデコーダーアーキテクチャを使用します。
| ステージ | 詳細 |
|---|---|
| STFT | vDSP経由の短時間フーリエ変換 |
| エンコーダー | 4つのSepConv2dレイヤー + SqueezedGRU |
| ERBデコーダー | ERBスケール周波数バンドに適用されるシグモイドマスク |
| DFデコーダー | 5タップ複素フィルタリング係数 |
| iSTFT | 時間領域信号を再構築する逆STFT |
ERBデコーダーは、Equivalent Rectangular Bandwidth (ERB)スケールでゲインマスクを推定し、広範なスペクトル整形を処理します。DFデコーダーはきめ細かい詳細のための5タップ複素フィルタリング係数を予測し、周波数領域で学習されたフィルターを直接適用します。
処理パイプライン
- STFT — vDSPを使用してノイズのある音声を時間周波数表現に分解
- ERB特徴量 — STFTビンをERBスケール周波数バンドにマッピング
- ニューラルネットワーク — エンコーダーがNeural Engine上で特徴量を処理。ERBとDFのデコーダーが強調パラメーターを予測
- ERBマスキング — シグモイドゲインマスクを適用してスペクトルエンベロープ内のノイズを抑制
- ディープフィルタリング — 5タップ複素係数を適用してきめ細かいスペクトル詳細を回復
- iSTFT — 強調されたスペクトルからクリーンな音声を再構築
モデル
| バリアント | サイズ | 精度 |
|---|---|---|
| デフォルト | 約2.2 MB | 8ビットパレット化重み、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 MB | aufklarer/DeepFilterNet3-CoreML |
他のモデルとの組み合わせ
音声強調は、他のモデルの前処理ステップとして特に有用です:
- 文字起こしの前 — ASRを実行する前に音声をノイズ除去することで、ノイズの多い録音での単語誤り率を改善
- 話者embeddingの前 — クリーンな音声はより信頼性の高い話者embeddingを生成
- ダイアライゼーションの前 — ノイズ除去はセグメンテーション精度を向上させる可能性がある
# 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 でも利用できます。