畢設作Mesh R-CNN的實現,在此翻譯一下原論文。原論文https://arxiv.org/pdf/1906.02739.pdf。網絡
摘要架構
二維感知的快速發展使得系統可以準確地檢測真實世界圖像中的物體。然而,這些系統在2D中進行預測,卻忽略了世界的3D結構。與此同時,三維形狀預測的進展主要集中在合成基準(synthetic benchmarks)和孤立目標(isolated objects)。咱們結合這兩個領域的進步。咱們提出了一個可以檢測真實世界圖像中的物體並生成一個給出該物體的完整三維形狀的三角形網格的系統。咱們稱之爲Mesh R-CNN,它用一個網格預測分支來加強Mask R-CNN,它輸出具備不一樣拓撲結構的網格,首先預測物體的粗體素表示,這些粗體素表示被轉換成網格,而後用一個圖卷積網絡對網格的頂點和邊進行細化。咱們在ShapeNet上驗證了咱們的網格預測分支,超越了以前關於單圖像形狀預測的工做。而後咱們在Pix3D上部署完整的Mesh R-CNN,在那裏咱們聯合檢測物體並預測它們的3D形狀。ide
在過去的幾年裏,二維物體識別取得了飛速的發展。咱們如今創建的系統能夠在雜亂的真實世界圖像中準確識別物體,用邊界框或者掩碼定位物體,預測2D關鍵點。儘管這些系統的表現使人印象深入,但它們忽略了一個重要的事實:世界和圖像中的目標是延伸到XY平面以外。函數
與此同時,三維形狀理解與深層網絡方面也取得了重大進展。各類各樣的網絡架構已經被開發出來3D形狀表示,例如voxels,point-clouds,meshes;這些表示法各有千秋。然而,這種多樣化和創造性的技術主要是在合成基準上開發的,例如ShapeNet,由獨立呈現的目標組成,比用於2D目標識別的天然圖像基準(ImageNet ,COCO)要簡單得多。學習
咱們認爲,將這些迄今爲止大相徑庭的研究方向結合起來的時機已經成熟。咱們應該努力構建這樣的系統,即(像當前的2D感知方法)可以在不受約束的真實世界圖像上運行,其中包含許多目標、遮擋和不一樣的照明條件,但(像當前的3D形狀預測方法)不會忽略世界豐富的3D結構。測試
在本文中,咱們朝着這個目標邁出了第一步。咱們利用最早進的二維感知和三維形狀預測方法來創建這樣的系統:輸入真實世界的RGB圖像,檢測圖像中的目標,並輸出一個類別標籤,分割掩碼,和一個三維三角形網格,給出每一個被檢測目標的完整三維形狀。this
咱們的方法,稱爲Mesh R-CNN,創建在2D識別的最早進的方法Mask R-CNN上,用網格預測分支加強它,輸出高分辨率的三角形網格。spa
咱們預測的網格必須可以捕獲各類真實物體的三維結構。所以,預測網格應該根據不一樣的視覺刺激動態地改變其複雜性、拓撲結構和幾何形狀。然而,先前利用深度網絡的網格預測工做因爲限定拓撲結構的網格模板而被迫變形[23,56,68]。如圖1所示,咱們經過利用多個3D形狀表示來克服這個限制:咱們首先預測粗體素化的目標表示,這些表示被轉換成網格並進行細化,以提供高度精確的網格預測。如圖2所示,這種混合方法是容許Mesh R-CNN輸出任意拓撲的網格,同時捕獲精細的目標結構。翻譯
圖1 圖2設計
咱們在兩個數據集上對咱們的方法進行基準測試。首先,咱們在ShapeNet[4]上評估咱們的網格預測分支,咱們的體素預測和網格細化的混合方法在很大程度上優於以前的工做。其次,咱們部署咱們完整的Mesh R-CNN在最近Pix3D數據集[59],該數據集將395個宜家傢俱模型與真實世界的圖像進行了匹配,這些圖像具備不一樣的場景、雜亂和遮擋。迄今爲止,Pix3D主要用於評估在ShapeNet上訓練的形狀預測模型,而ShapeNet使用完美剪裁,無遮擋的圖像片斷[40,59,72],或Pix3D模型的合成渲染圖像[75]。相比之下,咱們是第一個使用Mesh R-CNN在Pix3D上訓練系統的,該系統能夠聯合檢測全部類別的目標並估計其完整的3D形狀。
咱們的系統輸入一個RGB圖像並輸出一組檢測到的目標實例,每一個目標都有一個三角形網格。咱們的工做與最近在二維目標檢測和三維形狀預測方面的進展最直接相關。咱們還從其餘3D感知任務中得到了更普遍的靈感。
2D物體識別 二維目標識別的方法在每一個目標所預測的信息類型和整個系統架構上各不相同。目標檢測器輸出每一個目標的邊界框和類別標籤;Mask R-CNN 額外輸出實例分割掩碼。咱們的方法擴展了這一流水線的工做,以輸出每一個目標的一個完整的3D網格。
單一視圖形狀預測 最近的方法使用多樣的形狀表示法對單幅圖像進行三維重建。一些方法預測已知形狀的朝向或3D姿態。其餘方法預測新的三維形狀,如3D點集、patches 或 geometric primitives;另外一些使用深度網絡來建模符號距離函數(簡稱SDF,有興趣能夠查一下)。這些方法能夠靈活地表示覆雜的形狀,但依賴於後處理來提取水密網格輸出。
一些方法預測規則體素網格;然而直觀,縮放到高分辨率輸出須要複雜的八叉樹[49,61]或嵌套的形狀架構[48]。
其餘的直接輸出三角形網格,但被限制從固定的[55,56,68]或檢索的[50]網格模板變形,限制了他們能夠表示的拓撲。
咱們的方法使用了體素預測和網格變形的混合,使高分辨率的輸出形狀能夠靈活地表示任意拓撲。
一些方法在沒有3D標註的狀況下重建3D圖形[23, 25, 47, 67, 74]。這是一個重要的研究方向,但目前咱們只考慮徹底監督的狀況,由於咱們成功地對二維感知進行了強有力的監督。
多視圖形狀預測 在物體和場景的多視圖重建方面有一個普遍的研究方向,經典的雙目立體視覺到使用形狀先驗,和現代學習技術。在這項工做中,咱們專一於單圖像形狀重建。
3D輸入 咱們的方法輸入二維圖像,預測語義標籤和三維形狀。因爲深度傳感器的可用性愈來愈高,人們對從三維輸入(RGB-D圖像,點雲)中預測語義標籤的方法愈來愈感興趣。咱們預計,將3D輸入歸入咱們的方法能夠提升形狀預測的保真度(fidelity)。
數據集 二維感知的進步得益於大規模的註釋數據集如 ImageNet 和 COCO 。三維形狀預測數據集與二維形狀預測數據集相比存在較大的差距,主要緣由是三維形狀預測數據集難以採集。ShapeNet 是一個大型的CAD模型數據集,它能夠被渲染成合成圖像。宜家數據集將宜家目標的CAD模型和現實世界的圖像匹配;Pix3D 將這一思想擴展到更大的圖像和模型集。Pascal3D 將CAD模型與真實世界的圖像匹配,但因爲其訓練集和測試集共享相同的小模型集,所以不適用於形狀重構。KITTI 註釋戶外街景3D邊界框,但不提供形狀註釋。
咱們的目標是設計一個系統,輸入一張單一的圖像,檢測全部的目標,並輸出一個類別標籤,邊界框,分割掩碼和每個被檢測的目標的3D三角形網格。咱們的系統必須可以處理雜亂的現實世界的圖像,而且必須可以端到端地訓練。爲了適應現實世界各類複雜的目標,咱們的輸出網格不該該被限制到一個固定的拓撲。咱們經過結合最早進的2D感知和3D形狀預測來實現這些目標。
具體來講,咱們創建在 Mask R-CNN 上,一個最早進的2D感知系統。Mask R-CNN是一種端到端的基於區域的目標檢測器。它輸入一個RGB圖像併爲每一個檢測到的目標輸出一個邊界框、類別標籤和分割掩碼。圖像首先經過一個主幹網絡(e.g. ResNet-50-FPN [34]),接着是區域提議網絡(RPN),該RPN網絡給出了用目標分類和掩碼預測分支處理的目標建議。
Mask R-CNN的成功部分歸功於RoIAlign,它從圖像特徵中提取區域特徵,同時保持輸入圖像與最終預測分支中使用的特徵之間的對齊。咱們的目標是在預測三維形狀時保持類似的特徵對齊。咱們使用一種新的網格預測器來推斷三維形狀,該預測器包括一個體素分支和一個網格細分分支。體素分支首先估計對象的粗3D體素化,而後將其轉換爲初始三角形網格。而後網格細分分支使用一系列操做在網格邊緣上的圖卷積層來調整初始網格的頂點位置。
體素分支和網格細化分支與Mask R-CNN現有的box和mask分支是同源的。全部分支均採用與RPN建議相對應的圖像對齊的特性做爲輸入。將下面詳細描述的體素和網格損失添加到邊界框和掩碼損失後,對整個系統進行端到端的訓練。輸出是一組邊界框以及它們的預測目標得分、掩碼和三維形狀。咱們將系統稱爲Mesh R-CNN,如圖3所示。
圖3
咱們如今詳細描述咱們的網格預測器,包括體素分支和網格細化分支,以及它們的相關損失。
咱們的系統的核心是一個網格預測器,它接收到與一個目標的邊界框對齊的卷積特徵,並預測一個給出該目標完整3D形狀(full 3D shape)的三角形網格。與Mask R-CNN相似,在全部處理階段,咱們經過區域和針對於頂點的對齊操做(即RoIAlign 和 VertAlign)來維持輸入圖片與特徵圖之間的相關性。咱們的目標是捕獲一個圖像中全部目標的特定於實例的3D形狀。所以,每一個預測的網格必須具備特定於實例的拓撲(種類,頂點數,面,鏈接組件)和幾何(頂點位置)。
咱們經過展開一系列的形狀推斷操做來預測不一樣的網格拓撲。首先,體素分支對每一個目標的形狀進行自底向上的體素化預測,相似於Mask R-CNN的Mask分支。這些預測被轉換成網格,並經過網格細化頭進行調整,給出最終的預測網格。
對於每一個物體,網格預測器的輸出是一個三角形網格$T=(V,F)$。$V = {v_i∈R^3}$是一組頂點位置,$F⊆V×V×V$是一組三角形面。
體素分支預測一個體素佔用機率網格,給出每一個被探測目標的3D形狀。能夠把它看做是 Mask R-CNN 的mask預測分支的3D模擬:咱們不是預測$M×M$網格給出圖像平面上物體的形狀,而是預測$G×G×G$網格給出物體的完整三維形狀。
與Mask R-CNN同樣,咱們經過在RoIAlign生成的輸入特徵圖上應用一個小的全卷積網絡[38]來維持輸入特徵與預測體素之間的對應關係。該網絡生成一個帶有$G$通道的特徵圖,爲輸入中的每一個位置提供一個體素佔用分數列。
在3D中,保持圖像和咱們的預測之間的像素對應是很複雜的,由於當物體遠離時,它們會變得更小。如圖4所示,咱們經過使用相機的(已知的)固有矩陣來預測體素。
圖4
(預測體素在接收面的位置須要一個不規則形狀的體素網格。咱們經過在由攝像機(已知)固有矩陣$K$變換的空間中進行體素預測來實現這一效果。
應用$K^{−1}$將咱們的預測轉換回世界空間。結果在世界空間中造成了平截體形(frustum-shaped)體素。)
CuBify: Voxel to Mesh 體素分支產生一個三維網格的佔用機率,給出一個物體的粗糙形狀。爲了預測更精細的3D形狀,咱們但願將這些體素預測轉換爲一個三角形網格,該三角形網格能夠傳遞給網格細分分支(mesh refinement branch)。
咱們用一種叫作cubify的操做來填補這個空白。它輸入體素佔用機率和體素佔用的二值化閾值。每一個被佔據的體素被一個長方體三角形網格替換,它有8個頂點,18條邊和12個面。合併相鄰已佔用體素之間的共享頂點和邊,並消除共享的內部面。這樣就造成了一個水密網格,其拓撲結構依賴於體素預測。
Cubify必須是高效和批量的。這不是小事,咱們在附錄中提供了實現這一點的技術實現細節。或者,移動立方體(marching cubes)[39]能夠從體素網格中提取等值面,可是要複雜得多。
Voxel Loss 體素分支被訓練來最小化預測體素佔用機率和真實體素佔用之間的二元交叉熵。
來自體素分支的cubified網格只提供了一個粗糙的3D形狀,它不能精確地建模椅子腿這樣的精細結構。網格細分分支處理這個初始的cubified網格,用一系列細分階段細化其頂點位置。與Pixel2Mesh[68]相似,每一個細化階段包括三個操做:頂點對齊,提取頂點的圖像特徵;圖卷積層,沿網格邊緣傳播信息;頂點細化,更新頂點位置。網絡的每一層爲每一個網格頂點維護一個三維位置$v_i$和一個特徵向量$f_i$。
頂點對齊(Vertex Alignment) 爲每一個網格頂點生成與圖像對齊的特徵向量。咱們使用相機的固有矩陣將每一個頂點投影到圖像平面上。給定一個特徵圖,咱們在每一個投影頂點位置計算一個雙線性插值圖像特徵。在網格細分分支的第一階段,VertAlign輸出每一個頂點的初始特徵向量。在隨後的階段中,VertAlign輸出的是與前一階段的頂點特徵鏈接起來的特徵向量。
圖卷積層(Graph Convolution) [28]沿着網格邊緣傳播信息。給定輸入頂點特徵,$f_i$它計算更新的特徵$f_i'=ReLU(W_0 f_i+\sum\nolimits_{j\in N(i)}W_1 f_j)$,其中$N(i)$給出網格中第i個頂點的鄰居,$W_0$和$W_1$是學習過的權值矩陣。網格細分分支的每一個階段都使用幾個圖卷積層來在局部網格區域上聚合信息。
頂點細化(Vertex Refinement) 計算更新的頂點位置$v_i'=v_i+tanh(W_{vert}[f_i;v_i])$,其中$W_{vert}$是一個學習過的權值矩陣。這使得保持其拓撲固定的同時,更新網格的幾何形狀。網格細分分支的每一個階段都以頂點細分結束,生成一箇中間網格輸出,在下一階段進一步細分。
Mesh Loss 定義在三角形網格上本地操做的損失是具備挑戰性的,因此咱們使用定義在有限點集上的損失函數。咱們經過密集採樣點雲的表面來表示一個網格。所以,點雲損失近似於形狀上的損失。與[56]相似,咱們使用可微分網格採樣從網格表面均勻地採樣點(及其法向量)。爲此,咱們實現了一種高效的批量採樣器;詳見附錄。咱們使用這個操做從ground-truth網格中採樣點雲$P^{gt}$,從咱們的模型中每一個中間網格預測中採樣點雲$P^i$。
給定兩個點雲$P$,$Q$和法向量,令$\Lambda_{P,Q}=\{(p,arg min_q||p-q||):p\in P\}$爲一組數據對$(p,q)$集,其中 $q$ 是 $Q$ 中 $p$ 的最近鄰居,令 $u_p$ 是點 $p$ 的法向量。點雲$P$與$Q$之間的倒角距離爲
$L_{cham}(P,Q)=|P|^{-1}\sum\limits_{(p,q)\in \Lambda_{P,Q}}||p-q||^2+|Q|^{-1}\sum\limits_{(q,p)\in \Lambda_{Q,P}}||q-p||^2$
而(絕對)法向距離爲
$L_{norm}(P,Q)=-|P|^{-1}\sum\limits_{(p,q)\in \Lambda_{P,Q}}|u_p\cdot u_q|-|Q|^{-1}\sum\limits_{(q,p)\in \Lambda_{Q,P}}|u_q\cdot u_p|$
倒角和法線距離懲罰兩個點雲之間的不匹配位置和法線,可是僅僅最小化這些距離就會致使退化網格(見圖5所示 )。高質量的網格預測須要額外的形狀調整器:爲此(To this end),咱們使用邊緣損失 $L_{edge}(V,E)=\frac{1}{|E|}\sum\nolimits_{(v,v')\in E}||v-v'||^2$,其中 $E\subseteq V\times V$ 是預測網格的邊。另外,拉普拉斯損失[7]也施加平滑約束。
第i級的網格損失爲 $L_{charm}(P^i,P^{gt})$,$L_{norm}(P^i,P^{gt})$,$L_{edge}(V,E)$ 的加權和。網格細分分支被訓練來最小化全部細分階段的平均損失。