CVPR 2021-劉虹雨:結(jié)合深度神經(jīng)網(wǎng)絡(luò)進(jìn)行有效的圖像修復(fù)和編輯

極市導(dǎo)讀
來自虎牙直播AI基礎(chǔ)技術(shù)部的劉虹雨算法工程師,為我們介紹他團(tuán)隊在如何結(jié)合深度神經(jīng)網(wǎng)絡(luò)進(jìn)行有效的圖像修復(fù)和編輯這兩個問題上的探索工作,兩份工作都已經(jīng)被CVPR2021收錄。 >>加入極市CV技術(shù)交流群,走在計算機(jī)視覺的最前沿
導(dǎo)讀
虎牙公司的研究員劉虹雨在CVPR 2021入選兩篇poster論文,首先感謝co-authors的通力合作,希望在未來能做出更好的研究。此次研究解決了視覺內(nèi)容可控性和多樣性問題,將提升虎牙直播在視覺上的應(yīng)用效果,可用于如虎牙數(shù)字人、虛擬形象及相關(guān)直播游戲的制作,提升直播互動體驗。
先為大家分享第一篇文章:DeFLOCNet: Deep Image Editing via Flexible Low-level Controls,這篇文章比較偏工程,做法比較直接。有GUI可直接體驗效果,代碼后續(xù)也會盡快分享。
DeFLOCNet
任務(wù)介紹
這篇文章做的task是基于底層視覺控制的圖像編輯(low-level controls based image editing),其中底層視覺控制代表線條或者顏色(sketch or color),該任務(wù)的目標(biāo)是對孔洞區(qū)域進(jìn)行編輯,并且編輯的內(nèi)容是由用戶提供的底層視覺信息控制,如圖1所示。

Motivation
在過去,底層視覺控制的圖像編輯方法一般是把底層數(shù)據(jù)信息與輸入的孔洞圖像拼接在一起,然后放入到網(wǎng)絡(luò)中。這個拼接的過程一般在pixel層實現(xiàn),這種方式雖然非常直觀,但是由于low-level control相對來說比較稀疏,所以在層層的CNNS之后有些信息就被過濾掉了,對于最后的結(jié)果控制不夠好。所以,如何更好的注入底層級視覺控制信息是我們需要解決的問題。很自然,由于直接在pixel層注入控制信息不好,我們就在features上注入信息。那么如何優(yōu)雅的在feature上注入底層視覺信息呢,Spade Norm可以有效地幫助我們在feature上注入信息,在注入信息的時候模仿藝術(shù)家的畫圖方式:
1. 對于線條,采用progressive注入的方式,來模仿藝術(shù)家對線稿的多次打磨; 2. 對于色彩,我們應(yīng)該將色彩從當(dāng)前位置擴(kuò)散到一個連通域中,但并不越過這個連通域。也就是說像畫水彩一樣,色彩需要有propagation,但是并不能超過、越過線條; 3. 顏色和線條應(yīng)該看作是對結(jié)構(gòu)的指導(dǎo)。
Methods:
基于以上三點,我們設(shè)計了Structure generation block, 把線條以及色彩看作孔洞區(qū)域的結(jié)構(gòu)信息,并通過Spade Norm注入到feature中。同時,設(shè)計了Texture generation branch 輔助紋理的生成。最終,我們提出了DeFLOCNet,并在圖像編輯任務(wù)上取得了不錯的效果。
Pipeline
整個網(wǎng)絡(luò)是encoder-decoder的架構(gòu),輸入是一張帶mask的圖像,圖像經(jīng)過encoder后得到各層的feature,這些feature會被送入structure generation block,并輸出帶有l(wèi)ow-level control的特征,同時bottle-neck的feature會被送入到texture generation block中,并輸出紋理refine之后的feature。最后,兩個輸出會在decoder拼接一起,完整structure以及texture。

Structure generation block
SGB分為三個branch,分別是sketch line generation branch、 fusion branch和color propagation branch,其結(jié)構(gòu)如圖3所示。無論是sketch還是color都是通過injection function注入到feature中,injection就是我前面提到的spade norm,整個過程如公式1所示:
公式1,L代表low-level controls
在sketch line generation branch中,我們先把input通過AVG pool變成channel為1的feature,接著將sketch lines以及noise通過injection function注入到feature中得到Fs1, 接著Fs1通過Sigmoid之后在fusion與input點乘。用這種方式是因為sketch的值在歸一化后都是1,那么直觀來說在feature上越靠近數(shù)值越靠近1越代表sketch。所以,我們利用sigmoid來凸顯sketch,可以說越靠近1的地方sketch就越明顯。當(dāng)然,由于input與sigmoid(Fs1)點乘之后,只是把sketch放到了Input上,input中的其他信息其實被磨掉了,因此我們采用short-connection做成一個殘差的模式。
通過以上操作得到了帶sketch的特征,接下來是color的注入。在color propagation branch中,color和noise先通過CNN提取feature,然后將該feature與1-Sigmoid(Fs1)做點乘并得到Fc1,這一步的目的是為了達(dá)到我上面所說的顏色不能跨過sketch,否則會造成色彩混亂和串色。接著Fc1會在fusion branch被注入到input feature,最終通過對input feature注入sketch和color信息,我們得到輸出F1。
對于不同的layer,我們的block數(shù)量也不同,對于最上層的layer(resolution為128×128)我們的block數(shù)量為6,而最底層的數(shù)量則為1。
圖3,Structure generation block
Texture generation branch
這個branch相對來說比較簡單,只是一個簡單的decoder,但是其輸出是原始的bottle neck feature,這個feature不帶任何sketch以及color的信息,所以在end to end的過程中,texture generation branch輸出的feature會更傾向于讓紋理真實不smooth,這在后面的ablation study中也有實驗可以驗證。
Experiments:
Loss function大家可以在原論文中查看,都是一些比較經(jīng)典的loss function。我們這里針對最高層的layer做了可視化,如圖4。其中,F(xiàn)i對應(yīng)的就是fusion branch中feature,可以看到線條是逐漸清晰的,同時顏色由擴(kuò)散-擴(kuò)散到sketch外面,最后被阻斷在sketch里。

State-of-the-art comparisons
如下圖5所示,我們的方法對比其他baseline數(shù)據(jù),都取得了優(yōu)秀的效果。


Ablation Study
我們對injection process 的次數(shù),block在每層的數(shù)量,是否需要用sketch去阻斷color的傳播,以及是否需要texture分支都做了數(shù)值和視覺上的ablation study。如下圖表所示:
圖6,Ablation Study
Conclusion
我們做的GUI借鑒了FEGAN,可以很好地與用戶交互,同時讓用戶體驗編輯的效果。整個文章的做法比較直接,比較工程,就是為了盡量把效果做好。我們原計劃做動漫的編輯,但是由于一開始投了NIPS,reviewer可能對動漫的domain不感興趣,所以最后用了常用的數(shù)據(jù)集。哈哈,可惜最后沒中NIPS,中了CVPR??偟膩碚f,這算是inpainting的上游任務(wù)了,因為有g(shù)uide,對比inpainting相對簡單一點,但還是非常有意思。最后,inpainting應(yīng)該與人有交互,才可以更好的進(jìn)行落地應(yīng)用。
PD-GAN
任務(wù)介紹
回到老本行inpainting,我以前的工作一直是在做single-solution的方法,也就是針對一個masked image只輸出一個結(jié)果。但是,inpainting本質(zhì)上是一個ill-posed的任務(wù),其輸出的結(jié)果不應(yīng)該被限制,應(yīng)該是多樣的(diverse),只要合理自然就應(yīng)該是好的修復(fù)結(jié)果。
Motivation
基于這個出發(fā)點,我們提出一種非常自然的prior,也是我們的motivation,那就是越靠近孔洞的中心其多樣性越高,diverse越強,越靠近孔洞邊緣其多樣性越低越應(yīng)該與上下文consistent起來,保證無縫鏈接,這樣整個生成的圖像就可以多樣并且不突兀。同時,我認(rèn)為inpainting這個task由于是ill-posted的,并沒有一個完美的ground-truth,所以應(yīng)該要往GAN上面去靠往生成的方法想去靠,拋開傳統(tǒng)的image to image的框架,用GAN的想法去做,才是未來的一個比較好的方向,所以我們這里采用vanilla GAN的框架,利用latent code對來影響孔洞內(nèi)容,利用前面提到的prior我們很好地保證了GAN的特性就是多樣性,同時也保證了生成內(nèi)容能夠與上下文融為一體。
Methods
Pipeline:
我們的pipeline如下圖所示,先通過一個簡單的PConv網(wǎng)絡(luò)得到一個 coarse prediction P, 接下來我們利用P去調(diào)制z來做生成任務(wù),對于P我們基于前面提到的prior,越靠近孔洞中心越多樣也就是越不相信P的內(nèi)容,而越靠近邊緣則越相信P的內(nèi)容,這樣在孔洞的中心則z會發(fā)生足夠的作用會保證多樣性,而越靠近邊緣z的作用的越小我們越相信P的作用。其實整個PD-GAN是conditional 和 unconditional生成的一種balance。為了實現(xiàn)以上的操作,我們設(shè)計并提出了spatially probabilistic diversity normalization來調(diào)制z.

Spatially probabilistic diversity normalization
我們修改了傳統(tǒng)的Spade Norm并設(shè)計了probabilistic diversity map來控制P的內(nèi)容置信度,具體來說我們設(shè)計了兩種SPDNorm,一種是soft SPDNorm,一種是hard SPDNorm,并且最終組合成了SPDNorm ResBlock, 如下圖所示:

