單發多揚聲器文本到語音(OS MS TTS)系統的目的是將文本轉換為用小樣本確定的語音的語音。這裡的主要問題是在不重述網絡的情況下重現新的看不見的聲音。有三個主要階段的方法用於解決此問題。在第一階段生成的每個語音揚聲器嵌入的獨特嵌入(示出語音特徵)(揚聲器編碼器)。在第二階段(合成器),使用先前獲得的嵌入將文本轉化為MEL-SECTROGRAM。最後,語音是從Mel-Spectrograpon與Vocoder複製的。但是,正確組合這三個部分缺乏實現。因此,我們項目的目標是創建一個靈活的框架,以組合這些零件並在每個部分中提供可更換的模塊和方法。
到目前為止,我們看到以下主要挑戰:
我們選擇講師提出的解決方案作為基線,可以在此處找到。這是2018年在Google中製造的[1]的實現。在這裡,作者使用[2]中介紹的揚聲器編碼器,該編碼器生成了固定維嵌入向量,稱為d-vector。至於合成器,他們使用基於Tacotron 2 [3]的模型,而基於自動回歸的WaveNet的模型則用作Vocoder [4]。從[1]拍攝的以下圖像表示模型概述: 
實時聲音鍵合包含編碼器,Tacotron 2和Wavernn的實現。 [1]中描述的整個管道,包括預處理步驟,在此存儲庫中也實現。但是,該項目還不夠靈活。更具體地說,在當前狀態下,它不能用作單發多演講者文本到語音系統的框架,因為沒有方便的機制可以用三個主模塊來操縱。例如,[5]中的擬議的多揚聲器TTS系統無法在實時訪問的幫助下輕鬆實現,因為沒有可擴展的點可以調整新方法的管道。
我們的計劃是使用實現的基線使用實時派遣點鍵合作點。我們將介紹框架的靈活模塊化設計。這種方法將幫助我們為外部用戶創建方便的API,他們將能夠使用我們的框架將多揚聲器TTS系統納入其產品中。 API還將讓用戶自定義模塊和管道步驟,而無需在需要時更改框架的源代碼。我們將實施幾個發言人編碼器(LDE,TDNN),並將它們添加到我們的框架中。
從高點來看,我們的項目包括3個主要要素:揚聲器編碼器,合成器,Vocoder。對於他們每個人,都將實施一個經理,允許人們訪問參數並執行標準操作,例如推理和培訓。在它們上方,我們實施了OS MS TTS Manager,該管理器將所有三個部分匯總在一起,並允許一個人製作所有管道並用所需的語音產生語音。這些部分中的每一個都由相應元素的典型基本子零件組成。它們可以描述如下:
在我們的存儲庫中,我們添加了筆記本電腦,可以在其中上傳語音音頻,.txt文件並用克隆的語音產生語音。儘管預算模型的權重自動在第一次運行時自動下載,但用戶仍然可以下載存檔,此處的其他說明在此處的筆記本中
Nikolay將設計模塊化體系結構,用於外部使用和培訓管道的API。 gleb將實施模型,編寫文檔和用法示例的工作堆棧。
.
└── osms
├── __init__.py
├── common
│ ├── __init__.py
│ ├── configs
│ │ ├── __init__.py
│ │ ├── config.py
│ │ └── main_config.yaml
│ └── multispeaker.py
├── main.py
├── tts_modules
│ ├── __init__.py
│ ├── encoder
│ │ ├── __init__.py
│ │ ├── configs
│ │ │ ├── AudioConfig.yaml
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ └── dVecModelConfig.yaml
│ │ ├── data
│ │ │ ├── DataObjects.py
│ │ │ ├── __init__.py
│ │ │ ├── dataset.py
│ │ │ ├── wav2mel.py
│ │ │ └── wav_preprocessing.py
│ │ ├── models
│ │ │ ├── __init__.py
│ │ │ └── dVecModel.py
│ │ ├── speaker_encoder_manager.py
│ │ └── utils
│ │ ├── Trainer.py
│ │ └── __init__.py
│ ├── synthesizer
│ │ ├── LICENSE.md
│ │ ├── __init__.py
│ │ ├── configs
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── hparams.py
│ │ │ └── tacotron_config.yaml
│ │ ├── data
│ │ │ ├── __init__.py
│ │ │ ├── audio.py
│ │ │ ├── dataset.py
│ │ │ └── preprocess.py
│ │ ├── models
│ │ │ ├── __init__.py
│ │ │ └── tacotron.py
│ │ ├── synthesize.py
│ │ ├── synthesizer_manager.py
│ │ ├── trainer.py
│ │ └── utils
│ │ ├── __init__.py
│ │ ├── cleaners.py
│ │ ├── logmmse.py
│ │ ├── numbers.py
│ │ ├── plot.py
│ │ ├── symbols.py
│ │ └── text.py
│ ├── tts_module_manager.py
│ └── vocoder
│ ├── __init__.py
│ ├── configs
│ │ ├── __init__.py
│ │ ├── config.py
│ │ ├── hparams.py
│ │ └── wavernn_config.yaml
│ ├── data
│ │ ├── __init__.py
│ │ ├── dataset.py
│ │ └── preprocess.py
│ ├── models
│ │ ├── __init__.py
│ │ └── wavernn.py
│ ├── utils
│ │ ├── Trainer.py
│ │ ├── __init__.py
│ │ ├── audio.py
│ │ ├── distribution.py
│ │ └── gen_wavernn.py
│ └── vocoder_manager.py
└── utils
└── __init__.py運行pip3 install .從根目錄。
我們已經針對揚聲器編碼器,合成器和Vocoder實施了libraspeech數據集的完整處理。可以通過此鏈接下載Libraspeech數據集。另外,對於揚聲器編碼器,我們實現了使用自定義數據集的接口。一個人需要實現PreprocessDataset界面接口函數, WavPreprocessor接口函數, WavPreprocessor接口函數或使用實現的函數。
對於基線模型,默認配置將自動加載。要更改它們,可以在osms/common/configs/config.py中使用update_config(...) 。要加載默認配置,可以使用get_default_<module_name>_config(...) 。另外,人們可以實現自己的配置將其用於其他型號。
要與每個三個模塊一起工作,我們實現了自己的經理: SpeakerEncoderManager , SynthesizerManager , VocoderManager 。作為主要經理,我們實施了MustiSpreakerManager ,該管理員可以訪問所有三位經理。可以使用它們來推斷整個TTS模型,並分別或一起訓練每個模塊。用法的示例可以在筆記本中找到。
基線檢查點會在checkpoints目錄中自動下載,並創建“ MultiSpeaker”對象。另外,可以通過簡單更新配置(更改... checkpoint_dir_path,checkpoint_name)來使用其他檢查點。