هذا هو التنفيذ الرسمي للتدفق الصوتي الورقي ICASSP 2024.

يتم اختبار هذا الريبو على Python 3.9 على Linux. يمكنك إعداد البيئة مع كوندا
# Install required packages
conda create -n vflow python==3.9 # or any name you like
conda activate vflow
pip install -r requirements.txt
# Then, set PATH
source path.sh # change the env name in it if you don't use "vflow"
# Install monotonic_align for MAS
cd model/monotonic_align
python setup.py build_ext --inplace لاحظ أنه لتجنب مشكلة تثبيت Torchdyn ، نقوم مباشرة بنسخ إصدار Torchdyn 1.0.6 هنا محليًا في torchdyn/ .
قد تحتاج العملية التالية أيضًا إلى أوامر bash و perl في بيئتك.
يعتمد هذا الريبو على منظمة بيانات Kaldi-Style. يجب وضع جميع ملفات وصف البيانات في الدلائل الفرعية في data/ . انظر data/ljspeech/example للحصول على مثال أساسي. في هذا المثال ، تكون الملفات النصية العادية التالية ضرورية:
wav.scp : منظم كـ utt /path/to/wav .utts.list : كل سطر يحدد الكلام. يمكن الحصول على ذلك عن طريق cut -d ' ' -f 1 wav.scp > utts.list .utt2spk : منظم كـ utt spk_name .text و phn_duration : يحدد تسلسل phoneme وفترات عدد صحيح المقابل (في الإطارات). أيضًا ، هناك ملف data/ljspeech/phones.txt لتحديد جميع الهواتف مع فهارسها في القاموس. بالنسبة إلى LJSpeech ، نقدم الملف المعالج عبر الإنترنت. يمكنك تنزيله و unsip إلى data/ljspeech/{train,val} . إذا كنت ترغب في التدريب على مجموعة البيانات الخاصة بك ، فقد تضطر إلى إنشاء هذه الملفات بنفسك (أو تغيير استراتيجية تحميل البيانات).
بعد الحصول على هذه الملفات الواضحة ، يرجى القيام بما يلي لاستخراج طيف الميل للتدريب:
bash extract_fbank.sh --stage 0 --stop_stage 2 --nj 16
# nj: number of parallel jobs.
# Have a look into the script if you need to change something
# Bash variables before "parse_options.sh" can be passed by CLI, e.g. "--key value". لاحظ أننا افتراضيون لاستخدام بيانات 16 كيلو هرتز هنا. سيؤدي ذلك إلى إنشاء feats/fbank و feats/normed_fbank ، حيث تقوم ملفات Kaldi-style SCP و Ark بتخزين بيانات Mel-spectrogram. سيتم استخدام الميزات المعيارية للتدريب.
إذا كنت ترغب في استخدام معدات السماعات (مثل LJSpeech ، بدلاً من استخدام تضمينات مكبر الصوت المسبق مثل XVectors) للتدريب ، يرجى التشغيل:
make_utt2spk_id.py data/ljspeech/train/utt2spk data/ljspeech/val/utt2spk
# You can add more files in CLI. Will write utt2num_frames in the same directory to these files. يتم تخزين تكوينات التدريب كملف yaml في configs/ . سيتم تحديد البيانات وميزات مجموعة التدريب والتحقق من صحة في ملفات YAML. ستحتاج إلى تغيير مسارات الملفات المزدوجة هناك إذا كنت بحاجة إلى التدريب على البيانات الخاصة بك.
ثم ، يتم تنفيذ التدريب بواسطة
python train.py -c configs/ ${your_yaml} -m ${model_name}
# e.g. python train.py -c configs/lj_16k_gt_dur.yaml -m lj_16k_gt_dur سيقوم بإنشاء logs/${model_name} للتسجيل والتسجيل.
عدة ملاحظات:
use_gt_dur على false لتشغيل خوارزمية MAS. في هذا الإعداد ، من الأفضل تعيين add_blank على true . بعد تدريب النموذج إلى حد ما ، يمكن أن يكون جاهزًا لعملية تصحيح التدفق. يتطلب تصحيح التدفق إنشاء بيانات باستخدام النموذج المدربين واستخدام زوج (الضوضاء ، البيانات) لتدريب النموذج مرة أخرى. نظرًا لأن هذه العملية يجب أن تتضمن دائمًا مجموعة بيانات التدريب بأكملها ، فمن المستحسن تشغيلها على وحدات معالجة الرسومات المتعددة لفك التشفير المتوازي. نحن نقدم نصًا للقيام بذلك:
# Set CUDA_VISIBLE_DEVICES, or the program will use all available GPUs.
python generate_for_reflow.py -c configs/ ${your_yaml} -m ${model_name}
--EMA --max-utt-num 100000000
--dataset train
--solver euler -t 10
--gt-dur
# --EMA specifies to load EMA checkpoint (latest)
# --max-utt-num sets the number of utterances to decode (in this case, arbitrarily high)
# --solver euler -t 10 specifies the solver and timesteps. Could be adaptive solvers like dopri5.
# --gt-dur forces the model to use ground truth duration for decoding. سيؤدي ذلك إلى إنشاء synthetic_wav/${model_name}/generate_for_reflow/train للتخزين. سيتم تخزين noise.scp مع feats.scp . بعد فك تشفير مجموعة التدريب ، يمكنك أيضًا فك تشفير التحقق من صحة --dataset val .
بعد ذلك ، حدد المسارات إلى هذه feats.scp و noise.scp في تكوين جديد yaml ، كما هو الحال في lj_16k_gt_dur_reflow.yaml :
perform_reflow : true
...
data :
train :
feats_scp : " synthetic_wav/lj_16k_gt_dur/train/feats.scp "
noise_scp : " synthetic_wav/lj_16k_gt_dur/train/noise.scp "
...أصبح الآن جاهزًا للتدريب مرة أخرى في REFOW ، مع نفس البرنامج النصي في التدريب ولكن ملفات تكوين YAML الجديدة. لا تتردد في نسخ نموذج مدرب إلى سجل السجل الجديد لاستئناف. أيضًا ، من الممكن تغيير بنية النموذج والتدريب من الصفر على بيانات التراجع.
على غرار "إنشاء بيانات للتراجع" ، يمكن القيام باستنتاج النموذج بواسطة
python inference_dataset.py -c configs/ ${your_yaml} -m ${model_name} --EMA
--solver euler -t 10 سيؤدي ذلك إلى توليفات الطيف الميل للتحقق في التكوين الخاص بك ، وتخزينها على synthetic_wav/${model_name}/tts_gt_spk/feats.scp . يمكن تحديد مكبر الصوت والسرعة ودرجة الحرارة ؛ راجع وظيفة tools.get_hparams_decode() للحصول على مجموعة كاملة من الخيارات.
يمكن بعد ذلك الاستنتاج في hifigan/ Directory. يرجى الرجوع إلى ReadMe هناك.
خلال التطوير ، تمت الإشارة إلى المستودعات التالية:
utils/ . يحتوي هذا المستودع أيضًا على بعض الوظائف التجريبية.
تحويل الصوت . نظرًا لأن Glowtts يمكنها إجراء تحويل صوتي عبر خاصية Disentangling لتطبيع التدفقات ، فمن المعقول أن مطابقة التدفق يمكن أن تؤديها أيضًا. Method model.tts.GradTTS.voice_conversion يعطي تجربة أولية.
تقدير الاحتمال . النماذج التوليدية المستندة إلى المعادلة التفاضلية لديها القدرة على تقدير احتمالات البيانات من خلال الصيغة الفورية تغيير المتغير
في الممارسة العملية ، يتم استبدال التكامل بتجميع ، ويتم استبدال الاختلاف بمقدر تتبع المهارات-هاتشينسون. انظر الملحق D.2 في أغنية ، وآخرون. آل للتفاصيل النظرية. لقد قمت بتطبيق هذا في model.tts.GradTTS.compute_likelihood .
model.cfm.OTCFM ، على الرغم من أنه لا يعمل بشكل جيد في الوقت الحالي.GradLogPEstimator2d بواسطة تكوين model.fm_net_type . حاليًا يتم دعم بنية مقدر Diffsinger أيضًا. يمكنك إضافة المزيد ، على سبيل المثال التي تم تقديمها في Matcha-TTS.model.tts.GradTTS.forward يدعم الآن بيتا binomial قبل خرائط المحاذاة ؛ وإذا أردت ، يمكنك تغيير المتغير MAS_target إلى شيء آخر ، مثل الضوضاء المحولة للتدفق!لا تتردد في الاستشهاد بهذا العمل إذا كان يساعد؟
@INPROCEEDINGS{guo2024voiceflow,
author={Guo, Yiwei and Du, Chenpeng and Ma, Ziyang and Chen, Xie and Yu, Kai},
booktitle={ICASSP 2024 - 2024 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
title={{VoiceFlow}: Efficient Text-To-Speech with Rectified Flow Matching},
year={2024},
volume={},
number={},
pages={11121-11125},
keywords={Signal processing algorithms;Signal processing;Acoustics;Mathematical models;Vectors;Trajectory;Speech processing;Text-to-speech;flow matching;rectified flow;efficiency;speed-quality tradeoff},
doi={10.1109/ICASSP48485.2024.10445948}
}