Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
snakers4
GitHub Repository: snakers4/silero-vad
Path: blob/master/tuning/README.md
1171 views

Тюнинг 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} }