從開(kāi)源模型、框架到自研,聲網(wǎng) Web 端虛擬背景算法正式發(fā)布


2021 年 8 月,聲網(wǎng)落地了基于 Web SDK 的第一個(gè)虛擬背景插件版本,實(shí)現(xiàn)了背景替換與背景虛化功能。在近期發(fā)布的虛擬背景插件更新中,該功能得到進(jìn)一步提升,目前已可支持圖片虛擬背景、基于 CSS 色值的純色背景、3 檔不同程度的虛化背景。機(jī)器學(xué)習(xí)推理引擎也從通用機(jī)器學(xué)習(xí)框架升級(jí)為 Agora AI 實(shí)現(xiàn),不僅整體包增量從 3M 降低至 1M,運(yùn)算性能實(shí)現(xiàn)了 30% 以上的提高,新的 API 也更為易用。
回顧聲網(wǎng) Web SDK 虛擬背景功能的研發(fā)過(guò)程,主要經(jīng)歷了三個(gè)階段:
第一階段 開(kāi)源模型 + 開(kāi)源機(jī)器學(xué)習(xí)框架
在這一階段,我們基于 MediaPipe selife 人像分割模型和TFlite機(jī)器學(xué)習(xí)框架完成了虛擬背景在 Web 平臺(tái)的工程化實(shí)踐。實(shí)現(xiàn)了從圖像采集、實(shí)時(shí)處理到編碼發(fā)送的完整管線。在這一個(gè)過(guò)程中,我們對(duì)影響處理性能的關(guān)鍵因素進(jìn)行了大量分析,并對(duì)這些性能瓶頸進(jìn)行了針對(duì)性的優(yōu)化。同時(shí)我們也對(duì)不同機(jī)器學(xué)習(xí)框架在 Web 人像分割的應(yīng)用場(chǎng)景進(jìn)行了定制和優(yōu)化,這其中包括對(duì) MediaPipe 和 TFlite 框架的定制。
MediaPipe 使用 TFlite 作為機(jī)器學(xué)習(xí)推理引擎,MediaPipe 的 TFlite 人像分割模型所使用的算子除了包含 TFlite 支持的通用算子,還包含 MediaPipe 提供的特殊算子。在實(shí)踐中,我們將 MediaPipe 人像分割模型所依賴的 MediaPipe 特殊算子直接移植到 TFlite,實(shí)現(xiàn)了 selife segmentation 模型脫離 MediaPipe 框架直接在 TFlite 上的運(yùn)行。同時(shí)使用自研 WebGL 算法替代 Mediapipe 提供的圖形處理功能。這樣就消除工程對(duì) MediaPipe 的依賴,不僅降低了 MediaPipe 帶來(lái)的整體包增量,同時(shí)使機(jī)器學(xué)習(xí)運(yùn)算和圖像處理解耦,整體方案更具靈活性。
由于 TFlite 在 Web 平臺(tái)采用 WebAssembly 移植實(shí)現(xiàn),而 WebAssembly VM 環(huán)境和真實(shí)系統(tǒng)架構(gòu)存在較大區(qū)別。這就需要對(duì)支撐 TFlite 運(yùn)算的不同矩陣/向量運(yùn)算后端框架的性能進(jìn)行評(píng)估。TFlite 提供了 XNNPACK、Eigen、ruy 三種矩陣運(yùn)算后端。經(jīng)分析對(duì)比他們?cè)?WebAssembly 下單幀推理時(shí)間表現(xiàn)如下:

