Diffsinger的Pytorch實現:通過淺擴散機制(集中在diffspeech上)唱歌語音綜合。


K邊界預測的一個更容易的技巧K作為最大時間步長利用預先訓練的輔助解碼器 +訓練Denoiser 數據集是指以下文檔中的數據集的名稱,例如LJSpeech 。
模型是指模型的類型(從“幼稚”,“ aux ”,“ shallow ”中選擇)。
您可以使用
pip3 install -r requirements.txt
您必須下載預算的型號並將其放入
output/ckpt/LJSpeech_naive/ for'naive '模型。output/ckpt/LJSpeech_shallow/用於“淺”模型。請注意,“淺”模型的檢查站都包含“淺”和“ AUX ”模型,這兩個模型將共享所有目錄,除了整個過程中的結果。對於英語單揚聲器TTS,運行
python3 synthesize.py --text "YOUR_DESIRED_TEXT" --model MODEL --restore_step RESTORE_STEP --mode single --dataset DATASET
生成的話語將放入output/result/ 。
也支持批次推理,嘗試
python3 synthesize.py --source preprocessed_data/LJSpeech/val.txt --model MODEL --restore_step RESTORE_STEP --mode batch --dataset DATASET
綜合preprocessed_data/LJSpeech/val.txt中的所有話語。
可以通過指定所需的音高/能量/持續時間比來控制合成話語的音高/音量/口語速率。例如,一個人可以將語言率提高20%,並將數量減少20%
python3 synthesize.py --text "YOUR_DESIRED_TEXT" --model MODEL --restore_step RESTORE_STEP --mode single --dataset DATASET --duration_control 0.8 --energy_control 0.8
請注意,可控性起源於fastspeech2,而不是diffspeech的重要利益。
支持的數據集是
首先,運行
python3 prepare_align.py --dataset DATASET
用於一些準備工作。
對於強制對準,蒙特利爾強制對準器(MFA)用於獲得發音和音素序列之間的比對。此處提供了數據集的預提取對齊。您必須在preprocessed_data/DATASET/TextGrid/中解壓縮文件。或者,您可以自己運行對準器。
之後,通過
python3 preprocess.py --dataset DATASET
您可以訓練三種類型的模型:“幼稚”,“輔助”和“淺”。
培訓幼稚版本(“天真”):
訓練幼稚版本
python3 train.py --model naive --dataset DATASET
培訓輔助解碼器的淺版本(“ AUX ”):
要訓練淺版本,我們需要一個預訓練的FastSpeech2。以下命令將使您訓練包括輔助解碼器在內的FastSpeech2模塊。
python3 train.py --model aux --dataset DATASET
邊界預測的一個更容易的技巧:
為了從我們的驗證數據集中獲取邊界K ,您可以使用以下命令使用預訓練的輔助FastSpeech2運行邊界預測變量。
python3 boundary_predictor.py --restore_step RESTORE_STEP --dataset DATASET
它將在命令日誌中打印出預測值(例如, K_STEP )。
然後,用預測值設置配置如下
# In the model.yaml
denoiser :
K_step : K_STEP請注意,這是基於附錄B中引入的技巧。
培訓淺版本(“淺”):
為了利用預訓練的FastSpeech2,包括輔助解碼器,必須將restore_step設置為輔助FastSpeech2培訓的最後一步作為以下命令。
python3 train.py --model shallow --restore_step RESTORE_STEP --dataset DATASET
例如,如果在輔助培訓期間將最後一個檢查點保存在160000步驟中,則必須使用160000設置restore_step 。然後,它將加載AUX模型,然後在淺層訓練機制下繼續進行訓練。
使用
tensorboard --logdir output/log/LJSpeech
在您的本地主機上提供張板。顯示了損耗曲線,合成的MEL光譜圖和音頻。







27.767M ,類似於原始紙張( 27.722M )。100 ,這是幼稚擴散的完整時間段,因此在擴散步驟上沒有優勢。 @misc{lee2021diffsinger,
author = {Lee, Keon},
title = {DiffSinger},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/keonlee9420/DiffSinger}}
}