該存儲庫包含用於Tacotron 2的示例代碼,帶有多演講者的WaveLow,情感嵌入以及用於數據預處理的腳本。
檢查點和代碼來自以下來源:
configs/experiments文件夾下的實驗配置文件中以下一節列出了要求,以便開始訓練Tacotron 2和Wavellow模型。
克隆存儲庫:
git clone https://github.com/ide8/tacotron2
cd tacotron2
PROJDIR= $( pwd )
export PYTHONPATH= $PROJDIR : $PYTHONPATH該存儲庫包含dockerfile,它擴展了Pytorch NGC容器並封裝了一些依賴關係。除這些依賴性外,請確保您有以下組件:
從Docker文件構建圖像:
docker build --tag taco .運行Docker容器:
docker run --shm-size=8G --runtime=nvidia -v /absolute/path/to/your/code:/app -v /absolute/path/to/your/training_data:/mnt/train -v /absolute/path/to/your/logs:/mnt/logs -v /absolute/path/to/your/raw-data:/mnt/raw-data -v /absolute/path/to/your/pretrained-checkpoint:/mnt/pretrained -detach taco sleep inf檢查容器ID:
docker ps選擇帶有標籤taco的圖像的容器ID,然後登錄到容器中:
docker exec -it container_id bash
文件夾tacotron2和waveglow具有用於Tacotron 2的腳本,WaveLow模型,包括:
<model_name>/model.py模型體系結構<model_name>/data_function.py數據加載功能<model_name>/loss_function.py損失功能文件夾common包含兩個模型( common/layers.py ),utils( common/utils.py )和音頻處理( common/audio_processing.py和common/stft.py )的公共層。
文件夾router由訓練腳本使用來選擇適當的模型
在根目錄中:
train.py模型培訓的腳本preprocess.py執行音頻處理並創建培訓和驗證數據集inference.ipynb用於運行推理的筆記本文件夾configs包含__init__.py ,其中包含培訓和數據處理所需的所有參數。文件夾configs/experiments包括所有實驗。提供了waveglow.py和tacotron2.py作為浪潮和tacotron 2的示例。在訓練或數據處理開始時,從您的實驗中復制參數(在我們的情況下 - 從waveglow.py或tacotron2.py或從tacotron2.py )到__init__.py 。
wavs文件夾和metadata.csv file_name.wav|text 。configs/experiments/waveglow.py或configs/experiments/tacotron2.py中設置,在類PreprocessingConfig中。start_from_preprocessed標誌設置為false 。 preprocess.py在PreprocessingConfig.top_db上執行修剪音頻文件(在開始和結束時剪切靜音),應用ffmpeg命令以進行單聲道,對數據集中的所有wav進行相同的採樣率和比特率。PreprocessingConfig.output_directory中使用處理後的音頻文件和data.csv保存一個文件夾wavs ,並使用以下格式: path|text|speaker_name|speaker_id|emotion|text_len|duration 。process_audio為true 。具有旗幟emotion_present揚聲器是錯誤的,被視為情緒neutral-normal 。start_from_preprocessed = False 。如果有新的原始數據出現,則只有例外。start_from_preprocessed設置為true ,腳本將加載文件data.csv (由start_from_preprocessed = False Run創建),並從data.csv中添加train.txt和val.txt 。PreprocessingConfig參數參數:cpus定義批處理生成器的核心數sr定義讀寫音頻的樣本比率emo_id_map情感名稱to情感映射的詞典data[{'path'}] - 是通往使用揚聲器名稱的文件夾的路徑,並包含wavs文件夾和metadata.csv帶有以下行格式: file_name.wav|text|emotion (optional)PreprocessingConfig.limit_by (適當的批次大小需要此步驟)PreprocessingConfig.text_limit和PreprocessingConfig.dur_limit中選擇行。音頻的下限由PreprocessingConfig.minimum_viable_dur定義PreprocessingConfig.text_limit設置為linda_jonsontrain : val = 0.95 : 0.05PreprocessingConfig.n樣品n行train.txt和val.txt到PreprocessingConfig.output_directoryemotion_coefficients.json and speaker_coefficients.json具有損失平衡係數(由train.py使用)。由於兩個腳本waveglow.py和tacotron2.py都包含類PreprocessingConfig ,因此可以通過運行任何一個來生成培訓和驗證數據集:
python preprocess.py --exp tacotron2
或者
python preprocess.py --exp waveglow
在configs/experiment/tacotron2.py中,在類Config集中:
training_files and validation_files train.txt的路徑, val.txt ;tacotron_checkpoint如果存在預計的Tacotron 2的路徑(我們能夠恢復NVIDIA的浪潮,但是Tacotron 2代碼被編輯以添加揚聲器和情感,因此需要從頭開始訓練Tacotron 2);speaker_coefficients speaker_coefficients.json的路徑;emotion_coefficients emotion_coefficients.json的路徑;output_directory編寫日誌和檢查點的路徑;use_emotions指示情緒使用的標誌;use_loss_coefficients標誌,指示損失縮放,這是由於揚聲器和情緒而言可能的數據失調;為了平衡損失,請在emotion_coefficients和speaker_coefficients中為JSON設定途徑;model_name "Tacotron2" 。 python train.py --exp tacotron2
python -m multiproc train.py --exp tacotron2
在configs/experiment/waveglow.py中,在類Config集中:
training_files and validation_files train.txt的路徑, val.txt ;waveglow_checkpoint從NVIDIA恢復的經過驗證的WaveLow的路徑。下載CheckOpoint。output_directory編寫日誌和檢查點的路徑;use_emotions false ;use_loss_coefficients false ;model_name "WaveGlow" 。 python train.py --exp waveglow
python -m multiproc train.py --exp waveglow
一旦您進行了模型開始培訓,您可能希望看到一些培訓的進展:
docker ps
使用標籤taco選擇圖像的容器ID並運行:
docker exec -it container_id bash
啟動張板:
tensorboard --logdir=path_to_folder_with_logs --host=0.0.0.0
損失被寫入張板中:

