
Реализация Pytorch модели синтеза текста в речь основы на основе резолюционных сетей:
Образцы аудио доступны по адресу https://r9y9.github.io/deepvoice3_pytorch/.
Записные книжки, которые должны быть выполнены на https://colab.research.google.com доступны:
Примечание : предварительно подготовленные модели не совместимы с мастером. Чтобы быть обновленным в ближайшее время.
| URL | Модель | Данные | Гипер -параметры | Git commit | Шаги |
|---|---|---|---|---|---|
| связь | DeepVoice3 | LJSPEECH | связь | ABF0A21 | 640K |
| связь | Ньянко | LJSPEECH | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585K |
| связь | Multi-Speaker DeepVoice3 | VCTK | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300K + 300K |
Чтобы использовать предварительно обученные модели, настоятельно рекомендуется, чтобы вы находились на конкретном коммите GIT, отмеченном выше. т.е.
git checkout ${commit_hash}
Затем следуйте разделу «Синтезировать с контрольной точки» в чтении конкретного коммита GIT. Пожалуйста, обратите внимание, что последняя версия репозитория разработки может не работать.
Вы можете попробовать, например:
# pretrained model (20180505_deepvoice3_checkpoint_step000640000.pth)
# hparams (20180505_deepvoice3_ljspeech.json)
git checkout 4357976
python synthesis.py --preset=20180505_deepvoice3_ljspeech.json
20180505_deepvoice3_checkpoint_step000640000.pth
sentences.txt
output_dir
hparams.py для деталей.builder указывает, какую модель вы хотите использовать. deepvoice3 , deepvoice3_multispeaker [1] и nyanko [2] обновлены.Пожалуйста, сначала установите пакеты, перечисленные выше, а затем
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
Существует много гипер -параметров, которые необходимо перевернуть, зависит от того, над какой моделью и данных вы работаете. Для типичных наборов данных и моделей в репозитории представлены параметры, которые, как известно, хорошо работают ( предварительно ). Смотрите Справочник presets для деталей. Обратите внимание, что
preprocess.pytrain.pysynthesis.py Принимает --preset=<json> Необязательный параметр, который указывает, где загружать предустановленные параметры. Если вы собираетесь использовать предустановленные параметры, то вы должны использовать одинаковую --preset=<json> в течение предварительной обработки, обучения и оценки. например,
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
вместо
python preprocess.py ljspeech ~/data/LJSpeech-1.0
# warning! this may use different hyper parameters used at preprocessing stage
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
Использование:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
Поддерживается ${dataset_name} s:
ljspeech (en, один динамик)vctk (en, мультигада)jsut (JP, одиночный динамик)nikl_m (ko, мульти-динамик)nikl_s (ko, один динамик) Предполагая, что вы используете предустановленные параметры, которые, как известно, хорошо работают для набора данных LJSPEECH/DeepVoice3 и имеете данные в ~/data/LJSpeech-1.0 , вы можете предварительно обработать данные с помощью:
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
Когда это будет сделано, вы увидите извлеченные функции (мель-спектрограммы и линейные спектрограммы) в ./data/ljspeech .
В настоящее время поддерживается создание собственного набора данных с метаданными в формате JSON (совместимый с CarpedM20/Multi-Speaker-Tacotron-Tensorflow). Использование:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
Возможно, вам потребуется изменить ранее существовавший предварительный файл JSON, особенно n_speakers . Для английского Multispeaker начните с presets/deepvoice3_vctk.json .
Предполагая, что у вас есть набор данных A (динамик a) и набор данных B (динамик B), каждый из которых описан в файле метаданных JSON ./datasets/datasetA/alignment.json и ./datasets/datasetB/alignment.json , тогда вы можете предотвратить данные:
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
Некоторый набор данных, особенно автоматически сгенерированный набор данных, может включать в себя длинное молчание и нежелательные звуки ведущих/следственных звуков, подрывая модель SEQ2SEQ уровня ChAR2SEQ. (например, VCTK, хотя это покрыто vctk_preprocess)
Чтобы справиться с проблемой, gentle_web_align.py будет
gentle_web_align.py использует Gentle, инструмент выравнивания речевого текста на основе Калди. Это обращается к нежному приложению, обеспечиваемому веб-сервисным обслуживанием, выравнивает заданные звуковые сегменты с транскриптами и преобразует результат в файлы метки в стиле HTK, которые будут обрабатываться в preprocess.py . Gentle можно запустить в Linux/Mac/Windows (через Docker).
Предварительные результаты показывают, что, хотя метод на основе HTK/Festival/Merlin в vctk_preprocess/prepare_vctk_labels.py работает лучше на VCTK, Gentle более стабилен с аудиоклипами с окружающим шумом. (например, выдержки из фильмов)
Использование: (при условии, что нежный работает по адресу localhost:8567 (по умолчанию, когда не указано))
datasetA/wavs , а транскрипты находятся в datasetA/txts ) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav и datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
После того, как у вас есть выравнивание фонем для каждого высказывания, вы можете извлечь функции, используя preprocess.py
Использование:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
Предположим, вы создаете модель в стиле DeepVoice3, используя набор данных LJSPEECH, затем вы можете обучить свою модель с помощью:
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
Контрольные точки модели (.pth) и выравнивания (.png) сохраняются в каталоге ./checkpoints на 10000 шагов по умолчанию.
Зайдите на это заранее и следуйте приведенным ниже командам.
python preprocess.py nikl_s ${your_nikl_root_path} data/nikl_s --preset=presets/deepvoice3_nikls.json
python train.py --data-root=./data/nikl_s --checkpoint-dir checkpoint_nikl_s --preset=presets/deepvoice3_nikls.json
Журналы сброшены в каталог ./log по умолчанию. Вы можете отслеживать журналы с помощью Tensorboard:
tensorboard --logdir=log
Учитывая список текста, synthesis.py Synthesize Audio Signals из обученной модели. Использование есть:
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
Пример test_list.txt:
Generative adversarial network or variational auto-encoder.
Once upon a time there was a dear little girl who was loved by every one who looked at her, but most of all by her grandmother, and there was nothing that she would not have given to the child.
A text-to-speech synthesis system typically consists of multiple stages, such as a text analysis frontend, an acoustic model and an audio synthesis module.
VCTK и NIKL поддерживают набор данных для построения модели с несколькими динамиками.
Поскольку некоторые образцы аудио в VCTK имеют длительное молчание, которое влияет на производительность, рекомендуется выполнять выравнивание фонем и удалить молчание в соответствии с VCTK_PREProcess.
После того, как у вас есть фонемное выравнивание для каждого высказывания, вы можете извлечь особенности:
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
Теперь, когда у вас подготовлены данные, вы можете обучить многопрофильную версию DeepVoice3 By:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
Если вы хотите повторно использовать изученные встраиваемые из другого набора данных, то вместо этого вы можете сделать это:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
--load-embedding=20171213_deepvoice3_checkpoint_step000210000.pth
Это может немного улучшить скорость тренировок.
Вы сможете получить очищенные образцы звука в ../nikl_preprocoess. Детали найдены здесь.
После того, как Nikl Corpus будет готов к использованию из предварительной обработки, вы можете извлечь функции с помощью:
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
Теперь, когда у вас подготовлены данные, вы можете обучить многопрофильную версию DeepVoice3 By:
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
Если у вас есть очень ограниченные данные, то вы можете рассмотреть возможность попробовать предварительно обученную модель. Например, используя предварительно обученную модель на LJSPEECH, вы можете адаптировать ее к данным из VCTK Disceer p225 (30 минут) по следующей команде:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk_adaptation
--preset=presets/deepvoice3_ljspeech.json
--log-event-path=log/deepvoice3_vctk_adaptation
--restore-parts="20171213_deepvoice3_checkpoint_step000210000.pth"
--speaker-id=0
Исходя из моего опыта, он может очень быстро получить разумное качество речи, а не обучать модель с нуля.
Выше используются два важных варианта:
--restore-parts=<N> : он указывает, где загружать параметры модели. Различия от опции- --checkpoint=<N> --checkpoint=<N> являются 1) --restore-parts=<N> 2) --restore-parts=<N> Скажите тренеру, чтобы начать с 0-ступенчатого, в то время как --checkpoint=<N> Trainer продолжить с последнего шага. --checkpoint=<N> должен быть в порядке, если вы используете точно такую же модель и продолжаете тренироваться, но было бы полезно, если вы хотите настроить архитектуру своей модели и принять преимущества предварительно обученной модели.--speaker-id=<N> : он указывает, какой докладчик данных используется для обучения. Это должно быть указано только в том случае, если вы используете наборы данных с несколькими динамиками. Что касается VCTK, идентификатор динамика автоматически назначается постепенно (0, 1, ..., 107) в соответствии с speaker_info.txt в наборе данных. Если вы тренируете модель с несколькими динамиками, адаптация динамиков будет работать только тогда, когда n_speakers будет идентична .
Это может произойти в зависимости от бэкэндов, которые у вас есть для matplotlib. Попробуйте изменить бэкэнд для Matplotlib и посмотрите, работает ли он следующим образом:
MPLBACKEND=Qt5Agg python train.py ${args...}
В #78 Engiecat сообщила, что изменение бэкэнда Matplotlib с Tkinter (Tkagg) на Pyqt5 (qt5agg) исправил проблему.
Часть кода была адаптирована из следующих проектов:
Баннер и логотип, созданный @jraulhernandezi (#76)