ملاحظة : هذا هو نسخة التطوير. إذا كنت بحاجة إلى إصدار مستقر ، فيرجى الخروج من V0.1.1.
الهدف من المستودع هو توفير تنفيذ من المتفرجات التي يمكن أن تولد عينات من الكلام الخام عالية الجودة مشروطة بالسمات اللغوية أو الصوتية.
تتوفر عينات الصوت على https://r9y9.github.io/wavenet_vocoder/.
يتوفر دفتر ملاحظات من المفترض أن يتم تنفيذه على https://colab.research.google.com:
ملاحظة : هذا ليس في حد ذاته نموذج نص إلى كلام (TTS). مع نموذج مدرب مسبقًا متوفر هنا ، يمكنك توليف الشكل الموجي بالنظر إلى طيف MEL ، وليس النص الخام. ستحتاج إلى نموذج التنبؤ الطيف (مثل Tacotron2) لاستخدام النماذج التي تم تدريبها مسبقًا لـ TTS.
ملاحظة : أما بالنسبة للنموذج المسبق لـ LJSpeech ، فقد تم ضبط النموذج عدة مرات وتدريبه على أكثر من 1000 ألف خطوة في المجموع. يرجى الرجوع إلى القضايا ( #1 ، #75 ، #45) لمعرفة كيفية تدريب النموذج.
| نموذج عنوان URL | بيانات | Hyper Params URL | ارتكاب غيت | خطوات |
|---|---|---|---|---|
| وصلة | ljspeech | وصلة | 2092A64 | 1000K ~ خطوات |
| وصلة | CMU القطب الشمالي | وصلة | B1A1076 | 740K خطوات |
لاستخدام النماذج التي تم تدريبها مسبقًا ، قم أولاً بالخروج عن التزام GIT المحدد المذكور أعلاه. أي،
git checkout ${commit_hash}
ثم يتبع قسم "توليف من نقطة تفتيش" في ReadMe. لاحظ أن الإصدار القديم من Synthesis.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 ، 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-Style لإجراء تجارب قابلة للتكرار ويمكن التحكم فيها بسهولة. الوصفات المتاحة هي كما يلي:
mulaw256 : Wavenet الذي يستخدم توزيع الإخراج الفئوي. المدخلات هي 8 بت شكل موجي كمي.mol : مزيج من الخدمات اللوجستية (مول) Wavenet. الإدخال هو الصوت الخام 16 بت.gaussian : Wavenet أحادي غوسيا (ويعرف أيضًا باسم المعلم Wavenet of Clarinet). الإدخال هو الصوت الخام 16 بت. تم run.sh جميع الوصفة. يرجى الاطلاع على Run.sh في دليل EGS للحصول على التفاصيل.
إشعار : لا يتم دعم التكييف العالمي لـ Multi-Speaker 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
يتم كتابة أدوات سطر الأوامر مع docopt. انظر كل docstring للاستخدامات الأساسية.
تفريغ 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"
بالنظر إلى الدليل الذي يحتوي على ميزات تكييف محلية ، قم بتجميع الأشكال الموجية لهم.
الاستخدام:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
خيارات:
--num-utterances=<N> : عدد الكلام. إذا لم يتم تحديدها ، قم بإنشاء جميع الكلام. هذا مفيد لتصحيح الأخطاء. إشعار : ربما لا يعمل هذا الآن. الرجاء استخدام التقييم.
توليف الموجي يعطي ميزة تكييف.
الاستخدام:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
خيارات مهمة:
--conditional=<path> : (مطلوب للوافنيت الشرطي) مسار الميزات الشرطية المحلية (.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 دليل بشكل افتراضي. يمكنك مراقبة السجلات بواسطة Tensorboard:
tensorboard --logdir=log
شكراً جزيلاً!! إذا وجدت واحدة جديدة ، يرجى تقديم العلاقات العامة.