Примечание : это версия разработки. Если вам нужна стабильная версия, пожалуйста, проверьте V0.1.1.
Цель хранилища состоит в том, чтобы обеспечить реализацию вокадера Wavenet, который может генерировать высококачественные образцы необработанных речевых речев, обусловленных лингвистическими или акустическими особенностями.
Образцы аудио доступны по адресу https://r9y9.github.io/wavenet_vocoder/.
Записная книжка, которая должна быть выполнена на https://colab.research.google.com доступен:
Примечание . Это сама по себе модель текста в речь (TTS). С предварительно обученной моделью, предоставленной здесь, вы можете синтезировать форму волны с учетом спектрограммы MEL , а не сырого текста. Вам понадобится модель прогнозирования MEL-спектрограммы (например, Tacotron2), чтобы использовать предварительно обученные модели для TTS.
Примечание . Что касается предварительной модели для LJSPEECH, модель была точно настроена несколько раз и обучалась для более чем 1000 тысяч шагов. Пожалуйста, обратитесь к вопросам ( #1, #75, #45), чтобы узнать, как была обучена модель.
| Модельный URL | Данные | Hyper Params URL | Git commit | Шаги |
|---|---|---|---|---|
| связь | LJSPEECH | связь | 2092a64 | 1000K ~ шаги |
| связь | CMU Арктика | связь | B1A1076 | 740K шагов |
Чтобы использовать предварительно обученные модели, сначала познакомитесь с конкретным коммитом GIT, отмеченным выше. т.е.
git checkout ${commit_hash}
А затем следует за разделом «Синтезировать из контрольной точки» в ReadMe. Обратите внимание, что старая версия Synthesis.py не может принять параметр --preset=<json> , и вам, возможно, придется изменить hparams.py в соответствии с предустановленным (JSON) файлом.
Вы можете попробовать, например:
# Assuming you have downloaded LJSpeech-1.1 at ~/data/LJSpeech-1.1
# pretrained model (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# hparams (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech
--preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
--conditional=./data/ljspeech/ljspeech-mel-00001.npy
20180510_mixture_lj_checkpoint_step000320000_ema.pth
generated
Вы можете найти сгенерированный файл WAV в generated каталоге. Интересно, как это работает? Тогда посмотрите на код :)
Репозиторий состоит из 1) библиотеки Pytorch, 2) инструментов командной строки и 3) рецептов в стиле ESPNet. Первый - это библиотека Pytorch для обеспечения функциональности Wavanet. Второй - это набор инструментов для запуска обучения/вывода Wavenet, обработки данных и т. Д. Пожалуйста, посмотрите на них в зависимости от вашей цели. Если вы хотите построить свой Wavenet в своем наборе данных (я думаю, это наиболее вероятный случай), рецепт - это путь для вас.
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
Если вам нужна только часть библиотеки, вы можете установить ее из PYPI:
pip install wavenet_vocoder
Репозиторий предоставляет рецепты в стиле Кальди, чтобы сделать эксперименты воспроизводимыми и легко управляемыми. Доступные рецепты следующие:
mulaw256 : Wavenet, который использует категорическое распределение вывода. Вход-8-битная квантовая форма волны Mulaw.mol : смесь логистики (моль) волновой. Вход-16-битный сырой аудио.gaussian : одинокий гауссовый волновый (он же учитель Wavenet of Clarinet). Вход-16-битный сырой аудио. Весь рецепт имеет run.sh , который определяет все шаги для выполнения обучения/вывода Wavenet, включая предварительную обработку данных. Пожалуйста, смотрите Run.sh в каталоге EGS для деталей.
Примечание : Глобальная кондиционирование для многопрофильных волновых волн не поддерживается в приведенных выше рецептах (хотя и не должно быть трудно реализовать). Пожалуйста, проверьте v0.1.12 для этой функции, или, если вам действительно нужна функция, поднимите проблему.
Рецепты предназначены для того, чтобы быть общими, чтобы можно было использовать их для любого набора данных. Чтобы применить рецепты к своему собственному набору данных, вам нужно поместить все файлы WAV в один плоский каталог. т.е.
> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav
Вот и все! Последним шагом является изменение db_root в run.sh или дать db_root в качестве командной строки Argment для run.sh.
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
Рецепт обычно состоит из нескольких шагов. Настоятельно рекомендуется запустить рецепт шаг за шагом, чтобы понять, как он работает в первый раз. Для этого укажите stage и stop_stage следующим образом:
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
В типичных ситуациях вам необходимо указать устройства CUDA, объясняющие, особенно для этапа обучения.
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
Инструменты командной строки записываются с DoCopt. Посмотрите на каждый Docstring для основного использования.
Сбросьте гиперпараметры в файл JSON.
Использование:
python tojson.py --hparams="parameters you want to override" <output_json_path>
Использование:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
ПРИМЕЧАНИЕ. Для обучения в нескольких графических процессорах у вас лучше убедиться, что batch_size % num_gpu == 0
Использование:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
Учитывая Directoy, который содержит локальные функции кондиционирования, синтезируйте для них формы волны.
Использование:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
Параметры:
--num-utterances=<N> : количество высказываний, которые должны быть сгенерированы. Если не указано, генерируйте все высказывания. Это полезно для отладки. Примечание : сейчас это, вероятно, не работает. Пожалуйста, используйте evaluate.py вместо этого.
Синтезизация формы сигнала дает функцию кондиционирования.
Использование:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
Важные варианты:
--conditional=<path> : (требуется для условного волны) Путь локальных условных признаков (.npy). Если это указано, количество временных шагов для генерации определяется размером условной функции.Примечание : сейчас это, вероятно, не работает. Пожалуйста, проверьте v0.1.1 для рабочей версии.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
Вы должны отключить глобальную и локальную кондиционирование, установив gin_channels и cin_channels отрицательных значений.
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
Примечание : сейчас это, вероятно, не работает. Пожалуйста, проверьте v0.1.1 для рабочей версии.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
Журналы сброшены в каталог ./log по умолчанию. Вы можете отслеживать журналы с помощью Tensorboard:
tensorboard --logdir=log
Большое спасибо!! Если вы найдете новый, пожалуйста, отправьте PR.