■TFlite 不同運(yùn)算后端下的性能表現(xiàn)
依據(jù)分析結(jié)果將 TFlite 在 WebAssembly 上的運(yùn)算后端調(diào)整為 XNNPACK 后,整體運(yùn)算性能得到了大幅提升。
第二階段 自研模型 + 開(kāi)源機(jī)器學(xué)習(xí)框架
在第二階段的研發(fā)重點(diǎn)是自研模型及算法的研發(fā)和工程化,通過(guò)海量訓(xùn)練樣本對(duì)各類場(chǎng)景的覆蓋,聲網(wǎng)逐步實(shí)現(xiàn)了自研人像分割模型的算法迭代,輸出的自研模型和算法在人像分割精度、畫面穩(wěn)定性、計(jì)算性能等方面對(duì)比開(kāi)源模型形成了較大的綜合優(yōu)勢(shì)。出于對(duì)機(jī)器學(xué)習(xí)生態(tài)和模型兼容性的考慮,工程化所用的機(jī)器學(xué)習(xí)框架也從 TFlite 切換到了 Onnxruntime。在進(jìn)行 onnxruntime 的 WebAssembly 移植的過(guò)程中,Web 團(tuán)隊(duì)使用了包含了 SIMD 和多線程在內(nèi)的多項(xiàng)優(yōu)化手段對(duì)運(yùn)算性能進(jìn)行提升。值得一提的是,我們將 Onnxruntime WebAssembly SIMD 優(yōu)化過(guò)程中的部分工作成果提交至 Onnxruntime 開(kāi)源社區(qū),并被合入項(xiàng)目主線。

第三階段 自研模型 + Agora AI 機(jī)器學(xué)習(xí)框架
在人像分割模型逐步演進(jìn)同時(shí),出于對(duì)計(jì)算性能的無(wú)限探索和對(duì)用戶體驗(yàn)的無(wú)止境追求,聲網(wǎng)高性能計(jì)算團(tuán)隊(duì)同時(shí)也對(duì)基于 Agora AI 框架的人像分割模型工程化開(kāi)展了研究,在使用了包含計(jì)算圖優(yōu)化,內(nèi)存自動(dòng)復(fù)用,算子 WebAssembly 優(yōu)化在內(nèi)的多項(xiàng)技術(shù)手段后,將原模型處理算法在 Web 平臺(tái)上的整體性能提升了 30% 左右。

■ Agora 人像分割模型在某測(cè)試設(shè)備上的單幀推理時(shí)間
Web SDK 團(tuán)隊(duì)在使用 Agora AI 對(duì) onnxruntime 進(jìn)行替換后,虛擬背景插件的整體包大小從之前的 3M 降低至 1M,有效提升了用戶在 Web 環(huán)境下的插件加載速度,實(shí)現(xiàn)了用戶體驗(yàn)的較大提升。

■?Agora Web SDK 媒體處理管線
在近期發(fā)布的 WebSDK v4.10.0 中,我們同時(shí)對(duì)虛擬背景插件進(jìn)行了更新,新的虛擬背景插件不僅包含上述提升,同時(shí)它也基于 WebSDK 新的插件機(jī)制實(shí)現(xiàn),提供了更易用 API。目前新的虛擬背景插件使用了新的包名通過(guò) npm 發(fā)布,如果對(duì)該功能感興趣,可訪問(wèn) Agora 官網(wǎng)文檔進(jìn)行了解。

■?npmjs上的聲網(wǎng)Web虛擬背景插件
展望
技術(shù)無(wú)止境、需求恒久遠(yuǎn)。在未來(lái)的研發(fā)過(guò)程中,聲網(wǎng)虛擬背景在效果方面將針對(duì)強(qiáng)光照、背景暗光、復(fù)雜背景等更豐富應(yīng)用場(chǎng)景進(jìn)行研究和突破,并針對(duì)高分辨率場(chǎng)景下的人像邊緣、發(fā)絲等細(xì)節(jié)的保留進(jìn)行優(yōu)化。

在算法方面將實(shí)現(xiàn)從單幀圖像推理到視頻連續(xù)幀推理的嘗試。從而滿足用戶在各類更復(fù)雜環(huán)境下的虛擬背景體驗(yàn)需求。讓我們拭目以待!
最后,如果大家想體驗(yàn)?zāi)壳?Web 端的虛擬背景,可以訪問(wèn) videocall.agora.io,創(chuàng)建房間后,在設(shè)置中開(kāi)啟。
Dev for Dev專欄介紹