機器學習之語音生成&&音樂生成
簡介
WaveNet利用神經網路系統對原始音訊波形(Raw SoundWave)建模該網路。基於WaveNet生成的音訊質量優於目前所有的文字轉語音(Text-to-Speech,TTS)系統,將計算機輸出音訊與人類自然語音差距縮小50%。最常用的TTS方法是拼接式語音合成(Concatenative Synthesis):先錄製單一說話者的大量語音片段,建立一個大型語料庫,然後簡單地從中進行選擇併合成完整的大段音訊、詞語和句子。這種“機械式”方法使得計算機輸出音訊經常產生語音毛刺、語調的詭異變化、甚至結巴,並且無法調整語音的語調,強調性音節或情緒。對於這種方式來說,一種新的聲音,是需要一個新的完全資料庫的。
另外一種方法是所謂的引數化方法,利用數學模型對已知的聲音進行排列、組裝成詞語或句子來重新創造音訊,其中生成資料所需的所有資訊都儲存在模型的引數中,因此語音的內容和特徵都可以通過該模型的輸入進行控制。但是,到目前為止,引數 TTS 往往聽起來都不如拼接 TTS 那樣自然——至少在英語等語音的合成上是這樣。現有的引數模型往往是通過將它們輸出經過訊號處理演算法(被稱為語音編碼器(vocoders))來生成音訊訊號。
WaveNet 神經網路架構選擇直接建模音訊訊號的原始波形,一次處理一個樣本。除了能夠產出聽起來更為自然的聲音,使用原始波形意味著 WaveNet 可以建模幾乎任何型別的音訊,包括音樂。
WaveNet:
研究者通常會避免對原始音訊進行建模,因為波形波動得非常快:每秒通常有 16,000 甚至更多個樣本,而且在許多時間尺度上都存在重要的結構。在這些結構中(完全自迴歸模型),對每一個樣本的預測都會受到之前所有樣本的影響(用統計學的話來說:每一個預測分佈的前提是所有先前的觀察),這顯然是一個具有挑戰性的任務。
谷歌今年初發布的 PixelRNN 和 PixelCNN 模型表明不僅一次一個畫素式地生成複雜的自然影象是可能的,而且也可以一次一個顏色通道(colour-channel)地生成,這需要對每張影象進行數千次預測。在這啟發下他們將二維 PixelNet 調整為一維的 WaveNet。
WaveNet 的結構的結構:
原理
WaveNet利用真實的人類聲音剪輯和相應的語言、語音特徵來訓練其卷積神經網路(convolutional neural networks),讓其能夠辨別這兩方面(語言和語音)的音訊模式。使用中,對WaveNet系統輸入新的文字資訊,也即相對應的新的語音特徵,WaveNet系統會重新生成整個原始音訊波形來描述這個新的文字資訊。
該網路可基於所有給定的樣本和可能的額外引數的條件下,通過建模條件概率(conditional probability)來生成音訊波形的下一個樣本。
在一個音訊處理步驟之後,其輸入波形會被量化到一個固定的整數範圍內。然後這個整數振幅(integer amplitudes)會被獨熱(one-hot)編碼以生成一個形狀的張量(num_samples, num_channels)。
每個卷積層只能獲得當前和之前的輸入,然後減少通道維度(channel dimension)。
該網路的核心被構建為一個因果擴張層(causal dilated layers)的堆疊,其中每一層都是一個擴張的卷積(dilated convolution,即帶有 hole 的卷積),它只能獲取當前和過去的音訊樣本。
所有層的輸出通過一系列密集的後處理層(postprocessing layers)被結合起來並擴充套件回原來的通道數量,後面再跟上一個 softmax 函式將這些輸出轉換成一個分類分佈(categorical distribution)。
其損失函式是每個時間步驟的輸出和其下一個時間步驟的輸入之間的交叉熵(cross-entropy)。
在這個 repository 中,該網路的實現可以在 wavenet.py 檔案中找到。
安裝和生成
1.wavenet
wave介紹
先用一個短視訊介紹一下wavenet效果
http://v.qq.com/x/page/w0328zc2azc.html
2.下載tensorflow-wavenet
讀者自己先配置好tensorflow
git clone –recursive https://github.com/ibab/tensorflow-wavenet
3.程式碼目錄
wavenet_params.json 這是配置模型的一些相關引數
4.安裝依賴包
注意,需要先安裝TensorFlow,且版本要在TensorFlow 0.10及其以上,0.8版本的坑,我踩過了,在讀取引數的時候,會出現引數數量不匹配的錯誤。請務必注意,TensorFlow的版本。
此外,還需要安裝librosa,以支援音訊的讀寫操作。除了TensorFlow需要自行安裝之外,其他的安裝依賴可以通過以下命令列完成。
pip install -r requirements.txt
5.下載語料庫
語料庫有10個g,解壓後有12個g左右,請預備好足夠的空間,機器不太行的可以忽略此步。
VCTK-Corpus.tar.gz
語料庫的介紹
5.準備語料
我在這裡選擇一小段的鋼琴語料做訓練,piano_sample.wav。當然也可以採用上述語料庫中的其他音訊。注意,這裡只支援wav格式的音訊。
cd tensorflow-wavenet
mkdir corpus #corpus #用於存放多個訓練的.wav檔案
6.開始訓練
檢視各個引數的含義:
python train.py --help #--batch_size,--num_steps,--learning_rate等等引數
開始訓練:
python train.py --data_dir=corpus --logdir=logdir
如果採用預設的引數:
python train.py –data_dir=corpus –logdir=logdir進行訓練的話,個人經驗,大約8個小時以上。(在虛擬機器下面,4G記憶體,雙核處理器)。
wavenet_params.json檔案則是用以配置模型引數,在訓練和生成過程中,該模型引數需要一致。
訓練過程截圖:
7.模型
訓練過程中在logdir有train檔案,train檔案裡有會生成訓練model。
如下圖所示:
8.生成模擬聲音
用generate.py指令碼和對應的模型生成模擬聲音。這些模型在訓練的時候,生成於logdir資料夾下。引數 --samples
指定生成的音訊樣本數量(16000相當於1秒,此為預設的預設值)。--wav_out_path
指定生成音訊的位置。在其之後增加附加引數--save_every
引數則可以實現對正在進行的wav檔案,每n個樣本儲存一次。
python generate.py –wav_out_path=generated.wav –samples 160000 ./logdir/model.ckpt-xxx #–samples 16000 16000相當於1秒
預設的生成方式是最快的,其實現是基於 Fast Wavenet庫。從上述連結可以檢視具體的實現邏輯。該方法生成的音訊所需要的時間,大概可以縮短到幾分鐘之內。
如果不採用快速的方式的話:
python generate.py --samples 16000 model.ckpt-1000 --fast_generation=false
生成結果截圖:
9.本次訓練的效果放在附件
測試資料1:
piano_sample.wav #樣本
generated.wav #生成模擬聲音
下載地址:
訓練資料和產生的聲音
測試資料2:
有歌手唱的非純曲調音樂,比如訓練的是李宗盛、林憶蓮 - 當愛已成往事.wav
對於訓練模型進行生成,生成的是帶有強烈雜音的。不像純音樂生成的音樂是純粹的音樂。所以,是需要先將人聲去除,用純曲來進行訓練。
下載地址:
帶有和聲的訓練資料和生成結果
第二部分 文字轉為語音
文字轉語音(TTS)。當被應用於文字轉語音時,該系統可以得到當前最佳的表現,人類聽眾評價它在英語和漢語上比當前最好的引數(parametric)和拼接(concatenative)系統所生成的音訊聽起來都顯著更為自然。
【有待補充!尚未進行】
本文專案地址:
https://github.com/ibab/tensorflow-wavenet
https://deepmind.com/blog/wavenet-generative-model-raw-audio/
https://github.com/Zeta36/tensorflow-tex-wavenet
擴充專案地址:
https://github.com/llSourcell/Music_Generator_Demo/blob/master/README.md
相關文章
- LSTM機器學習生成音樂機器學習
- 聽見未來:AI音樂生成,個性化音樂新體驗!AI
- VoiceCraft: 文字生成任何人的語音技術Raft
- Python爬蟲之js加密破解,抓取網易雲音樂評論生成詞雲Python爬蟲JS加密
- 音樂App評測之QQ音樂篇:音樂圈多樣演算法差評APP演算法
- AI音樂,騰訊音樂、網易雲音樂的新版圖?AI
- 網易雲音樂機器學習平臺實踐機器學習
- 【論文速讀】位元組跳動音樂生成模型 Seed-Music模型
- 全球最大的音樂公司正在幫助音樂家制作自己的人工智慧語音克隆人工智慧
- QQ音樂音質加密加密
- 音樂播放器WordPress外掛 WP-Player (支援網易雲音樂, 蝦米音樂, QQ音樂, 百度音播放器
- 基於函式計算部署GPT-Sovits語音生成模型實現AI克隆聲音函式GPT模型AI
- 語音生成口型與表情技術的演進與未來
- XiaoIce Band:流行音樂的旋律與編曲生成框架 | KDD論文推薦框架
- 如何用ffmpeg根據音mp3音訊生成頻譜影片?音訊
- CosyVoice: 多語言大規模語音生成模型的全棧解決方案模型全棧
- 遊戲音樂與影視音樂的異同遊戲
- 音樂社交化和音樂模式的改變模式
- 程式設計和音樂(3):如何聽音樂程式設計
- Python 潮流週刊#54:ChatTTS 強大的文字生成語音模型PythonTTS模型
- word文件生成影片,自動配音、背景音樂、自動字幕,另類創作工具
- COMUUU讓音樂迴歸:人人都可玩轉音樂,更在音樂中找尋知音
- 遊戲音樂和影視音樂有什麼不同?遊戲
- Android開源音樂播放器之線上音樂列表自動載入更多Android播放器
- 谷歌釋出TTS新系統Tacotron 2:直接從文字生成類人語音谷歌TTS
- Python從網易雲音樂、QQ 音樂、酷狗音樂等搜尋和下載歌曲Python
- 千千音樂 for Mac(原百度音樂播放器)Mac播放器
- 實用音樂剪緝第三講:音樂創作
- 語音學習筆記4------matlab實現逆向生成音訊格式的訊號audiowrite()函式筆記Matlab音訊函式
- Android開源線上音樂播放器——波尼音樂Android播放器
- 音樂雷達怎麼用?音樂雷達Shazam使用教程
- 深度瞭解語音識別之發音詞典及語音資料採集標註
- Windows 7系統聲音正常酷狗音樂無聲音Windows
- 使用js寫一個音樂音譜圖JS
- 智慧音響帶動音樂服務復興
- 安卓音樂頻譜安卓
- 雲音樂小程式
- c#音樂播放C#