天天看點

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

作者|羿川

審校|泰一

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

虛拟背景依托于人像分割技術,通過将圖檔中的人像分割出來,對背景圖檔進行替換實作。根據其使用的應用場景,大體可以分成以下三類:

直播場景:用于氛圍營造,例如教育直播、線上年會等;

實時通訊場景:用于保護使用者隐私,例如視訊會議等;

互動娛樂場景:用于增加趣味性,例如影視編輯、抖音人物特效等。

實作虛拟背景需要用到哪些技術?

實時語義分割

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

語義分割旨在對圖像的每個像素進行标簽預測,在自動駕駛、場景了解等領域有着廣泛的應用。伴随移動網際網路、5G 等技術的發展,如何在算力受限的終端裝置進行高分辨率的實時語義分割,日益成為迫切的需求。上圖列舉了近年來的實時語義分割方法,本小節将對其中的部分方法進行介紹。

BiSeNet:Bilateral Segmentation Network for Real-time Semantic Segmentation

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

先前的實時語義分割算法通過限定輸入大小、減少網絡通道數量、舍棄深層網絡子產品來滿足實時性的需求,但是由于丢棄過多空間細節或者犧牲模型容量,導緻分割精度大幅下降。是以,作者提出了一種雙邊分割網絡(BiseNet,ECCV2018),網絡結構如上圖所示,該網絡由空間路徑(Spatial Path)和語義路徑(Context Path)組成,分别用于解決空間資訊缺失和感受野縮小的問題。

空間路徑通過通道寬、深度淺的網絡來擷取高分辨率特征,保留豐富的空間資訊;而語義路徑則是采用通道窄、深度深的輕量骨幹模型,通過快速下采樣和全局平均池化提取語義資訊。最後利用特征融合子產品(FFM)對兩個路徑的特征進行融合,實作精度和速度之間的平衡。該方法在 cityscapes 測試集上的 MIOU 為 68.4%。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

更新版 BiseNetV2 延續了 V1 版本的思想,網絡結構如上圖所示,V2 版本去除了 V1 空間路徑中耗時的跳躍連結(skip connection),增加雙向聚合層(Aggregation Layer)增加兩個分支之間的資訊聚合,并提出了增強訓練政策進一步提升分割效果,在 cityscapes 測試集上的 MIOU 提升到了 72.6%,在使用 1080Ti 的 TensorRT 上 FPS 可以達到 156。

DFANet:Deep Feature Aggregation for Real-Time Semantic Segmentation

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

DFANet(CVPR2019)設計了子網聚合和子階段聚合兩種特征聚合政策來提升實時語義分割的性能。DFANet 的網絡結構如上圖所示,包含 3 個部分:輕量骨幹網絡、子網聚合和子階段聚合子產品。輕量骨幹網絡采用了推理速度較快的 Xception 網絡,在其頂層加入全連接配接注意力子產品增大高層特征的感受野;子網聚合通過重用先前骨幹網絡提取的高層特征,将其上采樣後作為下一個子網的輸入,增大感受野的同時,細化預測結果;子階段聚合子產品則是利用不同子網相應階段的特征融合多尺度結構細節,增強特征的判别能力。最後通過輕量的解碼器,融合不同階段輸出的結果,從粗到細地生成分割結果。在 Cityscapes 測試集上 MIOU 為 71.3%,FPS 為 100。

Semantic Flow for Fast and Accurate Scene Parsing

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

受到光流的啟發,作者認為由同一張圖檔生成的任意兩個不同分辨率的特征圖之間的關系,也可以用每個像素的流動表示,提出了 SFNet(ECCV2020),網絡結構如上圖所示。

是以,作者提出了語義流對齊子產品(Flow Alignment Module (FAM))來學習相鄰階段特征的語義流,然後通過 warping 将包含高層語義的特征廣播到高分辨率的特征上,進而将深層特征的豐富語義高效傳播到淺層的特征,使得特征同時包含豐富語義和空間資訊。作者将 FAM 子產品無縫插入到 FPN 網絡中融合相鄰階段的特征,如上圖所示。SFNet 能在實時分割的情況下(FPS 為 26),在 Cityscapes 可以達到 80.4% mIoU。

人像分割

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

人像分割是語義分割的子任務,目标是将圖檔中的人像從背景中分割出來,屬于二類分割。相比于語義分割,人像分割相對簡單,一般應用于手機端等端側裝置,目前的研究目标大體可以分為兩類,一是通過改進網絡設計輕量高效人像分割模型,二是增強人像分割的細節。

Boundary-sensitive Network for Portrait Segmentation

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

BSN(FG2019)主要關注于提升人像的邊緣分割效果,主要通過兩種邊緣損失進行實作,分别是針對每幅人像的邊緣 Individual Kernel 和針對人像資料集計算的平均邊緣 Global Kernel。Individual Kernel 與之前的方法類似,通過膨脹、腐蝕操作擷取人像邊緣标簽,不同的地方在于,它将邊緣作為區分于前景、背景的第三種類别,用 soft label 表示,進而将人像分割轉變為 3 類分割問題,如上圖。Global Kernel 的标簽則是通過統計人像資料集邊緣平均值得到,通過 Global Kernel 告訴網絡人像大緻所在位置的先驗資訊。同時,為了提供更多的人像邊緣先驗,作者增加了區分長短發邊緣的二分類分支,與分割網絡進行多任務協同訓練。BSN 在 EG1800 人像分割測試集的 MIOU 為 96.7%,但在速度上并無優勢。

PortraitNet:Real-time Portrait Segmentation Network for Mobile Device

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

PortraitNet(Computers & Graphics 2019)基于深度可分離卷積設計了一個輕量的 u-net 結構,如上圖所示,為了增加人像邊緣的分割細節,該方法通過對人像标簽進行膨脹、腐蝕操作生成人像邊緣标簽,用于計算邊緣損失(Boundary loss)。同時,為了增強對光照的魯棒性,該方法提出了一緻性限制損失(Consistency constraint loss),如下圖,通過限制光照變換前後圖檔的人像分割結果保持一緻,增強模型的魯棒性。PortraitNet 模型參數大小為 2.1M,在 EG1800 人像分割測試集的 MIOU 為 96.6%。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

SINet:Extreme Lightweight Portrait Segmentation Networks with Spatial Squeeze Modules and Information Blocking Decoder

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

SINet(WACV2020)則側重于在提升人像分割網絡的速度,由包含空間壓縮子產品(spatial squeeze module)的編碼器和包含資訊屏蔽機制的解碼器(information blocking scheme)組成,網絡架構上圖所示。空間壓縮子產品(如下圖)在 shuffleNetV2 子產品的基礎上,在不同路徑上使用不同尺度的池化操作壓縮特征空間分辨率,提取不同感受野的特征來應對不同尺度的人像,減少計算延時。資訊屏蔽機制則是根據深層低分辨率特征預測的人像置信度,在融合淺層高分辨率特征時,屏蔽高置信度區域,隻融合低置信度區域的淺層特征,避免引入無關的噪聲。SINet 在 EG1800 人像分割測試集的 MIOU 為 95.3%,但模型參數大小隻有 86.9K,和 PortraitNe 相比減少 95.9% 的參數。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

人像摳圖

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

一張圖像可以簡單的看成是由兩部分組成,即前景(Foreground)和背景(Background),圖檔摳圖,就是将一張給定圖像的前景和背景區分開來,如上圖所示。由于圖檔摳圖是一個欠限制問題,傳統摳圖算法和早期的基于深度學習的算法方法,主要通過輸入額外的語義資訊作為限制,最常見的是由前景、背景和不确定區域組成的 trimap,如下圖所示。摳圖算法的精度受 trimap 的精度影響很大,當 trimap 較差時,基于 trimap 的算法的預測結果下降嚴重。trimap 的擷取主要通過其他算法生成(如語義分割)或人工标注生成,但是通過其他算法生成的 trimap 一般較為粗糙,而人工标注精确的 trimap 則費時費力。trimap-free 的摳圖算法逐漸進入人們的視野,本小節将主要對近期的 trimap-free 的人像摳圖算法進行介紹。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

Background Matting: The World is Your Green Screen

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

Background Matting(CVPR2020)嘗試通過引入靜态的背景資訊來提升人像摳圖的效果,相比于使用人工精細标注的 trimap,擷取前景所在的靜态背景要相對容易,該方法的操作流程如上圖所示,首先擷取場景的兩張圖檔,一張包含前景,另一張不包含,然後使用深度網絡預測 alpha 通道,進而進行背景合成,是以,這個方法主要針對的場景是靜态背景下隻有輕微相機抖動的人像摳圖。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

該方法的模型結構如上圖所示,模型處理流程大體如下:給定輸入圖檔和背景圖檔,首先通過分割模型(如 deeplab)擷取前景圖檔的粗分割結果,然後同 Context Switching Block 子產品,對不同的輸入資訊的組合進行選擇,随後輸入到解碼器中同時預測前景和 alpha 通道。訓練過程分成兩個階段,首先在 Adobe 的合成資料集上進行訓練,為了降低合成圖檔和真實圖檔的 domain gap 造成的影響,使用 LS-GAN 在無标簽的真實圖檔和背景圖檔上進行第二階段的對抗訓練,通過拉近預測的 alpha 通道合成的圖檔和真實圖檔的距離,提升摳圖的效果。當背景變換較大或與前景差異較大時,該方法的效果不佳。

Boosting Semantic Human Matting with Coarse Annotations

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

這篇文章(CVPR2020)認為影響人像摳圖算法效果的原因主要來自兩個方面,一是 trimap 的準确性,二是擷取人像精确标注的成本高、效率低,導緻人像摳圖資料集圖檔數量較少,是以這篇文章提出了一種隻需部分精細标注資料(上圖 (b))結合大量粗标資料(上圖 (a))提升人像摳圖效果的方法。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

該方法的網絡結構如上圖所示,由 3 個子產品組成:MPN,粗 mask 預測網絡;QUN:mask 品質統一網絡;MRN,matting 細化網絡,coarse-to-fine 地逐漸優化分割的結果。訓練時,首先使用粗标資料和精标資料同時訓練 MPN,擷取粗 mask,然後使用精标資料訓練 MRN,細化分割結果。但是文章作者發現,由于粗标資料和精标資料的标注差異,導緻兩者 MRN 預測預期存在較大的 GAP,進而影響性能,是以,作者提出了 QUN,對粗 mask 的預測結果進行品質統一。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

實驗效果如上圖所示,相比于隻使用精标資料訓練,結合粗标資料對于網絡語義資訊的提取有較大的幫助。同時,結合 QUN 和 MRN,可以對已有資料集的粗标資料進行細化,降低精細标注的擷取成本。

Is a Green Screen Really Necessary for Real-Time Human Matting?

現有的人像摳圖算法,或需要額外輸入(如 trimap、背景), 或需要使用多個模型,無論是擷取額外輸入的開銷還是使用多個模型的計算開銷,使得現有方法無法實作人像摳圖的實時應用。是以,文章作者提出了一種輕量的人像摳圖算法,隻使用單張輸入圖檔即可實作實時人像摳圖效果,在 1080Ti 上處理 512x512 大小的圖檔,可以到達 63FPS 的效果。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

如上圖所示,本文的方法可以分為 3 個部分,首先是在标注資料上通過多任務監督學習的方式訓練人像摳圖網絡,然後通過 SOC 自監督政策在無标注的真實資料上進行微調,增強模型泛化能力;在測試時,使用 OFD 政策提升預測結果的平滑性,下面會對這 3 個部分進行詳細介紹。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

MODNet 的網絡結構如上圖所示,作者受到基于 trimap 的方法的啟發,将 trimap-free 的人像摳圖任務分解成了 3 個相關連的子任務進行協同訓練,分别是語義預測、細節預測和語義 - 細節融合。通過低分辨率的語義分支捕捉人像主體,通過高分辨率的細節分支提取人像邊緣細節,最後通過融合語義、細節得到最終的人像分割結果。

當應用到新場景的資料時,3 個分支産生的結果可能會有差異,是以作者提出了利用無标注的資料的 SOC 自監督政策,通過讓語義 - 細節融合分支預測結果在語義上和語義分支預測結果保持一緻,在細節結果上和細節分支預測結果保持一緻,增強不同子任務之間預測結果一緻性限制,進而增強模型的泛化能力。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

直接對視訊的每幀圖檔進行單獨預測會導緻相鄰幀預測結果存在時序上的不一緻,進而出現幀間跳閃的現象。作者發現,跳閃的像素點是可能可以通過相鄰幀的預測結果進行糾正,如上圖所示。是以,作者提出,目前一幀和後一幀的像素預測結果小于一定門檻值,同時目前幀預測結果和前後幀的預測結果大于一定門檻值時,則可以用前後幀的預測結果的平均作為目前幀的預測結果,進而避免不同幀預測結果時序上的不一定導緻的幀間跳閃現象。

