這項(xiàng)開源視頻摳圖技術(shù)火了!換背景的方法著實(shí)真假難辨
綠幕是影視劇中摳圖、換背景的利器,但如果不在綠幕前拍攝,我們還能完美地轉(zhuǎn)換背景嗎?華盛頓大學(xué)的研究者最近就上傳了這樣一份論文,不在綠幕前拍攝也能完美轉(zhuǎn)換視頻背景,讓整個(gè)世界都變成你的綠幕。
從作者給出的 demo 可以看到,他們的方法效果非常驚艷,即使視頻中的人瘋狂甩頭發(fā)也沒有影響合成效果:
做各種動(dòng)作也沒有「穿幫」:
即使人物和背景不好區(qū)分、手持鏡頭稍微晃動(dòng)時(shí)摳圖效果也不賴:
目前,這篇論文已被 CVPR 2020 大會(huì)接收。
-
論文鏈接: https://arxiv.org/pdf/2004.00626.pdf
-
GitHub鏈接: https://github.com/senguptaumd/Background-Matting
在論文中,研究者提出了一種創(chuàng)建蒙版(matting)的新方法。多數(shù)現(xiàn)有的蒙版方法都需要以綠幕為背景,或者手工創(chuàng)建一個(gè)三元圖(trimap)。當(dāng)然,也有些自動(dòng)方法不需要三元圖,但效果會(huì)很差。本文提出的這個(gè)蒙版方法也不需要三元圖,但摳圖、換背景效果要更好。
當(dāng)然,達(dá)到這么好的效果是有條件的。除了原始圖像/視頻之外,研究者還要求拍攝者多拍一張不帶人物的背景圖。這一過程要比創(chuàng)建三元圖節(jié)省很多時(shí)間。研究者用對抗損失訓(xùn)練了一個(gè)深度網(wǎng)絡(luò),用來預(yù)測蒙版。他們首先利用帶有 ground truth 的合成數(shù)據(jù)訓(xùn)練了一個(gè)具有監(jiān)督損失的蒙版網(wǎng)絡(luò)。為了在不加標(biāo)記的情況下縮小合成圖像與真實(shí)圖像的差距,他們在第一個(gè)網(wǎng)絡(luò)的指導(dǎo)下訓(xùn)練了另一個(gè)蒙版網(wǎng)絡(luò),并通過一個(gè)判別器來判斷合成圖像的質(zhì)量。研究者在諸多圖像和視頻上測試了他們提出的新方法,發(fā)現(xiàn)這一方法顯著優(yōu)于之前的 SOTA。
在關(guān)于這一論文的討論中,我們可以看到很多潛在的應(yīng)用場景,比如 vlog(云旅游)、視頻會(huì)議等。
對于廣大「煙酒僧」來說,如果導(dǎo)師下次再讓你發(fā)一段在實(shí)驗(yàn)室工(摸)作(魚)的視頻,或許也能用得上呢。
方法
系統(tǒng)的輸入是一張圖像或一個(gè)視頻,圖像/視頻中的人站在靜態(tài)的自然背景前,此外還需輸入一張純背景圖。背景圖的獲取很簡單,只需要讓人物走出取景區(qū)域,然后操作曝光、焦距都已固定的相機(jī)進(jìn)行拍攝(如智能手機(jī)相機(jī))。對于手持相機(jī),研究者假設(shè)相機(jī)的移動(dòng)幅度很小,利用單應(yīng)性(homography)將背景與給定的輸入圖像對齊。從輸入中,研究者還提取了目標(biāo)人物的軟分割。對于視頻輸入,可以添加臨近的幀來輔助生成蒙版。
圖 2:方法概覽。
在 Adobe 數(shù)據(jù)集上進(jìn)行監(jiān)督訓(xùn)練
研究者首先在 Adobe Matting 數(shù)據(jù)集(只用不透明物體的圖像)上訓(xùn)練了一個(gè)深度蒙版網(wǎng)絡(luò)。該網(wǎng)絡(luò)將帶有人物的圖像 I、純背景圖像 B』、人物 S、相鄰幀的時(shí)間堆棧 M(可選)的軟分割作為輸入,輸出則是一個(gè)前景圖 F 和一個(gè)前景蒙版α。為了生成 S,研究者應(yīng)用了人物分割、腐蝕(erode)、膨脹(dilate)以及高斯模糊。在處理視頻時(shí),他們將 M 設(shè)為 I 前后相連的兩幀。設(shè)兩幀間隔為 T,則選取的相鄰幀為 {I−2T , I−T , I+T , I+2T }。這些圖像被轉(zhuǎn)換為灰度圖,以忽略顏色,更加專注于運(yùn)動(dòng)信息。如果輸入中沒有視頻,研究者就將 M 設(shè)定為 {I, I, I, I},這些圖像也轉(zhuǎn)化為灰度圖。將輸入集合表示為 {I,B′,S,M},權(quán)重參數(shù)為θ的網(wǎng)絡(luò)的運(yùn)算可表示為:
研究者提出了一個(gè)語境轉(zhuǎn)換塊(Context Switching block,CS block)網(wǎng)絡(luò),以根據(jù)輸入圖像更有效地結(jié)合所有輸入信息的特征(見上圖 2)。舉個(gè)例子,當(dāng)人物的一部分背景相似時(shí),網(wǎng)絡(luò)應(yīng)該更加關(guān)注該區(qū)域的分割線索。該網(wǎng)絡(luò)有四個(gè)編碼器,分別產(chǎn)生 256 個(gè)通道的特征圖,然后通過應(yīng)用 1x1 卷積、BatchNorm 和 ReLU 將來自 I 的圖像特征分別與 B '、S 和 M 的結(jié)合起來,為這三對中的每一對生成 64 通道特征。最后,他們通過 1x1 卷積、BatchNorm 和 ReLU 將這三組 64 通道特征與最初的 256 通道特征相結(jié)合,得到編碼后的特征并將其傳給網(wǎng)絡(luò)的其他部分,包括殘差塊和解碼器。研究者觀察到,上述 CS 塊架構(gòu)有助于網(wǎng)絡(luò)從 Adobe 數(shù)據(jù)集泛化到實(shí)際數(shù)據(jù)。
研究者在 Adobe 數(shù)據(jù)集上用監(jiān)督損失訓(xùn)練網(wǎng)絡(luò) G_Adobe ≡ G(·; θ_Adobe):
其中,(F, α) = G(X; θ_Adobe),梯度項(xiàng)α 可以鼓勵(lì)模型生成更高銳度的圖像。
在無標(biāo)記真實(shí)數(shù)據(jù)上進(jìn)行對抗訓(xùn)練
雖然研究者提出的 CS 塊在結(jié)合了數(shù)據(jù)增廣后,顯著縮短了真實(shí)圖像與使用 Adobe 數(shù)據(jù)集合成的圖像之間的差距。然而,該方法在處理真實(shí)圖像時(shí)仍然存在以下困難:
-
在手指、手臂、頭發(fā)附近的背景被復(fù)制到蒙版中;
-
圖像分割失??;
-
前景重要部分的顏色與背景顏色相似;
-
圖像與背景之間沒有對齊。
為解決以上問題,研究者提出用一種自監(jiān)督學(xué)習(xí)方法從未標(biāo)注的真實(shí)數(shù)據(jù)中訓(xùn)練模型。
該方法的主要思路是:蒙版估計(jì)中的主要誤差會(huì)導(dǎo)致在新背景下合成的圖片失真。例如,不好的蒙版可能會(huì)包含一些原圖像背景,當(dāng)在與新背景合成時(shí)會(huì)將之前背景的一部分內(nèi)容復(fù)制到新背景下。于是,研究者訓(xùn)練了一個(gè)對抗判別器來區(qū)分合成圖像與真實(shí)圖像,以此提高蒙版網(wǎng)絡(luò)的性能。
研究者使用 LS-GAN 框架來訓(xùn)練生成器 G_{Real} 與判別器 D,最小化以下目標(biāo)函數(shù)來訓(xùn)練生成器:
其中,(F, α) = G(X; θ_{Real}),\bar{B} 為判別器用于生成合成圖像的給定背景。研究者將λ設(shè)置為 0.05,并在訓(xùn)練過程中每兩個(gè) epoch 將其減少一半,以使判別器起到重要作用。研究者給 alpha 損失函數(shù)設(shè)置了較高的權(quán)重來鼓勵(lì)模型生成更高銳度的圖像。
研究者使用如下目標(biāo)函數(shù)訓(xùn)練判別器:
其中,θ_{Disc} 代表判別器網(wǎng)絡(luò)的權(quán)重,同時(shí) (F, α) = G(X; θ_{Real})。
實(shí)驗(yàn)結(jié)果
研究者將該方法與其他方法進(jìn)行了比較,包括幾種在基準(zhǔn)上表現(xiàn)良好的深度蒙版算法,比如 Bayesian Matting、Context-Aware Matting、Index Matting 和 Late Fusion Matting。
在 Adobe 數(shù)據(jù)集上的結(jié)果
研究者首先使用 2.69 萬個(gè)樣本來訓(xùn)練 GAdobe,在 100 個(gè)隨機(jī)背景上合成 269 個(gè)目標(biāo),加上背景的擾動(dòng)版本作為網(wǎng)絡(luò)輸入,使用 Adam 優(yōu)化器進(jìn)行訓(xùn)練,批處理大小為 4,學(xué)習(xí)率為 1e。
實(shí)驗(yàn)比較了 Adobe Dataset 中 220 種合成素材的結(jié)果,如下圖所示:
表 1:Adobe Dataset 上的 Alpha 蒙版錯(cuò)誤,數(shù)值越低代表性能越好。
真實(shí)數(shù)據(jù)上的結(jié)果
此外,研究者使用智能手機(jī) iPhone 8 在室內(nèi)和室外分別在手持和固定攝像機(jī)的情況下拍攝了視頻。
圖 3:(a-e)是自然背景下手持相機(jī)拍攝視頻所呈現(xiàn)的 alpha 通道和前景,(e)是一個(gè)動(dòng)態(tài)背景下的失敗案例。
除此之外,研究者針對用戶群體進(jìn)行了調(diào)查,結(jié)果包括測試視頻的評(píng)分總和。分?jǐn)?shù)證明本論文所提出的方法優(yōu)于其他方法,尤其是在攝像機(jī)拍攝的場景下,但手持拍攝的視頻中,由于非平面背景導(dǎo)致的視差,還是會(huì)出現(xiàn)一些蒙版錯(cuò)誤。
表 2:在 10 個(gè)真實(shí)世界視頻中的用戶研究結(jié)果(固定攝像機(jī))。
表 3:在 10 個(gè)真實(shí)世界視頻上的用戶研究(手持相機(jī))。
開源代碼使用簡介
環(huán)境配置
將項(xiàng)目克隆到本地:
- git clone https://github.com/senguptaumd/Background-Matting.git
作者提供的代碼需要在 Python 3 環(huán)境下運(yùn)行,并在 Pytorch=1.1.0,Tensorflow=1.14,cuda10.0 版本下測試通過。接下來我們創(chuàng)建 conda 虛擬環(huán)境并安裝依賴項(xiàng):
- conda create --name back-matting python=3.6
- conda activate back-matting
確保 CUDA 10.0 為默認(rèn)的 cuda。如果電腦上 CUDA 10.0 安裝在/usr/local/cuda-10.0 目錄下,運(yùn)行如下命令:
- export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64
- export PATH=$PATH:/usr/local/cuda-10.0/bin
安裝 PyTorch 和 Tensorflow 以及相關(guān)依賴項(xiàng):
- conda install pytorch=1.1.0 torchvision cudatoolkit=10.0 -c pytorch
- pip install tensorflow-gpu=1.14.0
- pip install -r requirements.txt
在樣本圖像上運(yùn)行推斷程序
(1)準(zhǔn)備數(shù)據(jù)
為實(shí)現(xiàn)對人物摳圖的綠幕效果,我們需要以下數(shù)據(jù):
-
帶有人物的圖像(擴(kuò)展名為_img.png)
-
沒有人物的背景圖像(擴(kuò)展名為_back.png)
-
需要插入人物的目標(biāo)背景圖像(存放在 data/background 文件夾下)
我們也可使用 sample_data/文件夾進(jìn)行測試,并參考它準(zhǔn)備自己的測試數(shù)據(jù)。
(2)預(yù)訓(xùn)練模型
從作者提供的云盤中下載預(yù)訓(xùn)練模型,并將其放在 Models/目錄下。
-
Pre-processing
-
Segmentation
-
Background Matting needs a segmentation mask for the subject. We use tensorflow version of Deeplabv3+.
(3)預(yù)處理
作者使用 TensorFlow 版的 Deeplabv3+來生成用于人物摳圖的分割 mask:
cd Background-Matting/
git clone https://github.com/tensorflow/models.git
cd models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slimcd ../..
python test_segmentation_deeplab.py -i sample_data/input
當(dāng)然,我們也可以使用其他任何一種圖像分割網(wǎng)絡(luò)來替代 Deeplabv3+。將分割后的結(jié)果保存成擴(kuò)展名為_masksDL.png 的文件。
之后,我們需要對圖像進(jìn)行對齊預(yù)處理,即將背景與輸入圖像進(jìn)行對齊。需要注意的是,在拍攝圖像時(shí)我們需要關(guān)閉自動(dòng)對焦與自動(dòng)曝光功能。運(yùn)行 python test_pre_process.py -i sample_data/input 即可對圖像進(jìn)行預(yù)處理。它會(huì)自動(dòng)地對齊背景圖片,并調(diào)節(jié)偏置與增益來匹配輸入圖像。
(4)人像摳圖
運(yùn)行如下代碼即可實(shí)現(xiàn)背景替換。對于使用了三腳架來拍攝的圖片,選擇 -m real-fixed-cam 可得到最好的效果。選擇 -m syn-comp-adobe 會(huì)讓我們使用在 Adobe 合成數(shù)據(jù)集上訓(xùn)練的模型,而不是真實(shí)的數(shù)據(jù)(效果最差)。
- python test_background-matting_image.py -m real-hand-held -i sample_data/input/ -o sample