นี่คือการใช้งานอย่างเป็นทางการของโมเดล CTX-TXT2VEC TTS ใน UNICATS PAPER AAAI-20124: กรอบการใช้ข้อความแบบข้อความบริบทแบบรวมเป็นแบบรวมด้วยบริบท VQ-DIFFUSION และ VOCODING

repo นี้ได้รับการทดสอบบน 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 เป็นตัวระบุคุณสมบัติ Kaldi-Style ชี้ไปที่ feats/label/.../feats.ark นอกจากนี้เรายังให้บริการออนไลน์ (432MB) ดังนั้นโปรดดาวน์โหลดและคลายซิปเพื่อ 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]นั่นคือเราแยก codebook disfrete indxes โดยใช้โมเดล VQ-WAV2VEC ของ Fairseq รุ่น Kmeans Librispeech ซึ่งมีดัชนีจำนวนเต็ม 2 กลุ่มแต่ละกลุ่มตั้งแต่ 0 ถึง 319 จากนั้นเราจะพบเหตุการณ์ที่เกิดขึ้นระหว่างดัชนี
feats/vqidx/label2vqidxเราใช้ป้ายกำกับ 23632 เพื่อฝึกอบรมรุ่น VQ-diffusion
หลังจากสร้างไดเรกทอรีอย่างถูกต้องโมเดลสามารถได้รับการฝึกฝน
การฝึกอบรมรุ่น CTX-TXT2VEC สามารถทำได้โดยง่ายๆ
python train.py --name Libritts --config_file configs/Libritts.yaml --num_node 1 --tensorboard --auto_resume สถานที่ --name ระบุชื่อไดเรกทอรีเอาต์พุต ตรวจสอบ configs/Libritts.yaml สำหรับการกำหนดค่าโดยละเอียด การฝึกอบรม Multi-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
หลังจากนั้นการถอดรหัสด้วยบริบท prepended (aka ต่อเนื่อง) สามารถทำได้โดย
python continuation.py --eval-set eval_all
# will only synthesize utterances in `utt2prompt`. Check the necessary files in `data/${eval_set}`. Indexes VQ-Decoded (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 และสคริปต์ยูทิลิตี้ใน utilsutils