นี่คือการใช้รหัสอย่างเป็นทางการของ? Matcha-TTS [ICASSP 2024]
เราเสนอ? Matcha-TTS ซึ่งเป็นวิธีการใหม่ของ TTS ที่ไม่ใช่ระบบประสาทแบบ Autoregressive ซึ่งใช้การจับคู่การไหลแบบมีเงื่อนไข (คล้ายกับการไหลที่แก้ไขแล้ว) เพื่อเพิ่มความเร็วในการสังเคราะห์คำพูดที่ใช้ ODE วิธีการของเรา:
ตรวจสอบหน้าสาธิตของเราและอ่านกระดาษ ICASSP 2024 ของเราสำหรับรายละเอียดเพิ่มเติม
รุ่นที่ผ่านการฝึกอบรมมาก่อนจะถูกดาวน์โหลดโดยอัตโนมัติด้วยอินเทอร์เฟซ CLI หรือ Gradeio
คุณสามารถลองได้ไหม matcha-tts ในเบราว์เซอร์ของคุณบน Huggingface? ช่องว่าง
conda create -n matcha-tts python=3.10 -y
conda activate matcha-tts
pip install matcha-ttsจากแหล่งกำเนิด
pip install git+https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTS
pip install -e . # This will download the required models
matcha-tts --text " <INPUT TEXT> "หรือ
matcha-tts-app หรือ Open synthesis.ipynb บนสมุดบันทึก Jupyter
matcha-tts --text " <INPUT TEXT> "matcha-tts --file < PATH TO FILE >matcha-tts --file < PATH TO FILE > --batchedอาร์กิวเมนต์เพิ่มเติม
matcha-tts --text " <INPUT TEXT> " --speaking_rate 1.0matcha-tts --text " <INPUT TEXT> " --temperature 0.667matcha-tts --text " <INPUT TEXT> " --steps 10สมมติว่าเรากำลังฝึกด้วยคำพูด LJ
ดาวน์โหลดชุดข้อมูลจากที่นี่แยกไปยัง data/LJSpeech-1.1 และเตรียมรายการไฟล์เพื่อชี้ไปที่ข้อมูลที่แยกออกมาเช่นเดียวกับรายการ 5 ในการตั้งค่าของ Nvidia Tacotron 2 Repo
โคลนและป้อนที่เก็บ matcha-tts
git clone https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTSpip install -e .configs/data/ljspeech.yaml และเปลี่ยน train_filelist_path : data/filelists/ljs_audio_text_train_filelist.txt
valid_filelist_path : data/filelists/ljs_audio_text_val_filelist.txtmatcha-data-stats -i ljspeech.yaml
# Output:
#{ ' mel_mean ' : -5.53662231756592, ' mel_std ' : 2.1161014277038574} อัปเดตค่าเหล่านี้ใน configs/data/ljspeech.yaml ภายใต้คีย์ data_statistics
data_statistics: # Computed for ljspeech dataset
mel_mean: -5.536622
mel_std: 2.116101ไปยังเส้นทางของรถไฟและผู้ตรวจสอบความถูกต้องของคุณ
make train-ljspeechหรือ
python matcha/train.py experiment=ljspeechpython matcha/train.py experiment=ljspeech_min_memorypython matcha/train.py experiment=ljspeech trainer.devices=[0,1]matcha-tts --text " <INPUT TEXT> " --checkpoint_path < PATH TO CHECKPOINT > ขอขอบคุณเป็นพิเศษกับ @Mush42 สำหรับการใช้การส่งออกและสนับสนุนการอนุมาน ONNX
เป็นไปได้ที่จะส่งออกจุดตรวจจับมัทฉะไปที่ ONNX และเรียกใช้การอนุมานบนกราฟ ONNX ที่ส่งออก
หากต้องการส่งออกจุดตรวจสอบไปยัง ONNX ให้ติดตั้ง ONNX ก่อน
pip install onnxจากนั้นเรียกใช้สิ่งต่อไปนี้:
python3 -m matcha.onnx.export matcha.ckpt model.onnx --n-timesteps 5ทางเลือกผู้ส่งออก ONNX ยอมรับอาร์กิวเมนต์ Vocoder-Name และ Vocoder-Checkpoint สิ่งนี้ช่วยให้คุณสามารถฝังผู้ร้องในกราฟที่ส่งออกและสร้างรูปคลื่นในการวิ่งครั้งเดียว (คล้ายกับระบบ TTS แบบครบวงจร)
โปรดทราบ ว่า n_timesteps ได้รับการปฏิบัติเหมือนเป็นพารามิเตอร์ไฮเปอร์มากกว่าอินพุตแบบจำลอง ซึ่งหมายความว่าคุณควรระบุระหว่างการส่งออก (ไม่ใช่ระหว่างการอนุมาน) หากไม่ได้ระบุ n_timesteps จะถูกตั้งค่าเป็น 5
สิ่งสำคัญ : สำหรับตอนนี้ Torch> = 2.1.0 เป็นสิ่งจำเป็นสำหรับการส่งออกเนื่องจากผู้ดำเนินการ scaled_product_attention ไม่สามารถส่งออกได้ในรุ่นเก่า จนกว่าจะมีการเปิดตัวเวอร์ชันสุดท้ายผู้ที่ต้องการส่งออกโมเดลของพวกเขาจะต้องติดตั้ง Torch> = 2.1.0 ด้วยตนเองเป็นการวางจำหน่ายล่วงหน้า
ในการเรียกใช้การอนุมานในรุ่นที่ส่งออกให้ติดตั้งครั้งแรก onnxruntime โดยใช้
pip install onnxruntime
pip install onnxruntime-gpu # for GPU inferenceจากนั้นใช้สิ่งต่อไปนี้:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputsนอกจากนี้คุณยังสามารถควบคุมพารามิเตอร์การสังเคราะห์ได้:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --temperature 0.4 --speaking_rate 0.9 --spk 0 ในการเรียกใช้การอนุมานบน GPU ตรวจสอบให้แน่ใจว่าได้ติดตั้งแพ็คเกจ onnxRuntime-GPU แล้วส่งผ่าน --gpu ไปยังคำสั่งการอนุมาน:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --gpu หากคุณส่งออกเฉพาะ matcha ไปยัง ONNX สิ่งนี้จะเขียน mel-spectrogram เป็นกราฟและอาร์เรย์ numpy ไปยังไดเรกทอรีเอาต์พุต หากคุณฝังผู้ร้องในกราฟที่ส่งออกสิ่งนี้จะเขียนไฟล์เสียง .wav ไปยังไดเรกทอรีเอาต์พุต
หากคุณส่งออก Matcha ไปยัง ONNX เท่านั้นและคุณต้องการเรียกใช้ท่อ TTS เต็มคุณสามารถส่งเส้นทางไปยังโมเดล Vocoder ในรูปแบบ ONNX :
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --vocoder hifigan.small.onnx สิ่งนี้จะเขียนไฟล์เสียง .wav ไปยังไดเรกทอรีเอาต์พุต
หากชุดข้อมูลเป็นโครงสร้างเป็น
data/
└── LJSpeech-1.1
├── metadata.csv
├── README
├── test.txt
├── train.txt
├── val.txt
└── wavsจากนั้นคุณสามารถแยกการจัดตำแหน่งระดับฟอนิมจากโมเดล matcha-TTS ที่ผ่านการฝึกอบรมโดยใช้:
python matcha/utils/get_durations_from_trained_model.py -i dataset_yaml -c < checkpoint >ตัวอย่าง:
python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c matcha_ljspeech.ckptหรือเพียงแค่:
matcha-tts-get-durations -i ljspeech.yaml -c matcha_ljspeech.ckpt ใน DataSetConfig เปิดระยะเวลาการโหลด ตัวอย่าง: ljspeech.yaml
load_durations: True
หรือดูตัวอย่างใน configs/experiment/ljspeech_from_durations.yaml
หากคุณใช้รหัสของเราหรือค้นหางานนี้มีประโยชน์โปรดอ้างอิงกระดาษของเรา:
@inproceedings{mehta2024matcha,
title={Matcha-{TTS}: A fast {TTS} architecture with conditional flow matching},
author={Mehta, Shivam and Tu, Ruibo and Beskow, Jonas and Sz{'e}kely, {'E}va and Henter, Gustav Eje},
booktitle={Proc. ICASSP},
year={2024}
}
เนื่องจากรหัสนี้ใช้ Lightning-Hydra-Template คุณจึงมีพลังทั้งหมดที่มาพร้อมกับมัน
ซอร์สโค้ดอื่น ๆ ที่เราต้องการรับทราบ: