左毅博,李心怡
(南華大學(xué) 計(jì)算機(jī)學(xué)院,湖南衡陽(yáng),421001)
自2020 以來(lái),隨著新冠疫情的暴發(fā),視頻會(huì)議APP的下載量得到大量增長(zhǎng),而在會(huì)議軟件中,為了保護(hù)用戶的隱私,通常需要提供背景虛化以及背景替換功能,因此人像分割技術(shù)則是必須研究的重點(diǎn)及難點(diǎn)。視頻人像分割算法是指將視頻分成一幀一幀的圖像,然后再將圖像分割成若干個(gè)特定,具有獨(dú)特性質(zhì)的區(qū)域并將這些感興趣區(qū)域進(jìn)行提取的技術(shù)。它的本質(zhì)是一個(gè)分類任務(wù),區(qū)別于普通物體的區(qū)分,著重于每個(gè)像素點(diǎn)的分類。而摳圖(Matting)則是一個(gè)回歸任務(wù),它的目標(biāo)是求取每個(gè)像素點(diǎn)的透明度。目前在會(huì)議軟件中,主要使用的還是分割算法,但是分割算法存在的最大問(wèn)題就是在前景和背景交叉區(qū)域的邊緣太明顯,沒(méi)有Matting 算法顯得自然。但是目前Matting 技術(shù)也存在許多技術(shù)問(wèn)題有待攻克,比如實(shí)時(shí)性、魯棒性等問(wèn)題。而本文則立足于現(xiàn)有的Matting 技術(shù),基于健壯的視頻摳圖網(wǎng)絡(luò)模型(Robust Video Matting,RVM),旨在提升會(huì)議視頻中人像的分割效果,為該技術(shù)的后續(xù)發(fā)展起著積極促進(jìn)的作用。本項(xiàng)目專注于快速的人像分割算法,主要目標(biāo)為設(shè)計(jì)一個(gè)摳圖算法且在不使用GPU 的環(huán)境下運(yùn)行,在精細(xì)度、速度和模型大小上取得平衡,并完成模型的工程化,最終產(chǎn)出一個(gè)可執(zhí)行程序,對(duì)視頻或者圖片進(jìn)行摳圖。
Alpha Matting 算法研究的是如何將一幅圖像中的前景信息和背景信息分離的問(wèn)題,即摳圖。這類問(wèn)題是數(shù)字圖像處理與數(shù)字圖像編輯領(lǐng)域中的一類經(jīng)典問(wèn)題,廣泛應(yīng)用于視頻編輯與視頻分割領(lǐng)域中。Alpha matting 的數(shù)學(xué)模型是:I=αF+(1-α)B。圖像的前景和背景如圖1 所示。
圖1 圖像的前景和背景
它由Porter 和 Duff 于1984 年提出[1]。他們首先引入了α 通道的概念,即它是一種前景和背景顏色的線性混合表示方法。一張圖片包含前景信息、背景信息,將該圖片看成是前景圖和背景圖的合成圖,于是便有了以上的混合模型。前景α 為1, 背景α 為 0,α 的取值介于0-1 之間,表示前后背景圖的線性組合。在大多數(shù)自然圖像中,大多數(shù)像素點(diǎn)都屬于絕對(duì)前景或者絕對(duì)背景,如何將其他混合點(diǎn)的α 值準(zhǔn)確地估計(jì)出來(lái)是alpha matting 的關(guān)鍵。
給定一個(gè)輸入圖像,對(duì)于所有像素點(diǎn),它的(F,B, α)都是未知的,需要進(jìn)行估計(jì),如果圖片是灰度圖片,每個(gè)像素點(diǎn)包含3 個(gè)未知數(shù),這樣的問(wèn)題是一個(gè)欠約束問(wèn)題。大多數(shù)摳圖問(wèn)題需要用戶交互的先驗(yàn)條件,使得我們對(duì)已知輸入圖像的顏色統(tǒng)計(jì)有預(yù)先的估計(jì)和假設(shè),從而能夠更加準(zhǔn)確的估計(jì)出未知量的值,常見(jiàn)的人工添加的約束條件有三區(qū)標(biāo)注圖(trimap)和草圖(scribble)兩種。
預(yù)先提供的約束條件(trimap 圖或scribble 圖)越精確,未知區(qū)域內(nèi)的點(diǎn)就越少,更多前景和背景信息就更容易利用。然而,在實(shí)踐中,要求預(yù)先輸入非常準(zhǔn)確的 trimap是一件異常繁瑣的工作,不現(xiàn)實(shí)也不必要的,如何在預(yù)先提供的trimap 以及最終算法所求得的摳圖結(jié)果之間尋求一個(gè)最佳答案,不同的摳圖算法對(duì)于這個(gè)問(wèn)題有著不同的闡述。
將圖像人像與背景分割開(kāi),追求主體邊緣清晰性和精準(zhǔn)性,具體要求如下(輸出結(jié)果如圖2 所示):
圖2 原圖與算法mask
邊緣分割準(zhǔn)確——邊緣分割的準(zhǔn)確度一直是業(yè)內(nèi)衡量分割效果好壞的重要指標(biāo)。本項(xiàng)目希望能夠在前景和背景對(duì)比度低、背景復(fù)雜、主體形狀復(fù)雜等各種復(fù)雜環(huán)境下,依然能保證主體邊緣的精準(zhǔn)分割。
在邊緣分割時(shí),需注意以下幾點(diǎn):
主體部分區(qū)域被非主體遮擋時(shí),只需精準(zhǔn)地分割出視覺(jué)中主體與非主體的可見(jiàn)區(qū)域,不需要“腦補(bǔ)”主體被遮擋的部分;
對(duì)于主體上毛發(fā)或類毛發(fā)、復(fù)雜結(jié)構(gòu)的邊緣分割,應(yīng)做到越精準(zhǔn)越好。在無(wú)法保證絕對(duì)精準(zhǔn)時(shí),建議剔除少量復(fù)雜邊緣部分,不要為了保留全部主體內(nèi)容而使得主體部分殘留過(guò)多背景;
對(duì)于手持物也需要摳,手持物的大小如手機(jī)、平板電腦、杯子、筆則都要摳出。如果有遮擋大部分的身體、如箱子、電腦屏幕,等大型物體,則不需要摳出。
(1)目前的實(shí)時(shí)視頻人像分割技術(shù)仍然使用的語(yǔ)義分割算法,matting 技術(shù)運(yùn)用較少且不成熟。而本項(xiàng)目系統(tǒng)地研究了matting 技術(shù),并將其進(jìn)行使用與完善,可為后續(xù)的相關(guān)任務(wù)提供寶貴的借鑒經(jīng)驗(yàn)。
(2)針對(duì)模型在cpu 或者移動(dòng)設(shè)備上運(yùn)行效率低下的問(wèn)題,對(duì)網(wǎng)絡(luò)的結(jié)構(gòu)進(jìn)行優(yōu)化,使用更加輕量級(jí)的解碼器,有效提升模型推理速度。并且根據(jù)目前會(huì)議視頻的使用特點(diǎn),對(duì)模型的推理結(jié)果進(jìn)行進(jìn)一步處理,使該項(xiàng)目能滿足多種運(yùn)用場(chǎng)景,如背景虛化、背景替換等功能。
(3)本項(xiàng)目模型主要借鑒RVM 網(wǎng)絡(luò)模型,包括編碼器和環(huán)解碼器,在Unet 網(wǎng)絡(luò)模型中加入了ConvGRU 結(jié)構(gòu),可有效利用視頻幀中的時(shí)間信息,有助于得到更好的分割效果。
基于 VisualStudio2019 開(kāi)發(fā)C++程序;基于 pytorch 1.9.0 進(jìn)行模型訓(xùn)練融合;基于 openCV 創(chuàng)建程序;使用openvino 框架進(jìn)行推理。
本項(xiàng)目模型主要借鑒RVM 網(wǎng)絡(luò)模型,包括編碼器和環(huán)解碼器,如圖3 所示。該網(wǎng)絡(luò)模型的實(shí)質(zhì)其實(shí)是借鑒了Unet 網(wǎng)絡(luò)模型,只是在其中加入了ConvGRU 結(jié)構(gòu),可有效利用視頻幀中的時(shí)間信息,有助于得到更好的分割效果。我們的架構(gòu)包括一個(gè)提取單個(gè)幀特征的編碼器、一個(gè)聚合時(shí)間信息的循環(huán)解碼器,以及一個(gè)用于高分辨率上采樣的深度引導(dǎo)濾波器模塊。RVM 網(wǎng)絡(luò)模型的架構(gòu)如圖3 所示。
圖3 RVM 網(wǎng)絡(luò)模型
(1)特征提取編碼器
RVM 編碼器模塊遵循最先進(jìn)的語(yǔ)義分割網(wǎng)絡(luò)的設(shè)計(jì),因?yàn)闇?zhǔn)確定位人體對(duì)象的能力是Matting 任務(wù)的基礎(chǔ)。我們采用MobileNetV3 Large 作為我們的有效主干,然后是MobileNetV3 提出的用于語(yǔ)義分割任務(wù)的LR-ASPP 模塊。但MobileNetV3 的最后一塊使用了擴(kuò)展的卷積,而沒(méi)有降低采樣步長(zhǎng)。編碼器模塊對(duì)單個(gè)幀進(jìn)行操作,并為循環(huán)解碼器提取1/2,1/4,1/8 和1/16 標(biāo)度的特征。MobileNetV3 的核心架構(gòu)如圖4 所示。
圖4 MobileNetV3核心架構(gòu)
(2)循環(huán)解碼器
由于視頻的特殊性質(zhì),RVM 使用循環(huán)架構(gòu),而不是關(guān)注或者簡(jiǎn)單地將多個(gè)幀作為額外的輸入通道進(jìn)行前饋。循環(huán)機(jī)制可以學(xué)習(xí)在連續(xù)的視頻流中自己保存和忘記哪些信息,而其他兩種方法必須依賴固定的規(guī)則,在每個(gè)設(shè)定的間隔內(nèi)刪除舊信息并將新信息插入有限的內(nèi)存池。自適應(yīng)的保留長(zhǎng)期和短期時(shí)間信息的能力使循環(huán)機(jī)制更適合我們的任務(wù)。
通過(guò)修改網(wǎng)絡(luò),使其可以一次給定T 幀作為輸入,每一層在傳遞到下一層之前處理所有T 幀。在訓(xùn)練期間,這允許批量標(biāo)準(zhǔn)化計(jì)算批次和時(shí)間的統(tǒng)計(jì)數(shù)據(jù),以確保標(biāo)準(zhǔn)化是一致的。在推斷過(guò)程中,T=1 可用于處理實(shí)時(shí)視頻,T>1可用于利用非重復(fù)層的更多GPU 并行性,作為一種批處理形式,前提是允許緩沖幀。我們的循環(huán)解碼器是單向的,所以它可以用于直播和后處理。
(3)深度引導(dǎo)過(guò)濾模塊
我們采用中提出的深度引導(dǎo)濾波器(DGF)進(jìn)行高分辨率預(yù)測(cè)。在處理4K 和HD 等高分辨率視頻時(shí),我們?cè)谕ㄟ^(guò)編碼器-解碼器網(wǎng)絡(luò)之前將輸入幀的采樣率降低了一個(gè)因子s。
然后將低分辨率alpha、前景、最終隱藏特征以及高分辨率輸入幀提供給DGF 模塊,以生成高分辨率alpha 和前景。對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行端到端訓(xùn)練。請(qǐng)注意,DGF 模塊是可選的,如果要處理的視頻分辨率較低,編碼器網(wǎng)絡(luò)可以獨(dú)立運(yùn)行。
出于以下幾個(gè)原因,RVM 同時(shí)使用Matting 和語(yǔ)義分割目標(biāo)來(lái)訓(xùn)練網(wǎng)絡(luò):
首先,人體摳圖任務(wù)與人體分割任務(wù)密切相關(guān)。與基于trimap 和基于背景的摳圖方法不同,我們的網(wǎng)絡(luò)必須學(xué)習(xí)從語(yǔ)義上理解場(chǎng)景,并在定位人體對(duì)象時(shí)保持穩(wěn)定。
大多數(shù)現(xiàn)有的Matting 數(shù)據(jù)集只提供地面真實(shí)阿爾法和前景,必須與背景圖像合成。由于前景和背景的光線不同,這些構(gòu)圖有時(shí)看起來(lái)是假的。另一方面,語(yǔ)義分割數(shù)據(jù)集以真實(shí)圖像為特征,其中人類主體包含在所有類型的復(fù)雜場(chǎng)景中。使用語(yǔ)義分割數(shù)據(jù)集進(jìn)行訓(xùn)練可以防止我們的模型過(guò)度擬合合成分布。
有更多的訓(xùn)練數(shù)據(jù)可用于語(yǔ)義分割任務(wù)。我們額外收集了各種公開(kāi)可用的數(shù)據(jù)集,包括基于視頻和基于圖像的數(shù)據(jù)集,以訓(xùn)練健壯的模型。
我們的模型是在VideoMatte240K、Differentions-646和Adobe Image Matting 數(shù)據(jù)集上訓(xùn)練的。VM 提供484個(gè)4K/HD 視頻剪輯。我們將數(shù)據(jù)集劃分為475/4/5 個(gè)片段,用于train/val/測(cè)試分割。D646 和AIM 是圖像摳圖數(shù)據(jù)集。同時(shí)只使用人類的圖像,并將它們組合成420/15 個(gè)訓(xùn)練序列/val 分段進(jìn)行訓(xùn)練。為了進(jìn)行評(píng)估,D646 和AIM 分別提供了11 張和10 張測(cè)試圖像。
對(duì)于背景,數(shù)據(jù)集提供適用于Matting 合成的高清背景視頻。這些視頻包括各種各樣的動(dòng)作,比如汽車(chē)經(jīng)過(guò)、樹(shù)葉晃動(dòng)和攝像機(jī)的動(dòng)作。我們選擇3118 個(gè)不包含人類的剪輯,并從每個(gè)剪輯中提取前100 幀。圖像中有更多的室內(nèi)場(chǎng)景,如辦公室和客廳。
我們?cè)谇熬昂捅尘吧蠎?yīng)用了運(yùn)動(dòng)和時(shí)間增強(qiáng),以增加數(shù)據(jù)的多樣性。運(yùn)動(dòng)增強(qiáng)包括仿射平移、縮放、旋轉(zhuǎn)、透明、亮度、飽和度、對(duì)比度、色調(diào)、噪聲和模糊,這些都會(huì)隨著時(shí)間不斷變化。運(yùn)動(dòng)應(yīng)用了不同的緩和函數(shù),因此變化并不總是線性的。這種增強(qiáng)還向圖像數(shù)據(jù)集中添加了人工運(yùn)動(dòng)。此外,我們還對(duì)視頻應(yīng)用了時(shí)間增強(qiáng),包括剪輯反轉(zhuǎn)、速度變化、隨機(jī)暫停和跳幀。其他離散增強(qiáng),即水平翻轉(zhuǎn)、灰度和銳化,將一致地應(yīng)用于所有幀。
摳圖訓(xùn)練分為四個(gè)階段:
第一階段:RVM 首先在VM 上以低分辨率進(jìn)行訓(xùn)練,不使用DGF 模塊,持續(xù)15 個(gè)時(shí)代,設(shè)置了一個(gè)短序列長(zhǎng)度T=15 幀,這樣網(wǎng)絡(luò)可以更快地更新。MobileNetV3 主干使用預(yù)訓(xùn)練的ImageNet 權(quán)重初始化,并使用1 學(xué)習(xí)速率,而網(wǎng)絡(luò)的其余部分使用2e-4,并對(duì)256 到512 像素之間的輸入分辨率h、w 的高度和寬度進(jìn)行獨(dú)立采樣。
第二階段:我們將T 增加到50 幀,將學(xué)習(xí)率降低一半,并保留第一階段的其他設(shè)置,以便為我們的模型再訓(xùn)練兩代。這使我們的網(wǎng)絡(luò)能夠看到更長(zhǎng)的序列,并了解長(zhǎng)期的依賴關(guān)系。
第三階段:我們連接DGF 模塊,在VM 上使用高分辨率樣本進(jìn)行1 個(gè)歷元的訓(xùn)練。由于高分辨率會(huì)消耗更多GPU 內(nèi)存,因此序列長(zhǎng)度必須設(shè)置為非常短。為了避免我們的重復(fù)網(wǎng)絡(luò)過(guò)度擬合到非常短的序列,因此在低分辨率長(zhǎng)序列和高分辨率短序列上訓(xùn)練我們的網(wǎng)絡(luò)。
第四階段:我們?cè)贒646 的組合數(shù)據(jù)集上進(jìn)行訓(xùn)練,目標(biāo)是5 代。我們將解碼器學(xué)習(xí)率提高到5e-5,以使我們的網(wǎng)絡(luò)適應(yīng)并保持第三階段的其他設(shè)置。
打包python 訓(xùn)練的模型得到xml+bin 文件后,編寫(xiě)C++的控制臺(tái)程序,導(dǎo)入模型并編寫(xiě)其他與圖片或視頻處理的相關(guān)代碼。
我們使用visual studio 2019 自帶的項(xiàng)目生成功能生成exe 可執(zhí)行文件,將文件夾中加入exe 可執(zhí)行文件以及相關(guān)的dll 文件即可。
該軟件無(wú)需安裝,解壓即可使用,使用cmd 窗口進(jìn)入exe 文件所在路徑,執(zhí)行exe 文件并附帶數(shù)據(jù)集文件夾路徑即可。
針對(duì)不同的文件類型,我們進(jìn)行了不同的測(cè)試,首先是對(duì)于圖片,無(wú)論是證件照還是個(gè)人的自拍,我們都能將其中的人像準(zhǔn)確摳出,并且在邊緣有著較為精確的分割效果。證件照摳圖如圖5 所示,個(gè)人自拍摳圖如圖6 所示。
圖5 證件照摳圖
圖6 個(gè)人自拍摳圖
其次是對(duì)于視頻的處理,我們?cè)贑pu 為i7-9750H 的條件下處理1080p 的視頻可以達(dá)到每秒40 幀的效果,同時(shí)對(duì)于視頻中的人物輪廓有著良好的分割效果。視頻摳圖如圖7所示。
圖7 視頻摳圖
我們的軟件可以對(duì)不同的圖片或視頻進(jìn)行人像分割處理并輸出mask,對(duì)于不同分辨率的圖片我們都有著相當(dāng)可觀的分割效果,我們會(huì)根據(jù)圖片原始的分辨率動(dòng)態(tài)設(shè)置采樣率,這樣有益于我們對(duì)圖片的分割效果;對(duì)于1920×1080的視頻我們的處理速度可以達(dá)到40+ fps/s,并且我們的模型大小僅為16MB,對(duì)于會(huì)議場(chǎng)景的視頻有著十分可觀的分割效果,當(dāng)然也可以用于其他各類場(chǎng)景的視頻,分割效果與多種因素有關(guān),但是整體效果良好。