〖3D激光點雲〗深度學習點雲知識!

激光雷達點雲bin文件讀取和顯示!

首先聲明本文章內容主要參考B站:

一. 背景知識

1.1. 視覺任務

深度學習在視覺感知任務中大放異彩。

一些自動駕駛的公司在視覺感知領域取得的不菲成績,例如下面的交通標識牌檢測、車道線檢測、人的bounding box檢測、人的關鍵點檢測、車輛的檢測、車輛3D bounding box的檢測、車輛的距離、和速度的估計等等。

1.2. 激光雷達(Lidar)

左下方圖是64線激光雷達以及它的數據渲染的圖,可以看到一個一個的圓,有一些不同的顏色,分別表示它們反射的強度。右邊是雷達的工作照,工作中它在不停的旋轉,爲什麼激光雷達工作中不停的旋轉,爲什麼數據中有一個一個的圓呢?這個還要介紹一下激光雷達的結構講起。

【激光雷達與攝像頭,未來哪種會成爲自動駕駛的核心傳感器呢?】 激光雷達數據簡單但精確,適合做幾何感知。視覺數據豐富但多變,適合做語義感知。在高級別自動駕駛裏,無論是從優勢互補還是傳感器冗餘的角度,二者缺一不可。

目前市面上能買到的激光雷達大概分爲2類,一種是機械式Lidar,一種是掃描式Lidar。 下面簡要介紹。

  • 下圖爲機械式Lidar的拆解圖
  • 下圖爲旋轉式Lidar的效果,不容的顏色表示激光雷達不同的反射強度,反射強度主要取決於被掃描物體的材質。例如白色的車道線反射強度比較高。
  • MEMS式激光雷達。

1.3. Lidar數據的特點

  • ii 表示反射強度。之前大概在KITTI數據集上面做了一個統計,把點雲經過標定後,投影到圖像上大概之後7%左右的像素纔有雷達數據,這表明激光點雲特別的稀疏。而且點雲是無序的,這裏 NN 個點有 NN 的階乘個組合方式。

二. 深度學習處理點雲的方法

2.1. 幾類方法

深度學習處理點雲數據方法:

  • Pixel-based: (點投影到平面上,用2D CNN處理)。
  • Voxel-Based: 類似於圖像一樣,圖像是二維的把其進行柵格化,變成一個一個的像素。三維的我們也可以進行柵格化變成一個一個的體素(就是一個個小的立方體)。採用3D CNN進行處理。
  • Tree-Based
  • Point-Based: 更直接的方法,直接對點進行操作。輸入 n×3n×3 的向量直接送入網絡中,n×3n×3 的向量直接送入網路會有什麼問題呢?我們知道深度學習中的方法要求數據的維度儘可能一樣,要是不一樣可能很難處理。比如做 batchbatch 處理的過程中,有可能一次送入 100100 張圖像,有些網絡可能對輸入的大小不敏感,但是在過批處理的過程中一般要求圖像數量是一樣大的。這裏我們在處理點雲數據也是一樣的,如果我當前這個點雲有 100100 個點,下一個點雲有 10001000 個點,那麼不同個數的點送入網絡中,如何保證出來的東西是一樣的呢?此外剛纔提到的,這 100100 個點有 100100 中排列組合方式,如何保證網絡對這些點的順序不敏感呢?
  • 這裏重點介紹一下針對這 22 個問題(點的無序,點的維度(個數)不一樣),PointNet是如何解決的。 基於這個思路可以設計更多更多的處理點雲的網絡。首先對於無序的這個問題的解決: 數學裏有一類函數叫做對稱函數,意思就是一串數據輸入一個結果,如果輸出的這個結果對輸入的屬於順序不敏感(比如加法是一個對稱函數)。Deeplearning中maxpooling是一個對稱函數,不管裏面的順序如何,我只要最大的。下面網絡結構圖中 n×3n×3 的輸入一直到 n×1024n×1024 的輸出,隨後通過一個maxpooling變成了1024,這個maxpooling幹了一個什麼事情?就是在特徵維度維度上做了一個pooling,把這個特徵歸一化到了一樣1024維,而不取決於你輸入的這個 nn 的多少,所以maxpooling這裏就是起到一個對稱函數的作用,它把點的無序和點的個數問題都解決了
  • TNET是解決了點雲旋轉的問題,使用的maxpooling作爲對稱函數解決了點雲的無序性。最後得到的global feature 就代表這個點雲具有的特徵,然後可以利用這些特徵做一些分類操作之類。看下圖:如果把全局的特徵放在這,把 n×64n×64,它是每個點的 6464 維特徵,我把每個點的64維特徵再加上global feature,我們可以得到每個點既有local的特徵,又有全局的特徵global feature,所以它考慮了局部和全局的關係。這樣去做一個應用的話,我們可以對 nn 進行一個分類,可能分出來 mm 類,逐點分類的過程也就是語義的點的分割的方法。
  • 看下圖:基於PointNet可以做3類事情,我可以用這個點的全局特徵告訴您這個點是什麼物體。我們也可以利用這些點去做一個逐點的分類,每個單獨的點是屬於哪一類的。這裏如果我們是針對所有點的逐點分類,那就是逐點的segmentation,如果是針對部分點的分類,類別的個數小於點的個數,那就是part segmentation(也就是把一個物體的幾個部分單獨分出來)。
  • 還有一篇可以做local和global的集大成者的文章,把前面這些文章都融合到一起的,這篇文章是VoxelNet。輸入是一堆點雲,體素分割的方法,把三維的世界分割成一個一個的小體素。這個體素根據不同的任務,比如做車輛檢測,這個體素可以分的大一點,我做行人檢測,這個體素可以分的小一點。
  • 對於每一個體素格,有好多個點。對於每個點可以用類似於PointNet的方式提取全局特徵global features和局部特徵(可以看上面PointNet結構圖)local features。實際上它把逐點的特徵和整個點雲的特徵連接在一起,然後經過逐層的抽樣,抽樣出一個128維的一個體素的特徵。因爲我們這裏的體素本身就是3維的了,每個體素上又有一個高階的向量,所以最後形成一個4維的Tensor。這裏注意不是每個體素都有點的,所以它是一個稀疏的,針對這個問題的話,我們又進行了一些卷積的操作,把稀疏的Tensor逐步的降低緯度,降低到原圖大概1/4的時候,我們做一個RPN,從裏面這些點以及點的特徵裏面去抽取出3D box 的proposals,這個proposals剛纔在介紹第2篇文章的時候基本上已經介紹了,這篇文章其實是把所有文章的idea結合在一起。

2.2. 點雲數據(database)

  • 以上介紹的都是深度學習中處理點雲的方法,做深度學習離不來數據。以上介紹的幾種方法數據源基本來自以下方法,
  • 數據仿真
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章