Real-Time High-Resolution Background Matting

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

現有的人像摳圖算法雖然可以生成比較精細的摳圖結果,卻無法做到實時地處理高分辨率的圖檔,例如 Background Matting 在 GPU 2080Ti 上每秒隻能處理約 8 張 512x512 大小的圖檔,這無法滿足實時應用的需求。文章作者發現,對于高分辨率的圖檔,隻有少部分區域是需要精細分割(如上圖所示),大部分區域隻需粗分割即可,如果讓網絡隻對需要精細分割的少部分區域進行進一步的分割優化,就可以節省大量的計算。作者借鑒了 PointRend 的思路,基于 Background Matting,提出了一種實時處理高分辨率圖檔的雙階段人像摳圖網絡,在 2080Ti 上處理高清圖檔(分辨率為 1920x1080)可以達到 60FPS,對于 4K 圖檔 (分辨率為 3840x2160),可以達到 30FPS。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

本文提出的雙階段網絡架構如上圖所示,由基礎網絡和細化網絡組成。第一階段的基礎網絡采用了類似 DeeplabV3+ 的 encoder-decoder 結構,用于生成人像粗分割結果、前景殘差、錯誤預測圖和包含全局語義的隐藏特征。第二階段的細化網絡,利用第一階段産生的錯誤預測圖,挑選出需要進行分割細化的前 k 個圖檔塊,進行進一步分割優化,最後将細化後的分割結果和直接上采樣放大的粗分割結果進行融合,得到最終的人像分割結果。和其他方法的對比,本文方法在速度和模型大小上均有明顯的提升,如下圖所示。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術
直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

視訊人像分割

視訊目标分割(Video Object Segmentation,簡稱為 VOS),旨在從視訊每一幀獲得興趣目标的像素級分割結果。相比于單幀圖像分割,視訊分割算法主要依托于多幀間的連續性,進而實作分割結果的高平滑和高精度。目前,VOS 任務可以分為半監督(seme-supervised,one-shot)分割與無監督(unsupervised,zero-shot)兩類。前者在運作時需要輸入原始視訊和視訊首幀分割結果,而後者隻需輸入原始視訊。現有半監督 VOS 算法很難達到精确且實時的分割,研究重心一般側重于兩者之一,現有 VOS 算法效果 [12] 如下圖所示。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

虛拟背景技術在視訊會議中的應用

視訊會議作為日常辦公中高頻場景,伴随着居家辦公的火熱,對使用者隐私的保護提出了更高的需求,視訊會議虛拟背景功能踏浪而來。相比于雲端的高性能伺服器,個人場景的視訊會議載體主要是各色的筆記本電腦,不同型号筆記本電腦性能參差不齊,而視訊會議對實時性要求較高,會議背景不一,這對端側算法的性能提出了更嚴苛的需求。

實時性需求決定了端側人像分割模型要做到足夠輕量化,而小模型對一些困難場景(例如人像邊緣與背景相似等)的處理能力較弱,同時對于資料比較敏感,這易導緻背景錯分為人像、人像邊緣模糊等,針對這些問題,我們分别在算法和資料工程上,進行了一些針對性地調整和優化

算法探索

1) 優化邊緣:

第一種優化邊緣的方法構造邊緣損失,參考 MODNet,通過對人像标簽進行膨脹腐蝕操作,得到人像邊緣區域标簽,通過對邊緣區域計算損失來增強網絡對邊緣結構的提取能力。

第二種優化邊緣方法是使用 OHEM 損失,相比于人像主體區域,人像邊緣區域往往容易錯誤分類,在訓練時,通過對人像分割的預測結果進行線上難例挖掘,可以隐性地優化人像邊緣區域。

2) 無監督學習:

第一種無監督學習方法通過資料增強實作,參考 PortraitNet,對于給定的一張輸入圖檔圖檔,對其顔色、高斯模糊和噪聲組成的資料增強處理後得到變換後的圖檔圖檔,雖然圖檔相對圖檔在外觀上發生了變化,但變化前後兩張圖檔對應的前景人像是一樣的,是以,可以通過 KL Loss 限制資料增強前後圖檔預測結果保持一緻,進而增強網絡對光照、模糊等外界條件變化的魯棒性。

