音声強調

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

アーキテクチャ

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 — 強調されたスペクトルからクリーンな音声を再構築

モデルバリアント

バリアントサイズ精度
INT8 (デフォルト)約2.2 MB8ビット量子化
FP32約4.3 MB完全精度

モデルは約2.1Mのパラメーターを持ちます。INT8バリアントはデフォルトで使用され、半分のサイズで同等の品質を提供します。

CLIの使用法

# 音声をノイズ除去(出力は _denoised.wav)
.build/release/audio denoise noisy.wav

# 出力ファイルを指定
.build/release/audio denoise noisy.wav -o clean.wav

# FP32モデルバリアントを使用
.build/release/audio denoise noisy.wav --model fp32

オプション

オプション説明
--output, -o出力ファイルパス(デフォルトは<input>_denoised.wav
--modelモデルバリアント:int8(デフォルト)またはfp32
重要

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

モデルダウンロード

モデルサイズHuggingFace
DeepFilterNet3 (CoreML FP16)約4.2 MBaufklarer/DeepFilterNet3-CoreML

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

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

# ノイズ除去してから文字起こし
.build/release/audio denoise noisy.wav -o clean.wav
.build/release/audio transcribe clean.wav

Swift API

import SpeechEnhancement

let model = try await DeepFilterNet3.loadFromHub()
let cleanAudio = try await model.denoise(audioFile: "noisy.wav")
try cleanAudio.write(to: "clean.wav")

Android と Linux (ONNX Runtime経由)でも利用可能です。