Il s'agit de la mise en œuvre officielle du modèle CTX-TXT2VEC TTS dans le papier AAAI-2024 UNICATS: un cadre de texte à dispection contextuel unifié avec diffusion VQ contextuelle et vocodage.

Ce repo est testé sur Python 3.7 sur Linux. Vous pouvez configurer l'environnement avec conda
# Install required packages
conda create -n ctxt2v python=3.7 # or any name you like
conda activate ctxt2v
pip install -r requirements.txt Chaque fois que vous entrez ce projet, vous pouvez faire conda activate ctxt2v ou source path.sh
En outre, vous pouvez effectuer chmod +x utils/* pour vous assurer que ces SCIPT sont exécutables.
Ici, nous prenons le pipeline de préparation Libritts par exemple. D'autres ensembles de données peuvent être configurés de la même manière.
data/ dans le répertoire du projet. Le contenu est le suivant: ├── 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/label/.../feats.ark feats.scp Nous le fournissons également en ligne (432 Mo), veuillez donc le télécharger et dézip vers feats dans le répertoire du projet. Ces fonctionnalités sont les index d'aplatissement 1-D des fonctionnalités VQ-WAV2VEC. Vous pouvez vérifier la forme des fonctionnalités de utils/feat-to-shape.py scp:feats/label/dev_all/feats.scp | head . Le livre de codes feats/vqidx/codebook.npy a une forme [2, 320, 256] .C'est-à-dire que nous avons extrait les Indxes de codes discrets en utilisant le modèle VQ-WAV2VEC de FairSeq , la version Kmeans LibrisEech , qui contenait 2 groupes d'index entiers, de 0 à 319. Nous trouvons ensuite les occurrences de ces paires et les étiquetez en utilisant un autre index, qui compte à 23632. L'indice de cartographie entre cet indice d'étiquette et l'original VQ-WAV2v2
feats/vqidx/label2vqidx. Nous utilisons les étiquettes 23632 pour former le modèle VQ-Diffusion.
Après avoir correctement construit les répertoires, le modèle peut être formé.
La formation du modèle CTX-TXT2VEC peut être simplement effectuée par
python train.py --name Libritts --config_file configs/Libritts.yaml --num_node 1 --tensorboard --auto_resume où --name spécifie le nom du répertoire de sortie. Consultez configs/Libritts.yaml pour des configurations détaillées. La formation multi-GPU est automatiquement gérée par le programme (par défaut pour utiliser tous les appareils visibles).
Après le début de la formation, les points de contrôle et les journaux seront enregistrés en OUTPUT/Libritts .
Le décodage de CTX-TXT2VEC s'appuie toujours sur des invites qui fournissent des informations contextuelles. En d'autres termes, avant le décodage, il devrait y avoir un fichier utt2prompt qui ressemble:
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
où chaque ligne est organisée comme utt-to-synthesize prompt-utt . Les touches utt-to-synthesize et prompt-utt devraient toutes deux être présentes dans feats.scp pour l'indexation.
Nous vous recommandons d'utiliser le fichier officiel de UTT2Prompt pour l'ensemble de tests B dans le document. Vous pouvez le télécharger et enregistrer sur data/eval_all/utt2prompt .
Après cela, le décodage avec un contexte additionné (aka continuation) peut être effectué par
python continuation.py --eval-set eval_all
# will only synthesize utterances in `utt2prompt`. Check the necessary files in `data/${eval_set}`. Les indexes VQ décodés (2-dim) seront enregistrés sur OUTPUT/Libritts/syn/${eval_set}/ .
Notez que le modèle échantillonne réellement des "étiquettes" VQ distinctes 23631. Dans ce code, nous le transformons en index VQ à 2 dims à l'aide de
feats/vqidx/label2vqidx.
Pour la forme d'onde de vocoding, le homologue "CTX-Vec2Wav" est fortement recommandé. Vous pouvez configurer ctx-vec2wav par
git clone https://github.com/cantabile-kwok/UniCATS-CTX-vec2wav.gitpuis suivez l'instruction environnementale là-bas.
Après le décodage vers les index VQ, la vocodage peut être réalisée par
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/checkpointAu cours du développement, les référentiels suivants ont été mentionnés:
ctx_text2vec/modeling/transformers/espnet_nets et les scripts utilitaires dans utils .utils .