Реализация «Информированная сеть внимания для мультимодального синтеза» (https://arxiv.org/pdf/1909.01700.pdf) бумага.
Статус : выпущен
Durian является архитектурой энкодера-декодера для задачи синтеза текста в речь. В отличие от предыдущих архитектур, таких как TacoTron 2, он не изучает механизм внимания, но учитывает информацию о продолжительности фонем. Таким образом, конечно, использовать эту модель, набор данных должен был фонемизировать и выравниваться по продолжительности. Тем не менее, вы можете попытаться использовать предварительную модель продолжительности на наборе данных LJSPEECH (используется DICT CMU). Ссылки будут представлены ниже.
Модель Durian состоит из двух модулей: синтезатор магистрали и предиктора продолжительности. Вот некоторые из наиболее заметных отличий от Дуриана, описанного в бумаге:
Как синтезатор магистра, так и модель продолжительности обучаются одновременно. Для упрощения внедрения модель длительности прогнозирует выравнивание по сравнению с фиксированным количеством максимального количества кадров. Вы можете изучить эти выходы как проблема BCE, проблема MSE, суммируя оси кадров или использование обеих потерь (не проверял это), установите его в config.json . Эксперименты показали, что справедливая версия процесса оптимизации показала себя нестабильной с более длинными текстовыми последовательностями, поэтому предпочитаю использовать MSE+BCE или Just-MSE (не возражайте, если вы получите плохие выравнивания в тензора).
Вы можете проверить демонстрацию синтеза (был получен задолго до сходимости) в demo -папке (используемый воротовод WaveGlow).
Прежде всего, убедитесь, что вы установили все пакеты с помощью pip install --upgrade -r requirements.txt . Код тестируется с использованием pytorch==1.5.0
Клон репозиторий: git clone https://github.com/ivanvovk/DurrIAN
Чтобы начать обучение в бумажной версии Durian, запустите python train.py -c configs/default.json . Вы можете указать для обучения базовой модели как python train.py -c configs/baseline.json --baseline
Чтобы убедиться, что все работает нормально в вашей локальной среде, вы можете запускать модульные тесты в папке tests By python <test_you_want_to_run.py> .
Эта реализация была обучена с использованием набора данных LJSPEECH с выравниваемым в фонемиизированной продолжительности с минимизацией потерь продолжительности BCE. Вы можете найти его по этой ссылке.
Основным недостатком этой модели является набор данных, выдвигаемый по продолжительности. Вы можете найти пропорциональный файл LJSPEECH, используемый при обучении текущей реализации в папке filelists . Чтобы использовать ваши данные, убедитесь, что вы организовали свои файлы так же, как и предоставленные LJSPEECH. Однако, чтобы сэкономить время и нейроны вашего мозга, вы можете попытаться обучить модель на наборе данных без выравнивания продолжительности, используя предварительную модель продолжительности LJSPEECH с моей контрольной точки модели (не пробовал). Но если вы заинтересованы в выравнивании личного набора данных, внимательно следуйте следующему разделу.
В своих экспериментах я выровнял LJSpeech с Монреалем инструментом принудительного выравнивания. Если здесь что -то неясно, пожалуйста, следуйте инструкциям в документах Toolkit. Начнем с того, что алгоритм выравнивания имеет несколько шагов:
Правильно организуйте свой набор данных. MFA требует, чтобы он находился в одной папке структуры {Outlaince_ID.Lab, Outeance_ID.WAV}. Убедитесь, что все ваши тексты имеют формат .lab .
Загрузите выпуск MFA и следуйте инструкциям по установке по этой ссылке.
После того, как это сделано с MFA, вам нужен словарь слов набора данных с транскрипциями фонем. Здесь у вас есть несколько вариантов:
bin/mfa_generate_dictionary /path/to/model_g2p.zip /path/to/data dict.txt . Обратите внимание, что эта установка MFA по умолчанию автоматически предоставит вам английскую модель, которую вы можете использовать. Как только вы подготовьте данные, словарь и модель G2P, теперь вы готовы к выравниванию. Запустите Command bin/mfa_align /path/to/data dict.txt path/to/model_g2p.zip outdir . Подождите, пока не сделано. outdir папка будет содержать список из словарных слов и папку со специальными файлами формата .TextGrid , где хранятся выравнивания WAVS.
Теперь мы хотим обработать эти файлы текстовых сетей, чтобы получить окончательный файл. Здесь вы можете найти полезный пакет Python TextGrid . Установите его с помощью pip install TextGrid . Здесь пример, как его использовать:
import textgrid
tg = textgrid.TextGrid.fromFile('./outdir/data/text0.TextGrid')
Теперь tg - это набор двух объектов: первый содержит выровненные слова, второй содержит выровненные фонемы. Вам нужен второй. Извлеките продолжительность (в кадрах! tg имеет интервалы в секундах, таким образом, конвертируйте) для целого набора данных путем итерации по полученным файлам .TextGrid и подготовки файла в том же формате, что и те, которые я предоставил в папке filelists .
Я нашел обзор нескольких выравнивателей. Может быть, это будет полезно. Тем не менее, я рекомендую вам использовать MFA, так как это один из самых точных выравнивателей, для моих лучших знаний.