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


作者|羿川

審校|泰一

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

「視頻雲技術」你最值得關注的音視頻技術公眾號,每周推送來自阿里雲一線的實踐技術文章,在這里與音視頻領域一流工程師交流切磋。公眾號后台回復【技術】可加入阿里雲視頻雲產品技術交流群,和業內大咖一起探討音視頻技術,獲取更多行業最新信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM