IMS Toucan เป็นชุดเครื่องมือสำหรับการฝึกอบรมการใช้และการสอนการสังเคราะห์ข้อความที่ล้ำสมัยซึ่งพัฒนาขึ้นที่ สถาบันการประมวลผลภาษาธรรมชาติ (IMS) มหาวิทยาลัยสตุตการ์ตประเทศเยอรมนี บ้านอย่างเป็นทางการของระบบ Toucantts หลายภาษา ระบบของเรารวดเร็วควบคุมได้และไม่จำเป็นต้องมีการคำนวณมากมาย

หากคุณพบว่า repo นี้มีประโยชน์ให้พิจารณาให้เป็นดาว จำนวนมากทำให้ฉันมีความสุขและพวกเขามีแรงจูงใจมาก หากคุณต้องการกระตุ้นให้ฉันมากยิ่งขึ้นคุณสามารถพิจารณาสนับสนุนชุดเครื่องมือนี้ได้ เราใช้สปอนเซอร์ของ GitHub สำหรับเรื่องนี้มีนักต้มตุ๋นบนแพลตฟอร์มอื่น ๆ ที่แกล้งทำเป็นผู้สร้าง อย่าปล่อยให้พวกเขาหลอกคุณ รหัสและโมเดลนั้นฟรีอย่างแน่นอนและต้องขอบคุณการสนับสนุนอย่างใจกว้างของการกอดใบหน้าหรือไม่เรายังมีตัวอย่างของโมเดลที่ทำงานบน GPU ฟรีสำหรับทุกคนที่จะใช้
ตรวจสอบการสาธิตแบบหลายภาษาแบบอินเทอร์แอคทีฟของเราเกี่ยวกับการกอดใบหน้า?
นอกจากนี้เรายังได้เผยแพร่ชุดข้อมูล TTS ที่มีหลายภาษาหลายภาษาบนใบหน้ากอดหรือไม่?
รายการภาษาที่รองรับสามารถพบได้ที่นี่
Python 3.10 เป็นเวอร์ชันที่แนะนำ
ในการติดตั้งชุดเครื่องมือนี้ให้โคลนลงบนเครื่องที่คุณต้องการใช้ (ควรมี GPU ที่เปิดใช้งานอย่างน้อยหนึ่ง CUDA หากคุณตั้งใจจะฝึกอบรมรุ่นบนเครื่องนั้นเพื่อการอนุมานคุณไม่จำเป็นต้องใช้ GPU)
หากคุณใช้ Linux คุณควรติดตั้งแพ็คเกจต่อไปนี้หรือติดตั้งด้วย apt-get ถ้าคุณยังไม่ได้ (ในการแจกแจงส่วนใหญ่ที่ติดตั้งไว้ล่วงหน้า):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
นำทางไปยังไดเรกทอรีที่คุณโคลน เราขอแนะนำให้สร้างและเปิดใช้งานสภาพแวดล้อมเสมือนจริงเพื่อติดตั้งข้อกำหนดพื้นฐานลงใน คำสั่งด้านล่างสรุปทุกสิ่งที่คุณต้องทำภายใต้ Linux หากคุณกำลังใช้ Windows บรรทัดที่สองจะต้องมีการเปลี่ยนแปลงโปรดดูเอกสาร VENV
python -m venv <path_to_where_you_want_your_env_to_be>
source <path_to_where_you_want_your_env_to_be>/bin/activate
pip install --no-cache-dir -r requirements.txt
เรียกใช้บรรทัดที่สองทุกครั้งที่คุณเริ่มใช้เครื่องมืออีกครั้งเพื่อเปิดใช้งานสภาพแวดล้อมเสมือนจริงอีกครั้งหากคุณเข้าสู่ระบบในระหว่างนี้ ในการใช้ประโยชน์จาก GPU คุณไม่จำเป็นต้องทำอะไรอย่างอื่นในเครื่อง Linux บนเครื่อง Windows ให้ดูที่เว็บไซต์ Pytorch อย่างเป็นทางการสำหรับการติดตั้งคอมมิวนิสต์ที่ช่วยรองรับ GPU
หากคุณไม่ต้องการให้โมเดลที่ผ่านการฝึกอบรมและผ่านการฝึกอบรมรวมถึงไฟล์แคชที่เกิดจากการประมวลผลชุดข้อมูลของคุณล่วงหน้าจะถูกเก็บไว้ในโฟลเดอร์ย่อยเริ่มต้นคุณสามารถตั้งค่าไดเรกทอรีที่สอดคล้องกันทั่วโลกโดยการแก้ไข Utility/storage_config.py เพื่อให้เหมาะกับความต้องการของคุณ
คุณไม่จำเป็นต้องใช้โมเดลที่ผ่านการฝึกอบรม แต่สามารถเร่งความเร็วได้อย่างมาก พวกเขาจะดาวน์โหลดได้ทันทีโดยอัตโนมัติเมื่อพวกเขาต้องการขอบคุณการกอดใบหน้า? และ VB โดยเฉพาะ
Espeak-NG เป็นข้อกำหนดทางเลือกที่จัดการกับกรณีพิเศษจำนวนมากในหลายภาษาดังนั้นจึงเป็นเรื่องดีที่จะมี
ในสภาพแวดล้อม Linux ส่วนใหญ่จะติดตั้งอยู่แล้วและหากไม่ใช่และคุณมีสิทธิ์เพียงพอคุณสามารถติดตั้งได้โดยเพียงแค่เรียกใช้
apt-get install espeak-ng
สำหรับ Windows พวกเขามีไฟล์ติดตั้ง. MSI ที่สะดวกในหน้า GitHub Release หลังจากการติดตั้งบนระบบที่ไม่ใช่ Linux คุณจะต้องบอกไลบรารี Phonemizer ว่าจะค้นหาการติดตั้ง ESPEAK ของคุณได้อย่างไรโดยการตั้งค่าตัวแปรสภาพแวดล้อม PHONEMIZER_ESPEAK_LIBRARY ซึ่งกล่าวถึงในปัญหานี้
สำหรับ Mac มันซับซ้อนกว่ามาก ขอบคุณ Sang Hyun Park นี่คือคำแนะนำสำหรับการติดตั้งบน Mac: สำหรับ M1 Macs วิธีที่สะดวกที่สุดในการติดตั้ง Espeak-NG ลงในระบบของคุณคือผ่านพอร์ต MacPorts ของ Espeak-NG MacPorts สามารถติดตั้งได้จากเว็บไซต์ MacPorts ซึ่งต้องใช้ XCode ของ Apple เมื่อติดตั้ง Xcode และ MacPorts แล้วคุณสามารถติดตั้งพอร์ตของ Espeak-NG ผ่านได้
sudo port install espeak-ng
ตามที่ระบุไว้ในคำแนะนำการติดตั้ง Windows การติดตั้ง ESPEAK-NG จะต้องตั้งค่าเป็นตัวแปรสำหรับไลบรารี Phonemizer ตัวแปรสภาพแวดล้อมคือ PHONEMIZER_ESPEAK_LIBRARY ตามที่ระบุในเธรด GitHub ที่เชื่อมโยงด้านบน อย่างไรก็ตามไฟล์การติดตั้ง ESPEAK-NG ที่คุณต้องตั้งค่าตัวแปรนี้เป็นไฟล์. dylib แทนที่จะเป็นไฟล์. dll บน Mac ในการค้นหาไฟล์ไลบรารี ESPEAK-NG คุณสามารถเรียกใช้ port contents espeak-ng ไฟล์เฉพาะที่คุณกำลังมองหาคือชื่อ libespeak-ng.dylib
คุณสามารถโหลดโมเดลที่ผ่านการฝึกอบรมของคุณหรือรุ่นที่ได้รับการฝึกฝนโดยใช้ InferenceInterfaces/ToucanTTSInterface.py เพียงสร้างวัตถุจากมันด้วยด้ามจับไดเรกทอรีที่เหมาะสมที่ระบุโมเดลที่คุณต้องการใช้ ส่วนที่เหลือควรทำงานในพื้นหลัง คุณอาจต้องการตั้งค่าการฝังภาษาหรือการฝังลำโพงโดยใช้ฟังก์ชั่น set_language และ set_speaker_embedding สิ่งส่วนใหญ่ควรอธิบายตนเอง
การอนุมานการทำงาน มีสองวิธีในการสร้างเสียงจากข้อความ พวกเขาคือ read_to_file และ read_aloud
read_to_file ใช้เป็นอินพุตรายการสตริงและชื่อไฟล์ มันจะสังเคราะห์ประโยคในรายการและเชื่อมต่อพวกเขาด้วยการหยุดชั่วคราวสั้น ๆ ระหว่างและเขียนลงใน filepath ที่คุณจัดหาเป็นอาร์กิวเมนต์อื่น ๆ
read_aloud ใช้เวลาเพียงสตริงซึ่งจะแปลงเป็นคำพูดและเล่นทันทีโดยใช้ลำโพงของระบบ หากคุณตั้งค่า มุมมอง อาร์กิวเมนต์เสริมเป็น TRUE การสร้างภาพจะปรากฏขึ้นซึ่งคุณต้องปิดโปรแกรมเพื่อดำเนินการต่อ
การใช้งานของพวกเขาแสดงให้เห็นใน run_interactive_demo.py และ run_text_to_file_reader.py
มีพารามิเตอร์การปรับขนาดอย่างง่ายเพื่อควบคุมระยะเวลาความแปรปรวนของเส้นโค้งสนามและความแปรปรวนของเส้นโค้งพลังงาน คุณสามารถเปลี่ยนได้ในรหัสเมื่อใช้การสาธิตแบบโต้ตอบหรือตัวอ่านหรือคุณสามารถส่งผ่านไปยังอินเทอร์เฟซเมื่อคุณใช้ในรหัสของคุณเอง
หากต้องการเปลี่ยนภาษาของโมเดลและดูว่าภาษาใดที่มีอยู่ในโมเดลที่ผ่านการฝึกฝนของเราให้ดูที่รายการที่เชื่อมโยงที่นี่
ในไดเรกทอรีที่เรียกว่า ยูทิลิตี้ มีไฟล์ที่เรียกว่า path_to_transcript_dicts.py ในไฟล์นี้คุณควรเขียนฟังก์ชั่นที่ส่งคืนพจนานุกรมที่มีพา ธ ทั้งหมดไปยังไฟล์เสียงแต่ละไฟล์ในชุดข้อมูลของคุณเป็นสตริงเป็นคีย์และการถอดรหัสข้อความของเสียงที่เกี่ยวข้องเป็นค่า
จากนั้นไปที่ Directory TrainingInterfaces/สูตรอาหาร ในนั้นทำสำเนาไฟล์ finetuning_example_simple.py หากคุณต้องการ finetune ในชุดข้อมูลเดียวหรือ finetuning_example_multilingual.py ถ้าคุณต้องการ finetune ในชุดข้อมูลหลายชุด เราจะใช้สำเนานี้เป็นข้อมูลอ้างอิงและทำการเปลี่ยนแปลงที่จำเป็นเพื่อใช้ชุดข้อมูลใหม่เท่านั้น ค้นหาการโทรไปยังฟังก์ชั่น PREPAL_TTS_CORPUS แทนที่ path_to_transcript_dict ที่ใช้กับหนึ่งที่คุณเพิ่งสร้าง จากนั้นเปลี่ยนชื่อของไดเรกทอรีแคชที่เกี่ยวข้องเป็นสิ่งที่เหมาะสมสำหรับชุดข้อมูล ระวังตัวแปร save_dir ซึ่งเป็นที่ที่จุดตรวจจะถูกบันทึกลงไป นี่เป็นค่าเริ่มต้นคุณสามารถเขียนทับได้เมื่อเรียกท่อในภายหลังโดยใช้อาร์กิวเมนต์บรรทัดคำสั่งในกรณีที่คุณต้องการปรับแต่งจากจุดตรวจสอบและบันทึกลงในไดเรกทอรีอื่น ในที่สุดเปลี่ยนอาร์กิวเมนต์ Lang ในการสร้างชุดข้อมูลและในการเรียกใช้ฟังก์ชันลูปรถไฟเป็นรหัสภาษา ISO 639-3 ที่ตรงกับข้อมูลของคุณ
ข้อโต้แย้งที่มอบให้กับลูปรถไฟในตัวอย่าง finetuning มีความหมายสำหรับกรณีของการ finetuning จากรูปแบบที่ผ่านการฝึกอบรม หากคุณต้องการฝึกอบรมตั้งแต่เริ่มต้นให้ดูที่ไปป์ไลน์อื่นที่มี toucantts ในชื่อของมันและดูข้อโต้แย้งที่ใช้ที่นั่น
เมื่อสิ่งนี้เสร็จสมบูรณ์แล้วเราเกือบจะเสร็จแล้วตอนนี้เราเพียงแค่ต้องทำให้ไฟล์ run_training_pipeline.py อยู่ในระดับบนสุด ในไฟล์ดังกล่าวนำเข้าฟังก์ชั่นการ เรียกใช้ จากไปป์ไลน์ที่คุณเพิ่งสร้างและตั้งชื่อที่มีความหมาย ตอนนี้ใน pipeline_dict ให้เพิ่มฟังก์ชั่นที่นำเข้าของคุณเป็นค่าและใช้เป็นกุญแจสำคัญชวเลขที่สมเหตุสมผล
เมื่อคุณมีสูตรที่สร้างขึ้นการฝึกอบรมเป็นเรื่องง่ายมาก:
python run_training_pipeline.py <shorthand of the pipeline>
คุณสามารถจัดหาข้อโต้แย้งใด ๆ ต่อไปนี้ แต่ไม่จำเป็นต้อง (แม้ว่าสำหรับการฝึกอบรมคุณควรระบุรหัส GPU อย่างน้อย)
--gpu_id <ID of the GPU you wish to use, as displayed with nvidia-smi, default is cpu. If multiple GPUs are provided (comma separated), then distributed training will be used, but the script has to be started with torchrun.>
--resume_checkpoint <path to a checkpoint to load>
--resume (if this is present, the furthest checkpoint available will be loaded automatically)
--finetune (if this is present, the provided checkpoint will be fine-tuned on the data from this pipeline)
--model_save_dir <path to a directory where the checkpoints should be saved>
--wandb (if this is present, the logs will be synchronized to your weights&biases account, if you are logged in on the command line)
--wandb_resume_id <the id of the run you want to resume, if you are using weights&biases (you can find the id in the URL of the run)>
สำหรับการฝึกอบรมแบบหลาย GPU คุณต้องจัดหารหัส GPU หลายตัว (คั่นด้วยเครื่องหมายจุลภาค) และเริ่มต้นสคริปต์ด้วยการเกิดแรงบิด คุณต้องระบุจำนวน GPU สิ่งนี้ต้องตรงกับจำนวน ID ที่คุณจัดหา ระวัง: Torchrun ไม่เข้ากันกับ Nohup! ใช้ TMUX แทนเพื่อให้สคริปต์ทำงานหลังจากที่คุณออกจากตำแหน่งเชลล์
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
หลังจากทุกยุค (หรือหลังจากนับขั้นตอนบางอย่าง) บันทึกบางอย่างจะถูกเขียนลงในคอนโซลและเว็บไซต์น้ำหนักและอคติหากคุณเข้าสู่ระบบและตั้งค่าสถานะ หากคุณได้รับ Cuda จากข้อผิดพลาดของหน่วยความจำคุณจะต้องลด batchsize ในอาร์กิวเมนต์ของการโทรไปยังการฝึกอบรม _loop ในไปป์ไลน์ที่คุณกำลังทำงานอยู่ ลองลด batchsize ในขั้นตอนเล็ก ๆ จนกว่าคุณจะไม่ได้รับข้อผิดพลาดของหน่วยความจำ CUDA อีกต่อไป
ในไดเรกทอรีที่คุณระบุไว้สำหรับการบันทึกไฟล์จุดตรวจสอบและข้อมูลการสร้างภาพข้อมูลสเปกโทรคจะปรากฏขึ้น เนื่องจากจุดตรวจนั้นค่อนข้างใหญ่มีเพียงห้าจุดล่าสุดเท่านั้นที่จะถูกเก็บไว้ ปริมาณของขั้นตอนการฝึกอบรมสูงขึ้นอยู่กับข้อมูลที่คุณใช้และไม่ว่าคุณจะ finetuning จากจุดตรวจสอบหรือการฝึกอบรมที่ได้รับการฝึกฝนมาก่อน ยิ่งคุณมีข้อมูลน้อยลงเท่าใดคุณควรทำตามขั้นตอนที่น้อยลงเพื่อป้องกันการล่มสลายที่เป็นไปได้ หากคุณต้องการหยุดก่อนหน้านี้เพียงแค่ฆ่ากระบวนการเพราะทุกอย่างเป็น daemonic ทุกกระบวนการเด็กควรตายด้วย ในกรณีที่มีการประมวลผลผีอยู่ข้างหลังคุณสามารถใช้คำสั่งต่อไปนี้เพื่อค้นหาพวกเขาและฆ่าพวกเขาด้วยตนเอง
fuser -v /dev/nvidia*
เมื่อใดก็ตามที่มีการบันทึกจุด ตรวจ
นี่คือบางจุดที่ผู้ใช้นำขึ้นมา:
run_scorer.pyUserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - เราใช้ตัวกำหนดตารางเวลาที่กำหนดเองและคบเพลิงคิดอย่างไม่ถูกต้องคิดว่าเราเรียกผู้กำหนดตารางเวลาและเครื่องมือเพิ่มประสิทธิภาพในลำดับที่ไม่ถูกต้อง เพียงเพิกเฉยต่อคำเตือนนี้มันไม่มีความหมายอย่างสมบูรณ์WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - คำเตือนที่ไม่มีความหมายอื่น จริง ๆ แล้วเราไม่ได้ใช้ Xformers ตัวเองมันเป็นเพียงส่วนหนึ่งของการพึ่งพาของหนึ่งในการพึ่งพาของเรา แต่ไม่ได้ใช้ในสถานที่ใด ๆThe torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - เพิ่งเกิดขึ้นภายใต้ Windows และไม่มีผลกระทบอะไรเลยWARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - เราไม่รู้ว่าทำไม Espeak เริ่มให้คำเตือนนี้ แต่ดูเหมือนจะไม่ส่งผลกระทบใด ๆ ดังนั้นจึงปลอดภัยที่จะเพิกเฉยNaN - อัตราการเรียนรู้เริ่มต้นทำงานกับข้อมูลที่สะอาด หากข้อมูลของคุณสะอาดน้อยกว่าให้ลองใช้ผู้ทำประตูเพื่อค้นหาตัวอย่างที่มีปัญหาหรือลดอัตราการเรียนรู้ ปัญหาที่พบบ่อยที่สุดคือการหยุดพูด แต่ไม่มีอะไรที่บอกใบ้ในข้อความ นั่นเป็นเหตุผลที่ ASR Corpora ซึ่งออกเครื่องหมายวรรคตอนมักจะใช้งานยากสำหรับ TTS โมดูล pytorch พื้นฐานของ Fastspeech 2 และ GST นำมาจาก ESPNET โมดูล pytorch ของ Hifi-GAN นั้นนำมาจากที่เก็บคู่ขนาน โมดูลบางอย่างที่เกี่ยวข้องกับ postnet ตามเงื่อนไขการจับคู่ตามที่ระบุไว้ใน Matchatts นั้นนำมาจาก Codebase Matchatts อย่างเป็นทางการและบางส่วนถูกนำมาจาก Stabletts Codebase สำหรับการแปลงแบบกราฟเป็นฟอนิมเราพึ่งพา ESPEAK-NG ดังกล่าวข้างต้นรวมถึง Transphone เราใช้ Encodec ตัวแปลงสัญญาณเสียงประสาทเป็นตัวแทนระดับกลางสำหรับการแคชข้อมูลรถไฟเพื่อประหยัดพื้นที่
@inproceedings{lux2021toucan,
year = 2021,
title = {{The IMS Toucan system for the Blizzard Challenge 2021}},
author = {Florian Lux and Julia Koch and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2022laml,
year = 2022,
title = {{Language-Agnostic Meta-Learning for Low-Resource Text-to-Speech with Articulatory Features}},
author = {Florian Lux and Ngoc Thang Vu},
booktitle = {ACL}
}
@inproceedings{lux2022cloning,
year = 2022,
title = {{Exact Prosody Cloning in Zero-Shot Multispeaker Text-to-Speech}},
author = {Lux, Florian and Koch, Julia and Vu, Ngoc Thang},
booktitle = {SLT},
publisher = {IEEE}
}
@inproceedings{lux2022lrms,
year = 2022,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Julia Koch and Ngoc Thang Vu},
booktitle = {AACL}
}
@inproceedings{lux2023controllable,
year = 2023,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Pascal Tilli and Sarina Meyer and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}
@inproceedings{lux2023blizzard,
year = 2023,
title = {{The IMS Toucan System for the Blizzard Challenge 2023}},
author = {Florian Lux and Julia Koch and Sarina Meyer and Thomas Bott and Nadja Schauffler and Pavel Denisov and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2024massive,
year = 2024,
title = {{Meta Learning Text-to-Speech Synthesis in over 7000 Languages}},
author = {Florian Lux and Sarina Meyer and Lyonel Behringer and Frank Zalkow and Phat Do and Matt Coler and Emanuël A. P. Habets and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}