Проект предназначен для верификации диктора по произвольной фразе, используя признаки OpenSmile или извлеченные из спектрограмм дикторов с помощью сверточной нейронной сети.
Речевой корпус для верификации:
- 20 дикторов (10м+10ж);
- 40 аудиозаписей каждого диктора для обучения;
- 10 аудиозаписей каждого диктора для тестирования.
Речевой корпус для извлечения признаков из спектрограмм: - 20+30 дикторов;
- 40/-/10 + 30/10/10 для обучения/валидации/тестирования.
Проект выполнен на Python 3.6.8.
-
- ready_to_use/
- signs_csv/
- signs_htk/
- signs_matlab/
- signs_wav/
-
src/
Каталог для хранения признаков:
- в виде матрицы признаков, где строка - наблюдение, столбец - признак (
ready_to_use/
); - в виде файлов, где файл вида
1 (50).htk
хранит вектор признаков (из одного наблюдения) 1-ого диктора, извлеченный из 50-ой аудиозаписи (фразы).
Форматы для сохранения в виде матрицы: .npy
(для структуры данных - numpy array), .pickle
(для структуры данных - list).
Форматы для сохранения в виде отдельных файлов: .csv
, .matlab
, .htk
(csv и matlab удобны для просмотра; почти одинаковы, разница в еще одной строке заголовков).
Исходные аудиозаписи должны храниться в signs_wav/
PS: написать про отсутствующие файлы
Каталог для основных классов:
- Classification.py: для решения задачи верификации (используется нормализация, разделение данных на обучающую и тестовую выорки, проводится балансировка и перемешивание, в зависимости от выбранных параметров);
- DNN.py: сверточная нейронная сеть для решения задачи идентификации (также проводится нормализация, пермешивание; есть возможность использования генератора и работы со списком признаков - трехмерный, а не матрица, с разным количеством значений по оси времени);
- DNN_50.py: тоже самое, что и DNN.py только для 50, а не 20 дикторов и с другим разделением на обучающую, валидационную и тестовую выборки, другой алгоритм формирование меток принадлежности наблюдения диктору;
- ItemStacking.py: для реализации стекинга, а также некоторых экспериментов (при прогоне экспериментов с различными параметрами (нормализации, балансировки, перемешивания) стоит сначала собрать результаты нескольких классификаторов без балансировки и пермешивания, а потом уже на общей матрице применить);
- Model: собирается модель диктора (считывается матрица признаков из файла в
ready_to_use/
или из каждого файла (1 (1).htk
-1 (50).htk
к примеру, для 1 диктора) и собирается в одну матрицу, также формируется столбец меток); - Speaker.py: нужен для того, чтобы собирать информацию по каждому отдельному диктору.
Каталог для хранения файлов с константами:
- classifiers.py хранит параметры и настройки каждого классификатора;
- extensions.py хранит расширения для сохранения в файл признаков;
- metrics.py хранит переменные для дальнейшего вызова функций, рассчитывающих выбранную метрику;
- network_arch.py хранит функции архитектур для нейронной сети;
- paths.py содержит пути к нужным файлам и каталогам;
- scripts.py содержит параметры для сценария запуска программы (откуда брать признаки, какого они формата, какую функцию считывания использовать, есть ли уже сохраненные признаки в отдельном файле, список дикторов и т.д.);
- settings_for_generator.py содержит класс для расчета параметров нейронной сети, таких как количество эпох, итераций, размер batch_size, исходя из уже заданных параметров.
Каталог с файлами, реализующими эксперименты с:
- различным соотношением данных на обучение/тест;
- различным соотношением данных для балансировки;
- запуском доп функций, таких как нормализация, балансировка, перемешивание;
- классификацией с помощью разных классификаторов.
По умолчанию туда записываются логи от экспериментов, процесса обучения и тестирвоанияя нейронной сети.
Содержит каталоги для сохранения обученных моделей (для дальнейшей верификации), обученных сверточных нейронных сетей (для дальнейшей идентификации), графиков.
Содержит файлы для запуска следующих сценариев:
- извлечение признаков из сверточной нейронной сети (extract_features);
- использование извлеченных признаков из сверточной нейронной сети в качестве признаков для дальнейшей верификации;
- использование спектрограммы для обучение нейронной сети;
- запуск стекинга.
Содержит утилиты, для:
- визуализации;
- загрузки сохраненных моделей, сетей, признаков;
- препроцессинга данных (нормализация, балансировка, перемешивание, разделение данных на 2 группы);
- чтения признаков форматов
.csv
,.htk
,.matlab
; - чтения спектрограмм из аудиозаписей формата
wav
; - сохранения моделей, сетей, признаков, графиков;
- расчета метрик (EER, accuracy и сбалансированная accuracy на основе предсказанной и целевой столбцов меток).