當前位置:
首頁 > 知識 > 擴展 | 3D 計算機視覺簡介

擴展 | 3D 計算機視覺簡介


翻譯 | 江舟     校對 | Lamaric     整理 | MY  


來源 | AI研習社

隨著 AR / VR 技術和自動駕駛汽車技術的發展,3D 視覺問題變得越來越重要,它提供了比 2D 更豐富的信息。本文將介紹兩種用於 3D 場景分析的基本深度學習模型:VoxNet 和 PointNet。


 

 

3D 圖像介紹


3D 圖像會多包含一個維度,即深度。有兩種最廣泛使用的 3D 格式:RGB-D 和點雲。


RGB-D



RGB-D 格式圖像就像一堆單值圖像,每個像素都有四個屬性,紅色,綠色,藍色和深度。


在普通的基於像素的圖像中,我們可以通過(x,y)坐標定位任何像素,然後就可以分別獲得三種顏色屬性(R,G,B)。而在 RGB-D 圖像中,每個(x,y)坐標將對應於四個屬性(深度,R,G,B)。RGB-D 和點雲之間的唯一區別在於,在點雲中,(x,y)坐標反映了其在現實世界中的實際值,而不是簡單的整數值。

點雲



網上的點雲樣例


點雲可以由 RGB-D 圖像構建。如果你有已掃描的 RGB-D 的圖像,並且還知道掃描相機的內在參數,那麼你可以以 RGB-D 圖像創建點雲,方法是通過使用相機內在參數計算真實世界的點(x,y)。這個過程被稱為相機校準。因此,到目前為止,你知道了 RGB-D 圖像是網格對齊的圖像,而點雲是更稀疏的結構。


3D 視覺


就像 2D 問題一樣,我們想要檢測並識別 3D 掃描圖像中的所有對象。但與 2D 圖像不同的是,為了充分使用 CNNs 方法的數據,它的最佳輸入格式該是什麼就成了一個需要解決的問題。


體素化網格


體素化網格是將 3D 對象擬合到網格中的最直觀的方法,為了使其看起來像是像素圖像,我們在這裡將其稱為體素。在這種情況下,3D 圖像由(x,y,z)坐標描述,它看起來就會像樂高一樣。



VoxNet 架構來自「VoxNet:一個用於實時物體識別的 3D 卷積神經網路」,作者:Daniel Maturana 和 Sebastian Scherer。


VoxNet 是一種基於深度學習的框架,它使用佔據網格方法對 3D 點雲進行分類,VoxNet 在分類問題上非常有效。


例如,如果我們將點雲擬合到 32x32x32 的體素化網格,我們可以構建一個全部填充為零的 32x32x32 的數組。然後縮放點雲來計算每個體素內的有多少個點。


在獲得體素化網格後,我們接下來執行 3D 卷積計算,這有效地在基於體素的圖像上滑動立方體(譯者註: 3D 卷積是通過堆疊多個連續的幀組成一個立方體,然後在立方體中運用 3D 卷積核)。

我們將掃描擴展到相同的基礎。我們設想如果我們進行大規模掃描,每個物體將只是一個會導致一些問題的體素。而且,由於那些上採樣操作,不容易確定每個體素的 RGB 顏色。


對於簡單的數據集(具有相似的點數,相似的掃描比例),VoxNet 可能是一個簡單而效果好的方法。但如果遇到複雜的數據集,它可能並不是一個好的選擇。



雖然基於體素化的方法可以在分類問題上展現很好地工作效率,但它為上採樣操作犧牲了大量信息。因此,我們希望能夠在點上來訓練有更好效果的網路。

第一個問題是點的順序,我們知道點雲對點的順序是不變的。



點雲文件可以在不更改實際渲染的情況下被更改。


處理此問題(PointNet)有三種策略:




  1. 對點進行排序。



  2. 輸入為 RNN 的序列,此序列通過增加各種排列來增大。



  3. 使用對稱函數來聚合來自每個點的信息。在此對稱函數中,+ 或 * 是對稱的二元函數。


在 PointNet 的論文中,文中說第一種方法會產生一定的計算強度,第二種方法則不夠健壯。因此,在這裡將使用最大池和對稱函數。而最大池是這裡的主要操作。


整個框架如下文所述,你也可以去 GitHub 參見完整的實現過程。



PointNet 的架構中,mlp 代表多層感知器。T-Net 是一個微小的變換網路。


通常,它是卷積、完全連接和最大池化層的一種靈活使用方式。我發現一開始可能會很難理解這些,因此我們可以直接看代碼去更好地理解。


首先,我將給出一個示例點雲,它每行是(x,y,z,r,g,b)。其中每行代表一個點。假設我們在這個例子中有 n 個點。



注意:PointNet 的實際輸入使用標準化 RGB 色域,基點的 x,y 在空間的中心是對齊的。為了不與浮點數之間發生混亂,在這裡我沒有這樣做。


 

 

PointNet 中的分類


第一步操作是進行 2d 卷積,其內核大小為(1,6),它用來聚合一個點的相關信息(x,y,z,r,g,b;總共六個)。此處的輸出應為(n,1,64)。



注意:每層都有批量標準化,我將其刪除以簡化演示過程。此外,原始 PointNet 使用 9 個特徵作為輸入(x,y,z,r,g,b,normalized_x,normalized_y,normalized_z)。


這裡是幾個 1x1 卷積運算以逐個像素點的方式檢測這些特徵。因此,我們將在這之後產生一個(n,1,1024)的數組。



接下來是最重要的步驟,最大池會選擇所有點中最顯著的特徵。這就是函數對點的順序不變的原因。由於我們在先前的圖層中有 1024 個過濾器,因此該圖層將輸出 1024 個特徵。



之後,所有特徵將通過完全連接層被完全連接。



注意:這裡的批量大小是 1。PointNet 的輸入是一個掃描的場景,此場景將被分成小批量(每批有 4096 點)。PointNet 將執行特徵檢測批處理程序。


到目前為止,如果你再添加一個完全連接的圖層來輸出類標籤的數量,則可以回到之前的圖,而這就是 PointNet 在點雲上進行分類的方式。簡單地可以分為以下三點:




  1. 匯總每個點信息。



  2. 找到每個點最顯著的特徵。



  3. 然後完全連接來分類。




 

 

PointNet 中的語義分割


分割可看作分類模型不斷發展的結果。不過,我們希望網路能夠忽略點的順序。因此,我們將每個點特徵與全局特徵連接起來,讓每個點都知道上下文。



然後我們將使用幾個 1x1 卷積內核來提取新的逐點特徵。



然後我們就能做出逐點預測。例如,每個點有 13 個類。



原文鏈接:


https://medium.com/@jianshi_94445/an-introduction-towards-3d-computer-vision-71be8ce11956


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |