IMS Toucan هي مجموعة أدوات للتدريب واستخدام وتدريس توليف النص إلى الحديث الحديث ، الذي تم تطويره في معهد معالجة اللغة الطبيعية (IMS) ، جامعة شتوتغارت ، ألمانيا ، موطن رسمي لنظام TOOCantts متعدد اللغات. نظامنا سريع ويمكن التحكم فيه ولا يتطلب الكثير من الحساب.

إذا وجدت هذا الريبو مفيدًا ، ففكر في إعطائه نجمة. أعداد كبيرة تجعلني سعيدًا ، وهم محفزون للغاية. إذا كنت تريد تحفيزني أكثر ، فيمكنك حتى التفكير في رعاية مجموعة الأدوات هذه. نحن نستخدم فقط رعاة GitHub لهذا ، هناك محتالون على منصات أخرى تتظاهر بأنها الخالق. لا تدعهم يخدعونك. الكود والموديلات مجانية تمامًا ، وبفضل الدعم السخي المتمثل في Hugging Face؟ ، لدينا حتى مثال على النموذج الذي يعمل على GPU مجانًا لأي شخص لاستخدامه.
تحقق من العرض التجريبي التفاعلي والضخم على وجه المعانقة؟
لقد نشرنا أيضًا مجموعة بيانات TTS متعددة اللغات على وجه المعانقة؟
يمكن العثور على قائمة باللغات المدعومة هنا
Python 3.10 هو الإصدار الموصى به.
لتثبيت مجموعة الأدوات هذه ، قم بتشكيلها على الجهاز الذي تريد استخدامه عليه (يجب أن يكون لديك وحدة معالجة الرسومات CUDA واحدة على الأقل إذا كنت تنوي تدريب النماذج على هذا الجهاز. من أجل الاستدلال ، لا تحتاج إلى وحدة معالجة الرسومات).
إذا كنت تستخدم Linux ، فيجب أن يكون لديك الحزم التالية مثبتة ، أو تثبيتها باستخدام APT-GET إذا لم تكن كذلك (في معظم التوزيعات التي يتم تثبيتها مسبقًا):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
انتقل إلى الدليل الذي استنسخته. نوصي بإنشاء وتفعيل بيئة افتراضية لتثبيت المتطلبات الأساسية فيها. تلخص الأوامر أدناه كل ما تحتاج إلى القيام به تحت Linux. إذا كنت تقوم بتشغيل Windows ، فيجب تغيير السطر الثاني ، فيرجى إلقاء نظرة على وثائق VenV.
python -m venv <path_to_where_you_want_your_env_to_be>
source <path_to_where_you_want_your_env_to_be>/bin/activate
pip install --no-cache-dir -r requirements.txt
قم بتشغيل السطر الثاني في كل مرة تبدأ فيها استخدام الأداة مرة أخرى لتنشيط البيئة الافتراضية مرة أخرى ، إذا قمت بتسجيل الدخول في هذه الأثناء. للاستفادة من وحدة معالجة الرسومات ، لا تحتاج إلى فعل أي شيء آخر على جهاز Linux. على جهاز Windows ، ألقِ نظرة على موقع Pytorch الرسمي لمراقبة التثبيت التي تتيح دعم وحدة معالجة الرسومات.
إذا كنت لا تريد أن يتم تخزين النماذج المسبقة والمدربة بالإضافة إلى ملفات ذاكرة التخزين المؤقت الناتجة عن معالجة مجموعات البيانات الخاصة بك في المجلدات الفرعية الافتراضية ، فيمكنك تعيين الدلائل المقابلة على مستوى العالم عن طريق تحرير Utility/storage_config.py لتناسب احتياجاتك (يمكن أن يكون المسار رابطًا إلى الدليل الجذري للمخطط أو المطلق).
لا تحتاج إلى استخدام النماذج المسبقة ، ولكن يمكن أن تسرع الأمور بشكل كبير. سيتم تنزيلها أثناء الطيران تلقائيًا عند الحاجة ، وذلك بفضل معانقة الوجه؟ و VB على وجه الخصوص.
ESPEAK-NG هو مطلب اختياري ، يتولى الكثير من الحالات الخاصة في العديد من اللغات ، لذلك من الجيد أن يكون لديك.
في معظم بيئات Linux ، سيتم تثبيته بالفعل ، وإذا لم يكن كذلك ، ولديك الحقوق الكافية ، يمكنك تثبيته ببساطة
apt-get install espeak-ng
بالنسبة لنظام التشغيل Windows ، فإنها توفر ملف تثبيت. MSI مناسب على صفحة إصدار GitHub الخاصة بهم. بعد التثبيت على أنظمة غير Linux ، ستحتاج أيضًا إلى إخبار مكتبة Phonemizer بمكان العثور على تثبيت ESPEAK الخاص بك عن طريق تعيين متغير بيئة PHONEMIZER_ESPEAK_LIBRARY ، والذي تمت مناقشته في هذه المشكلة.
بالنسبة إلى Mac ، للأسف أكثر تعقيدًا. بفضل Sang Hyun Park ، إليك دليل لتثبيته على Mac: بالنسبة إلى M1 Macs ، فإن الطريقة الأكثر ملاءمة لتثبيت Espeak-NG على نظامك هي عبر منفذ Macports في Espeak-NG. يمكن تثبيت MacPorts نفسها من موقع MacPorts ، والذي يتطلب أيضًا Xcode من Apple. بمجرد تثبيت Xcode و Macports ، يمكنك تثبيت منفذ ESPEAK-NG عبر
sudo port install espeak-ng
كما هو مذكور في تعليمات تثبيت Windows ، يجب تعيين تثبيت ESPEAK-NG كمتغير لمكتبة الصوتية. متغير البيئة هو PHONEMIZER_ESPEAK_LIBRARY على النحو الوارد في مؤشر ترابط github المرتبط أعلاه. ومع ذلك ، فإن ملف تثبيت ESPEAK-NG الذي تحتاجه لتعيين هذا المتغير هو ملف .dylib بدلاً من ملف .dll على Mac. من أجل تحديد موقع ملف مكتبة ESPEAK-NG ، يمكنك تشغيل port contents espeak-ng . تم تسمية الملف المحدد الذي تبحث عنه باسم libespeak-ng.dylib .
يمكنك تحميل النماذج المدربة ، أو المقدمة من قبل واحد ، باستخدام InferenceInterfaces/ToucanTTSInterface.py . ما عليك سوى إنشاء كائن منه باستخدام مقبض الدليل المناسب الذي يحدد النموذج الذي تريد استخدامه. يجب أن يعمل الباقي في الخلفية. قد ترغب في تعيين لغة تضمين أو مكبر صوت تدمير باستخدام وظائف set_language و set_speaker_embedding . يجب أن تكون معظم الأشياء الذاتية.
يحتوي InventionInterface على طريقتين لإنشاء الصوت من النص. يتم read_to_file و read_aloud .
READ_TO_FILE يأخذ كإدخال قائمة بالسلاسل واسم ملف. سيؤدي ذلك إلى توليف الجمل في القائمة وتسلسلها مع توقف قصير بينهما واكتبها إلى FilePath التي تزودها كحجة أخرى.
READ_ALOUD يأخذ فقط سلسلة ، والتي سيتم تحويلها بعد ذلك إلى الكلام والتشغيل على الفور باستخدام مكبرات الصوت في النظام. إذا قمت بتعيين طريقة عرض الوسيطة الاختيارية على True ، فسيظهر التصور ، والتي تحتاج إلى إغلاقها حتى يستمر البرنامج.
يتم توضيح استخدامها في Run_Interactive_Demo.py و Run_text_to_file_reader.py .
هناك معلمات تحجيم بسيطة للتحكم في المدة ، وتباين منحنى الملعب وتباين منحنى الطاقة. يمكنك إما تغييرها في الكود عند استخدام العرض التوضيحي التفاعلي أو القارئ ، أو يمكنك ببساطة تمريرها إلى الواجهة عند استخدامها في الكود الخاص بك.
لتغيير لغة النموذج ومعرفة اللغات المتوفرة في نموذجنا المسبق ، ألق نظرة على القائمة المرتبطة هنا
في الدليل يسمى الأداة المساعدة ، يوجد ملف يسمى path_to_transcript_dicts.py . في هذا الملف ، يجب عليك كتابة وظيفة تُرجع قاموسًا له جميع المسارات المطلقة لكل ملف من ملفات الصوت في مجموعة البيانات الخاصة بك كسلاسل مثل المفاتيح والنسخ النصية للسمعية المقابلة كقيم.
ثم انتقل إلى دليل التدريب/الوصفات . في هناك ، قم بعمل نسخة من ملف finetuning_example_simple.py إذا كنت ترغب فقط في FineTune على مجموعة بيانات واحدة أو finetuning_example_multilingual.py إذا كنت ترغب في Finetune على مجموعات بيانات متعددة ، وربما حتى لغات متعددة. سنستخدم هذه النسخة كمرجع ونجري فقط التغييرات اللازمة لاستخدام مجموعة البيانات الجديدة. ابحث عن المكالمات (S) إلى دالة prepar_tts_corpus . استبدل path_to_transcript_dict المستخدم هناك مع واحد (s) الذي أنشأته للتو. ثم قم بتغيير اسم دليل ذاكرة التخزين المؤقت المقابل إلى شيء منطقي بالنسبة لمجموعة البيانات. ابحث أيضًا عن المتغير Save_dir ، وهو المكان الذي سيتم فيه حفظ نقاط التفتيش. هذه قيمة افتراضية ، يمكنك الكتابة فوقها عند الاتصال بخط الأنابيب لاحقًا باستخدام وسيطة سطر الأوامر ، في حالة رغبتك في ضبطها من نقطة تفتيش وبالتالي حفظ في دليل مختلف. أخيرًا ، قم بتغيير وسيطة Lang في إنشاء مجموعة البيانات وفي الدعوة إلى وظيفة حلقة القطار إلى معرف لغة ISO 639-3 الذي يطابق بياناتك.
الحجج التي يتم تقديمها إلى حلقة القطار في الأمثلة على التحويلات المحددة مخصصة للحالة من النموذج من نموذج مسبق. إذا كنت ترغب في التدريب من نقطة الصفر ، فقم بإلقاء نظرة على خط أنابيب مختلف يحتوي على طوبقة باسمه وإلقاء نظرة على الحجج المستخدمة هناك.
بمجرد اكتمال ذلك ، ننتهي تقريبًا ، الآن نحتاج فقط إلى إتاحته لملف run_training_pipeline.py في المستوى العلوي. في الملف المذكور ، استيراد وظيفة التشغيل من خط الأنابيب الذي قمت بإنشائه للتو ومنحه اسمًا ذا معنى. الآن في خطوط pipeline_dict ، أضف وظيفتك المستوردة كقيمة واستخدم كمفتاح اختصار أمر منطقي.
بمجرد أن يتم بناء وصفة ، يكون التدريب سهل للغاية:
python run_training_pipeline.py <shorthand of the pipeline>
يمكنك توفير أي من الحجج التالية ، ولكن لا تضطر إلى ذلك (على الرغم من أنه يجب عليك بالتأكيد تحديد معرف GPU على الأقل).
--gpu_id <ID of the GPU you wish to use, as displayed with nvidia-smi, default is cpu. If multiple GPUs are provided (comma separated), then distributed training will be used, but the script has to be started with torchrun.>
--resume_checkpoint <path to a checkpoint to load>
--resume (if this is present, the furthest checkpoint available will be loaded automatically)
--finetune (if this is present, the provided checkpoint will be fine-tuned on the data from this pipeline)
--model_save_dir <path to a directory where the checkpoints should be saved>
--wandb (if this is present, the logs will be synchronized to your weights&biases account, if you are logged in on the command line)
--wandb_resume_id <the id of the run you want to resume, if you are using weights&biases (you can find the id in the URL of the run)>
للتدريب متعدد GPU ، يجب عليك توفير معرفات GPU متعددة (مفصول الفاصلة) وبدء البرنامج النصي مع Torchrun. عليك أيضًا تحديد عدد وحدات معالجة الرسومات. هذا يجب أن يتطابق مع عدد المعرفات التي تزودها. حذر: Torchrun غير متوافق مع Nohup! استخدم TMUX بدلاً من ذلك للحفاظ على تشغيل البرنامج النصي بعد تسجيل الخروج من shell.
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
بعد كل فترة (أو بدلاً من ذلك بعد عدد خطوة معينة) ، سيتم كتابة بعض السجلات إلى وحدة التحكم وإلى موقع الأوزان والتحيزات ، إذا تم تسجيل الدخول وتعيين العلامة. إذا أخرجت CUDA من أخطاء الذاكرة ، فأنت بحاجة إلى تقليل الحجم في حجج الدعوة إلى التدريب في خط الأنابيب الذي تقوم بتشغيله. حاول تقليل الحجم في خطوات صغيرة حتى لا تحصل على المزيد من أخطاء ذاكرة CUDA.
في الدليل الذي حددته للحفظ ، ستظهر ملفات نقاط التفتيش وبيانات تصور الطيفية. نظرًا لأن نقاط التفتيش كبيرة جدًا ، سيتم الاحتفاظ بأحدث خمس نقاط فقط. يعتمد كمية خطوات التدريب بشكل كبير على البيانات التي تستخدمها وما إذا كنت تقوم بالتعبير عن نقطة تفتيش أو تدريب من البداية. أقل البيانات التي لديك ، والخطوات الأقل التي يجب أن تتخذها لمنع انهيار محتمل. إذا كنت ترغب في التوقف في وقت مبكر ، فما عليك سوى قتل العملية ، لأن كل شيء هو أمر سيء أن كل عمليات الأطفال يجب أن تموت بها. في حالة وجود بعض عمليات الأشباح التي تركتها وراءها ، يمكنك استخدام الأمر التالي للعثور عليها وقتلها يدويًا.
fuser -v /dev/nvidia*
كلما تم حفظ نقطة تفتيش ، يتم أيضًا إنشاء نسخة مضغوطة يمكن استخدامها للاستدلال ، والتي تم تسميتها Best.Py
فيما يلي بعض النقاط التي نشأها المستخدمون:
run_scorer.py .UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - نستخدم جدولة مخصصة ، ويعتقد Torch بشكل غير صحيح أننا نسمي الجدولة والمحسّن بالترتيب الخاطئ. فقط تجاهل هذا التحذير ، إنه لا معنى له تمامًا.WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - تحذير آخر لا معنى له. نحن في الواقع لا نستخدم Xformers بأنفسنا ، إنه مجرد جزء من تبعيات أحد تبعياتنا ، ولكنه لا يستخدم في أي مكان.The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - يحدث فقط تحت النوافذ ولا يؤثر على أي شيء.WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - ليس لدينا أي فكرة عن سبب بدء Espeak في إعطاء هذا التحذير ، ومع ذلك لا يبدو أنه يؤثر على أي شيء ، لذلك يبدو أنه آمن للتجاهل.NaN - تعمل معدلات التعلم الافتراضية على البيانات النظيفة. إذا كانت بياناتك أقل نظافة ، فحاول استخدام هداف للعثور على عينات إشكالية ، أو تقليل معدل التعلم. المشكلة الأكثر شيوعًا هي أن هناك توقفًا مؤقتًا في الخطاب ، ولكن لا شيء يلمح إليهم في النص. لهذا السبب يصعب استخدام ASR Corpora ، التي تترك علامات الترقيم ، في TTS. يتم أخذ وحدات Pytorch الأساسية لـ Fastspeech 2 و GST من ESPNET ، وهي وحدات Pytorch من HIFI GAN من مستودع الموازي. يتم أخذ بعض الوحدات المتعلقة بـ PostNet المستندة إلى شرطية FloyMatching كما هو موضح في Matchatts من قاعدة كود Matchatts الرسمية وبعضها مأخوذ من قاعدة كود Stabletts. لتحويل Grapheme-to-Phoneme ، نعتمد على ESPEAK-NG المذكورة أعلاه وكذلك TransPhone. نستخدم Encodec ، وهو برنامج ترميز الصوت العصبي كتمثيل وسيطة لتخزين بيانات القطار لتوفير المساحة.
@inproceedings{lux2021toucan,
year = 2021,
title = {{The IMS Toucan system for the Blizzard Challenge 2021}},
author = {Florian Lux and Julia Koch and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2022laml,
year = 2022,
title = {{Language-Agnostic Meta-Learning for Low-Resource Text-to-Speech with Articulatory Features}},
author = {Florian Lux and Ngoc Thang Vu},
booktitle = {ACL}
}
@inproceedings{lux2022cloning,
year = 2022,
title = {{Exact Prosody Cloning in Zero-Shot Multispeaker Text-to-Speech}},
author = {Lux, Florian and Koch, Julia and Vu, Ngoc Thang},
booktitle = {SLT},
publisher = {IEEE}
}
@inproceedings{lux2022lrms,
year = 2022,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Julia Koch and Ngoc Thang Vu},
booktitle = {AACL}
}
@inproceedings{lux2023controllable,
year = 2023,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Pascal Tilli and Sarina Meyer and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}
@inproceedings{lux2023blizzard,
year = 2023,
title = {{The IMS Toucan System for the Blizzard Challenge 2023}},
author = {Florian Lux and Julia Koch and Sarina Meyer and Thomas Bott and Nadja Schauffler and Pavel Denisov and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2024massive,
year = 2024,
title = {{Meta Learning Text-to-Speech Synthesis in over 7000 Languages}},
author = {Florian Lux and Sarina Meyer and Lyonel Behringer and Frank Zalkow and Phat Do and Matt Coler and Emanuël A. P. Habets and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}