
تنفيذ Pytorch لنماذج توليف النص إلى الكلام القائم على الشبكات التلافيفية:
تتوفر عينات الصوت على https://r9y9.github.io/deepvoice3_pytorch/.
دفاتر الملاحظات من المفترض أن يتم تنفيذها على https://colab.research.google.com متوفرة:
ملاحظة : النماذج المسبقة غير متوافقة مع الأمد. ليتم تحديثها قريبًا.
| عنوان URL | نموذج | بيانات | Paramters Hyper | ارتكاب غيت | خطوات |
|---|---|---|---|---|---|
| وصلة | deepvoice3 | ljspeech | وصلة | ABF0A21 | 640K |
| وصلة | نيانكو | ljspeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585K |
| وصلة | Multi-Speaker Deepvoice3 | VCTK | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300K + 300K |
لاستخدام النماذج التي تم تدريبها مسبقًا ، يوصى بشدة بأن تكون على التزام GIT المحدد المذكور أعلاه. أي،
git checkout ${commit_hash}
ثم اتبع قسم "توليف من نقطة تفتيش" في إعادة readme لالتزام 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 ، Multi-Speaker)jsut (JP ، متحدث واحد)nikl_m (KO ، Multi-Speaker)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 والطيبيات الخطية) في ./data/ljspeech .
بناء مجموعة البيانات الخاصة بك ، مع البيانات الوصفية بتنسيق JSON (متوافق مع CARPEDM20/Multi-Speaker-Tacotron-Tensorflow) مدعوم حاليًا. الاستخدام:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
قد تحتاج إلى تعديل ملف JSON المسبق مسبقًا ، وخاصة n_speakers . بالنسبة إلى English Multispeaker ، ابدأ مع presets/deepvoice3_vctk.json .
على افتراض أن لديك مجموعة بيانات A (مكبر صوت أ) ومجموعة البيانات 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)
قد تتضمن بعض مجموعة البيانات ، خاصة مجموعة البيانات التي تم إنشاؤها تلقائيًا الصمت الطويل والضوضاء غير المرغوب فيها/المتخلف ، مما يؤدي إلى تقويض نموذج SEQ2Seq على مستوى Char. (مثل VCTK ، على الرغم من أن هذا مغطى في VCTK_PROCESS)
للتعامل مع المشكلة ، سوف gentle_web_align.py
يستخدم gentle_web_align.py Gentle ، وهي أداة محاذاة للكلام في Kaldi. هذا يصل إلى التطبيق اللطيف الذي يخدمه الويب ، ويتوافق مع شرائح الصوت مع النصوص ويحول النتيجة إلى ملفات التسمية على غرار HTK ، المراد معالجتها في المعالجة preprocess.py . يمكن تشغيل Gentle في Linux/Mac/Windows (عبر Docker).
تُظهر النتائج الأولية أنه في حين أن الطريقة المستندة إلى HTK/Festival/Merlin في vctk_preprocess/prepare_vctk_labels.py تعمل بشكل أفضل على VCTK ، فإن Gentle أكثر استقرارًا مع مقاطع الصوت ذات الضوضاء المحيطة. (على سبيل المثال مقتطفات الفيلم)
الاستخدام: (بافتراض أن اللطيف يعمل في localhost:8567 (افتراضي عند عدم تحديده))
datasetA/wavs والنسخ موجودة في 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
نداء تحقق من هذا مقدما واتبع الأوامر أدناه.
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 دليل بشكل افتراضي. يمكنك مراقبة السجلات بواسطة 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_PROCESS.
بمجرد حصولك على محاذاة صوتية لكل كلام ، يمكنك استخراج الميزات بواسطة:
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
إذا كان لديك بيانات محدودة للغاية ، فيمكنك التفكير في تجربة النموذج الذي تم تدريبه جيدًا. على سبيل المثال ، باستخدام النموذج الذي تم تدريبه مسبقًا على LJSPEEDE ، يمكنك تكييفه مع البيانات من VCTK Speaker 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)