Это официальная реализация модели CTX-TXT2VEC TTS в статье AAAI-2024 Paper Unicats: единый контекстный контекстный текст к рече с контекстуальной VQ-диффузией и вокалом.

Этот репо протестирован на Python 3.7 на Linux. Вы можете настроить окружающую среду с Conda
# Install required packages
conda create -n ctxt2v python=3.7 # or any name you like
conda activate ctxt2v
pip install -r requirements.txt Каждый раз, когда вы вводите этот проект, вы можете делать conda activate ctxt2v или source path.sh
Кроме того, вы можете выполнить chmod +x utils/* чтобы убедиться, что эти Scipts выполняются.
Здесь мы берем, например, подготовка Libritts. Другие наборы данных могут быть настроены так же.
data/ в каталоге проекта. Содержимое следующее: ├── train_all
│ ├── duration # the integer duration for each utterance. Frame shift is 10ms.
│ ├── feats.scp # the VQ index for each utterance. Will be explained later.
│ ├── text # the phone sequence for each utterance
│ └── utt2num_frames # the number of frames of each utterance.
├── eval_all
│ ... # similar four files
│── dev_all
│ ...
└── lang_1phn
└── train_all_units.txt # mapping between valid phones and their indexes
feats.scp -это спецификация в стиле Калди, указывающий на feats/label/.../feats.ark . Мы также предоставляем его онлайн (432 МБ), поэтому, пожалуйста, загрузите его и распакуйте feats в каталоге проекта. Этими функциями являются 1-D сглаженные индексы функций VQ-WAV2VEC. Вы можете проверить форму функций utils/feat-to-shape.py scp:feats/label/dev_all/feats.scp | head . Codebook feats/vqidx/codebook.npy имеет форму [2, 320, 256] .То есть мы извлекли дискретную кодовую книгу, используя модель VQ-WAV2VEC от Fairseq , версию Kmeans Librispeech , которая содержала 2 группы целочисленных индексов в диапазоне от 0 до 319. Затем мы находим вхождения этих пар и помечаем их с использованием другого индекса, который считается 23632. На основе картирования между этим лаблетом и оригинальным vq-wavbook может быть установлен на основе vquvbook.
feats/vqidx/label2vqidx. Мы используем этикетки 23632 для обучения модели VQ-диффузии.
После правильного построения каталогов модель может быть обучена.
Обучение модели CTX-TXT2VEC может быть просто сделано
python train.py --name Libritts --config_file configs/Libritts.yaml --num_node 1 --tensorboard --auto_resume где --name указывает имя выходного каталога. Проверьте configs/Libritts.yaml для подробных конфигураций. Обучение с несколькими GPU автоматически обрабатывается программой (по умолчанию для использования всех видимых устройств).
После начала обучения контрольно -пропускные пункты и журналы будут сохранены в OUTPUT/Libritts .
Декодирование CTX-TXT2VEC всегда полагается на подсказки, которые предоставляют контекстную информацию. Другими словами, перед декодированием должен быть файл utt2prompt , который выглядит так:
1089_134686_000002_000001 1089_134686_000032_000008
1089_134686_000007_000005 1089_134686_000032_000008
1089_134686_000009_000003 1089_134686_000032_000008
1089_134686_000009_000008 1089_134686_000032_000008
1089_134686_000015_000003 1089_134686_000032_000008
где каждая линия организована как utt-to-synthesize prompt-utt . Клавиши utt-to-synthesize и prompt-utt должны присутствовать на feats.scp для индексации.
Мы рекомендуем использовать официальный файл UTT2PROMPT для тестового набора B в статье. Вы можете скачать это и сохранить в data/eval_all/utt2prompt .
После этого декодирование с приготовлением контекста (иначе продолжительностью) может быть выполнено
python continuation.py --eval-set eval_all
# will only synthesize utterances in `utt2prompt`. Check the necessary files in `data/${eval_set}`. Декодированные VQ-индексы (2-DIM) будут сохранены для OUTPUT/Libritts/syn/${eval_set}/ .
Обратите внимание, что модель на самом деле выборы от 23631 различных VQ «метки». В этом коде мы преобразуем его обратно в индексы VQ 2-DIM с использованием
feats/vqidx/label2vqidx.
Для воодувания к форме волны настоятельно рекомендуется аналог "ctx-Vec2wav". Вы можете настроить CTX-VEC2WAV
git clone https://github.com/cantabile-kwok/UniCATS-CTX-vec2wav.gitа затем следуйте экологической инструкции там.
После декодирования в индексы VQ, возобновление может быть достигнуто
syn_dir= $PWD /OUTPUT/Libritts/syn/eval_all/
utt2prompt_file= $PWD /data/eval_all/utt2prompt
v2w_dir=/path/to/CTX-vec2wav/
cd $v2w_dir || exit 1 ;
source path.sh
# now, in CTX-vec2wav's environment
feat-to-len.py scp: $syn_dir /feats.scp > $syn_dir /utt2num_frames
# construct acoustic prompt specifier (mel spectrograms) using utt2prompt
python ./local/get_prompt_scp.py feats/normed_fbank/eval_all/feats.scp ${utt2prompt_file} > $syn_dir /prompt.scp
decode.py --feats-scp $syn_dir /feats.scp
--prompt-scp $syn_dir /prompt.scp
--num-frames $syn_dir /utt2num_frames
--outdir $syn_dir /wav/
--checkpoint /path/to/checkpointВо время разработки были упомянуты следующие репозитории:
ctx_text2vec/modeling/transformers/espnet_nets и утилитные сценарии в utils .utils .