؟ TensorFlowtts

في الوقت الحقيقي توليف خطاب في الوقت الفعلي لـ Tensorflow 2
؟ يوفر TensorFlowtts في الوقت الفعلي هياكل توليف الكلام في الوقت الفعلي مثل Tacotron-2 ، Melgan ، Multiband-Melgan ، Fastspeech ، Fastspeech2 على أساس التوتر 2. مع Tensorflow 2 ، يمكننا تشغيل النماذج المتوحرية على الأوقات المتداولة ، وتصبح أكثر من الوقت ، وتصرف على الأداء المتداول ، وتجعلها أكثر من الوقت. أنظمة مضمنة.
يتم اختبار هذا المستودع على Ubuntu 18.04 مع:
يجب أن يكون إصدار TensorFlow مختلفًا يعمل ولكن لم يتم اختباره بعد. سيحاول هذا الريبو العمل مع أحدث إصدار مستقر 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 ، Fastspeade2 ، Multiband_Melgan
قم بإعداد مجموعة بيانات بالتنسيق التالي:
|- [NAME_DATASET]/
| |- metadata.csv
| |- wavs/
| |- file1.wav
| |- ...
حيث يحتوي metadata.csv على التنسيق التالي: id|transcription . هذا تنسيق يشبه LJSPEEDE. يمكنك تجاهل خطوات المعالجة المسبقة إذا كان لديك مجموعات بيانات تنسيق أخرى.
لاحظ أن 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 ، يرجى أولاً تشغيل دفاتر دفاتر الملاحظات/prepared_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 SPLITstats_energy.npy على متوسط وقيم الطاقة من تقسيم التدريبstats_f0.npy على متوسط وقيم F0 في تقسيم التدريبtrain_utt_ids.npy / valid_utt_ids.npy يحتوي على معرفات التدريب والتحقق من صحة معرفات على التوالي نحن نستخدم لاحقة ( ids ، raw-feats ، raw-energy ، raw-f0 ، norm-feats ، wave ) لكل نوع إدخال.
ملاحظات مهمة :
dump اتباع الهيكل أعلاه لتكون قادرًا على استخدام البرنامج النصي التدريبي ، أو يمكنك تعديله بنفسك؟ لمعرفة كيفية تدريب النموذج من نقطة الصفر أو ضبطها مع مجموعات/لغات بيانات أخرى ، يرجى الاطلاع على التفاصيل في الدليل على سبيل المثال.
تطبيق تفصيلي لفئة مجموعة البيانات التجريدية من TensorFlow_TTS/Dataset/Abstract_Dataset. هناك بعض الوظائف التي تحتاجها فوقها وفهمها:
ملاحظات مهمة :
بعض الأمثلة لاستخدام هذا Abstract_dataset هي tacotron_dataset.py ، fastspeade_dataset.py ، melgan_dataset.py ، fastspeech2_dataset.py
تطبيق تفصيلي لـ base_trainer من TensorFlow_TTS/Trainer/Base_trainer.py. ويشمل SEQ2SeqBAndtrainer و Ganbaxertrainer يرثون من المستند إلى. يدعم جميع المدرب كلاً من وحدة معالجة الرسومات الفردية/متعددة. هناك بعض الوظائف التي يجب عليك الإفراط فيها عند تنفيذ new_trainer:
يتم تدريب جميع النماذج الموجودة على هذا الريبو على أساس GanbaxerTrainer (انظر Train_melgan.py ، train_melgan_stft.py ، train_multiband_melgan.py) و seq2seqbasstrainer (انظر Train_tacotron2.py ، train_fastspech.py).
يمكنك معرفة كيفية استنتاج كل نموذج في دفاتر الملاحظات أو رؤية كولاب (للغة الإنجليزية) ، كولاب (للكوري) ، كولاب (للصينية) ، كولاب (للفرنسية) ، كولاب (للألمانية). فيما يلي رمز مثال لاستدلال End2end مع Fastspech2 و Melgan متعدد النطاق. قمنا بتحميل كل ما قبلنا في 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 و Multi-Band Melgan و Fastspeech و Tacotron. هذا الإطار يعتمد على مشروعه الرائع المفتوح المصدر الموازي.