單圖像三維重建、2D到3D風格遷移和3D DeepDream

Date:2020-04-25

來源:單圖像三維重建、2D到3D風格遷移和3D DeepDream

項目網址:http://hiroharu-kato.com/projects_en/neural_renderer.html

代碼網址:https://github.com/hiroharu-kato/neural_renderer

論文名稱:Neural 3D Mesh Renderer(CVPR2018)

概述

對於二維圖像背後的三維世界建模,哪一種三維表示最合適?現在常見的表示方法有點雲、體素和網格,其中多邊形網格具有良好的緊緻性和幾何性質。但是使用神經網絡直接由多邊形網格生成圖像比較困難,因為光柵化的過程阻止了反向傳播。因此,作者提出了一個近似的梯度柵格化,使渲染集成到神經網絡。使用這個渲染器,可以執行帶有輪廓圖像監督的單圖像三維網格重建,並且該系統比現有的基於體素的方法更好。此外,作者還首次在2D監督下執行基於梯度的3D網格編輯操作,如2D到3D風格遷移和3D DeepDream。

簡介

從二維圖像理解三維世界是計算機視覺的基本問題之一。人類在大腦中使用視網膜上的圖像來模擬3D世界,機器也可以通過在2D圖像背後顯式地建模3D世界來更智能地工作。從3D世界生成圖像的過程叫做渲染,這在計算機視覺裡面非常重要。哪種3D表示方法是最適合建模3D世界?通常有體素、點雲和多邊形網格。體素難以生成高質量的體素,因為他們是在三維空間有規律地進行採樣,並且記憶效率比較低。點雲存在紋理和照明難以應用的問題,因為點雲沒有表面。多邊形網格由一系列頂點和表面組成,因此它們是可伸縮的,並且有面,進而作者採用了這種方式。

使用網格這種表示方式有兩個好處,第一個是表示三維模型時,需要的參數少,模型和數據集也相應比較小。第二個就是它適合幾何變換。對象的旋轉、平移和縮放由頂點上的簡單操作表示。這篇文章提出了兩個應用,如下圖所示。第一個是單圖像三維網格重建,第二個是基於梯度的3D網格編輯,包括風格遷移和DeepDream。

單圖像三維重建、2D到3D風格遷移和3D DeepDream

這篇論文主要有三個方面的貢獻:

1.提出了一個近似的梯度網格渲染,使渲染集成到神經網絡;

2.實現了從單圖像實現三維網格重建,並且沒有3D監督;

3.實現了基於梯度的三維網格編輯操作,例如風格遷移和3D DeepDream。

相關工作

1.神經網絡中的三維表示:三維表示有很多方法,比如前面提到的體素、點雲等,但是它們都有一定的不足,或者不適合三維重建。其中,多邊形網格具有存儲效率高、適用於幾何變換且具有曲面等特點,因此它實際上是計算機圖形學(CG)和計算機輔助設計(CAD)中的標準形式。然而,由於多邊形網格的數據結構是一個複雜的圖形,很難集成到神經網絡中。

2.單圖片三維重建:從圖像中估計三維結構是計算機視覺中的一個傳統問題,大多數方法使用真實的三維模型來學習2D到3D的映射函數,有些作品通過深度預測重建三維結構,有些則直接預測三維形狀。實際上,無需3D監督即可實現三維預測,只需要待重建物體的輪廓即可。

3.通過梯度下降編輯圖像:利用可微特徵提取器和損失函數,通過反向傳播和梯度下降,可以生成損失最小的圖像,DeepDream就是這樣一個例子。初始圖像被反覆更新,使得其圖像特徵的大小變得更大,通過這個過程,像狗和汽車這樣的物體逐漸出現在圖像中,圖像風格轉換可能是最熟悉和最實際的例子了,給定內容圖像和樣式圖像,將生成具有指定內容和樣式的圖像。

該渲染器提供圖像相對於網格頂點和紋理的漸變。因此,利用二維圖像的損失函數就可以實現網格的DeepDream和風格轉換。

渲染的近似梯度

1.渲染通道及其派生:一個3D網格由一組頂點和麵組成,每個頂點No是一個三維向量,表示這個頂點在3D物體空間中的座標,每個面F是由三個頂點所圍成的三角形。為了生成這個對象,物體空間中的頂點No被轉化為屏幕空間中的頂點Ns,這個頂點Ns是一個二維向量。

通過採樣從屏幕空間的頂點Ns和麵F生成圖像,這個過程叫做光柵化。下圖說明了單個圖像的光柵化:

