음성 향상 — 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를 통한 short-time Fourier transform
인코더4개의 SepConv2d 레이어 + SqueezedGRU
ERB 디코더ERB 스케일 주파수 대역에 적용되는 sigmoid 마스크
DF 디코더5-탭 복소값 필터링 계수
iSTFT시간 영역 신호를 복원하기 위한 역 STFT

ERB 디코더는 Equivalent Rectangular Bandwidth (ERB) 스케일에서 gain 마스크를 추정하여 넓은 스펙트럼 셰이핑을 처리합니다. DF 디코더는 주파수 영역에서 학습된 필터를 직접 적용하여 미세한 디테일을 위한 5-탭 복소 필터링 계수를 예측합니다.

처리 파이프라인

  1. STFT — vDSP를 사용해 잡음 오디오를 시간-주파수 표현으로 분해
  2. ERB 특징 — STFT 빈을 ERB 스케일 주파수 대역으로 매핑
  3. 신경망 — 인코더가 Neural Engine에서 특징을 처리하고, ERB와 DF 디코더가 향상 파라미터를 예측
  4. ERB 마스킹 — sigmoid gain 마스크를 적용하여 스펙트럼 엔벨로프의 잡음 억제
  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)

AndroidSpeech Core(ONNX Runtime)를 통한 Linux 및 Windows에서도 사용할 수 있습니다.