음성 향상
DeepFilterNet3를 사용하여 음성 녹음에서 배경 잡음을 제거합니다. 모델은 효율적인 추론을 위해 CoreML을 통해 Neural Engine에서 실행되고, 모든 신호 처리(STFT, ERB 필터뱅크, 딥 필터링)는 Accelerate/vDSP를 통해 CPU에서 실행됩니다.
아키텍처
DeepFilterNet3는 스펙트럼 엔벨로프 향상과 미세한 스펙트럼 디테일 복원을 분리하는 이중 디코더 아키텍처를 사용합니다.
| 단계 | 세부 내용 |
|---|---|
| STFT | vDSP를 통한 short-time Fourier transform |
| 인코더 | 4개의 SepConv2d 레이어 + SqueezedGRU |
| ERB 디코더 | ERB 스케일 주파수 대역에 적용되는 sigmoid 마스크 |
| DF 디코더 | 5-탭 복소값 필터링 계수 |
| iSTFT | 시간 영역 신호를 복원하기 위한 역 STFT |
ERB 디코더는 Equivalent Rectangular Bandwidth (ERB) 스케일에서 gain 마스크를 추정하여 넓은 스펙트럼 셰이핑을 처리합니다. DF 디코더는 주파수 영역에서 학습된 필터를 직접 적용하여 미세한 디테일을 위한 5-탭 복소 필터링 계수를 예측합니다.
처리 파이프라인
- STFT — vDSP를 사용해 잡음 오디오를 시간-주파수 표현으로 분해
- ERB 특징 — STFT 빈을 ERB 스케일 주파수 대역으로 매핑
- 신경망 — 인코더가 Neural Engine에서 특징을 처리하고, ERB와 DF 디코더가 향상 파라미터를 예측
- ERB 마스킹 — sigmoid gain 마스크를 적용하여 스펙트럼 엔벨로프의 잡음 억제
- 딥 필터링 — 미세한 스펙트럼 디테일 복원을 위해 5-탭 복소 계수 적용
- iSTFT — 향상된 스펙트럼에서 클린 오디오 복원
모델 변형
| 변형 | 크기 | 정밀도 |
|---|---|---|
| INT8 (기본) | 약 2.2 MB | 8비트 양자화 |
| FP32 | 약 4.3 MB | 전체 정밀도 |
이 모델은 약 2.1M 파라미터를 가집니다. INT8 변형이 기본으로 사용되며 절반 크기로 동등한 품질을 제공합니다.
CLI 사용법
# 오디오 노이즈 제거 (출력은 <filename>_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 MB | aufklarer/DeepFilterNet3-CoreML |
다른 모델과 결합
음성 향상은 다른 모델 이전의 전처리 단계로 특히 유용합니다:
- 전사 전에 — ASR을 실행하기 전에 오디오 노이즈를 제거하여 잡음이 있는 녹음의 단어 오류율 개선
- 화자 임베딩 전에 — 더 깨끗한 오디오는 더 신뢰할 수 있는 화자 임베딩을 생성
- 화자 분리 전에 — 노이즈 제거는 분할 정확도를 향상
# 노이즈 제거 후 전사
.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")
ONNX Runtime을 통한 Android 및 Linux에서도 사용할 수 있습니다.