2024-06-26|閱讀時間 ‧ 約 26 分鐘

TextToSpeech-WaveNet 後日談

一.引言

  距離上篇已經快過一個月了,這個月我也沒閒著,我FF14生產職拉了不少等級進行了上篇 WaveNet 的後續調試,也比較與其他人實現的效果,又發現了幾個實作上可能造成困難的點,現在就跟各位分享一下~

二.問題點

  • 訓練及預測真的太久了 :

  目前我使用的是 NVIDIA 2080ti 進行訓練,光是訓練一段 4 秒的音頻,就要花費好幾個小時,而預測也需要 20 分鐘以上。更糟糕的是,預測時經常會聽到一堆雜音,需要反覆調整訓練,來回幾次就耗掉一整天。因此,實際應用上,使用雲端多 GPU 進行訓練可能會是一個更具性價比的方法。

  • GPU記憶體的占用 :

  根據不同的設計,網路一次能處理多少音訊受限於顯卡記憶體大小,2080ti 有 11 GB,運行時若是餵入長度為24000的音訊(若以16000採樣頻率來看的話就是1.5秒的長度),就會占用 8 GB左右了,若是記憶體不足,單次能訓練的音訊長度就會變短,會讓整體收斂速度下降,甚至無法收斂。

  • 訓練及預測時的方法不一致 :

  上篇有提到我們訓練時是使用正解作為輸入,但預測時是用一個啟動張量推動,讓他能一個一個產生新的音訊結果,但是這就會造成一個問題 -- 若是我一開始就預測的很爛,那麼後面產生的也不會是好東西,要解決這個問題也很簡單,給予足夠多樣的訓練資料讓模型的泛化性提高,但......愈多的資料就代表收斂的時間愈長,也代表花的時間愈多,所以你知道的,兩個禮拜就這麼過去了不是在練等呦

  • 中文與英文的複雜度不一致 :

  進行實驗的過程中,在同樣條件下,英文音訊的收斂成效比中文的好,我認為這是語言組成不同導致的,有更複雜音節的語言得付出更長時間的訓練時間。

  • 噪聲的優化

  在實驗途中,時常發現儘管已經收斂,但是試聽時還是有大量噪聲混雜,這部分需要進一步優化,可能涉及到改進模型結構或使用更高品質的數據進行訓練。

三.後續改進方案

  • 使用雲端多 GPU 訓練

  使用雲端多 GPU 進行訓練可以大大縮短訓練時間,提高訓練效率。此外,雲端服務提供的計算資源更加靈活,可以根據需求隨時擴展(如之前介紹的AWS),適合進行大規模的音訊數據訓練。

  • 混合精度訓練

  混合精度訓練技術(Mixed Precision Training)可以有效地減少訓練過程中的記憶體佔用,並加快訓練速度。這種方法使用浮點16(FP16)和浮點32(FP32)混合進行計算,從而在不影響模型性能的前提下提高計算效率。

  • 模型壓縮技術

  可以考慮使用模型壓縮技術,如知識蒸餾(Knowledge Distillation)、模型剪枝(Pruning)和量化(Quantization),來減少模型的大小和計算量,從而提高預測速度和減少記憶體佔用。

  • 使用更高效的架構

  除了 WaveNet,可以考慮使用更高效的語音合成架構,如 Tacotron 2 或 Transformer TTS,這些模型在生成質量和效率上都有不錯的表現。特別是 Transformer 架構,由於其強大的自注意力機制,能更好地捕捉語音的長距依賴特性。

  • 使用正則化技術

  正則化技術如 Dropout、Layer Normalization 和 Batch Normalization 可以幫助模型更好地泛化,減少過擬合,從而在面對不同語音數據時能有更穩定的表現。

  • 數據預處理與增強

  除了增加數據多樣性,還可以對訓練數據進行預處理和增強,如噪聲過濾、音高變換、時間拉伸等,這樣可以使模型更好地適應不同的語音特徵,從而提高合成效果。

  • 後處理

  在模型生成音訊後,可以使用噪聲過濾技術來減少噪聲。例如,使用頻譜減法或自適應噪聲抑制技術來提高音訊的清晰度。此外,可以考慮對生成的音訊進行後處理,如使用聲學模型進行重建或使用音訊增強技術來進一步提高音訊質量。

四.結語

  這次花了好長的時間來好好研究音訊重建,這裡頭的坑比我想像中還要多,雖然我列出了大量的修改方向,但我應該不會花太多時間去測試及比較,因為目前學習的目的是接觸更多之前沒接觸過的領域,我不希望在同一個主題花費太多時間,未來若真的需要專研時再好好研究,加上音訊領域目前發展挺成熟,在已經有車子的情況下,我就不造這輪子了,接下來會回到主題,去探討TTS中文字到音訊特徵的轉換,只是什麼時候會有下一篇我就不知道了喔OwO。 FF 7.0我來嚕


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.