ในบทความนี้เรานำเสนอ Styletts 2 โมเดลข้อความเป็นคำพูด (TTS) ที่ใช้ประโยชน์จากการแพร่กระจายสไตล์และการฝึกอบรมที่เป็นปฏิปักษ์กับแบบจำลองภาษาพูดขนาดใหญ่ (SLMS) เพื่อให้ได้การสังเคราะห์ TTS ระดับมนุษย์ Styletts 2 แตกต่างจากรุ่นก่อนโดยการสร้างแบบจำลองรูปแบบเป็นตัวแปรสุ่มแฝงผ่านแบบจำลองการแพร่กระจายเพื่อสร้างสไตล์ที่เหมาะสมที่สุดสำหรับข้อความโดยไม่ต้องใช้คำพูดอ้างอิงบรรลุการแพร่กระจายแฝงอย่างมีประสิทธิภาพในขณะที่ได้รับประโยชน์จากการสังเคราะห์คำพูดที่หลากหลาย นอกจากนี้เรายังใช้ SLM ที่ได้รับการฝึกอบรมมาล่วงหน้าจำนวนมากเช่น WAVLM ซึ่งเป็นตัวเลือกจำเพาะกับการสร้างแบบจำลองระยะเวลาที่แตกต่างกันใหม่ของเราสำหรับการฝึกอบรมแบบครบวงจรส่งผลให้เกิดธรรมชาติที่ดีขึ้น Styletts 2 เหนือกว่าการบันทึกของมนุษย์ในชุดข้อมูล LJSpeech ลำโพงเดี่ยวและจับคู่กับชุดข้อมูล Multispeaker VCTK ตามที่ตัดสินโดยเจ้าของภาษาอังกฤษ ยิ่งไปกว่านั้นเมื่อได้รับการฝึกฝนในชุดข้อมูล Libritts โมเดลของเราจะมีประสิทธิภาพสูงกว่ารุ่นที่เปิดเผยต่อสาธารณชนก่อนหน้านี้สำหรับการปรับตัวลำโพงแบบศูนย์ งานนี้ประสบความสำเร็จในการสังเคราะห์ TTS ระดับมนุษย์เป็นครั้งแรกในชุดข้อมูลทั้งสองและแบบหลายส่วนแสดงให้เห็นถึงศักยภาพของการแพร่กระจายสไตล์และการฝึกอบรมที่เป็นปฏิปักษ์กับ SLM ขนาดใหญ่
กระดาษ: https://arxiv.org/abs/2306.07691
ตัวอย่างเสียง: https://styletts2.github.io/
การสาธิตออนไลน์: Hugging Face (ขอบคุณ @FakeryBakery สำหรับการสาธิตออนไลน์ที่ยอดเยี่ยม)
train_second.py (ฉันได้ลองทุกอย่างที่ทำได้เพื่อแก้ไขปัญหานี้ แต่ไม่ประสบความสำเร็จดังนั้นหากคุณยินดีที่จะช่วยเหลือโปรดดู #7) git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2pip install -r requirements.txtบน Windows Add:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -Uติดตั้ง phonemizer และ espeak หากคุณต้องการเรียกใช้การสาธิต:
pip install phonemizer
sudo apt-get install espeak-ngการฝึกอบรมขั้นตอนแรก:
accelerate launch train_first.py --config_path ./Configs/config.ymlการฝึกอบรมขั้นตอนที่สอง (เวอร์ชัน DDP ไม่ทำงานดังนั้นเวอร์ชันปัจจุบันใช้ DP อีกครั้งดูที่ #7 หากคุณต้องการความช่วยเหลือ) :
python train_second.py --config_path ./Configs/config.yml คุณสามารถเรียกใช้ทั้งสองติดต่อกันและมันจะฝึกอบรมทั้งขั้นตอนแรกและครั้งที่สอง โมเดลจะถูกบันทึกในรูปแบบ "epoch_1st_%05d.pth" และ "epoch_2nd_%05d.pth" จุดตรวจและบันทึก Tensorboard จะถูกบันทึกที่ log_dir
รูปแบบรายการข้อมูลจะต้องเป็น filename.wav|transcription|speaker ดู val_list.txt เป็นตัวอย่าง ฉลากลำโพงเป็นสิ่งจำเป็นสำหรับโมเดลหลายลำโพงเพราะเราจำเป็นต้องสุ่มตัวอย่างเสียงอ้างอิงสำหรับการฝึกอบรมรูปแบบการแพร่กระจายสไตล์
ใน config.yml มีการกำหนดค่าที่สำคัญบางประการในการดูแล:
OOD_data : เส้นทางสำหรับการแจกแจงข้อความสำหรับการฝึกอบรมที่ไม่เหมาะสมของ SLM รูปแบบควรเป็น text|anythingmin_length : ความยาวขั้นต่ำของข้อความ OOD สำหรับการฝึกอบรม นี่คือเพื่อให้แน่ใจว่าคำพูดที่สังเคราะห์มีความยาวขั้นต่ำmax_len : ความยาวสูงสุดของเสียงสำหรับการฝึกอบรม หน่วยคือเฟรม เนื่องจากขนาดฮ็อพเริ่มต้นคือ 300 เฟรมหนึ่งเฟรมประมาณ 300 / 24000 (0.0125) วินาที ลดสิ่งนี้หากคุณพบปัญหานอกหน่วยความจำmultispeaker : ตั้งค่าเป็นจริงหากคุณต้องการฝึกอบรมรุ่น Multispeaker สิ่งนี้จำเป็นเพราะสถาปัตยกรรมของ Denoiser นั้นแตกต่างกันสำหรับรุ่นเดี่ยวและหลายรุ่นbatch_percentage : นี่คือเพื่อให้แน่ใจว่าในระหว่างการฝึกอบรม SLM enderial ไม่มีปัญหานอกหน่วยความจำ (oom) หากคุณพบปัญหา oom โปรดตั้งหมายเลขที่ต่ำกว่าสำหรับสิ่งนี้ในโฟลเดอร์ UTILS มีสามรุ่นที่ผ่านการฝึกอบรมมาก่อน:
batch_size ที่ต่ำกว่าหรือ max_len คุณอาจอ้างถึงปัญหา #10 สำหรับข้อมูลเพิ่มเติม สคริปต์ได้รับการแก้ไขจาก train_second.py ซึ่งใช้ DP เนื่องจาก DDP ไม่ทำงานสำหรับ train_second.py โปรดดูส่วน BOLD ด้านบนหากคุณยินดีที่จะช่วยเหลือปัญหานี้
python train_finetune.py --config_path ./Configs/config_ft.yml โปรดตรวจสอบให้แน่ใจว่าคุณมีจุดตรวจสอบ Libritts ที่ดาวน์โหลดและคลายซิปภายใต้โฟลเดอร์ การกำหนดค่าเริ่มต้น config_ft.yml finetunes บน ljspeech กับ 1 ชั่วโมงของข้อมูลการพูด (ประมาณ 1k ตัวอย่าง) สำหรับ 50 epochs ใช้เวลาประมาณ 4 ชั่วโมงในการเสร็จสิ้นในสี่ Nvidia A100 คุณภาพนั้นแย่ลงเล็กน้อย (คล้ายกับ naturalspeech บน ljspeech) กว่ารุ่น LJSpeech ที่ผ่านการฝึกอบรมมาตั้งแต่เริ่มต้นด้วยข้อมูลการพูด 24 ชั่วโมงซึ่งใช้เวลาประมาณ 2.5 วันในการเสร็จสิ้นในสี่ A100 ตัวอย่างสามารถพบได้ที่ #65 (ความคิดเห็น)
หากคุณใช้ GPU เดียว (เนื่องจากสคริปต์ใช้งานไม่ได้กับ DDP) และต้องการประหยัดความเร็วในการฝึกอบรมและ VRAM คุณสามารถทำได้ (ขอบคุณ @Korakoe สำหรับการสร้างสคริปต์ที่ #100):
accelerate launch --mixed_precision=fp16 --num_processes=1 train_finetune_accelerate.py --config_path ./Configs/config_ft.yml@Kreevoz ได้จดบันทึกรายละเอียดเกี่ยวกับปัญหาทั่วไปในการ finetuning พร้อมคำแนะนำในการเพิ่มคุณภาพเสียงให้สูงสุด: #81 บางส่วนของสิ่งเหล่านี้ยังใช้กับการฝึกอบรมตั้งแต่เริ่มต้น @iieleven11 ได้สร้างแนวทางสำหรับการปรับแต่ง: #128
joint_epoch : นี่อาจเป็นเพราะ GPU RAM ของคุณไม่ใหญ่พอสำหรับการฝึกอบรมที่เป็นปฏิปักษ์ของ SLM คุณอาจข้ามไปได้ แต่คุณภาพอาจแย่ลง การตั้ง joint_epoch จำนวนที่ใหญ่กว่า epochs สามารถข้ามการฝึกอบรม SLM Advesariral โปรดดูที่ inference_ljspeech.ipynb (speaker เดี่ยว) และ inference_libritts.ipynb (หลายผู้รับ) สำหรับรายละเอียด สำหรับ Libritts คุณจะต้องดาวน์โหลด reference_audio.zip และคลายซิปภายใต้ demo ก่อนที่จะเรียกใช้การสาธิต
Pretrained Styletts 2 บน LJSpeech Corpus ใน 24 kHz สามารถดาวน์โหลดได้ที่ https://huggingface.co/yl4579/styletts2-ljspeech/tree/main
สามารถดาวน์โหลดรุ่น Styletts 2 บน Libritts ได้ที่ https://huggingface.co/yl4579/styletts2-libritts/tree/main
คุณสามารถนำเข้า Styletts 2 และเรียกใช้ในรหัสของคุณเอง อย่างไรก็ตามการอนุมานขึ้นอยู่กับแพ็คเกจที่ได้รับอนุญาตจาก GPL ดังนั้นจึงไม่รวมอยู่ในที่เก็บข้อมูลนี้โดยตรง ส้อมที่ได้รับใบอนุญาต GPL มีสคริปต์ที่นำเข้ามารวมถึง API สตรีมมิ่งทดลอง ฯลฯ แพ็คเกจที่ได้รับอนุญาตจาก MIT อย่างเต็มที่ซึ่งใช้ Gruut (แม้ว่าจะมีคุณภาพต่ำกว่าเนื่องจากไม่ตรงกันระหว่างเครื่องเสริมและ gruut) ก็มีให้เลือกเช่นกัน
ก่อนที่จะใช้โมเดลที่ผ่านการฝึกอบรมมาแล้วคุณตกลงที่จะแจ้งผู้ฟังว่าตัวอย่างคำพูดถูกสังเคราะห์โดยโมเดลที่ผ่านการฝึกอบรมมาก่อนเว้นแต่คุณจะได้รับอนุญาตให้ใช้เสียงที่คุณสังเคราะห์ นั่นคือคุณตกลงที่จะใช้เฉพาะเสียงที่ผู้พูดอนุญาตให้มีการโคลนเสียงของพวกเขาไม่ว่าโดยตรงหรือโดยใบอนุญาตก่อนที่จะทำการสังเคราะห์เสียงสาธารณะหรือคุณต้องประกาศต่อสาธารณะว่าเสียงเหล่านี้ถูกสังเคราะห์หากคุณไม่ได้รับอนุญาตให้ใช้เสียงเหล่านี้
รหัส: ใบอนุญาต MIT
โมเดลที่ผ่านการฝึกอบรมมาก่อน: ก่อนที่จะใช้โมเดลที่ผ่านการฝึกอบรมมาก่อนเหล่านี้คุณตกลงที่จะแจ้งผู้ฟังว่าตัวอย่างคำพูดถูกสังเคราะห์โดยโมเดลที่ผ่านการฝึกอบรมมาก่อนเว้นแต่คุณจะได้รับอนุญาตให้ใช้เสียงที่คุณสังเคราะห์ นั่นคือคุณตกลงที่จะใช้เฉพาะเสียงที่ผู้พูดอนุญาตให้มีการโคลนเสียงของพวกเขาไม่ว่าโดยตรงหรือโดยใบอนุญาตก่อนที่จะทำการสังเคราะห์เสียงสาธารณะหรือคุณต้องประกาศต่อสาธารณะว่าเสียงเหล่านี้ถูกสังเคราะห์หากคุณไม่ได้รับอนุญาตให้ใช้เสียงเหล่านี้