基於MLP-MIXER的TTSORFLOW實現。
在python中測試3.7.9 Ubuntu Conda環境,需求.txt
要下載LJ-Speech數據集,請在腳本下運行。
數據集將以tfrecord格式以'〜/tensorflow_datasets下載。如果要更改下載目錄,請指定LJSpeech初始化器的data_dir參數。
from speechset . datasets import LJSpeech
# lj = LJSpeech(data_dir=path, download=True)
lj = LJSpeech ( download = True ) 要訓練型號,請運行train.py。
CheckPoint將寫在TrainConfig.ckpt上,張量板摘要上的TrainConfig.log 。
python train.py
tensorboard --logdir . l og如果您想從RAW AUDIO訓練模型,請指定音頻目錄並打開標誌--from-raw 。
python . t rain.py --data-dir ./LJSpeech-1.1/wavs --from-raw為了開始從以前的檢查點進行訓練,可以使用--load-epoch 。
python . t rain.py --load-epoch 20 --config D: t f c kpt m lptts.json預處理的檢查站將在版本上重新介紹。
要使用預估計的模型,請下載文件並解壓縮。以下是示例腳本。
from config import Config
from mlptts import MLPTextToSpeech
with open ( 'mlptts.json' ) as f :
config = Config . load ( json . load ( f ))
tts = MLPTextToSpeech ( config . model )
dummies = {
'text' : tf . zeros ([ 1 , 1 ], dtype = tf . int32 ),
'textlen' : tf . ones ([ 1 ], dtype = tf . int32 ),
'mel' : tf . zeros ([ 1 , 5 , config . model . mel ]),
'mellen' : tf . convert_to_tensor ([ 5 ], dtype = tf . int32 ),
}
# build
tts ( ** dummies )
# restore
tts . restore ( './mlptts_299.ckpt-1' ). expect_partial ()地獄代碼樣本可在temprence.py上獲得
火車ljspeech 300個時代與TF-Diffwave