音頻樣本和注意對齊都可以保存到每個Config.epochs_per_checkpoint中。音頻的成績單在Config.phrases中列出

使用the the the the the inference.ipynb筆記本運行推理。
運行Jupyter筆記本:
jupyter notebook --ip 0.0.0.0 --port 6006 --no-browser --allow-root
輸出:
root@04096a19c266:/app# jupyter notebook --ip 0.0.0.0 --port 6006 --no-browser --allow-root
[I 09:31:25.393 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.6/site-packages/jupyterlab
[I 09:31:25.393 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 09:31:25.395 NotebookApp] Serving notebooks from local directory: /app
[I 09:31:25.395 NotebookApp] The Jupyter Notebook is running at:
[I 09:31:25.395 NotebookApp] http://(04096a19c266 or 127.0.0.1):6006/?token=bbd413aef225c1394be3b9de144242075e651bea937eecce
[I 09:31:25.395 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 09:31:25.398 NotebookApp]
To access the notebook, open this file in a browser:
file:///root/.local/share/jupyter/runtime/nbserver-15398-open.html
Or copy and paste one of these URLs:
http://(04096a19c266 or 127.0.0.1):6006/?token=bbd413aef225c1394be3b9de144242075e651bea937eecce
選擇使用127.0.0.1的地址,然後將其放入瀏覽器中。在這種情況下: http://127.0.0.1:6006/?token=bbd413aef225c1394be3b9de144242075e651bea937eecce 6006/?token=bbd413aef225C1394BE3B9DE144242075E651BEA937EECCE
該腳本以文本為輸入並運行Tacotron 2,然後WaveGlow推斷以產生音頻文件。它需要從Tacotron 2和Wavellow模型,輸入文本,Speaker_ID和Emotion_id的預訓練檢查點。
將路徑更改為預處理的TACOTRON 2的檢查點,並在the the the the the the the the inference.ipynb的細胞[2]中將路徑更改。
寫一個要顯示在the the the the the the the the the the the the the the inference.ipynb中的文本。
在本節中,我們列出了最重要的超參數及其默認值,這些值用於訓練TaCotron 2和Wavellow模型。
epochs - 時期數(Tacotron 2:1501,Wavelow:1001)learning-rate - 學習率(TACOTRON 2:1E-3,WAVEGLOW:1E-4)batch-size - 批量尺寸(Tacotron 2:64,WaveLow:11)grad_clip_thresh漸變剪輯treshold(0.1)sampling-rate - 輸入和輸出音頻Hz中的採樣率(22050)filter-length - (1024)hop-length - hop長度為FFT,即連續FFT之間的樣品步幅(256)win-length FFT的窗口尺寸(1024)mel-fmin Hz的最低頻率(0.0)mel-fmax Hz中的最高頻率(8.000)anneal-steps - 退火率的時期(500/1000/1500)anneal-factor - 通過以下情況,使用這兩個參數來退火率(0.1)來改變學習率的因素(0.1 anneal-steps 。learning_rate = learning_rate * ( anneal_factor ** p) ,p = 0在第一步,每個步驟增加1個。segment-length - 由神經網絡處理的輸入音頻的段長度(8000)。在傳遞輸入之前,音頻被填充或裁剪為segment-length 。wn_config具有仿射耦合層參數的字典。包含n_layers , n_chanels , kernel_size 。 如果您曾經想為開源而做出貢獻,這是您的機會,現在是您的機會!
有關更多信息,請參見貢獻文檔