什麼?語音合成開源代碼不會跑,follow me!

語言: CN / TW / HK
摘要:本文描述的深度神經網絡模型結構:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions。

本文分享自華為雲社區《什麼?語音合成開源代碼不會跑,我來教你跑Tacotron2》,作者: 白馬過平川 。

Tacotron-2:

TTS論文大全 https://github.com/lifefeel/SpeechSynthesis
DeepMindTacotron-2Tensorflow實現。 本文描述的深度神經網絡模型結構:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions
github地址https://github.com/Rookie-Chenfy/Tacotron-2
還有一些其他版本的Tacotron2開源項目:

  •  

這個 github 包含了對該論文的其他改進和嘗試, 因此我們使用paper_hparams.py文件,該文件保存精確的超參數以重現了paper的結果,而無需任何額外的附加功能。默認使用的建議hparams.py文件包含帶有額外內容的超參數,在大多數情況下可以提供更好的結果。 按照自己的需要隨意修改參數,差異將在文件中突出顯示。

Repository Structure:

  • 步驟 (0): 獲取數據集, 這裏我設置了Ljspeech,en_US和en_UK(來自M-AILABS)的示例。
  • 步驟 (1): 預處理您的數據。這將為您提供training_data文件夾。
  • 步驟 (2): 訓練你的Tacotron模型。產生logs-Tacotron文件夾。
  • 步驟 (3): 合成/評估Tacotron模型。給出tacotron_output文件夾。
  • 步驟 (4): 訓練您的Wavenet模型。產生logs-Wavenet文件夾。
  • 步驟 (5): 使用Wavenet模型合成音頻。給出wavenet_output文件夾。

注意:

  • 步驟2,3和4可以通過Tacotron和WaveNet(Tacotron-2,步驟(*))的簡單運行來完成。
  • 原有github的預處理僅支持Ljspeech和類似Ljspeech的數據集(M-AILABS語音數據)!如果以不同的方式存儲數據集,則需要製作自己的preprocessing腳本。
  • 如果同時對兩個模型進行訓練,則模型參數結構將不同。

一些預訓練模型和demo:

您可以在此處.查看模型性能的一些主要見解(在預訓練階段)。

模型架構:

圖1:Tacotron2模型結構圖

作者描述的模型可分為兩部分:

  • 譜圖預測網絡
  • Wavenet聲碼器

要深入探索模型體系結構,訓練過程和預處理邏輯,請參閲 作者的 wiki

如何開始

環境設置:

首先,您需要與Tensorflow一起安裝python 3 。

接下來,您需要安裝一些Linux依賴項以確保音頻庫正常工作:

apt-get install -y libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg libav-tools

最後,您可以安裝 requirements.txt. 如果你是一個 Anaconda 用户: (可以用 pip3 代替 pip 並 用python3 代替 python)

pip install -r requirements.txt

Docker:

或者,可以構建docker鏡像以確保自動設置所有內容並使用docker容器內的項目。

Dockerfile is insider “docker” folder

docker image可以用以下內容構建:

docker build -t tacotron-2_image docker/

然後容器可以運行:

docker run -i --name new_container tacotron-2_image

數據集:

該github在 ljspeech dataset數據集上測試了上面的代碼,該數據集有近24小時標記的單個女演員錄音。(下載時,README文件中提供了有關數據集的更多信息)

該github還在 新的M-AILABS語音數據集 上運行當前測試,該數據集 包含超過700種語音(超過80 Gb的數據),超過10種語言。

下載數據集後, 解壓壓縮文件, 而該文件夾放在克隆的github裏。

Hparams設置:

在繼續之前,您必須選擇最適合您需求的超參數。 雖然可以在預處理/訓練期間從命令行更改超參數,但我仍然建議直接在hparams.py文件上一勞永逸地進行更改。

為了選擇最佳的fft參數,我製作了一個griffin_lim_synthesis_tool筆記本, 您可以使用它來反轉實際提取的梅爾/線性光譜圖,並選擇預處理的好壞程度。所有其他選項都在hparams.py中得到了很好的解釋,並且具有有意義的名稱,因此您可以嘗試使用它們。

AWAIT DOCUMENTATION ON HPARAMS SHORTLY!!

預處理

在運行以下步驟之前,請確保您在Tacotron-2文件夾中

cd Tacotron-2

然後可以使用以下命令開始預處理:

python preprocess.py

可以使用 –dataset 參數選擇數據集。如果使用M-AILABS數據集,則需要提供 language, voice, reader, merge_books and book arguments 以滿足您的自定義需求。默認是 Ljspeech.

示例M-AILABS:

python preprocess.py --dataset='M-AILABS' --language='en_US' --voice='female' --reader='mary_ann' --merge_books=False --book='northandsouth'

或者如果你想一個説話人使用所有書籍:

python preprocess.py --dataset='M-AILABS' --language='en_US' --voice='female' --reader='mary_ann' --merge_books=True

這應該不會超過幾分鐘。

訓練:

按順序訓練兩個模型:

python train.py --model='Tacotron-2'

特徵預測模型Tacotron-2可以分別被訓練使用:

python train.py --model='Tacotron'

每5000步記錄一次,並存儲在logs-Tacotron文件夾下。

當然,單獨訓練wavenet是通過以下方式完成的:

python train.py --model='WaveNet'

logs will be stored inside logs-Wavenet.

注意:

  • 如果未提供模型參數,則訓練將默認為Tacotron-2模型培訓。(與tacotron模型結構不同)
  • 訓練模型的參數可以參考  train.py 有很多選項可以選
  • wavenet 的預處理可能得單獨使用 wavenet_proprocess.py腳本

合成

合成音頻  端到端 (文本到音頻) 的方式 (兩個模型同時運行):

python synthesize.py --model='Tacotron-2'

對於頻譜圖預測網絡,有三種類型的mel譜圖的預測結果:

  • 推理測試(對自定義句子的綜合評測)。 這是我們在擁有完整的端到端模型後通常會使用的。
python synthesize.py --model='Tacotron'
  • 自然合成 (讓模型通過將最後一個解碼器的輸出輸入到下一個時間步來單獨進行預測).
python synthesize.py --model='Tacotron' --mode='synthesis' --GTA=False
  • 有效的對齊合成 (默認: 模型是在有效真實的標籤下強制訓練產生的). 當預測用於訓練wavenet的mel頻譜時,使用該合成方法. (如文中所述,產生更好的結果)
python synthesize.py --model='Tacotron' --mode='synthesis' --GTA=True

用先前合成的Mel頻譜合成波形:

python synthesize.py --model='WaveNet'

注意:

  • 如果未提供模型參數,則默認使用Tacotron-2模型合成。(End-to-End TTS)
  • 選擇的合成參數,你可以參考synthesize.py

參考文獻和源碼:

 

想了解更多的AI技術乾貨,歡迎上華為雲的AI專區,目前有AI編程Python等六大實戰營供大家免費學習。(六大實戰營link:http://su.modelarts.club/qQB9)

 

點擊關注,第一時間瞭解華為雲新鮮技術~