- Tensorflowtts

การสังเคราะห์คำพูดที่ทันสมัยแบบเรียลไทม์สำหรับ TensorFlow 2
- Tensorflowtts ให้สถาปัตยกรรมการสังเคราะห์คำพูดที่ทันสมัยแบบเรียลไทม์เช่น Tacotron-2, Melgan, Multiband-Melgan, Fastspeech, FastSpeech2 ตาม Tensorflow 2. ด้วย Tensorflow 2 ระบบฝังตัว
ที่เก็บนี้ได้รับการทดสอบบน Ubuntu 18.04 ด้วย:
รุ่น Tensorflow ที่แตกต่างกันควรใช้งานได้ แต่ยังไม่ได้ทดสอบ repo นี้จะพยายามทำงานกับรุ่น Tensorflow ที่มีเสถียรภาพล่าสุด เราขอแนะนำให้คุณติดตั้ง TensorFlow 2.6.0 สำหรับการฝึกอบรมในกรณีที่คุณต้องการใช้ MultigPU
$ pip install TensorFlowTTSตัวอย่างรวมอยู่ในที่เก็บ แต่ไม่ได้จัดส่งด้วยกรอบ ดังนั้นในการเรียกใช้ตัวอย่างเวอร์ชันล่าสุดคุณต้องติดตั้งแหล่งข้อมูลด้านล่าง
$ git clone https://github.com/TensorSpeech/TensorFlowTTS.git
$ cd TensorFlowTTS
$ pip install .หากคุณต้องการอัพเกรดที่เก็บและการพึ่งพา:
$ git pull
$ pip install --upgrade .ปัจจุบัน TensorFlowtts มีสถาปัตยกรรมต่อไปนี้:
นอกจากนี้เรายังใช้เทคนิคบางอย่างเพื่อปรับปรุงคุณภาพและความเร็วในการบรรจบกันจากเอกสารต่อไปนี้:
ที่นี่ในตัวอย่างเสียงในชุดที่ถูกต้อง Tacotron-2, Fastspeech, Melgan, Melgan.stft, FastSpeech2, MultiBand_Melgan
เตรียมชุดข้อมูลในรูปแบบต่อไปนี้:
|- [NAME_DATASET]/
| |- metadata.csv
| |- wavs/
| |- file1.wav
| |- ...
โดยที่ metadata.csv มีรูปแบบต่อไปนี้: id|transcription นี่คือรูปแบบเหมือน ljspeech; คุณสามารถเพิกเฉยต่อขั้นตอนการประมวลผลล่วงหน้าหากคุณมีชุดข้อมูลรูปแบบอื่น
โปรดทราบว่า NAME_DATASET ควรเป็น [ljspeech/kss/baker/libritts/synpaflex]
การประมวลผลล่วงหน้ามีสองขั้นตอน:
เพื่อทำซ้ำขั้นตอนข้างต้น:
tensorflow-tts-preprocess --rootdir ./[ljspeech/kss/baker/libritts/thorsten/synpaflex] --outdir ./dump_[ljspeech/kss/baker/libritts/thorsten/synpaflex] --config preprocess/[ljspeech/kss/baker/thorsten/synpaflex]_preprocess.yaml --dataset [ljspeech/kss/baker/libritts/thorsten/synpaflex]
tensorflow-tts-normalize --rootdir ./dump_[ljspeech/kss/baker/libritts/thorsten/synpaflex] --outdir ./dump_[ljspeech/kss/baker/libritts/thorsten/synpaflex] --config preprocess/[ljspeech/kss/baker/libritts/thorsten/synpaflex]_preprocess.yaml --dataset [ljspeech/kss/baker/libritts/thorsten/synpaflex]
ตอนนี้เรารองรับ ljspeech , kss , baker , libritts , thorsten และ synpaflex สำหรับอาร์กิวเมนต์ชุดข้อมูล ในอนาคตเราตั้งใจที่จะสนับสนุนชุดข้อมูลเพิ่มเติม
หมายเหตุ : หากต้องการเรียกใช้ libritts ล่วงหน้าโปรดอ่านคำแนะนำก่อนในตัวอย่าง/fastspeech2_libritts เราจำเป็นต้องฟอร์แมตใหม่ก่อนที่จะทำการประมวลผลล่วงหน้า
หมายเหตุ : หากต้องการเรียกใช้การประมวลผลล่วงหน้า synpaflex โปรดเรียกใช้โน้ตบุ๊กโน๊ตบุ๊ค/PREPAL_SYNPAFLEX.IPYNB ก่อน เราจำเป็นต้องฟอร์แมตใหม่ก่อนที่จะทำการประมวลผลล่วงหน้า
หลังจากประมวลผลล่วงหน้าโครงสร้างของโฟลเดอร์โครงการควรเป็น:
|- [NAME_DATASET]/
| |- metadata.csv
| |- wav/
| |- file1.wav
| |- ...
|- dump_[ljspeech/kss/baker/libritts/thorsten]/
| |- train/
| |- ids/
| |- LJ001-0001-ids.npy
| |- ...
| |- raw-feats/
| |- LJ001-0001-raw-feats.npy
| |- ...
| |- raw-f0/
| |- LJ001-0001-raw-f0.npy
| |- ...
| |- raw-energies/
| |- LJ001-0001-raw-energy.npy
| |- ...
| |- norm-feats/
| |- LJ001-0001-norm-feats.npy
| |- ...
| |- wavs/
| |- LJ001-0001-wave.npy
| |- ...
| |- valid/
| |- ids/
| |- LJ001-0009-ids.npy
| |- ...
| |- raw-feats/
| |- LJ001-0009-raw-feats.npy
| |- ...
| |- raw-f0/
| |- LJ001-0001-raw-f0.npy
| |- ...
| |- raw-energies/
| |- LJ001-0001-raw-energy.npy
| |- ...
| |- norm-feats/
| |- LJ001-0009-norm-feats.npy
| |- ...
| |- wavs/
| |- LJ001-0009-wave.npy
| |- ...
| |- stats.npy
| |- stats_f0.npy
| |- stats_energy.npy
| |- train_utt_ids.npy
| |- valid_utt_ids.npy
|- examples/
| |- melgan/
| |- fastspeech/
| |- tacotron2/
| ...
stats.npy มีค่าเฉลี่ยและ std จากการฝึกอบรมแยก mel spectrogramsstats_energy.npy มีค่าเฉลี่ยและค่าพลังงานจากการแยกการฝึกอบรมstats_f0.npy มีค่าเฉลี่ยและ std ของค่า F0 ในการแยกการฝึกอบรมtrain_utt_ids.npy / valid_utt_ids.npy มีการฝึกอบรมและการตรวจสอบความถูกต้องรหัสคำพูดตามลำดับ เราใช้คำต่อท้าย ( ids , raw-feats , raw-energy , raw-f0 , norm-feats และ wave ) สำหรับแต่ละประเภทอินพุต
หมายเหตุสำคัญ :
dump ควร ทำตามโครงสร้างด้านบนเพื่อให้สามารถใช้สคริปต์การฝึกอบรมหรือคุณสามารถแก้ไขได้ด้วยตัวเอง? หากต้องการทราบวิธีการฝึกอบรมแบบจำลองตั้งแต่เริ่มต้นหรือปรับแต่งกับชุดข้อมูล/ภาษาอื่น ๆ โปรดดูรายละเอียดที่ไดเรกทอรีตัวอย่าง
การใช้งานรายละเอียดของคลาสข้อมูลนามธรรมจาก tensorflow_tts/ชุดข้อมูล/Abstract_dataset มีฟังก์ชั่นบางอย่างที่คุณต้องการเอาชนะและเข้าใจ:
หมายเหตุสำคัญ :
ตัวอย่างบางส่วนที่จะใช้ Abstract_dataset นี้คือ tacotron_dataset.py, fastspeech_dataset.py, melgan_dataset.py, fastspechech2_dataset.py
การใช้งานรายละเอียดของ base_trainer จาก tensorflow_tts/trainer/base_trainer.py มันรวมถึง seq2seqbasedtrainer และ ganbasedtrainer ที่สืบทอดมาจากพื้นฐาน ผู้ฝึกสอนทั้งหมดรองรับทั้ง GPU เดี่ยว/มัลติ มีฟังก์ชั่นบางอย่างที่คุณ ต้อง เอาชนะเมื่อใช้ new_trainer:
ทุกรุ่นใน repo นี้ได้รับการฝึกฝนตาม GanbasedTrainer (ดู train_melgan.py, train_melgan_stft.py, train_multiband_melgan.py) และ seq2seqbasedtrainer (ดู train_tacotron2.py
คุณสามารถรู้วิธีการอนุมานแต่ละรุ่นที่สมุดบันทึกหรือดู colab (สำหรับภาษาอังกฤษ), colab (สำหรับเกาหลี), colab (สำหรับภาษาจีน), colab (สำหรับฝรั่งเศส), colab (สำหรับภาษาเยอรมัน) นี่คือรหัสตัวอย่างสำหรับการอนุมาน End2End ด้วย FastSpeech2 และ Melgan Multi-band เราอัปโหลดทั้งหมดของเราใน HuggingFace Hub
import numpy as np
import soundfile as sf
import yaml
import tensorflow as tf
from tensorflow_tts . inference import TFAutoModel
from tensorflow_tts . inference import AutoProcessor
# initialize fastspeech2 model.
fastspeech2 = TFAutoModel . from_pretrained ( "tensorspeech/tts-fastspeech2-ljspeech-en" )
# initialize mb_melgan model
mb_melgan = TFAutoModel . from_pretrained ( "tensorspeech/tts-mb_melgan-ljspeech-en" )
# inference
processor = AutoProcessor . from_pretrained ( "tensorspeech/tts-fastspeech2-ljspeech-en" )
input_ids = processor . text_to_sequence ( "Recent research at Harvard has shown meditating for as little as 8 weeks, can actually increase the grey matter in the parts of the brain responsible for emotional regulation, and learning." )
# fastspeech inference
mel_before , mel_after , duration_outputs , _ , _ = fastspeech2 . inference (
input_ids = tf . expand_dims ( tf . convert_to_tensor ( input_ids , dtype = tf . int32 ), 0 ),
speaker_ids = tf . convert_to_tensor ([ 0 ], dtype = tf . int32 ),
speed_ratios = tf . convert_to_tensor ([ 1.0 ], dtype = tf . float32 ),
f0_ratios = tf . convert_to_tensor ([ 1.0 ], dtype = tf . float32 ),
energy_ratios = tf . convert_to_tensor ([ 1.0 ], dtype = tf . float32 ),
)
# melgan inference
audio_before = mb_melgan . inference ( mel_before )[ 0 , :, 0 ]
audio_after = mb_melgan . inference ( mel_after )[ 0 , :, 0 ]
# save to file
sf . write ( './audio_before.wav' , audio_before , 22050 , "PCM_16" )
sf . write ( './audio_after.wav' , audio_after , 22050 , "PCM_16" )ทุกรุ่นที่นี่ได้รับใบอนุญาตภายใต้ Apache 2.0
เราต้องการขอบคุณ Tomoki Hayashi ผู้พูดคุยกับเรามากเกี่ยวกับ Melgan, Melgan Melgan, Fastspeech และ Tacotron เฟรมเวิร์กนี้ใช้โครงการโอเพนซอร์ซคู่ขนานที่ยอดเยี่ยมของเขา