Mejora de voz
Elimina el ruido de fondo en grabaciones de voz usando DeepFilterNet3. El modelo se ejecuta en el Neural Engine vía CoreML para una inferencia eficiente, mientras que todo el procesamiento de señal (STFT, filterbank ERB, deep filtering) se ejecuta en la CPU vía Accelerate/vDSP.
Arquitectura
DeepFilterNet3 usa una arquitectura de doble decodificador que separa la mejora de la envolvente espectral de la recuperación de detalle espectral fino.
| Etapa | Detalles |
|---|---|
| STFT | Short-time Fourier transform vía vDSP |
| Encoder | 4 capas SepConv2d + SqueezedGRU |
| ERB Decoder | Máscara sigmoide aplicada a bandas de frecuencia en escala ERB |
| DF Decoder | Coeficientes de filtrado complejos de 5 taps |
| iSTFT | STFT inversa para reconstruir la señal en el dominio del tiempo |
El ERB Decoder estima una máscara de ganancia en la escala Equivalent Rectangular Bandwidth (ERB), gestionando la conformación espectral amplia. El DF Decoder predice coeficientes de filtrado complejos de 5 taps para el detalle fino, aplicando filtros aprendidos directamente en el dominio de la frecuencia.
Pipeline de procesamiento
- STFT — Descompone el audio ruidoso en una representación tiempo-frecuencia usando vDSP
- Características ERB — Mapea los bins de STFT a bandas de frecuencia en escala ERB
- Red neuronal — El encoder procesa las características en el Neural Engine; los decoders ERB y DF predicen los parámetros de mejora
- Enmascarado ERB — Aplica la máscara de ganancia sigmoide para suprimir el ruido en la envolvente espectral
- Deep filtering — Aplica los coeficientes complejos de 5 taps para la recuperación del detalle espectral fino
- iSTFT — Reconstruye el audio limpio a partir del espectro mejorado
Variantes del modelo
| Variante | Tamaño | Precisión |
|---|---|---|
| INT8 (por defecto) | ~2,2 MB | Cuantizada a 8 bits |
| FP32 | ~4,3 MB | Precisión completa |
El modelo tiene aproximadamente 2,1M parámetros. La variante INT8 se usa por defecto y proporciona calidad equivalente con la mitad del tamaño.
Uso desde la CLI
# Eliminar ruido del audio (salida a _denoised.wav)
.build/release/audio denoise noisy.wav
# Especificar archivo de salida
.build/release/audio denoise noisy.wav -o clean.wav
# Usar variante FP32 del modelo
.build/release/audio denoise noisy.wav --model fp32
Opciones
| Opción | Descripción |
|---|---|
--output, -o | Ruta del archivo de salida (por defecto <input>_denoised.wav) |
--model | Variante del modelo: int8 (por defecto) o fp32 |
DeepFilterNet3 se ejecuta en el Neural Engine vía CoreML, no en la GPU vía MLX. Esto significa que funciona eficientemente incluso mientras otros modelos basados en GPU (ASR, TTS) están en ejecución. No se requiere compilación de metallib.
Descargas de modelos
| Modelo | Tamaño | HuggingFace |
|---|---|---|
| DeepFilterNet3 (CoreML FP16) | ~4,2 MB | aufklarer/DeepFilterNet3-CoreML |
Combinación con otros modelos
La mejora de voz es particularmente útil como paso de preprocesamiento antes de otros modelos:
- Antes de la transcripción — Elimina ruido del audio antes de ejecutar ASR para mejorar la tasa de error de palabras en grabaciones con ruido
- Antes del embedding de hablante — Un audio más limpio produce embeddings de hablante más fiables
- Antes de la diarización — La eliminación de ruido puede mejorar la precisión de la segmentación
# Eliminar ruido y luego transcribir
.build/release/audio denoise noisy.wav -o clean.wav
.build/release/audio transcribe clean.wav
API Swift
import SpeechEnhancement
let model = try await DeepFilterNet3.loadFromHub()
let cleanAudio = try await model.denoise(audioFile: "noisy.wav")
try cleanAudio.write(to: "clean.wav")
También disponible en Android y Linux vía ONNX Runtime.