
คลื่น
การใช้งาน (pytorch) ของ Vovoder Wavegrad ที่มีความเที่ยงตรงสูงของ Google Brain (กระดาษ) การใช้งานครั้งแรกใน GitHub ที่มีการสร้างคุณภาพสูงสำหรับ 6-terations
สถานะ
ปัจจัยเรียลไทม์ (RTF)
จำนวนพารามิเตอร์ : 15.810.401
| แบบอย่าง | มั่นคง | RTX 2080 TI | Tesla K80 | Intel Xeon 2.3GHz* |
|---|
| 1,000 การวนซ้ำ | - | 9.59 | - | - |
| 100 การวนซ้ำ | - | 0.94 | 5.85 | - |
| 50 การวนซ้ำ | - | 0.45 | 2.92 | - |
| 25 การทำซ้ำ | - | 0.22 | 1.45 | - |
| 12 การวนซ้ำ | - | 0.10 | 0.69 | 4.55 |
| 6 การทำซ้ำ | - | 0.04 | 0.33 | 2.09 |
* หมายเหตุ : ใช้ Intel Xeon CPU รุ่นเก่า
เกี่ยวกับ
Wavegrad เป็นแบบจำลองแบบมีเงื่อนไขสำหรับการสร้างรูปคลื่นผ่านการประเมินการไล่ระดับสีของความหนาแน่นของข้อมูลด้วยคุณภาพการสุ่มตัวอย่างแบบ wavenet ที่คล้ายกัน คำแนะนำนี้ไม่ใช่ GAN หรือการไหลแบบปกติหรือแบบจำลองแบบอัตโนมัติแบบคลาสสิก แนวคิดหลักของ Vocoder นั้นขึ้นอยู่กับ แบบจำลองความน่าจะเป็นแบบ denoising diffusion (DDPM) ซึ่งใช้ Langevin Dynamics และกรอบ การจับคู่คะแนน FutreMoring เมื่อเปรียบเทียบกับ DDPM แบบคลาสสิก Wavegrad บรรลุการลู่เข้าเร็วสุด (6 การวนซ้ำและอาจต่ำกว่า) WRT Langevin Dynamics Sampling Sampling Sampling
การติดตั้ง
- โคลน repo นี้:
git clone https://github.com/ivanvovk/WaveGrad.git
cd WaveGrad
- การติดตั้งข้อกำหนด:
pip install -r requirements.txt
การฝึกอบรม
1 การเตรียมข้อมูล
- สร้าง Filelists รถไฟและทดสอบข้อมูลเสียงของคุณเช่นเดียวกับที่รวมอยู่ในโฟลเดอร์
filelists - สร้างไฟล์การกำหนดค่า* ในโฟลเดอร์
configs
* หมายเหตุ: หากคุณกำลังจะเปลี่ยน hop_length สำหรับ STFT ให้ตรวจสอบให้แน่ใจว่าผลิตภัณฑ์ของ factors การสุ่มตัวอย่างของคุณในการกำหนดค่าเท่ากับ hop_length ใหม่ของคุณ
2 การฝึกอบรม GPU แบบเดี่ยวและแบบกระจาย
- เปิดสคริปต์
runs/train.sh และระบุอุปกรณ์ GPU ที่มองเห็นได้และเส้นทางไปยังไฟล์การกำหนดค่าของคุณ หากคุณระบุมากกว่าหนึ่ง GPU การฝึกอบรมจะทำงานในโหมดกระจาย - Run
sh runs/train.sh
3 เทนซอร์บอร์ดและการบันทึก
ในการติดตามกระบวนการฝึกอบรมของคุณเรียกใช้ Tensorboard โดย tensorboard --logdir=logs/YOUR_LOGDIR_FOLDER ข้อมูลการบันทึกและจุดตรวจทั้งหมดจะถูกเก็บไว้ใน logs/YOUR_LOGDIR_FOLDER logdir ระบุไว้ในไฟล์ config
4 ตารางการค้นหาตารางเสียง
เมื่อรุ่นได้รับการฝึกอบรมแล้วการค้นหาตารางที่ดีที่สุด* สำหรับจำนวนการวนซ้ำที่จำเป็นใน notebooks/inference.ipynb .ipynb รหัสสนับสนุนการขนานกันดังนั้นคุณสามารถระบุงานได้มากกว่าหนึ่งงานเพื่อเร่งการค้นหา
* หมายเหตุ : การค้นหากริดเป็นสิ่งจำเป็นสำหรับการวนซ้ำจำนวนน้อย (เช่น 6 หรือ 7) สำหรับจำนวนที่มากขึ้นเพียงลองใช้ Fibonacci Sequence benchmark.fibonacci(...) การเริ่มต้น: ฉันใช้มันสำหรับการทำซ้ำ 25 ครั้งและทำงานได้ดี ตัวอย่างเช่นจากกำหนดการ 25 รายการที่ดีคุณสามารถสร้างตารางการสั่งซื้อที่สูงขึ้นได้โดยการคัดลอกองค์ประกอบ
ตารางเสียงสำหรับรุ่นที่ผ่านการฝึกอบรม
- ได้รับตาราง 6 รายการโดยใช้การค้นหากริด หลังจากนั้นขึ้นอยู่กับโครงการที่ได้รับด้วยมือฉันพบการประมาณที่ดีขึ้นเล็กน้อย
- ได้รับตาราง 7 รายการในลักษณะเดียวกัน
- ได้รับตารางเวลา 12 รายการในลักษณะเดียวกัน
- ได้รับตาราง 25 รายการโดยใช้ Fibonacci Sequence
benchmark.fibonacci(...) - กำหนดการ 50 รายการได้รับจากองค์ประกอบซ้ำจากโครงการ 25 รายการ
- ได้รับกำหนดการ 100 รายการในลักษณะเดียวกัน
- ได้รับตารางการรับรอง 1,000 รายการในลักษณะเดียวกัน
การอนุมาน
CLI
ใส่ mel-spectrograms ของคุณในบางโฟลเดอร์ สร้าง filelist จากนั้นเรียกใช้คำสั่งนี้ด้วยอาร์กิวเมนต์ของคุณเอง:
sh runs/inference.sh -c < your-config > -ch < your-checkpoint > -ns < your-noise-schedule > -m < your-mel-filelist > -v " yes "
สมุดบันทึก Jupyter
รายละเอียดการอนุมานเพิ่มเติมมีอยู่ใน notebooks/inference.ipynb ipynb ที่นั่นคุณยังสามารถค้นหาวิธีการตั้งค่าตารางเสียงสำหรับรุ่นและทำการค้นหากริดสำหรับรูปแบบที่ดีที่สุด
อื่น
สร้างเสียง
ตัวอย่างของเสียงที่สร้างขึ้นนั้นมีให้ในโฟลเดอร์ generated_samples การลดระดับคุณภาพระหว่าง 1,000 รายการและการอนุมาน 6 รายการจะไม่สังเกตเห็นได้หากพบว่าตารางที่ดีที่สุดสำหรับหลัง
จุดตรวจสอบก่อน
คุณสามารถค้นหาไฟล์จุดตรวจสอบที่ได้รับการฝึกฝน* บน LJSpeech (22KHz) ผ่านลิงค์ Google Drive นี้
* หมายเหตุ : จุดตรวจที่อัปโหลดเป็น dict ที่มีคีย์เดียว 'model'
รายละเอียดปัญหาและความคิดเห็นที่สำคัญ
- ในระหว่างการฝึกอบรม Wavegrad ใช้ตารางเสียงรบกวนเริ่มต้นที่มีการวนซ้ำ 1,000 ครั้งและ betas เชิงเส้นเชิงเส้นจากช่วง (1E-6, 0.01) สำหรับการอนุมานคุณสามารถกำหนดตารางเวลาอื่นด้วยการทำซ้ำน้อยลง ปรับ Betas อย่างรอบคอบคุณภาพเอาต์พุตนั้นขึ้นอยู่กับมันมาก
- โดยรุ่นเริ่มต้นจะทำงานด้วยวิธีผสมที่มีความแม่นยำ ขนาดแบทช์ได้รับการแก้ไขเมื่อเทียบกับกระดาษ (256 -> 96) เนื่องจากผู้เขียนได้ฝึกอบรมแบบจำลองของพวกเขาใน TPU
- หลังจากการทำซ้ำการฝึกอบรม ~ 10K (1-2 ชั่วโมง) ใน GPU เดียวโมเดลจะทำงานได้ดีสำหรับการอนุมาน 50 รายการ เวลาฝึกอบรมทั้งหมดประมาณ 1-2 วัน (สำหรับการบรรจบกันอย่างแน่นอน)
- ในบางจุดการฝึกอบรมอาจเริ่มประพฤติตัวแปลก ๆ และบ้าคลั่ง (การสูญเสียระเบิด) ดังนั้นฉันจึงได้แนะนำการกำหนดตารางการเรียนรู้อัตราการเรียนรู้ (LR) และการตัดไล่ระดับสี หากการสูญเสียระเบิดสำหรับข้อมูลของคุณให้ลองลดแกมม่าของ LR Scheduler เล็กน้อย ควรช่วย
- โดยค่าเริ่มต้นความยาวฮอปของ STFT ของคุณเท่ากับ 300 (ดังนั้นปัจจัยการสุ่มตัวอย่างทั้งหมด) กรณีอื่นไม่ได้ทดสอบ แต่คุณสามารถลองได้ โปรดจำไว้ว่าปัจจัยการสุ่มตัวอย่างทั้งหมดควรจะเท่ากับความยาวฮ็อพใหม่ของคุณ
ประวัติการอัปเดต
- ( ใหม่ : 10/24/2020) การอัปเดตครั้งใหญ่ การฝึกอบรมแบบกระจายและการสนับสนุนความแม่นยำแบบผสม การเข้ารหัสตำแหน่งที่ถูกต้องมากขึ้น การสนับสนุน CLI สำหรับการอนุมาน การค้นหากริดแบบขนาน ขนาดของรุ่นลดลงอย่างมีนัยสำคัญ
- ข้อมูล RTF ใหม่สำหรับบัตร Nvidia Tesla K80 GPU (ยอดนิยมในบริการ Google Colab) และ CPU Intel Xeon 2.3GHz
- การอัปเดตครั้งใหญ่ ตัวอย่างตัวอย่างที่สร้างขึ้นอย่างดี 6 รายการ กำหนดเวลาเสียงรบกวนใหม่ API เพิ่มรหัสการค้นหาตารางกำหนดการที่ดีที่สุด
- ปรับปรุงการฝึกอบรมโดยแนะนำตัวกำหนดตารางอัตราการเรียนรู้ที่ชาญฉลาด ได้รับการสังเคราะห์ความเที่ยงตรงสูง
- การฝึกอบรมที่มีเสถียรภาพและการอนุมานหลายครั้ง รองรับการกำหนดเวลาเสียงรบกวน 6 ข้อ
- การฝึกอบรมที่มั่นคงและการอนุมานการคงที่ด้วยเสียงรบกวนพื้นหลังที่สำคัญซ้าย ปัญหาการเข้ารหัสตำแหน่งทั้งหมดได้รับการแก้ไข
- การฝึกอบรมที่มีเสถียรภาพของรุ่น 25-, 50- และ 1,000-fixed-iteration ไม่พบการปรับขนาดเชิงเส้น (C = 5000 จากกระดาษ) ของการเข้ารหัสตำแหน่ง (BUG)
- การฝึกอบรมที่มีเสถียรภาพของรุ่น 25-, 50- และ 1,000-fixed-iteration แก้ไขตำแหน่งการเข้ารหัสการลดระดับ การสุ่มตัวอย่างเซ็กเมนต์แบบขนานจะถูกแทนที่ด้วยการสุ่มตัวอย่างแบบเต็ม MEL
- ( วางจำหน่ายครั้งแรกใน GitHub ) การสุ่มตัวอย่างเซ็กเมนต์แบบขนานและการเข้ารหัสตำแหน่งที่แตกหัก คุณภาพที่ไม่ดีด้วยการคลิกจากการเชื่อมต่อจากการสร้างเซ็กเมนต์แบบขนาน
การอ้างอิง
- Nanxin Chen et al., Wavegrad: การประเมินการไล่ระดับสีสำหรับการสร้างรูปคลื่น
- Jonathan Ho et al., Denoising Diffusion Probabilistic Models
- denoising diffusion probabilistic repository (การใช้งาน TensorFlow) ซึ่งได้นำไปใช้การคำนวณการแพร่กระจาย