หมายเหตุ : นี่คือเวอร์ชันการพัฒนา หากคุณต้องการเวอร์ชันที่เสถียรโปรดชำระเงิน V0.1.1
เป้าหมายของพื้นที่เก็บข้อมูลคือการดำเนินการตามคำสั่ง Wavenet ซึ่งสามารถสร้างตัวอย่างการพูดดิบคุณภาพสูงที่มีเงื่อนไขเกี่ยวกับคุณสมบัติทางภาษาศาสตร์หรืออะคูสติก
ตัวอย่างเสียงมีอยู่ที่ https://r9y9.github.io/wavenet_vocoder/
สมุดบันทึกที่ควรจะดำเนินการใน https://colab.research.google.com พร้อมใช้งาน:
หมายเหตุ : นี่ไม่ใช่โมเดลข้อความเป็นคำพูด (TTS) ด้วยโมเดลที่ผ่านการฝึกอบรมมาก่อนที่นี่คุณสามารถสังเคราะห์รูปคลื่นได้เนื่องจาก MEL spectrogram ไม่ใช่ข้อความดิบ คุณจะต้องใช้แบบจำลองการทำนาย Mel-Spectrogram (เช่น Tacotron2) เพื่อใช้แบบจำลองที่ผ่านการฝึกอบรมมาก่อนสำหรับ TTS
หมายเหตุ : สำหรับโมเดลที่ผ่านการฝึกอบรมสำหรับ LJSpeech โมเดลได้รับการปรับแต่งหลายครั้งและได้รับการฝึกฝนมานานกว่า 1,000K ขั้นตอนทั้งหมด โปรดดูปัญหา ( #1, #75, #45) เพื่อทราบว่ารูปแบบได้รับการฝึกฝนอย่างไร
| URL รุ่น | ข้อมูล | Hyper Params URL | Git Commit | ขั้นตอน |
|---|---|---|---|---|
| การเชื่อมโยง | ljspeech | การเชื่อมโยง | 2092A64 | 1,000k ~ ขั้นตอน |
| การเชื่อมโยง | CMU Arctic | การเชื่อมโยง | B1A1076 | ขั้นตอน 740K |
หากต้องการใช้โมเดลที่ผ่านการฝึกอบรมมาก่อนให้ชำระเงินก่อนที่ GIT เฉพาะที่ระบุไว้ข้างต้น เช่น,
git checkout ${commit_hash}
จากนั้นติดตามส่วน "สังเคราะห์จากจุดตรวจ" ในส่วนอ่าน โปรดทราบว่าการสังเคราะห์รุ่นเก่า py อาจไม่ยอมรับ --preset=<json> พารามิเตอร์และคุณอาจต้องเปลี่ยน hparams.py ตามไฟล์ที่ตั้งไว้ล่วงหน้า (JSON)
คุณสามารถลองตัวอย่างเช่น:
# Assuming you have downloaded LJSpeech-1.1 at ~/data/LJSpeech-1.1
# pretrained model (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# hparams (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech
--preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
--conditional=./data/ljspeech/ljspeech-mel-00001.npy
20180510_mixture_lj_checkpoint_step000320000_ema.pth
generated
คุณสามารถค้นหาไฟล์ WAV ที่สร้างขึ้นในไดเรกทอรี generated สงสัยว่ามันทำงานอย่างไร? จากนั้นดูรหัส :)
ที่เก็บประกอบด้วย 1) Pytorch Library, 2) เครื่องมือบรรทัดคำสั่งและ 3) สูตรสไตล์ ESPNET อันแรกคือห้องสมุด Pytorch ที่ให้ฟังก์ชั่น Wavanet อันที่สองคือชุดเครื่องมือในการเรียกใช้การฝึกอบรม/การอนุมาน Wavenet การประมวลผลข้อมูล ฯลฯ อันสุดท้ายคือสูตรที่ทำซ้ำได้รวมไลบรารี Wavenet และเครื่องมือยูทิลิตี้ โปรดดูพวกเขาขึ้นอยู่กับจุดประสงค์ของคุณ หากคุณต้องการสร้าง wavenet ของคุณในชุดข้อมูลของคุณ (ฉันเดาว่านี่เป็นกรณีที่น่าจะเป็นไปได้มากที่สุด) สูตรเป็นวิธีสำหรับคุณ
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
หากคุณต้องการส่วนห้องสมุดเท่านั้นคุณสามารถติดตั้งได้จาก PYPI:
pip install wavenet_vocoder
ที่เก็บจัดเตรียมสูตรสไตล์ Kaldi เพื่อทำการทดลองที่ทำซ้ำได้และจัดการได้ง่าย สูตรที่มีอยู่มีดังนี้:
mulaw256 : Wavenet ที่ใช้การกระจายเอาต์พุตหมวดหมู่ อินพุตคือรูปคลื่นปริมาณ Mulaw 8 บิตmol : ส่วนผสมของโลจิสติกส์ (โมล) Wavenet อินพุตเป็นเสียงดิบ 16 บิตgaussian : Wavenet เดี่ยว-เกาส์ (อาจารย์ AKA Wavenet แห่งคลาริเน็ต) อินพุตเป็นเสียงดิบ 16 บิต สูตรทั้งหมด run.sh ซึ่งระบุขั้นตอนทั้งหมดเพื่อดำเนินการฝึกอบรม/อนุมาน Wavenet รวมถึงการประมวลผลข้อมูลล่วงหน้า โปรดดู Run.sh ในไดเรกทอรี EGS สำหรับรายละเอียด
ข้อสังเกต : การปรับอากาศทั่วโลกสำหรับ Wavenet หลายลำโพงไม่ได้รับการสนับสนุนในสูตรข้างต้น (ไม่ควรใช้งานได้ยาก) โปรดตรวจสอบ v0.1.12 สำหรับคุณสมบัตินี้หรือหากคุณ ต้องการ คุณสมบัตินี้โปรดยกประเด็นปัญหา
สูตรอาหารได้รับการออกแบบให้เป็นทั่วไปเพื่อให้สามารถใช้สำหรับชุดข้อมูลใด ๆ ในการใช้สูตรอาหารกับชุดข้อมูลของคุณเองคุณจะต้องใส่ไฟล์ WAV ทั้งหมด ในไดเรกทอรีแบบแบนเดียว เช่น,
> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav
แค่ไหน! ขั้นตอนสุดท้ายคือการแก้ไข db_root ใน run.sh หรือให้ db_root เป็นการโต้เถียงบรรทัดคำสั่งสำหรับ run.sh
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
โดยทั่วไปสูตรประกอบด้วยหลายขั้นตอน ขอแนะนำอย่างยิ่งให้เรียกใช้สูตรทีละขั้นตอนเพื่อทำความเข้าใจวิธีการทำงานเป็นครั้งแรก หากต้องการทำเช่นนั้นให้ระบุ stage และ stop_stage ดังนี้:
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
ในสถานการณ์ทั่วไปคุณจะต้องระบุอุปกรณ์ CUDA ที่อธิบายอย่างชัดเจนสำหรับขั้นตอนการฝึกอบรม
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
เครื่องมือบรรทัดคำสั่งเป็น writtern ด้วย docopt ดูเอกสารแต่ละรายการสำหรับการใช้งานพื้นฐาน
Dump Hyperparameters ไปยังไฟล์ JSON
การใช้งาน:
python tojson.py --hparams="parameters you want to override" <output_json_path>
การใช้งาน:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
หมายเหตุ: สำหรับการฝึกอบรมหลาย GPU คุณจะต้องตรวจสอบให้แน่ใจว่า batch_size % num_gpu == 0
การใช้งาน:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
ได้รับ Directoy ที่มีคุณสมบัติการปรับสภาพในท้องถิ่นสังเคราะห์รูปคลื่นสำหรับพวกเขา
การใช้งาน:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
ตัวเลือก:
--num-utterances=<N> : จำนวนคำพูดที่จะสร้าง หากไม่ได้ระบุให้สร้างความหมายทั้งหมด สิ่งนี้มีประโยชน์สำหรับการดีบัก ข้อสังเกต : นี่อาจไม่ได้ผลตอนนี้ โปรดใช้ evaluate.py แทน
การสังเคราะห์รูปคลื่นให้คุณสมบัติการปรับสภาพ
การใช้งาน:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
ตัวเลือกที่สำคัญ:
--conditional=<path> : (จำเป็นสำหรับ wavenet แบบมีเงื่อนไข) เส้นทางของคุณสมบัติตามเงื่อนไขในท้องถิ่น (.npy) หากระบุสิ่งนี้จำนวนขั้นตอนเวลาในการสร้างจะถูกกำหนดโดยขนาดของคุณสมบัติเงื่อนไขข้อสังเกต : นี่อาจไม่ได้ผลตอนนี้ โปรดตรวจสอบ v0.1.1 สำหรับเวอร์ชันที่ใช้งานได้
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
คุณต้องปิดใช้งานการปรับสภาพทั่วโลกและท้องถิ่นโดยการตั้ง gin_channels และ cin_channels เป็นค่าลบ
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
ข้อสังเกต : นี่อาจไม่ได้ผลตอนนี้ โปรดตรวจสอบ v0.1.1 สำหรับเวอร์ชันที่ใช้งานได้
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
บันทึกจะถูกทิ้งใน ./log directory โดยค่าเริ่มต้น คุณสามารถตรวจสอบบันทึกโดย Tensorboard:
tensorboard --logdir=log
ขอบคุณมาก!! หากคุณพบใหม่โปรดส่ง PR