Для деноизинга используется UNet-архитектура + в сети есть дополнительный выход, выполняющий классификацию. Схематично это можно изобразить так.
Получается, что модель тренируется одновременно и классифицировать чистые/грязные аудиодорожки, представленные в виде mel-спектрограмм, и восстанавливать чистую запись из грязной.
Докер-репозиторий лежит тут: egusev/audio-denoising
Чтобы запустить тренировку нужно запустить файл train.py из текущей директории
docker run --rm -it -v {YOUR_DIR}:/app -w /app denoising python train.py
Предсказания получить можно следующим образом:
docker run --rm -it -v {YOUR_DIR}:/app -w /app denoising python predict.py --mel-path {YOUR_PATH}
Ответом будет словарь:
{
'denoised': denoised,
'is_clean': is_clean
}
В denoised будет лежать очищенная звуковая дорожка оригинальной размерности, в class будет лежать 1, если дорожка считается чистой и 0, если шумы присутствуют.
-
Потренировать подольше (classic)
-
Ускорить инференс, разбив обученную на обе задачи одновременно сеть на две подсети - класссифицирующую и убирающую шум
-
Добавить признаки, зависящие от голоса человека, как сделали ребята в этой статье, но это зависит от условий использования модели в дальнейшем