單圖像三維重建、2D到3D風格遷移和3D DeepDream

Vi是面的一個頂點,Ij是像素Pj的顏色值。Xi現在的位置是x0。當Xi向右移動,面的邊與Pj的中心碰撞時,X1是Xi的位置。當Xi=X1時,Ij變成Iij

2.單面光柵化:這一部分主要講解了當像素點在裡面或者外面時,如何定義偏導函數。涉及到的公式比較多,後面將以視頻的方式呈現,如果想要提前瞭解的可以聯繫我。

3.多面光柵化:如果有多個面,光柵化器只在每個像素處繪製最前面的面,這與標準方法相同。在向後傳遞的過程中,首先檢查是否繪製了交叉點Iij、Iaij和Ibij,如果它們被不包括Vi的表面遮擋,則不流動梯度。

4.紋理:紋理可以映射到面上。在這個項目中,每個面都有自己的大小為St×St×St的紋理圖像。使用質心座標系確定紋理空間中對應於三角形{V1,V2,V3}上位置P的座標。換句話說,如果P表示為P=W1V1+W2V2+W3V3,則讓(w1,w2,w3)成為紋理空間中的相應座標。

5.照明:照明系統可以直接應用於網格上,在這項工作中,使用了簡單的環境光和無陰影的平行光。設la和ld分別為環境光和平行光的強度,nd為指示平行光方向的單位矢量,nj為面的法向矢量。然後,將表面像素Ilj的修改顏色定義為:

單圖像三維重建、2D到3D風格遷移和3D DeepDream

神經渲染器的應用

1.單圖像三維重建:基於體素的方法能夠直接生成一個3D模型,但是對於網格來說比較困難。因此,在這項工作中,作者不是從頭生成網格,而是將預定義網格變形以生成新網格。具體地說,使用一個有642個頂點的各向同性球體,並使用局部偏置向量Bi和全局偏置向量C將每個頂點Vi變成Vi+Bi+C的形式。分別定義輪廓損失Lsl和平滑度損失Lsm如下所示:

單圖像三維重建、2D到3D風格遷移和3D DeepDream

輪廓損失中的S表示的是二進制mask,平滑度損失中的θ表示相鄰兩個面的夾角度數,兩個損失函數分別保證了渲染後的效果和模型的光滑。

2.基於梯度的三維網格編輯:在這項工作中,基於其渲染圖像R來優化由頂點Vi、面Fi和紋理Ti組成的3D網格m,而不是生成圖像進行編輯。

2D到3D的風格遷移:在本節中,作者提出了一種將圖像Xs的樣式傳輸到網格Mc上的方法。對於二維圖像,風格遷移是通過同時最小化內容損失和風格損失來實現的。在這裡,作者把內容指定為三維網格Mc。為了使生成的網格形狀與Mc相似,假設兩個網格的頂點到面的關係相同,我們重新定義瞭如下內容損失函數:

單圖像三維重建、2D到3D風格遷移和3D DeepDream

作者使用了與2D應用中相同的風格損失,如下所示:

單圖像三維重建、2D到3D風格遷移和3D DeepDream

同時使用正則化器來降低噪聲,設P表示圖像R中所有相鄰像素對的一組顏色:

單圖像三維重建、2D到3D風格遷移和3D DeepDream

3D DeepDream:設f(x)為輸出圖像x特徵圖的函數。對於2D圖像來說,通過從x=x0開始的梯度下降最小化-|f(x)|2F來實現圖像x0的DeepDream。在類似的過程中,將-|f(R(m,φ))|2F相對於Vi和Ti最小化來實現DeepDream。

結果展示

單圖像三維重建、2D到3D風格遷移和3D DeepDream

從單個圖像重建三維網格。第一列:輸入圖像;第二至第四列:網格重建;第五至第七列:體素重建。

單圖像三維重建、2D到3D風格遷移和3D DeepDream

通過體素IoU測量重建精度,越高越好。可以看到基於網格的方法在13個類別中有10個類別的性能優於基於體素的方法。

單圖像三維重建、2D到3D風格遷移和3D DeepDream

網格在風格轉換和DeepDream中的初始狀態

單圖像三維重建、2D到3D風格遷移和3D DeepDream

2D到3D風格遷移。風格圖片有湯姆森5號(黃色日落)、巴別塔、尖叫和畢加索肖像

單圖像三維重建、2D到3D風格遷移和3D DeepDream

3D網格的DeepDream


分享到:


相關文章: