IMS Toucan-это инструментарий для обучения, использования и обучения современному синтезу текста в речь, разработанный в Институте обработки естественного языка (IMS), Университет Штутгарта, Германия , официального дома массовой многоязычной системы Toucantts. Наша система быстрая, управляемая и не требует тонны вычислений.

Если вы найдете это репо полезным, подумайте о том, чтобы дать ему звезду. Большие цифры делают меня счастливым, и они очень мотивируют. Если вы хотите мотивировать меня еще больше, вы можете даже подумать о спонсоре этого инструментария. Мы используем только спонсоров GitHub для этого, на других платформах есть мошенники, которые притворяются создателем. Не позволяйте им обмануть вас. Код и модели абсолютно бесплатны, и благодаря щедрой поддержке обнимающего лица?
Проверьте наш интерактивную демо-индекцию на обнимающемся лице?
Мы также опубликовали массовый многоязычный набор данных TTS на обнимающем лицо?
Список поддерживаемых языков можно найти здесь
Python 3.10 - рекомендуемая версия.
Чтобы установить этот инструментарий, клонируйте его на машину, на которой вы хотите использовать его (должен иметь хотя бы один графический процессор с поддержкой CUDA, если вы собираетесь обучить модели на этой машине. Для вывода вам не нужен графический процессор).
Если вы используете Linux, вы должны установить следующие пакеты или установить их с помощью APT-GET, если вы этого не сделали (на большинстве распределений они предварительно установляются):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
Перейдите к каталогу, который вы клонировали. Мы рекомендуем создать и активировать виртуальную среду для установки основных требований. В приведенных ниже командах обобщены все, что вам нужно сделать в Linux. Если вы запускаете Windows, необходимо изменить вторую строку, пожалуйста, посмотрите на документацию Venv.
python -m venv <path_to_where_you_want_your_env_to_be>
source <path_to_where_you_want_your_env_to_be>/bin/activate
pip install --no-cache-dir -r requirements.txt
Запустите вторую строку каждый раз, когда вы снова начинаете использовать инструмент, чтобы снова активировать виртуальную среду, если вы, например, вышли в систему. Чтобы использовать GPU, вам не нужно делать ничего другого на машине Linux. На машине Windows посмотрите на официальный веб-сайт Pytorch для установки, который обеспечивает поддержку GPU.
Если вам не нужны предварительные и обученные модели, а также файлы кэша, возникающие в результате предварительной обработки ваших наборов данных, которые будут храниться в подпапках по умолчанию, вы можете установить соответствующие каталоги, редактируя Utility/storage_config.py в соответствии с вашими потребностями (путь может быть относительно корневого каталога хранилища или абсолютного).
Вам не нужно использовать предварительные модели, но это может значительно ускорить ситуацию. Они будут загружены на лету автоматически, когда они понадобятся, благодаря объятию? и VB в частности.
Espeak-NG-это дополнительное требование, которое занимается множеством особых случаев во многих языках, так что это хорошо.
В большинстве средств Linux он уже будет установлен, а если это не так, и у вас есть достаточные права, вы можете установить его, просто запустив
apt-get install espeak-ng
Для Windows они предоставляют удобный файл установщика .msi на своей странице выпуска GitHub. После установки в не-лининуксных системах вам также необходимо сообщить библиотеке фонемайзеров, где найти вашу установку Espeak, установив переменную среды PHONEMIZER_ESPEAK_LIBRARY , которая обсуждается в этом выпуске.
Для Mac , к сожалению, намного сложнее. Благодаря Sang Hyun Park, вот руководство для установки его на Mac: для MC MACS, наиболее удобный метод установки ESPEAK-NG на вашу систему-через порт MacPorts Espeak-NG. Сам Macports может быть установлен с веб -сайта Macports, который также требует XCode Apple. После установки Xcode и Macports вы можете установить порт espeak-ng через
sudo port install espeak-ng
Как указано в инструкциях по установке Windows, установка ESPEAK-NG должна быть установлена в качестве переменной для библиотеки фонемизатора. Переменная среда - это PHONEMIZER_ESPEAK_LIBRARY , как указано в потоке GitHub, связанном выше. Тем не менее, файл установки ESPEAK-NG, который вам необходимо установить на эту переменную,-это файл .dylib, а не файл .dll на Mac. Чтобы найти файл библиотеки ESPEAK-NG, вы можете запустить port contents espeak-ng . Конкретный файл, который вы ищете, называется libespeak-ng.dylib .
Вы можете загрузить свои обученные модели, или предоставленные предварительные, используя InferenceInterfaces/ToucanTTSInterface.py . Просто создайте из него объект с помощью правильной ручки каталога, определяющей модель, которую вы хотите использовать. Остальное должно работать на заднем плане. Возможно, вы захотите установить встраивание языка или динамик, внедряющий функции с использованием функций set_language и set_speaker_embedding . Большинство вещей должны быть самопрокатильными.
Показатель Inference Internal содержит два метода для создания звука из текста. Они read_to_file и read_aloud .
read_to_file принимает в качестве ввода список строк и имя файла. Он синтезирует предложения в списке и объединит их с короткой паузой между ними и напишет их в FilePath, который вы поставляете в качестве другого аргумента.
Read_aloud берет только строку, которая затем будет конвертировать в речь и сразу же играть, используя динамики системы. Если вы установите необязательный представление аргумента в True , появится визуализация, что вам нужно закрыть для продолжения программы.
Их использование продемонстрировано в run_interactive_demo.py и run_text_to_file_reader.py .
Существуют простые параметры масштабирования для управления продолжительностью, дисперсией кривой высоты и дисперсии кривой энергии. Вы можете либо изменить их в коде при использовании интерактивной демонстрации или считывателя, либо просто передавать их в интерфейс, когда вы используете ее в своем собственном коде.
Чтобы изменить язык модели и посмотреть, какие языки доступны в нашей предварительной модели, посмотрите на список, связанный здесь
В каталоге, называемом утилитом , есть файл с именем path_to_transcript_dicts.py . В этом файле вы должны написать функцию, которая возвращает словарь, который имеет все абсолютные пути к каждому из аудиофайлов в вашем наборе данных в качестве строк в качестве ключей и текстовых транскрипций соответствующих звуков в качестве значений.
Затем перейдите в Directory TrainingInterfaces/Рецепты . Там сделайте копию файла finetuning_example_simple.py , если вы просто хотите Finetune на одном наборе данных или finetuning_example_multilingual.py , если вы хотите найти на нескольких наборах данных, возможно, даже несколько языков. Мы будем использовать эту копию в качестве ссылки и внесем только необходимые изменения для использования нового набора данных. Найдите вызов (ы) функции Prepare_tts_corpus . Замените path_to_transcript_dict, используемый там с только что вы только что созданным. Затем измените имя соответствующего каталога кеша на что -то, что имеет смысл для набора данных. Также обратите внимание на переменную save_dir , где будут сохранены контрольные точки. Это значение по умолчанию, вы можете перезаписать его при вызове конвейера позже, используя аргумент командной строки, если вы хотите точно настроить с контрольной точки и, таким образом, сохранить в другой каталог. Наконец, измените аргумент LANG в создании набора данных и при вызове функции цикла поезда на идентификатор языка ISO 639-3, который соответствует вашим данным.
Аргументы, которые приводятся в петлю поезда в примерах создания, предназначены для случая создания из предварительной модели. Если вы хотите тренироваться с нуля, посмотрите на другой трубопровод, в котором есть туканты в его названии, и посмотрите на аргументы, используемые там.
Как только это будет завершено, мы почти закончили, теперь нам просто нужно сделать его доступным для файла run_training_pipeline.py на верхнем уровне. В указанном файле импортируйте функцию выполнения из только что созданного конвейера, и дайте ей значимое имя. Теперь в Pipeline_dict добавьте свою импортируемую функцию в качестве значения и используйте в качестве ключа сокращенной, которая имеет смысл.
После того, как у вас построен рецепт, тренировка очень легко:
python run_training_pipeline.py <shorthand of the pipeline>
Вы можете предоставить любой из следующих аргументов, но не обязательно (хотя для обучения вы обязательно должны указать хотя бы идентификатор GPU).
--gpu_id <ID of the GPU you wish to use, as displayed with nvidia-smi, default is cpu. If multiple GPUs are provided (comma separated), then distributed training will be used, but the script has to be started with torchrun.>
--resume_checkpoint <path to a checkpoint to load>
--resume (if this is present, the furthest checkpoint available will be loaded automatically)
--finetune (if this is present, the provided checkpoint will be fine-tuned on the data from this pipeline)
--model_save_dir <path to a directory where the checkpoints should be saved>
--wandb (if this is present, the logs will be synchronized to your weights&biases account, if you are logged in on the command line)
--wandb_resume_id <the id of the run you want to resume, if you are using weights&biases (you can find the id in the URL of the run)>
Для обучения с несколькими GPU вы должны предоставить несколько идентификаторов графических процессоров (разделенные запятыми) и запустить сценарий с Toochrun. Вы также должны указать количество графических процессоров. Это должно соответствовать количеству идентификаторов, которые вы поставляете. Осторожно: Торхрун несовместим с nohup! Вместо этого используйте TMUX, чтобы сценарий работал после выхода из оболочки.
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
После каждой эпохи (или альтернативно после определенного количества шагов) некоторые журналы будут записаны на консоль и на веб -сайте веса и смещения, если вы вошли в систему и установили флаг. Если вы получите CUDA из ошибок в памяти, вам необходимо уменьшить пакет в аргументах вызова к Training_loop в работах, который вы запускаете. Попробуйте уменьшить количество пакетов в небольших шагах, пока не получите больше ошибок памяти CUDA.
В каталоге, который вы указали для сохранения, появляются файлы контрольной точки и данные визуализации спектрограммы. Поскольку контрольно -пропускные пункты довольно велики, будут сохранены только пять самых последних. Количество обучающих этапов сильно зависит от данных, которые вы используете, и независимо от того, создаете ли вы предварительно проведенный контрольно -пропускной пункт или обучение с нуля. Чем меньше данных у вас есть, тем меньше шагов вы должны предпринять, чтобы предотвратить возможный коллапс. Если вы хотите остановиться раньше, просто убейте процесс, так как все демоническое, все обработки детей должны умереть с ним. В случае, если позади остаются некоторые призрачные процессы, вы можете использовать следующую команду, чтобы найти их и убить их вручную.
fuser -v /dev/nvidia*
Всякий раз, когда сохраняется контрольно -пропускной пункт, также создается сжатая версия, которую можно использовать для вывода, которая называется Best.py
Вот несколько моментов, которые были подняты пользователями:
run_scorer.py .UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - Мы используем пользовательский планировщик, и факел неправильно думает, что мы называем планировщика и оптимизатора в неправильном порядке. Просто игнорируйте это предупреждение, оно совершенно бессмысленно.WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - Еще одно бессмысленное предупреждение. На самом деле мы сами не используем Xformers, это лишь часть зависимостей одной из наших зависимостей, но он не используется ни в каком месте.The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - Просто случается под окнами и ничего не влияет.WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - Мы понятия не имеем, почему Espeak начал раздавать это предупреждение, однако, похоже, это ничего не влияет, поэтому, кажется, безопасно игнорировать.NaN - ставки обучения по умолчанию работают над чистыми данными. Если ваши данные менее чистые, попробуйте использовать бомбардировку, чтобы найти проблемные образцы или снизить скорость обучения. Наиболее распространенной проблемой является пауза в речи, но ничто, что намекает на них в тексте. Вот почему ASR Corpora, которые оставляют пунктуацию, обычно трудно использовать для TTS. Основные модули Pytorch Fastspeech 2 и GST взяты из ESPNet, модули Pytorch Hifi-Gan взяты из репозитория Parallelwavegan. Некоторые модули, связанные с основанной на основе NEDINGFLOWMATCHING POSTNET, как указано в Matchatts, взяты из официальной кодовой базы Matchatts, а некоторые взяты из Codebase Stabletts. Для преобразования графем в фонем мы полагаемся на вышеупомянутый ESPEAK-NG, а также на транстоф. Мы используем Encodec, нейронный аудиокодек в качестве промежуточного представления для кэширования данных поезда для сохранения места.
@inproceedings{lux2021toucan,
year = 2021,
title = {{The IMS Toucan system for the Blizzard Challenge 2021}},
author = {Florian Lux and Julia Koch and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2022laml,
year = 2022,
title = {{Language-Agnostic Meta-Learning for Low-Resource Text-to-Speech with Articulatory Features}},
author = {Florian Lux and Ngoc Thang Vu},
booktitle = {ACL}
}
@inproceedings{lux2022cloning,
year = 2022,
title = {{Exact Prosody Cloning in Zero-Shot Multispeaker Text-to-Speech}},
author = {Lux, Florian and Koch, Julia and Vu, Ngoc Thang},
booktitle = {SLT},
publisher = {IEEE}
}
@inproceedings{lux2022lrms,
year = 2022,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Julia Koch and Ngoc Thang Vu},
booktitle = {AACL}
}
@inproceedings{lux2023controllable,
year = 2023,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Pascal Tilli and Sarina Meyer and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}
@inproceedings{lux2023blizzard,
year = 2023,
title = {{The IMS Toucan System for the Blizzard Challenge 2023}},
author = {Florian Lux and Julia Koch and Sarina Meyer and Thomas Bott and Nadja Schauffler and Pavel Denisov and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2024massive,
year = 2024,
title = {{Meta Learning Text-to-Speech Synthesis in over 7000 Languages}},
author = {Florian Lux and Sarina Meyer and Lyonel Behringer and Frank Zalkow and Phat Do and Matt Coler and Emanuël A. P. Habets and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}