هذا هو التنفيذ الرسمي لنموذج CTX-TXT2VEC TTS في PAPER AAAI-2024 Unicats: إطار عمل موحد للسياق مع النصي إلى الكلام مع الانتشار السياقي VQ و OCDING.

يتم اختبار هذا الريبو على Python 3.7 على Linux. يمكنك إعداد البيئة مع كوندا
# 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/* لضمان تنفيذ هذه السربات القابلة للتنفيذ.
هنا نأخذ خط أنابيب إعداد 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 هو محدد ميزة Kaldi-Style يشير إلى feats/label/.../feats.ark . نحن نقدمها أيضًا عبر الإنترنت (432 ميجابايت) ، لذا يرجى تنزيله و UNXIP إلى feats في دليل المشروع. هذه الميزات هي فهارس Flatten 1-D لميزات VQ-WAV2VEC. يمكنك التحقق من شكل الميزات بواسطة utils/feat-to-shape.py scp:feats/label/dev_all/feats.scp | head . يحتوي الكوكرات feats/vqidx/codebook.npy على شكل [2, 320, 256] .وهذا يعني ، لقد استخرجنا كتابًا منفصلًا من الكودونات المستهلكة باستخدام نموذج VQ-WAV2VEC من Fairseq ، إصدار Librispeech ، الذي يحتوي على مجموعتين من فهارس عدد صحيح يتراوح كل منهما من 0 إلى 319.
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 . SSCP للفهرسة.
نوصي باستخدام ملف UTT2Prompt الرسمي للاختبار مجموعة B في الورقة. يمكنك تنزيل ذلك وحفظها على data/eval_all/utt2prompt .
بعد ذلك ، يمكن تنفيذ فك التشفير مع السياق مسبقًا (AKA Continuation)
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 "ملصقات" متميزة. في هذا الرمز ، نقوم بتحويله إلى فهارس 2-DIM VQ باستخدام
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 .