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

阿里雲影片雲發表於2021-08-11

作者|羿川

審校|泰一

1.gif

虛擬背景依託於人像分割技術,透過將圖片中的人像分割出來,對背景圖片進行替換實現。根據其使用的應用場景,大體可以分成以下三類:

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

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

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

image.png

實現虛擬背景需要用到哪些技術?

實時語義分割

image.png

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

BiSeNet:Bilateral Segmentation Network for Real-time Semantic Segmentation

image.png

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

空間路徑透過通道寬、深度淺的網路來獲取高解析度特徵,保留豐富的空間資訊;而語義路徑則是採用通道窄、深度深的輕量骨幹模型,透過快速下采樣和全域性平均池化提取語義資訊。最後利用特徵融合模組(FFM)對兩個路徑的特徵進行融合,實現精度和速度之間的平衡。該方法在 cityscapes 測試集上的 MIOU 為 68.4%。

image.png

升級版 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

image.png

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

Semantic Flow for Fast and Accurate Scene Parsing

image.png

受到光流的啟發,作者認為由同一張圖片生成的任意兩個不同解析度的特徵圖之間的關係,也可以用每個畫素的流動表示,提出了 SFNet(ECCV2020),網路結構如上圖所示。

因此,作者提出了語義流對齊模組(Flow Alignment Module (FAM))來學習相鄰階段特徵的語義流,然後透過 warping 將包含高層語義的特徵廣播到高解析度的特徵上,從而將深層特徵的豐富語義高效傳播到淺層的特徵,使得特徵同時包含豐富語義和空間資訊。作者將 FAM 模組無縫插入到 FPN 網路中融合相鄰階段的特徵,如上圖所示。SFNet 能在實時分割的情況下(FPS 為 26),在 Cityscapes 可以達到 80.4% mIoU。

人像分割

image.png

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

Boundary-sensitive Network for Portrait Segmentation

image.png

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

image.png

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

image.png

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

image.png

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

image.png

人像摳圖

image.png

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

image.png

Background Matting: The World is Your Green Screen

image.png

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

image.png

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

Boosting Semantic Human Matting with Coarse Annotations

image.png

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

image.png

該方法的網路結構如上圖所示,由 3 個模組組成:MPN,粗 mask 預測網路;QUN:mask 質量統一網路;MRN,matting 細化網路,coarse-to-fine 地逐步最佳化分割的結果。訓練時,首先使用粗標資料和精標資料同時訓練 MPN,獲取粗 mask,然後使用精標資料訓練 MRN,細化分割結果。但是文章作者發現,由於粗標資料和精標資料的標註差異,導致兩者 MRN 預測預期存在較大的 GAP,從而影響效能,因此,作者提出了 QUN,對粗 mask 的預測結果進行質量統一。

image.png

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

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

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

image.png

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

image.png

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

當應用到新場景的資料時,3 個分支產生的結果可能會有差異,因此作者提出了利用無標註的資料的 SOC 自監督策略,透過讓語義 - 細節融合分支預測結果在語義上和語義分支預測結果保持一致,在細節結果上和細節分支預測結果保持一致,增強不同子任務之間預測結果一致性約束,從而增強模型的泛化能力。

image.png

直接對影片的每幀圖片進行單獨預測會導致相鄰幀預測結果存在時序上的不一致,從而出現幀間跳閃的現象。作者發現,跳閃的畫素點是可能可以透過相鄰幀的預測結果進行糾正,如上圖所示。因此,作者提出,當前一幀和後一幀的畫素預測結果小於一定閾值,同時當前幀預測結果和前後幀的預測結果大於一定閾值時,則可以用前後幀的預測結果的平均作為當前幀的預測結果,從而避免不同幀預測結果時序上的不一定導致的幀間跳閃現象。

Real-Time High-Resolution Background Matting

image.png

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

image.png

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

image.png

2.gif

影片人像分割

影片目標分割(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,透過解析人像姿勢來更好地的捕捉肢體動作資訊。在測試時,只需使用訓練的人像分割分支進行推理,能在提升分割的準確率的同時,兼顧了效能。

image.png

4) 知識蒸餾

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

image.png

5) 模型輕量化

針對業務場景的需要,我們選用了基於 mobilenet-V2 網路的 U-net 結構,根據 mnn 運算元的特點,對模型進行最佳化裁剪,以滿足實際業務效能需求。

6) 策略最佳化

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

資料工程

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

1) 資料合成

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

2) 自動化標註、清洗

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

演算法成果

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

1) 技術指標

image.png

2) 效果展示

照片換背景場景

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

image.png

參考文獻

  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. Semantic Flow for Fast and Accurate Scene Parsing
  5. Boundary-sensitive Network for Portrait Segmentation
  6. PortraitNet: Real-time Portrait Segmentation Network for Mobile Device
  7. SINet: Extreme Lightweight Portrait Segmentation Networks with Spatial Squeeze Modules and Information Blocking Decoder
  8. Background Matting: The World is Your Green Screen
  9. Boosting Semantic Human Matting with Coarse Annotations
  10. Is a Green Screen Really Necessary for Real-Time Human Matting?
  11. Real-Time High-Resolution Background Matting
  12. SwiftNet: Real-time Video Object Segmentation
  13. Pose2Seg: Detection Free Human Instance Segmentation
  14. Distilling the Knowledge in a Neural Network

相關文章