第二種無監督學習方法是通過利用無标簽的真實圖檔和背景圖檔進行對抗訓練實作,參考 Background Matting,在模型訓練時,通過引入額外的鑒别器網絡,判斷輸入鑒别器的圖檔是由網絡預測的人像前景和随機背景合成的,還是真實的圖檔,減少人像預測結果中存在的 artifact。

3) 多任務學習

多任務學習通常是指增加與原任務相關的子任務進行協同訓練,提升網絡在原任務上的效果,例如 Mask-RCNN 中檢測和分割任務。人像分割的難點之一是當視訊中的人像做出一定動作時(例如揮手等),對于手臂等部位的分割效果較差。為了更好的捕捉人體的資訊,我們嘗試在模型訓練引入人體姿勢資訊進行多任務訓練,參考 Pose2Seg,通過解析人像姿勢來更好地的捕捉肢體動作資訊。在測試時,隻需使用訓練的人像分割分支進行推理,能在提升分割的準确率的同時,兼顧了性能。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

4) 知識蒸餾

知識蒸餾被廣泛的用于模型壓縮和遷移學習中,通常采用 teacher-student 學習政策。首先事先訓練性能較強的 teacher 模型(例如 DeeplabV3+),在訓練 student 模型時,利用 teacher 模型生成的軟标簽作為監督資訊,指導 student 模型訓練。相比于原始的 one-hot 标簽,teacher 模型預測的軟标簽包含了不同類别資料結構相似性的知識,使得 student 模型訓練更易收斂。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

5) 模型輕量化

針對業務場景的需要,我們選用了基于 mobilenet-V2 網絡的 U-net 結構,根據 mnn 算子的特點,對模型進行優化裁剪,以滿足實際業務性能需求。

6) 政策優化

在實際開會場景中,不少參會人員在很多時候是保持不動的。在這種狀态下,用實時幀率去做人像分割,存在一定的浪費資源。針對這種場景,我們設計了一種邊緣位置幀差法,基于相鄰幀人像邊緣區域的變化,對人像是否移動進行準确判斷,同時該方法能夠有效去除人物說話、表情變化、外部區域變化等幹擾。邊緣位置幀差法可以有效降低參會人員靜止時人像分割算法的頻率,進而大大降低了能耗。

資料工程

人像分割對于資料較為依賴,現有的開源資料集與會議場景有較大差異,而分割資料的标注擷取費時費力,為了降低資料擷取成本、提升已有資料的使用率,我們嘗試在資料合成、自動化标注上做了一些嘗試。

1) 資料合成

在資料合成時,我們利用已有模型篩選出部分較好的子資料集,利用平移、旋轉、薄闆變換等方式,增加人像姿态和動作的多樣性,然後與會議場景的不同背景進行融合,擴充訓練資料。在資料變換時,若人像标簽與邊界相交,則利用坐标關系,在合成新圖檔時,保持标簽和邊界的原有相交關系,避免人像與邊界分離、浮空等現象,讓生成的圖檔更加真實。

2) 自動化标注、清洗

通過利用現有多種開源的檢測、分割、matting 算法,設計了一套高效的自動化标注、清洗工具,進行資料的快速自動化打标和清洗質檢,降低資料标注擷取成本(标注有效資料 5W+)。

算法成果

目前該算法已在内部上線使用。

1) 技術名額

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

2) 效果展示

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

照片換背景場景

除了實時通訊場景,我們利用人像分割算法在互動娛樂場景也進行了一些嘗試,例如照片換背景,效果如下圖所示。

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

參考文獻

  1. BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation
  2. BiSeNet V2: Bilateral Network with Guided Aggregation for Real-time Semantic Segmentation
  3. DFANet: Deep Feature Aggregation for Real-Time Semantic Segmentation
  4. PortraitNet: Real-time Portrait Segmentation Network for Mobile Device
  5. SINet: Extreme Lightweight Portrait Segmentation Networks with Spatial Squeeze Modules and Information Blocking Decoder
  6. SwiftNet: Real-time Video Object Segmentation
  7. Pose2Seg: Detection Free Human Instance Segmentation
  8. Distilling the Knowledge in a Neural Network

掃碼入群和作者一起探讨音視訊技術

擷取更多視訊雲行業最新資訊👇

直播時各種背景是怎麼實作的?聊一聊虛拟背景背後的技術

繼續閱讀