其中 Hard SPDNorm 中的 就是我們的 hard probabilistic diversity map, D 是通過 dilation operation 去實現(xiàn)的, 越往中心走數(shù)值越靠近 0 越往邊界走則越靠進(jìn) 1 , background 區(qū)域的 數(shù)值則為 1 , 整個 如下圖所示

我們在實驗中設(shè)置k為4,對于不同的層我們采用dilation次數(shù)不一樣,從低像素層到高像素層分別是2,2,4,4,4。
Soft SPDNorm 中的 就是我們的 soft probabilistic diversity map, 是通過 自己學(xué) 習(xí)的,學(xué)習(xí)方式如下公式:
其中 為 binary mask, 為 經(jīng)過 后學(xué)習(xí)到的 feature . 之所以要學(xué) soft probabilistic diversity map, 是因為 Hard SPDNorm 對于訓(xùn)練來說不夠穩(wěn)定,容易造成 artifact,我們讓 網(wǎng)絡(luò)自己學(xué)習(xí)一個調(diào)節(jié)機(jī)制幫助最后的結(jié)果生成的更加合理。 的可視化如下圖所示:

可以看到 是比較 smooth 并且靠近 的, 所以這對 Hard SPDNorm 有一個調(diào)節(jié)作用。最后我們把 hard 和 soft SPDNorm 做成了一個殘差模塊,把 Soft SPDNrom 的輸出作為殘 差加入到 Hard SPDnorm 中。
其實大家可以看到,當(dāng)hard和soft probabilistic diversity map里的數(shù)值都變?yōu)?時,就會變成標(biāo)準(zhǔn)的Spade Norm。
Perceptual diversity loss
我們利用了reconstruction loss來訓(xùn)練網(wǎng)絡(luò),但是reconstruction loss對于diversity有致命的影響,所以我們嘗試使用一種已有diversity loss來解決這個問題,如下所示
其中Iout1和Iout2 是網(wǎng)絡(luò)通過 和 生成的結(jié)果,可以看出這個 loss 要求不同的 生成的圖 像差距越大,保證 diverse。但是這個 loss 直接用到我們的任務(wù)中非常不 work,首先直接 對全圖算 會導(dǎo)致背景區(qū)域都變化,同時由于 Iout1 和 Iout2 都是被歸一化到 , 這兩個的差值要盡量大會導(dǎo)致一個圖無限變白(數(shù)值往 1 靠近) 一個圖無限變黑 (數(shù)值往 0 靠 近)?;谝陨蟽牲c我們設(shè)計了更有效的損失函數(shù)叫做 perceptual diversity loss:
其中 代表的是 VGG 的第 層 feature, 代表 binary mask。首先用 VGG 提取輸出圖像 特征有利于防止最后輸出往 1 或者 兩個極端值靠近,同時乘 可以保證只影響生成區(qū)域 而不影響到背景區(qū)域,最后上面只有 1 而不是兩個 相減是因為 是沒有 spatial 信息的無 法與 相乘,如果上面還是 的差值那么我們發(fā)現(xiàn)最后仍然會影響到背景區(qū)域。
Experiments
State-of-the-art Comparisons




Ablation study

總結(jié)
這份工作不同以往的inpainting,稍微拜托了一些image to image的框架,利用GAN的框架來做diverse的生成,我覺得這是一個不錯的啟發(fā),希望對后面做inpainting的小伙伴們有一定啟發(fā),相比于editing那篇文章我更喜歡這篇哈哈,因為比較insightful!
這里提一下我最近比較喜歡的兩份工作,一份是我好兄弟wanziyu的High-Fidelity Pluralistic Image Completion with Transformers以及清華的Shengyu Zhao 的Co-mod-gan。High-Fidelity Pluralistic Image Completion with Transformers采用transformer把image to image的問題轉(zhuǎn)換成了一個概率問題應(yīng)該說是搜索問題,是一個可以follow的work,而且效果非常不錯。Co-mod-gan 的idea我在做PD-GAN的時候有過一個基本很像的,但沒做出來哈哈,Co-mod-gan這個idea是用z去調(diào)制masked image和我們這個是想反的,但是Co-mod-gan沒用l1-loss,我覺得是一個非常巧妙的idea。
虎牙公司成立于2016年8月,是一家以游戲直播為核心業(yè)務(wù)、致力于打造全球領(lǐng)先的直播平臺的技術(shù)驅(qū)動型內(nèi)容公司?;⒀拦驹谥辈デ把丶夹g(shù)上持續(xù)探索,目前已具備業(yè)內(nèi)領(lǐng)先的實時內(nèi)容創(chuàng)作和直播互動能力,包括了數(shù)字人、虛實互動、實時AI驅(qū)動、實時內(nèi)容理解、實時渲染等技術(shù),推出了超分超高清直播、賽事實時AI打點回放、游戲智能彈幕等產(chǎn)品功能。
如果覺得有用,就請分享到朋友圈吧!
公眾號后臺回復(fù)“79”獲取CVPR 2021:TransT 直播鏈接~

# 極市原創(chuàng)作者激勵計劃 #

