mirror of
https://github.com/snakers4/silero-vad.git
synced 2026-02-04 09:29:22 +08:00
75 lines
7.2 KiB
Markdown
75 lines
7.2 KiB
Markdown
# Тюнинг Silero-VAD модели
|
||
|
||
> Код тюнинга создан при поддержке Фонда содействия инновациям в рамках федерального проекта «Искусственный
|
||
интеллект» национальной программы «Цифровая экономика Российской Федерации».
|
||
|
||
Тюнинг используется для улучшения качества детекции речи Silero-VAD модели на кастомных данных.
|
||
|
||
## Зависимости
|
||
Следующие зависимости используются при тюнинге VAD модели:
|
||
- `torchaudio>=0.12.0`
|
||
- `omegaconf>=2.3.0`
|
||
- `sklearn>=1.2.0`
|
||
- `torch>=1.12.0`
|
||
- `pandas>=2.2.2`
|
||
- `tqdm`
|
||
|
||
## Подготовка данных
|
||
|
||
Датафреймы для тюнинга должны быть подготовлены и сохранены в формате `.feather`. Следующие колонки в `.feather` файлах тренировки и валидации являются обязательными:
|
||
- **audio_path** - абсолютный путь до аудиофайла в дисковой системе. Аудиофайлы должны представлять собой `PCM` данные, предпочтительно в форматах `.wav` или `.opus` (иные популярные форматы аудио тоже поддерживаются). Для ускорения темпа дообучения рекомендуется предварительно выполнить ресемплинг аудиофайлов (изменить частоту дискретизации) до 16000 Гц;
|
||
- **speech_ts** - разметка для соответствующего аудиофайла. Список, состоящий из словарей формата `{'start': START_SEC, 'end': 'END_SEC'}`, где `START_SEC` и `END_SEC` - время начало и конца речевого отрезка в секундах соответственно. Для качественного дообучения рекомендуется использовать разметку с точностью до 30 миллисекунд.
|
||
|
||
Чем больше данных используется на этапе дообучения, тем эффективнее показывает себя адаптированная модель на целевом домене. Длина аудио не ограничена, т.к. каждое аудио будет обрезано до `max_train_length_sec` секунд перед подачей в нейросеть. Длинные аудио лучше предварительно порезать на кусочки длины `max_train_length_sec`.
|
||
|
||
Пример `.feather` датафрейма можно посмотреть в файле `example_dataframe.feather`
|
||
|
||
## Файл конфигурации `config.yml`
|
||
|
||
Файл конфигурации `config.yml` содержит пути до обучающей и валидационной выборки, а также параметры дообучения:
|
||
- `train_dataset_path` - абсолютный путь до тренировочного датафрейма в формате `.feather`. Должен содержать колонки `audio_path` и `speech_ts`, описанные в пункте "Подготовка данных". Пример устройства датафрейма можно посмотреть в `example_dataframe.feather`;
|
||
- `val_dataset_path` - абсолютный путь до валидационного датафрейма в формате `.feather`. Должен содержать колонки `audio_path` и `speech_ts`, описанные в пункте "Подготовка данных". Пример устройства датафрейма можно посмотреть в `example_dataframe.feather`;
|
||
- `jit_model_path` - абсолютный путь до Silero-VAD модели в формате `.jit`. Если оставить это поле пустым, то модель будет загружена из репозитория в зависимости от значения поля `use_torchhub`
|
||
- `use_torchhub` - Если `True`, то модель для дообучения будет загружена с помощью torch.hub. Если `False`, то модель для дообучения будет загружена с помощью библиотеки silero-vad (необходимо заранее установить командой `pip install silero-vad`);
|
||
- `tune_8k` - данный параметр отвечает, какую голову Silero-VAD дообучать. Если `True`, дообучаться будет голова с 8000 Гц частотой дискретизации, иначе с 16000 Гц;
|
||
- `model_save_path` - путь сохранения добученной модели;
|
||
- `noise_loss` - коэффициент лосса, применяемый для неречевых окон аудио;
|
||
- `max_train_length_sec` - максимальная длина аудио в секундах на этапе дообучения. Более длительные аудио будут обрезаны до этого показателя;
|
||
- `aug_prob` - вероятность применения аугментаций к аудиофайлу на этапе дообучения;
|
||
- `learning_rate` - темп дообучения;
|
||
- `batch_size` - размер батча при дообучении и валидации;
|
||
- `num_workers` - количество потоков, используемых для загрузки данных;
|
||
- `num_epochs` - количество эпох дообучения. За одну эпоху прогоняются все тренировочные данные;
|
||
- `device` - `cpu` или `cuda`.
|
||
|
||
## Дообучение
|
||
|
||
Дообучение запускается командой
|
||
|
||
`python tune.py`
|
||
|
||
Длится в течение `num_epochs`, лучший чекпоинт по показателю ROC-AUC на валидационной выборке будет сохранен в `model_save_path` в формате jit.
|
||
|
||
## Поиск пороговых значений
|
||
|
||
Порог на вход и порог на выход можно подобрать, используя команду
|
||
|
||
`python search_thresholds`
|
||
|
||
Данный скрипт использует файл конфигурации, описанный выше. Указанная в конфигурации модель будет использована для поиска оптимальных порогов на валидационном датасете.
|
||
|
||
## Цитирование
|
||
|
||
```
|
||
@misc{Silero VAD,
|
||
author = {Silero Team},
|
||
title = {Silero VAD: pre-trained enterprise-grade Voice Activity Detector (VAD), Number Detector and Language Classifier},
|
||
year = {2024},
|
||
publisher = {GitHub},
|
||
journal = {GitHub repository},
|
||
howpublished = {\url{https://github.com/snakers4/silero-vad}},
|
||
commit = {insert_some_commit_here},
|
||
email = {hello@silero.ai}
|
||
}
|
||
```
|