Vereinfachtes Chinesisch | Englisch
Dieses Projekt ist ein Sprachsyntheseprojekt, das auf Pytorch basiert und Vits verwendet. Vits (Variationsinferenz mit widersprüchlichem Lernen für End-to-End-Text-zu-Sprach) ist eine Sprachsynthesemethode. Dieses End-to-End-Modell ist sehr einfach zu verwenden und erfordert keine zu komplexen Prozesse wie die Textausrichtung. Es ist direkt ausgebildet und mit einem Klick erzeugt, wodurch die Lernschwelle stark reduziert wird.
Jeder ist herzlich eingeladen, den Code zu scannen, um den Knowledge Planet oder die QQ -Gruppe einzugeben, um zu diskutieren. Knowledge Planet bietet Projektmodelldateien und andere verwandte Projektdateien von Bloggern sowie andere Ressourcen.
| Datensatz | Sprache (Dialekt) | Anzahl der Redner | Sprechername | Adresse herunterladen |
|---|---|---|---|---|
| Bznsyp | Mandarin | 1 | Standard weibliche Stimme | Klicken Sie hier, um herunterzuladen |
| Kantonesischer Datensatz | Kantonesisch | 10 | Männliche Stimme 1 Mädchen 1 ··· | Klicken Sie hier, um herunterzuladen |
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidiaVerwenden Sie PIP, um den Befehl wie folgt zu installieren:
python -m pip install mvits -U -i https://pypi.tuna.tsinghua.edu.cn/simpleEs wird empfohlen, den Quellcode zu installieren , der die Verwendung des neuesten Codes sicherstellen kann.
git clone https://github.com/yeyupiaoling/VITS-Pytorch.git
cd VITS-Pytorch/
pip install . Das Projekt unterstützt die direkte Generation von BZNSYP- und Aishell3 -Datenlisten. Wenn Sie BZNSYP als Beispiel einnehmen, laden Sie BZNSYP in das dataset -Verzeichnis und dekomprimieren Sie sie herunter. Führen Sie dann das Programm create_list.py aus und generieren Sie im folgenden Format eine Datentabelle. Das Format ist <音频路径>|<说话人名称>|<标注数据> . Beachten Sie, dass die Beschriftungsdaten die Kennzeichnung der Sprache erfordert. Zum Beispiel müssen Sie in Mandarin den Text in [ZH] einwickeln. Andere Sprachen unterstützen Japanisch: [JA] , Englisch: [en], 한국어: [Ko]. Benutzerdefinierte Datensätze können in diesem Format generiert werden.
Das Projekt bietet zwei Textverarbeitungsmethoden, unterschiedliche Textverarbeitungsmethoden und unterstützt verschiedene Sprachen, nämlich cjke_cleaners2 und chinese_dialect_cleaners . Diese Konfiguration wird auf dataset_conf.text_cleaner geändert. cjke_cleaners2 supports languages {"普通话": "[ZH]", "日本語": "[JA]", "English": "[EN]", "한국어": "[KO]"} , chinese_dialect_cleaners supports languages {"普通话": "[ZH]", "日本語": "[JA]", "English": "[EN]", "粤语": "[GD]", "上海话": "[SH]", "苏州话": "[SZ]", "无锡话": "[WX]", "常州话": "[CZ]", "杭州话": "[HZ]", ·····} , für mehr Sprachen, Sie können die Quellcode -Sprache sehen.
dataset/BZNSYP/Wave/000001.wav|标准女声|[ZH]卡尔普陪外孙玩滑梯。[ZH]
dataset/BZNSYP/Wave/000002.wav|标准女声|[ZH]假语村言别再拥抱我。[ZH]
dataset/BZNSYP/Wave/000003.wav|标准女声|[ZH]宝马配挂跛骡鞍,貂蝉怨枕董翁榻。[ZH]
Nach der Datenliste müssen Sie eine Phonem -Datenliste erstellen. Führen Sie einfach preprocess_data.py --train_data_list=dataset/bznsyp.txt aus, um eine Phonem -Datenliste zu generieren. Zu diesem Zeitpunkt sind die Daten alle bereit.
dataset/BZNSYP/Wave/000001.wav|0|kʰa↓↑əɹ`↓↑pʰu↓↑ pʰeɪ↑ waɪ↓swən→ wan↑ xwa↑tʰi→.
dataset/BZNSYP/Wave/000002.wav|0|tʃ⁼ja↓↑ɥ↓↑ tsʰwən→jɛn↑p⁼iɛ↑ ts⁼aɪ↓ jʊŋ→p⁼ɑʊ↓ wo↓↑.
dataset/BZNSYP/Wave/000003.wav|0|p⁼ɑʊ↓↑ma↓↑ pʰeɪ↓k⁼wa↓ p⁼wo↓↑ lwo↑an→, t⁼iɑʊ→ts`ʰan↑ ɥæn↓ ts`⁼ən↓↑ t⁼ʊŋ↓↑ʊŋ→ tʰa↓.
Jetzt können Sie das Modell ausbilden. Die Parameter in der Konfigurationsdatei müssen im Allgemeinen nicht geändert werden. Die Anzahl der Sprecher und der Name des Sprechers werden durch preprocess_data.py geändert. Das einzige, was möglicherweise geändert werden muss, ist train.batch_size . Wenn der Videospeicher nicht ausreicht, kann dieser Parameter reduziert werden.
# 单卡训练
CUDA_VISIBLE_DEVICES=0 python train.py
# 多卡训练
CUDA_VISIBLE_DEVICES=0,1 torchrun --standalone --nnodes=1 --nproc_per_node=2 train.pyTrainingsausgabeprotokoll:
[2023-08-28 21:04:42.274452 INFO ] utils:print_arguments:123 - ----------- 额外配置参数 -----------
[2023-08-28 21:04:42.274540 INFO ] utils:print_arguments:125 - config: configs/config.yml
[2023-08-28 21:04:42.274580 INFO ] utils:print_arguments:125 - epochs: 10000
[2023-08-28 21:04:42.274658 INFO ] utils:print_arguments:125 - model_dir: models
[2023-08-28 21:04:42.274702 INFO ] utils:print_arguments:125 - pretrained_model: None
[2023-08-28 21:04:42.274746 INFO ] utils:print_arguments:125 - resume_model: None
[2023-08-28 21:04:42.274788 INFO ] utils:print_arguments:126 - ------------------------------------------------
[2023-08-28 21:04:42.727728 INFO ] utils:print_arguments:128 - ----------- 配置文件参数 -----------
[2023-08-28 21:04:42.727836 INFO ] utils:print_arguments:131 - dataset_conf:
[2023-08-28 21:04:42.727909 INFO ] utils:print_arguments:138 - add_blank: True
[2023-08-28 21:04:42.727975 INFO ] utils:print_arguments:138 - batch_size: 16
[2023-08-28 21:04:42.728037 INFO ] utils:print_arguments:138 - cleaned_text: True
[2023-08-28 21:04:42.728097 INFO ] utils:print_arguments:138 - eval_sum: 2
[2023-08-28 21:04:42.728157 INFO ] utils:print_arguments:138 - filter_length: 1024
[2023-08-28 21:04:42.728204 INFO ] utils:print_arguments:138 - hop_length: 256
[2023-08-28 21:04:42.728235 INFO ] utils:print_arguments:138 - max_wav_value: 32768.0
[2023-08-28 21:04:42.728266 INFO ] utils:print_arguments:138 - mel_fmax: None
[2023-08-28 21:04:42.728298 INFO ] utils:print_arguments:138 - mel_fmin: 0.0
[2023-08-28 21:04:42.728328 INFO ] utils:print_arguments:138 - n_mel_channels: 80
[2023-08-28 21:04:42.728359 INFO ] utils:print_arguments:138 - num_workers: 4
[2023-08-28 21:04:42.728388 INFO ] utils:print_arguments:138 - sampling_rate: 22050
[2023-08-28 21:04:42.728418 INFO ] utils:print_arguments:138 - speakers_file: dataset/speakers.json
[2023-08-28 21:04:42.728448 INFO ] utils:print_arguments:138 - text_cleaner: cjke_cleaners2
[2023-08-28 21:04:42.728483 INFO ] utils:print_arguments:138 - training_file: dataset/train.txt
[2023-08-28 21:04:42.728539 INFO ] utils:print_arguments:138 - validation_file: dataset/val.txt
[2023-08-28 21:04:42.728585 INFO ] utils:print_arguments:138 - win_length: 1024
[2023-08-28 21:04:42.728615 INFO ] utils:print_arguments:131 - model:
[2023-08-28 21:04:42.728648 INFO ] utils:print_arguments:138 - filter_channels: 768
[2023-08-28 21:04:42.728685 INFO ] utils:print_arguments:138 - gin_channels: 256
[2023-08-28 21:04:42.728717 INFO ] utils:print_arguments:138 - hidden_channels: 192
[2023-08-28 21:04:42.728747 INFO ] utils:print_arguments:138 - inter_channels: 192
[2023-08-28 21:04:42.728777 INFO ] utils:print_arguments:138 - kernel_size: 3
[2023-08-28 21:04:42.728808 INFO ] utils:print_arguments:138 - n_heads: 2
[2023-08-28 21:04:42.728839 INFO ] utils:print_arguments:138 - n_layers: 6
[2023-08-28 21:04:42.728870 INFO ] utils:print_arguments:138 - n_layers_q: 3
[2023-08-28 21:04:42.728902 INFO ] utils:print_arguments:138 - p_dropout: 0.1
[2023-08-28 21:04:42.728933 INFO ] utils:print_arguments:138 - resblock: 1
[2023-08-28 21:04:42.728965 INFO ] utils:print_arguments:138 - resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5], [1, 3, 5]]
[2023-08-28 21:04:42.728997 INFO ] utils:print_arguments:138 - resblock_kernel_sizes: [3, 7, 11]
[2023-08-28 21:04:42.729027 INFO ] utils:print_arguments:138 - upsample_initial_channel: 512
[2023-08-28 21:04:42.729058 INFO ] utils:print_arguments:138 - upsample_kernel_sizes: [16, 16, 4, 4]
[2023-08-28 21:04:42.729089 INFO ] utils:print_arguments:138 - upsample_rates: [8, 8, 2, 2]
[2023-08-28 21:04:42.729119 INFO ] utils:print_arguments:138 - use_spectral_norm: False
[2023-08-28 21:04:42.729150 INFO ] utils:print_arguments:131 - optimizer_conf:
[2023-08-28 21:04:42.729184 INFO ] utils:print_arguments:138 - betas: [0.8, 0.99]
[2023-08-28 21:04:42.729217 INFO ] utils:print_arguments:138 - eps: 1e-09
[2023-08-28 21:04:42.729249 INFO ] utils:print_arguments:138 - learning_rate: 0.0002
[2023-08-28 21:04:42.729280 INFO ] utils:print_arguments:138 - optimizer: AdamW
[2023-08-28 21:04:42.729311 INFO ] utils:print_arguments:138 - scheduler: ExponentialLR
[2023-08-28 21:04:42.729341 INFO ] utils:print_arguments:134 - scheduler_args:
[2023-08-28 21:04:42.729373 INFO ] utils:print_arguments:136 - gamma: 0.999875
[2023-08-28 21:04:42.729404 INFO ] utils:print_arguments:131 - train_conf:
[2023-08-28 21:04:42.729437 INFO ] utils:print_arguments:138 - c_kl: 1.0
[2023-08-28 21:04:42.729467 INFO ] utils:print_arguments:138 - c_mel: 45
[2023-08-28 21:04:42.729498 INFO ] utils:print_arguments:138 - enable_amp: True
[2023-08-28 21:04:42.729530 INFO ] utils:print_arguments:138 - log_interval: 200
[2023-08-28 21:04:42.729561 INFO ] utils:print_arguments:138 - seed: 1234
[2023-08-28 21:04:42.729592 INFO ] utils:print_arguments:138 - segment_size: 8192
[2023-08-28 21:04:42.729622 INFO ] utils:print_arguments:141 - ------------------------------------------------
[2023-08-28 21:04:42.729971 INFO ] trainer:__init__:53 - [cjke_cleaners2]支持语言:['日本語', '普通话', 'English', '한국어', "Mix": ""]
[2023-08-28 21:04:42.795955 INFO ] trainer:__setup_dataloader:119 - 训练数据:9984
epoch [1/10000]: 100%|██████████| 619/619 [05:30<00:00, 1.88it/s]]
[2023-08-25 16:44:25.205557 INFO ] trainer:train:168 - ======================================================================
epoch [2/10000]: 100%|██████████| 619/619 [05:20<00:00, 1.93it/s]s]
[2023-08-25 16:49:54.372718 INFO ] trainer:train:168 - ======================================================================
epoch [3/10000]: 100%|██████████| 619/619 [05:19<00:00, 1.94it/s]
[2023-08-25 16:55:21.277194 INFO ] trainer:train:168 - ======================================================================
epoch [4/10000]: 100%|██████████| 619/619 [05:18<00:00, 1.94it/s]
Die Trainingsprotokolle werden auch mit VisualDL gespeichert. Sie können dieses Tool verwenden, um die Verluständerungen und Syntheseeffekte in Echtzeit anzuzeigen. Führen Sie einfach visualdl --logdir=log/ --host=0.0.0.0 im Stammverzeichnis des Projekts aus und besuchen Sie http://<IP地址>:8040 um die Seite zu öffnen. Der Effekt ist wie folgt.

Nach dem Training auf einer bestimmten Ebene können Sie das Modell zur Aussprache verwenden. Der Befehl ist wie folgt. Es gibt drei Hauptparameter, nämlich --text gibt den Text an, der synthetisiert werden muss. --language Gibt die Sprache des zusammengesetzten Textes an. Wenn die Sprache als Mix angegeben ist, befindet sie sich in einem gemischten Modus. Der Benutzer muss den Einkommenstext manuell mit einem Sprach -Tag einwickeln. Geben Sie schließlich den Parameter des Sprechers --spk . Geh und versuche es schnell.
python infer.py --text= "你好,我是智能语音助手。 " --language=普通话 --spk=标准女声Belohnen Sie einen Dollar, um den Autor zu unterstützen