到目前為止,有很多TTS研究,尤其是如今的趨勢。 MLP-TTS是Aligntts [6]引入的基於CTC的持續時間蒸餾之一。
另一方面,MLP-MIXER [1]和RESMLP [2]引入了NN骨幹的僅MLP架構。
由於變壓器和卷積是當前TTS場上的主要骨幹,因此我嘗試研究可以與TT兼容的其他骨幹。 MLP-TTS是具有基於MLP架構的TTS的實驗。
第一個問題是如何為動態長度輸入建模MLP。
MLP-MIXER [1]和RESMLP [2]假定固定數量的補丁,並且可以在時間軸上使用MLP。但是在TTS情況下,由於接受動態大小輸入,具有固定尺寸權重的MLP與這些任務不相容。
我提出了一些動態長度的類似MLP的架構,可以在MLP.Py上找到。
A. Convmlp
ConvMLP在時間軸上使用寬長度MLP。為了處理時間動態性,它可以使用重疊區域製作固定的長度幀,可以簡單地在STFT(短期傅立葉變換)上找到。在兩層MLP層之後,它將其重疊和添加以製成單個序列。
為了計算效率,選擇了2D卷積和轉置卷積,但是由於需要大尺寸的內存(批次x num_frames x frame_size),因此不實用。而且,由於我們選擇了重疊和添加的cuda-accelaration的轉置卷積,因此窗口函數在操作序列中無法適應(例如Hann窗口)。
B. tuermalconv
這是簡單的捲積僅作用於顳軸。為了防止在通道軸上的操作,使用[S,1]步幅和[K,1]內核的Conv2D用於擴展的輸入特徵[B,T,C,1]。
C. dyntemporalmlp
它從輸入功能計算動態MLP權重。為簡單起見,MLP以轉置和串聯特徵運行。
[b,1,t,c] x [b,t,1,c] = [b,t,t,t,cx2] - > [b,t,t,t,1]
它在MLP混合物之間存在兩個哲學上的差異。
首先,混合器將模塊分為兩個獨家操作,即通道級MLP和時間級MLP。但是DynTemporalMLP作用於通道軸,用於計算動態權重。
其次,由於MLP從各個職位中學習權重,因此不需要其他位置信息。但是DynTemporalMLP需要位置嵌入,因為它僅計算出不同位置的兩個特徵的權重,即置換不變的。
在基線中,MLP-TTS使用大尺寸的TemporalConv轉換。
釋放Beta-V0.1後,引入了一些有關動態長度MLP的研究。它可以是用MLP編碼動態長度特徵的一種選擇。
在實驗中,密集的操作太多,訓練程序很少。我在火車上遇到了許多南斯。
我檢查了一些穩定培訓程序的可能性。
A.層歸一化,MLP混合器
像變壓器(Vaswani等,2017)一樣,MLP-Mixer [1]在每個殘留塊上使用層歸一化。在MLPTT中,它無法穩定培訓。
B.仿射轉變,resmlp
在Cait(Touvron等,2021)的紙張中,它引入了層表,該層面尺度使用具有較小價值的仿射變換。 RESMLP [2]使用層表,使用該方法可以穩定MLPTT。
C. ddi-Actnorm,Rescalenet
Rescalenet [5]引入了基於DDI(數據依賴性初始化)以解決死亡relu的解決方案。受到Rescalenet的啟發,我嘗試通過基於DDI的激活歸一化來改變仿射變換(Glow,Kingma等,2018)。但是效果很小,關鍵是縮放係數的小值。
在基線中,MLP-TTS使用仿射變換具有縮放係數的較小值。
從FastSpeech(Ren等,2019)中,明確的持續時間建模者在當今的TTS上很常見。 MLP-TT還嘗試使用高斯UPSAPLER的顯式持續時間建模器和端到端。
平行TACOTRON 2 [4]的調節劑是最新的貢獻,但在MLP-TTS上是不穩定的。我猜測在平行的Tacotron 2上進行調節器的原因是,它假定具有輕量級動態卷積的位置,因此可以從編碼的特徵中推斷出對齊的單調性。但是,MLP-TTS使用MLP和大尺寸的時間卷積,因此可以釋放局部性假設,並且無法從特徵中推斷出單調性。
因此,我明確地假設具有高斯上採樣機制(平行Tacotron [3])的單調性,並且可以穩定MLP-TTS訓練。
發布Beta-V0.1後,我認為端到端火車仍然不穩定,蒸餾可能是解決對齊問題的方法。
有許多蒸餾模塊,例如自回歸解碼器(EX。JDI-T [7]),基於流量的解碼器和單調對準搜索(= MAS,Ex。Glow-TTS [8]),以及從位置編碼(例如Paranet [9])。
除了那些,我對Aligntts感興趣[6]。它使用混合密度網絡和類似CTC的目標來建模MEL光譜圖和文本之間的關係,然後發現與Viterbi-Algorithm的對齊。
MLP-TT還使用MDN和CTC在文本和MEL光譜圖之間建模相互信息,並通過可能矩陣而不是Viterbi算法找到單調對準搜索的對齊。然後將其簡化為持續時間,並蒸餾到durator模塊。
CTC+MAS比頻譜恢復更好的是高斯UPSAMPLER。它可以產生人類的聽覺演講,並且可以在這裡找到樣本。我估計失敗的原因是,durator的梯度並未向後返回文本編碼器,並且文本編碼器只能生成上下文特徵。
由於它只是POC模型,因此樣品是嘈雜的,發音尚不清楚。可以調整和改進的許多因素,例如動態長度MLP模塊或內核長度參數等。我很難進一步改進(這只是任期項目),但是如果有人發布PR,我將不勝感激。感謝您的注意。
[1] MLP混合物:視覺的全MLP體系結構,Tolstikhin等,2021。
[2] RESMLP:用於圖像分類的FeedForward網絡,通過數據有效培訓,Touvron等,2021。
[3]平行塔科克斯:非自動迴旋和可控的TTS,Elias等,2020。
[4]平行塔科特朗2:具有可區分持續時間建模的非自動回歸神經TTS模型,Elias等,2021。
[5]對於訓練深層神經網絡是必不可少的,Shao等,2020。
[6] Aligntts:Zheng等人,2020年,有效的沒有明確對準的有效饋送文本到語音系統。
[7] JDI-T:訓練有素的持續時間通知的變壓器,用於文本到語音,無明確的對準,2020年,2020年。 [8] Glow-TTS:通過單調對準搜索的文本到語音的生成流程,Kim等,Kim等,2020年。 [9]非自動文本到文本的文本文本 - 文本對文本,pextect ex-Speech,pengech,Peng,Peng,PENG,PENG,PENG,2019年。