Улучшение речи
Удаление фонового шума из речевых записей с помощью DeepFilterNet3. Модель работает на Neural Engine через CoreML для эффективного инференса, а вся обработка сигналов (STFT, ERB-фильтрбанк, deep filtering) выполняется на CPU через Accelerate/vDSP.
Архитектура
DeepFilterNet3 использует архитектуру с двумя декодерами, разделяющую улучшение спектральной огибающей от восстановления мелких спектральных деталей.
| Этап | Детали |
|---|---|
| STFT | Кратковременное преобразование Фурье через vDSP |
| Encoder | 4 слоя SepConv2d + SqueezedGRU |
| ERB Decoder | Sigmoid-маска, применяемая к частотным полосам ERB-шкалы |
| DF Decoder | 5-отводные комплексные коэффициенты фильтрации |
| iSTFT | Обратное STFT для восстановления сигнала во временной области |
ERB Decoder оценивает маску усиления на шкале эквивалентной прямоугольной полосы пропускания (ERB), выполняя широкое спектральное формирование. DF Decoder предсказывает 5-отводные комплексные коэффициенты фильтрации для тонкой детализации, применяя обученные фильтры непосредственно в частотной области.
Пайплайн обработки
- STFT — Разложить зашумлённое аудио во время-частотное представление через vDSP
- ERB-признаки — Отобразить STFT-корзины на полосы частот ERB-шкалы
- Нейросеть — Encoder обрабатывает признаки на Neural Engine; ERB- и DF-декодеры предсказывают параметры улучшения
- ERB-маскирование — Применить sigmoid-маску усиления для подавления шума в спектральной огибающей
- Deep Filtering — Применить 5-отводные комплексные коэффициенты для восстановления мелких спектральных деталей
- iSTFT — Восстановить чистое аудио из улучшенного спектра
Варианты модели
| Вариант | Размер | Точность |
|---|---|---|
| INT8 (по умолчанию) | ~2.2 МБ | 8-бит квантизация |
| FP32 | ~4.3 МБ | Полная точность |
В модели примерно 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 работает на Neural Engine через CoreML, а не на GPU через MLX. Это означает, что он эффективно работает даже когда запущены другие GPU-модели (ASR, TTS). Компиляция metallib не требуется.
Загрузка моделей
| Модель | Размер | HuggingFace |
|---|---|---|
| DeepFilterNet3 (CoreML FP16) | ~4.2 МБ | aufklarer/DeepFilterNet3-CoreML |
Сочетание с другими моделями
Улучшение речи особенно полезно как шаг предобработки перед другими моделями:
- Перед транскрипцией — Удалите шум перед ASR, чтобы улучшить word error rate на зашумлённых записях
- Перед эмбеддингом спикера — Более чистое аудио даёт более надёжные эмбеддинги спикеров
- Перед диаризацией — Удаление шума может улучшить точность сегментации
# Удалить шум, затем транскрибировать
.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.