本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注。
近日,Facebook 在題為《Voice Synthesis for in-the-Wild Speakers via a Phonological Loop》的論文中提出一個文本轉語音(TTS)的新神經網絡VoiceLoop,它能夠把文本轉化為在室外採樣的聲音中的語音。目前 VoiceLoop 已在 GitHub 上開源並附有 PyTorch 實現。機器之心對論文摘要進行了編譯。論文與GitHub連結請見文中。
論文:Voice Synthesis for in-the-Wild Speakers via a Phonological Loop
論文地址:https://arxiv.org/abs/1707.06588
摘要:我們展示了一種新的文本轉語音的神經方法,該方法能夠將文本轉換成室外採樣的聲音的語音。與其他文本轉語音的系統不同,我們的解決方案能夠處理公眾演講中獲取的非約束樣本(unconstrained sample)。該網絡架構比現有的架構簡單,基於新型的移位緩衝工作儲存器(shifting buffer working memory)。同樣的緩衝用於評估注意力、計算輸出音頻以及更新緩衝。輸入句子通過包含每個字或音素的條目的上下文無關查找表(context-free lookup table)進行編碼。最後,說話者語音被簡單表徵為短向量,適用於生成語音裡新的說話者和可變性(variability),該語音通過在生成音頻之前啟動緩衝來獲得。在兩個數據集上的實驗結果證明該方法具備處理多個說話者和室外語音的能力。為了促進可重複性,我們公開了原始碼和模型:PyTorch 代碼和樣本音頻文件可在 ytaigman.github.io/loop 獲取。
該方法已在論文《Voice Synthesis for in-the-Wild Speakers via a Phonological Loop》詳細描述,以下是其 PyTorch 實現。
項目地址:https://github.com/facebookresearch/loop
VoiceLoop 是一個文本轉語音(TTS)的神經系統,能夠把文本轉化為在室外採樣的聲音中的語音。這裡有一些演示樣本(https://ytaigman.github.io/loop/site/)。
重要連結
演示樣本:https://ytaigman.github.io/loop/site/
快速入門:https://github.com/facebookresearch/loop#quick-start
設置:https://github.com/facebookresearch/loop#setup
訓練:https://github.com/facebookresearch/loop#training
快速啟動
在安裝中遵循以下指示,並簡單地執行以下命令:
python generate.py --npz data/vctk/numpy_features_valid/p318_212.npz --spkr 13 --checkpoint models/vctk/bestmodel.pth
結果將被放置在 models/vctk/results。它將生成兩個樣本:
生成樣本將會以 gen_10.wav 的擴展名保存。
它的真值(測試)樣本也被生成,並使用 orig.wav 擴展名保存。
你也可以用不同說話者的語音生成相同的文本,具體如下:
python generate.py --npz data/vctk/numpy_features_valid/p318_212.npz --spkr 18 --checkpoint models/vctk/bestmodel.pth
這將會生成以下樣本(https://ytaigman.github.io/loop/demos/vctk_tutorial/p318_212.gen_14.wav)。
下面是對應的注意力圖:
說明:X 軸是輸出時間(聲學樣本),Y 軸是輸入(文本/音素)。左圖是說話者 10,右圖是說話者 14
最後,該系統還支持自由文本:
python generate.py --text "hello world" --spkr 1 --checkpoint models/vctk/bestmodel.pth
安裝
需求:Linux/OSX、Python2.7 和 PyTorch 0.1.12。代碼當前版本需要 CUDA 支持訓練。生成將在 CPU 上完成。
git clone https://github.com/facebookresearch/loop.git
cd loop
pip install -r scripts/requirements.txt
數據
論文中用於訓練模型的數據可以通過以下方式下載:
bash scripts/download_data.sh
腳本下載 VCTK 的子集,並進行預處理。該子集包括美國口音的說話者。使用 Merlin 對該數據集進行預處理——使用 WORLD 聲碼器從每個音頻剪輯文件中抽取聲碼器特徵。下載完成後,該數據集將位於子文件夾 data 下,如下所示:
loop
├── data
└── vctk
├── norm_info
│ ├── norm.dat
├── numpy_feautres
│ ├── p294_001.npz
│ ├── p294_002.npz
│ └── ...
└── numpy_features_valid
使用 Kyle Kastner 的腳本執行預處理管線,腳本連結:https://gist.github.com/kastnerkyle/cc0ac48d34860c5bb3f9112f4d9a0300。
預訓練模型
通過以下方式下載預訓練模型:
bash scripts/download_models.sh
下載完成後,模型在子文件夾 models 下,如下所示:
loop
├── data
├── models
├── vctk
│ ├── args.pth
│ └── bestmodel.pth
└── vctk_alt
最後,語音生成需要 SPTK3.9 和 WORLD 聲碼器,正如 Merlin 中一樣。使用下列方式下載可執行程序:
bash scripts/download_tools.sh
然後得到以下子目錄:
loop
├── data
├── models
├── tools
├── SPTK-3.9
└── WORLD
訓練
在 vctk 上訓練一個新模型,首先使用水平為 4 的噪聲訓練模型,輸入長度為 100 的序列:
python train.py --expName vctk --data data/vctk --noise 4 --seq-len 100 --epochs 90
之後,在全長序列上使用水平為 2 的噪聲繼續訓練模型:
python train.py --expName vctk_noise_2 --data data/vctk --checkpoint checkpoints/vctk/bestmodel.pth --noise 2 --seq-len 1000 --epochs 90
引用
如果你覺得這些代碼對你的研究有所幫助,請引用:
@article{taigman2017voice,
title = {Voice Synthesis for in-the-Wild Speakers via a Phonological Loop},
author = {Taigman, Yaniv and Wolf, Lior and Polyak, Adam and Nachmani, Eliya},
journal = {ArXiv e-prints},
archivePrefix = "arXiv",
eprinttype = {arxiv},
eprint = {1705.03122},
primaryClass = "cs.CL",
year = {2017}
month = July,
}
許可
Loop 有 CC-BY-NC 許可。