
การใช้งาน Pytorch ของโมเดลการสังเคราะห์ข้อความแบบข้อความที่ใช้กับเครือข่ายแบบ convolutional:
ตัวอย่างเสียงมีอยู่ที่ https://r9y9.github.io/deepvoice3_pytorch/
สมุดบันทึกควรจะดำเนินการใน https://colab.research.google.com พร้อมใช้งาน:
หมายเหตุ : โมเดลที่ผ่านการฝึกอบรมไม่สามารถใช้งานได้กับมาสเตอร์ ที่จะอัปเดตเร็ว ๆ นี้
| url | แบบอย่าง | ข้อมูล | พารามิเตอร์ไฮเปอร์ | Git Commit | ขั้นตอน |
|---|---|---|---|---|---|
| การเชื่อมโยง | Deepvoice3 | ljspeech | การเชื่อมโยง | ABF0A21 | 640K |
| การเชื่อมโยง | ชาวนูจาโก | ljspeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585K |
| การเชื่อมโยง | DeepVoice3 | VCTK | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300K + 300K |
หากต้องการใช้โมเดลที่ผ่านการฝึกอบรมมาก่อนขอแนะนำให้คุณใช้ GIT เฉพาะ ที่ระบุไว้ข้างต้น เช่น,
git checkout ${commit_hash}
จากนั้นทำตามส่วน "สังเคราะห์จากจุดตรวจ" ในส่วนอ่านของ GIT เฉพาะ โปรดสังเกตว่าเวอร์ชันการพัฒนาล่าสุดของที่เก็บอาจไม่ทำงาน
คุณสามารถลองตัวอย่างเช่น:
# pretrained model (20180505_deepvoice3_checkpoint_step000640000.pth)
# hparams (20180505_deepvoice3_ljspeech.json)
git checkout 4357976
python synthesis.py --preset=20180505_deepvoice3_ljspeech.json
20180505_deepvoice3_checkpoint_step000640000.pth
sentences.txt
output_dir
hparams.py สำหรับรายละเอียดbuilder ระบุรุ่นที่คุณต้องการใช้ deepvoice3 , deepvoice3_multispeaker [1] และ nyanko [2] ได้รับการสนับสนุนโปรดติดตั้งแพ็คเกจที่ระบุไว้ข้างต้นก่อนจากนั้น
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
มีพารามิเตอร์ไฮเปอร์จำนวนมากที่จะเปิดขึ้นอยู่กับรุ่นและข้อมูลที่คุณกำลังทำงานอยู่ สำหรับชุดข้อมูลและรุ่นทั่วไปพารามิเตอร์ที่รู้จักกันในการทำงานที่ดี ( ที่ตั้งไว้ล่วงหน้า ) มีให้ในที่เก็บ ดูไดเรกทอรี presets สำหรับรายละเอียด สังเกตว่า
preprocess.pytrain.pysynthesis.py ยอมรับ --preset=<json> พารามิเตอร์ตัวเลือกซึ่งระบุตำแหน่งที่จะโหลดพารามิเตอร์ที่ตั้งไว้ล่วงหน้า หากคุณกำลังจะใช้พารามิเตอร์ที่ตั้งไว้ล่วงหน้าคุณจะต้องใช้ --preset=<json> ตลอดการประมวลผลล่วงหน้าการฝึกอบรมและการประเมินผล เช่น
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
แทน
python preprocess.py ljspeech ~/data/LJSpeech-1.0
# warning! this may use different hyper parameters used at preprocessing stage
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
การใช้งาน:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
รองรับ ${dataset_name} s คือ:
ljspeech (en, ลำโพงเดี่ยว)vctk (EN, หลายลำโพง)jsut (JP, ลำโพงเดี่ยว)nikl_m (ko, หลายลำโพง)nikl_s (ko, ลำโพงเดี่ยว) สมมติว่าคุณใช้พารามิเตอร์ที่ตั้งไว้ล่วงหน้าที่รู้จักกันดีว่าทำงานได้ดีสำหรับชุดข้อมูล LJSpeech/DeepVoice3 และมีข้อมูลใน ~/data/LJSpeech-1.0 จากนั้นคุณสามารถประมวลผลข้อมูลล่วงหน้าได้โดย:
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
เมื่อทำเสร็จแล้วคุณจะเห็นคุณสมบัติที่แยกออกมา (mel-spectrograms และ spectrograms เชิงเส้น) ใน ./data/ljspeech ljspeech
การสร้างชุดข้อมูลของคุณเองด้วยข้อมูลเมตาในรูปแบบ JSON (เข้ากันได้กับ CarpedM20/Multi-Speaker-Tacotron-Tensorflow) รองรับ การใช้งาน:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
คุณอาจต้องแก้ไขไฟล์ JSON ที่ตั้งไว้ล่วงหน้าที่มีอยู่ก่อนโดยเฉพาะอย่างยิ่ง n_speakers สำหรับ Multispeaker ภาษาอังกฤษเริ่มต้นด้วย presets/deepvoice3_vctk.json
สมมติว่าคุณมีชุดข้อมูล A (ลำโพง A) และชุดข้อมูล B (ลำโพง B) แต่ละชุดอธิบายไว้ในไฟล์ข้อมูลเมตา JSON ./datasets/datasetA/alignment.json และ ./datasets/datasetB/alignment.json
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
ชุดข้อมูลบางชุดโดยเฉพาะชุดข้อมูลที่สร้างขึ้นโดยอัตโนมัติอาจรวมถึงความเงียบระยะยาว (เช่น VCTK แม้ว่าจะครอบคลุมใน VCTK_PREPROCESS)
เพื่อจัดการกับปัญหา gentle_web_align.py จะ
gentle_web_align.py ใช้ Gentle เครื่องมือจัดตำแหน่งข้อความพูดด้วยคำพูดของ Kaldi สิ่งนี้เข้าถึงแอปพลิเคชั่นที่ให้บริการทางเว็บที่ให้บริการจัดตำแหน่งที่กำหนดให้กับเซ็กเมนต์เสียงด้วยการถอดเสียงและแปลงผลลัพธ์เป็นไฟล์ฉลากสไตล์ HTK เพื่อประมวลผลใน preprocess.py Gentle สามารถเรียกใช้ใน Linux/Mac/Windows (ผ่าน Docker)
ผลลัพธ์เบื้องต้นแสดงให้เห็นว่าในขณะที่ HTK/Festival/Merlin-based Method ใน vctk_preprocess/prepare_vctk_labels.py ทำงานได้ดีขึ้นบน VCTK, Gentle มีความเสถียรมากขึ้นด้วยคลิปเสียงที่มีเสียงรบกวนรอบข้าง (เช่นภาพยนตร์ที่ตัดตอนมา
การใช้งาน: (สมมติว่า Gentle ทำงานที่ localhost:8567 (ค่าเริ่มต้นเมื่อไม่ได้ระบุ))
datasetA/wavs และ Transcripts อยู่ที่ datasetA/txts ) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav และ datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
เมื่อคุณมีการจัดตำแหน่งฟอนิมสำหรับคำพูดแต่ละครั้งคุณสามารถแยกคุณสมบัติได้โดยใช้ preprocess.py
การใช้งาน:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
สมมติว่าคุณสร้างโมเดลสไตล์ DeepVoice3 โดยใช้ชุดข้อมูล LJSpeech จากนั้นคุณสามารถฝึกอบรมโมเดลของคุณได้โดย:
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
จุดตรวจสอบแบบจำลอง (.pth) และการจัดตำแหน่ง (.png) จะถูกบันทึกไว้ในไดเรกทอรี ./checkpoints checkpoints ต่อ 10,000 ขั้นตอนโดยค่าเริ่มต้น
โปรดตรวจสอบสิ่งนี้ล่วงหน้าและทำตามคำสั่งด้านล่าง
python preprocess.py nikl_s ${your_nikl_root_path} data/nikl_s --preset=presets/deepvoice3_nikls.json
python train.py --data-root=./data/nikl_s --checkpoint-dir checkpoint_nikl_s --preset=presets/deepvoice3_nikls.json
บันทึกจะถูกทิ้งใน ./log directory โดยค่าเริ่มต้น คุณสามารถตรวจสอบบันทึกโดย Tensorboard:
tensorboard --logdir=log
ได้รับรายการข้อความ synthesis.py สัญญาณการสังเคราะห์สัญญาณเสียงจากโมเดลที่ผ่านการฝึกอบรม การใช้งานคือ:
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
ตัวอย่าง test_list.txt:
Generative adversarial network or variational auto-encoder.
Once upon a time there was a dear little girl who was loved by every one who looked at her, but most of all by her grandmother, and there was nothing that she would not have given to the child.
A text-to-speech synthesis system typically consists of multiple stages, such as a text analysis frontend, an acoustic model and an audio synthesis module.
VCTK และ NIKL ได้รับการสนับสนุนชุดข้อมูลสำหรับการสร้างโมเดลหลายลำโพง
เนื่องจากตัวอย่างเสียงบางอย่างใน VCTK มีความเงียบยาวที่มีผลต่อประสิทธิภาพจึงแนะนำให้ทำการจัดตำแหน่งฟอนิมและลบความเงียบตาม VCTK_PROCESSS
เมื่อคุณมีการจัดเรียงฟอนิมสำหรับคำพูดแต่ละครั้งคุณสามารถแยกฟีเจอร์ได้โดย:
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
ตอนนี้คุณมีข้อมูลที่เตรียมไว้แล้วคุณสามารถฝึก DeepVoice3 ได้หลายรุ่นโดย:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
หากคุณต้องการนำการเรียนรู้มาใช้ใหม่จากชุดข้อมูลอื่น ๆ คุณสามารถทำได้แทน:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
--load-embedding=20171213_deepvoice3_checkpoint_step000210000.pth
สิ่งนี้อาจปรับปรุงความเร็วในการฝึกอบรมเล็กน้อย
คุณจะสามารถรับตัวอย่างเสียงที่ทำความสะอาดได้ใน ../nikl_preprocoess รายละเอียดพบได้ที่นี่
เมื่อ Nikl Corpus พร้อมที่จะใช้จากการประมวลผลล่วงหน้าคุณสามารถแยกคุณสมบัติได้โดย:
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
ตอนนี้คุณมีข้อมูลที่เตรียมไว้แล้วคุณสามารถฝึก DeepVoice3 ได้หลายรุ่นโดย:
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
หากคุณมีข้อมูลที่ จำกัด มากคุณสามารถพิจารณาลองรุ่นที่ผ่านการฝึกอบรมล่วงหน้า ตัวอย่างเช่นการใช้โมเดลที่ผ่านการฝึกอบรมมาล่วงหน้าบน LJSpeech คุณสามารถปรับให้เข้ากับข้อมูลจากลำโพง VCTK p225 (30 นาที) โดยคำสั่งต่อไปนี้:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk_adaptation
--preset=presets/deepvoice3_ljspeech.json
--log-event-path=log/deepvoice3_vctk_adaptation
--restore-parts="20171213_deepvoice3_checkpoint_step000210000.pth"
--speaker-id=0
จากประสบการณ์ของฉันมันจะได้รับคุณภาพการพูดที่สมเหตุสมผลอย่างรวดเร็วมากกว่าการฝึกอบรมแบบจำลองตั้งแต่เริ่มต้น
มีสองตัวเลือกที่สำคัญที่ใช้ข้างต้น:
--restore-parts=<N> : ระบุตำแหน่งที่จะโหลดพารามิเตอร์ของโมเดล ความแตกต่างจากตัวเลือก --checkpoint=<N> คือ 1) --restore-parts=<N> ละเว้นพารามิเตอร์ที่ไม่ถูกต้องทั้งหมดในขณะที่ --checkpoint=<N> ไม่ได้ 2) --restore-parts=<N> บอกเทรนเนอร์ให้เริ่มต้นจาก 0 ขั้นตอนในขณะที่ --checkpoint=<N> บอกเทรนเนอร์ให้ดำเนินการต่อจากขั้นตอนสุดท้าย --checkpoint=<N> ควรจะโอเคถ้าคุณใช้โมเดลเดียวกันและฝึกอบรมต่อไป แต่มันจะมีประโยชน์หากคุณต้องการปรับแต่งสถาปัตยกรรมโมเดลของคุณและใช้ประโยชน์จากโมเดลที่ผ่านการฝึกอบรมมาก่อน--speaker-id=<N> : ระบุว่ามีการใช้ข้อมูลใดสำหรับการฝึกอบรม ควรระบุสิ่งนี้หากคุณใช้ชุดข้อมูลหลายลำโพง สำหรับ VCTK รหัสลำโพงจะถูกกำหนดโดยอัตโนมัติ (0, 1, ... , 107) ตาม speaker_info.txt ในชุดข้อมูล หากคุณกำลังฝึกอบรมแบบจำลองหลายลำโพงการปรับตัวของผู้พูดจะทำงานได้ก็ต่อ เมื่อ n_speakers เหมือนกัน
สิ่งนี้อาจเกิดขึ้นขึ้นอยู่กับแบ็กเอนด์ที่คุณมีสำหรับ Matplotlib ลองเปลี่ยนแบ็กเอนด์สำหรับ Matplotlib และดูว่ามันใช้งานได้ดังนี้:
MPLBACKEND=Qt5Agg python train.py ${args...}
ใน #78, EngieCat รายงานว่าการเปลี่ยนแบ็กเอนด์ของ Matplotlib จาก tkinter (tkagg) เป็น pyqt5 (qt5agg) แก้ไขปัญหา
ส่วนหนึ่งของรหัสถูกดัดแปลงจากโครงการต่อไปนี้:
แบนเนอร์และโลโก้ที่สร้างโดย @jraulhernandezi (#76)