簡介
Sounds of India 是一款獨(dú)特而有趣的交互式音樂體驗(yàn)應(yīng)用,以印度傳統(tǒng)為靈感,并由機(jī)器學(xué)習(xí)提供支持。當(dāng)用戶在演唱印度歌曲時(shí),瀏覽器中的機(jī)器學(xué)習(xí)模型會(huì)實(shí)時(shí)將他們通過移動(dòng)設(shè)備上輸入的聲音轉(zhuǎn)換為各種印度古典樂器的聲音。
Sounds of India
https://soundsofindia.withgoogle.com/
完成整個(gè)體驗(yàn)的開發(fā)過程僅需 12 周,您可了解開發(fā)者在使用 TensorFlow 生態(tài)系統(tǒng)時(shí),如何快速地將模型從研究階段推進(jìn)到規(guī)?;a(chǎn)。
研究:Magenta 的微分數(shù)字信號(hào)處理
Magenta 是 Google AI 中的一個(gè)開源研究項(xiàng)目,旨在探索機(jī)器學(xué)習(xí)可以有哪些創(chuàng)新使用。微分?jǐn)?shù)字信號(hào)處理 (Digital Signal Processing,DDSP) 是一個(gè)全新的開源庫,融合了現(xiàn)代機(jī)器學(xué)習(xí)與可解釋信號(hào)處理技術(shù)。
Magenta
https://magenta.tensorflow.org/
DDSP
https://magenta.tensorflow.org/ddsp
不同于訓(xùn)練純深度學(xué)習(xí)模型(如 WaveNet)去逐個(gè)渲染樣本的波形,我們改為訓(xùn)練輕量級(jí)模型,這些模型能夠向這些可微的 DSP 模塊中輸出隨時(shí)間變化的控制信號(hào)(因此,DDSP 中有一個(gè)額外的“D”),從而合成最終聲音。我們?cè)?TensorFlow Keras 層的遞歸和卷積模型中整合了 DDSP,其有效生成音頻的速度為更大型自回歸模型的 1000 倍,而對(duì)模型參數(shù)和訓(xùn)練數(shù)據(jù)的需求僅為后者的百分之一。
WaveNet
https://deepmind.com/blog/article/wavenet-generative-model-raw-audio
DDSP 中一個(gè)有趣的應(yīng)用是音色轉(zhuǎn)換,即將用戶輸入的聲音轉(zhuǎn)換為樂器聲。先用目標(biāo)薩克斯對(duì) DDSP 模型開展 15 分鐘的訓(xùn)練。然后,你可以演唱一段旋律,經(jīng)過訓(xùn)練的 DDSP 模型會(huì)將其重新渲染成薩克斯的聲音。我們已在 Sounds of India 中將這項(xiàng)技術(shù)應(yīng)用于三種印度古典樂器:Bansuri、Shehnai 和 Sarangi。
音色轉(zhuǎn)換
https://colab.sandbox.google.com/github/magenta/ddsp/blob/master/ddsp/colab/demos/timbre_transfer.ipynb#scrollTo=Go36QW9AS_CD
使用 TFX,TFJS 訓(xùn)練并部署到瀏覽器中
TFX
TensorFlow Extended (TFX)是用于生產(chǎn)機(jī)器學(xué)習(xí) (ML) 的端到端平臺(tái),包括準(zhǔn)備數(shù)據(jù)、訓(xùn)練、驗(yàn)證和在生產(chǎn)環(huán)境中部署模型。使用 TFX 訓(xùn)練模型(將用戶的聲音轉(zhuǎn)換為上述某種樂器聲),然后將這些模型轉(zhuǎn)換為 TensorFlow.js 格式,以部署在標(biāo)準(zhǔn)網(wǎng)絡(luò)瀏覽器中。
TensorFlow Extended (TFX)
https://tensorflow.google.cn/tfx/
TensorFlow.js
https://tensorflow.google.cn/js
通過部署到瀏覽器中,為用戶帶來與機(jī)器學(xué)習(xí)模型交互的無縫體驗(yàn):僅需點(diǎn)擊超鏈接,加載網(wǎng)站頁面。而無需安裝工作。在瀏覽器中運(yùn)行客戶端,我們能夠直接在傳感器數(shù)據(jù)源處執(zhí)行推理,從而最大程度地減少延遲,降低與大型顯卡、CPU 和內(nèi)存相關(guān)的服務(wù)器成本。此外,應(yīng)用會(huì)將您的聲音用作輸入,因此用戶隱私十分重要。由于整個(gè)端到端的體驗(yàn)都發(fā)生在客戶端和瀏覽器當(dāng)中,因此傳感器或麥克風(fēng)收集到的數(shù)據(jù)保留在用戶的設(shè)備上。
基于瀏覽器的機(jī)器學(xué)習(xí)模型需要進(jìn)行優(yōu)化以盡可能縮減其大小,從而降低所用帶寬。在這種情況下,每種樂器的理想超參數(shù)也大有不同。我們利用 TFX 對(duì)數(shù)百個(gè)模型進(jìn)行大規(guī)模訓(xùn)練和調(diào)試,確定每個(gè)樂器可用的最小模型尺寸。因此,我們能夠大幅降低其內(nèi)存占用。例如,在未對(duì)音質(zhì)產(chǎn)生明顯影響的情況下,Bansuri 樂器模型的磁盤占用量約降低至以前的二十分之一。
我們還可借助 TFX 在不同的模型架構(gòu)(GRU、CNN)、不同類型的輸入(響度、RMS 能量)和不同的樂器數(shù)據(jù)源上執(zhí)行快速迭代。我們每次都能夠快速有效地運(yùn)行 TFX 流水線,生成具有所需特性的新模型。
TensorFlow.js
構(gòu)建 TensorFlow.js DDSP 模型需要達(dá)到嚴(yán)格的性能和模型質(zhì)量目標(biāo),所以具有獨(dú)特的挑戰(zhàn)性。模型需要高效執(zhí)行音色轉(zhuǎn)換,以便在移動(dòng)設(shè)備上有效運(yùn)行。同時(shí),一旦模型質(zhì)量出現(xiàn)任何下降,便會(huì)導(dǎo)致音頻失真,進(jìn)而破壞用戶體驗(yàn)。
我們首先探索了眾多的 TensorFlow.js 后端和模型架構(gòu)。WebGL 后端的優(yōu)化程度最高,而 WebAssembly 后端則可在低端手機(jī)上運(yùn)行良好。我們采用了基于 Convnet 的 DDSP 模型,并利用 WebGL 后端,以滿足 DDSP 的計(jì)算需求。
WebGL 后端
https://github.com/tensorflow/tfjs/tree/master/tfjs-backend-webgl
WebAssembly 后端
https://github.com/tensorflow/tfjs/tree/master/tfjs-backend-wasm
為縮短模型下載時(shí)間。我們研究了模型的拓?fù)浣Y(jié)構(gòu),并使用 Fill/ZeroLike 算子壓縮了大量常數(shù)張量,從而將模型大小從 10MB 縮減到 300KB。
為使 TensorFlow.js 模型準(zhǔn)備就緒,以便在生產(chǎn)環(huán)境中將其大規(guī)模部署在設(shè)備上,我們還重點(diǎn)關(guān)注了以下三個(gè)主要領(lǐng)域:推理性能、內(nèi)存占用和數(shù)值穩(wěn)定性。
推理性能優(yōu)化
DDSP 模型中包括神經(jīng)網(wǎng)絡(luò)和信號(hào)合成器。合成器部分包含許多需要大量算力的信號(hào)處理算子。為提升模型在移動(dòng)設(shè)備上的性能,我們使用特殊的 WebGL Shader 重新編寫了內(nèi)核,以便充分利用 GPU。例如,通過并行累積求和算子,推理時(shí)間可縮短 90%。
降低內(nèi)存占用
我們的目標(biāo)是盡可能在更多種類型的移動(dòng)設(shè)備上運(yùn)行模型。由于許多手機(jī)的 GPU 顯存有限,我們需要確保盡可能降低模型的內(nèi)存占用。通過處理中間張量并添加新標(biāo)記,我們能夠提早處理 GPU 紋理,從而實(shí)現(xiàn)這一目標(biāo)。通過這些方法,我們可以將顯存占用減少 60%。
數(shù)值穩(wěn)定性
DDSP 模型需要達(dá)到非常高的數(shù)值精度,才能生成動(dòng)聽的音樂。這一點(diǎn)與常見的分類模型截然不同:在分類模型中,一定范圍內(nèi)的精度降低并不會(huì)影響最終的分類結(jié)果。我們?cè)诖梭w驗(yàn)中使用的 DDSP 模型為生成模型。任何精度較低和不連續(xù)的音頻輸出都可輕易被我們敏感的耳朵發(fā)覺。使用 float16 WebGL 紋理時(shí),我們遇到了數(shù)值穩(wěn)定性問題。因此,我們重新編寫了一些主要算子,以減少輸出結(jié)果的上溢和下溢。例如,在累積求和算子中,我們會(huì)確保在 Shader 內(nèi)以全浮點(diǎn)精度完成累積,并在將輸出結(jié)果寫入 float16 紋理前,運(yùn)用模數(shù)計(jì)算來避免結(jié)果溢出。
動(dòng)手嘗試!
您可使用手機(jī)訪問 g.co/SoundsofIndia,嘗試此體驗(yàn)。如您愿意,請(qǐng)與我們分享您的結(jié)果。我們十分期待看到您用自己的聲音所創(chuàng)作的音樂。
如果您有興趣了解機(jī)器學(xué)習(xí)如何增強(qiáng)創(chuàng)造力與創(chuàng)新性,可瀏覽 Magenta 團(tuán)隊(duì)的博客,詳細(xì)了解該項(xiàng)目,并為他們的開源 GitHub 貢獻(xiàn)力量,也可查看 #MadeWithTFJS,從 TensorFlow.js 社區(qū)獲得更多瀏覽器端機(jī)器學(xué)習(xí)示例。如果您對(duì)使用 ML 最佳做法在生產(chǎn)環(huán)境中大規(guī)模訓(xùn)練并部署模型比較感興趣,請(qǐng)查看 Tensorflow Extended。
博客
https://magenta.tensorflow.org/blog
GitHub
https://github.com/magenta/magenta
#MadeWithTFJS
https://twitter.com/search?q=%23madewithtfjs&src=typed_query
致謝
本項(xiàng)目的實(shí)現(xiàn)離不開 Miguel de Andrés-Clavera、Yiling Liu、Aditya Mirchandani、KC Chung、Alap Bharadwaj、Kiattiyot (Boon) Panichprecha、Pittayathorn (Kim) Nomrak、Phatchara (Lek) Pongsakorntorn、Nattadet Chinthanathatset、Hieu Dang、Ann Yuan、Sandeep Gupta、Chong Li、Edwin Toh、Jesse Engel 的巨大努力,以及 Michelle Carney、Nida Zada、Doug Eck、Hannes Widsomer 和 Greg Mikels 提供的其他幫助。非常感謝 Tris Warkentin 和 Mitch Trott 的大力支持。
-
數(shù)字信號(hào)處理
+關(guān)注
關(guān)注
15文章
561瀏覽量
45892 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8423瀏覽量
132744 -
tensorflow
+關(guān)注
關(guān)注
13文章
329瀏覽量
60538
原文標(biāo)題:案例分享 | 輕量而高效,12 周落地一個(gè)趣味音樂交互!
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論