點雲深度學習的3D場景理解

轉載請註明本文連接:html

http://www.javashuo.com/article/p-ekzzsmet-ge.htmlgit

PointNet: Deep Learning on Point Sets for 3D Classification and Segmentationgithub

PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space網絡

Paper reading:Frustum PointNets for 3D Object Detection from RGB-D Data架構

-------------------------------------------------------------------------------------------------------------------------------------框架

前言: 函數

  近期剛剛開始調研3D場景理解,下文是對point,point net++,frustum point 的一些整理和總結,內容包括如何將點雲進行深度學習,如何設計新型的網絡架構,如何將架構應用的3D場景理解。工具

背景:性能

  進來不少3D的應用在興起,3D傳感器在進步,隨着虛擬網絡的發輾轉到物理實際中的應用,好比(ADAS,AR,MR)自動駕駛中須要理解 汽車行人交通標識,同時也須要理解三維物體的狀態靜至,移動。學習

   

  AR頭戴顯示器有深度傳感器,也須要作三維場景的理解。例如把todo_list合適的放到冰箱的門上。

  須要一種數據驅動的方式去理解和處理三維數據,3D deep learning

  三維表達的形式:

  

  三維數據自己有必定的複雜性,2D圖像能夠輕易的表示成矩陣,3D表達形式由應用驅動的:

  point cloud ,深度傳感器掃描獲得的深度數據,點雲

  Mesh,三角面片在計算機圖形學中渲染和建模話會頗有用。

  Volumetric,將空間劃分紅三維網格,柵格化。

  Multi-View,用多個角度的圖片表示物體。

  Point c'loud 是一種很是適合於3D場景理解的數據,緣由是:

  一、點雲是很是接近原始傳感器的數據集,激光雷達掃描以後的直接就是點雲,深度傳感器(深度圖像)只不過是一個局部的點雲,原始的數據能夠作端到端的深度學習,挖掘原始數據中的模式

  二、點雲在表達形式上是比較簡單的,一組點。相比較來講  

    Mesh須要選擇面片類型和如何鏈接

    網格須要選擇多大的網格,分辨率。

    圖像的選擇,須要選擇拍攝的角度,可是表達是不全面的。

  最近纔有一些方法研究直接在點雲上進行特徵學習,以前的大部分工做都是集中在手工設計點雲數據的:

  

  這些特徵都是針對特定任務,有不一樣的假設,新的任務很難優化特徵。 但願用深度學習特徵學習去解 決數據的問題。

 

  可是點雲數據是一種不規則的數據,在空間上和數量上能夠任意分佈,以前的研究者在點雲上會先把它轉化成一個規則的數據,好比柵格讓其均勻分佈,而後再用3D-cnn 來處理柵格數據:

  

  缺點:3D cnn 複雜度至關的高,三次方的增加,因此分辨率不高30*30*30  相比圖像是很低的,帶來了量化的噪聲錯誤,限制識別的錯誤

  一、可是若是考慮不計複雜度的柵格,會致使大量的柵格都是空白,智能掃描到表面,內部都是空白的。因此柵格並非對3D點雲很好的一種表達方式

  二、有人考慮過,用3D點雲數據投影到2D平面上用2D cnn 進行訓練,這樣會損失3D的信息。 還要決定的投影的角度

  三、點雲中提取手工的特徵,再接FC,這麼作有很大的侷限性

  

  咱們可否直接用一種在點雲上學習的方法:統一的框架

    

 

   

網絡設計:

網絡設計有兩種點雲的特色決定的:

  一、點雲是數據的表達點的集合,對點的順序不敏感

  

 

  D維的特徵,最簡單的D=3,還能夠有其餘顏色,法向

  點集是無序的,能夠作變化,背後的表明的是同一套點集,置換不變性。 模型須要對N!網絡須要作到置換的不變性。

  系統化的解決方案,對稱函數,具備置換不變性。神經網絡本質是一個函數

  

 

   如何用神經網絡構建對稱函數:最簡單的例子:

  

   

   

  雖然是置換不變的,可是這種方式只計算了最遠點的邊界,損失了不少有意義的幾何信息,如何解決呢?

  

  與其說直接作對稱性能夠先把每一個點映射到高維空間,在高維空間中作對稱性的操做,高維空間能夠是一個冗餘的,在max操做中經過冗餘能夠避免信息的丟失,能夠保留足夠的點雲信息,再經過一個網絡r來進一步  消化信息獲得點雲的特徵。這就是函數hgγ的組合。每一個點都作h低位到高位的映射,G是對稱的那麼整個結構就都是對稱的。下圖就是原始的pointnet結構。

實際操做過程當中:

 

   在實際執行過程當中

   能夠用MLP多層感知器(Multilayer perceptron) 來描述h和γ,g max polling 效果最好。

  接下來有個頗有意思的理論問題,用神經網絡構建的pointnet中,保證了對稱

  那麼在全部的對稱函數中,point(vanilla)是什麼樣的位置呢?什麼樣的函數pointnet 能表明,什麼函數不能表明

  能夠獲得理論:

  

 

   pointnet 能夠任意的逼近在集合上的對稱函數,只要是對稱函數是在hausdorff空間是連續的,那麼就能夠經過任意的增長神經網絡的寬度深度,來逼近這個函數

  

  上面解釋了若是經過對稱函數,來讓點雲輸入順序的不變

  二、如何來應對輸入點雲的幾何(視角)變換,好比一輛車在不一樣的角度點雲的xyz都是不一樣的 但表明的都是扯,咱們但願網絡也能應對視角的變換

  若是spatial transform network

  

  

   增長了一個基於數據自己的變換函數模塊,n個點(x,y,z)  t-net 生成變換參數,以後的網絡處理變換以後的點,目標是經過總體優化變換網絡和後面的網絡使得變換函數對齊輸入,若是對齊了,不一樣視角的問題就能夠簡化。

  

 

  實際中點雲的變化很簡單,不像圖片作變換須要作插值,作矩陣乘法就能夠。好比對於一個3*3的矩陣僅僅是一個正交變換,計算容易實現簡單

  咱們能夠推廣這個操做,不只僅在輸入做此變換,還能夠在中間作 N個點 K維特徵,用另外網絡生成k*k 來作特徵空間的變化,生成另外一組特徵

  

  高維優化過程當中,難度高,須要加正則化,好比但願矩陣更加接近正交矩陣

  那麼這些變換的網絡如何和pointnet結合起來:獲得分類和分割網絡

   首先輸入一個n*3的矩陣,先作一個輸入的矩陣變換,T-net 變成一個3*3的矩陣,而後經過mlp把每一個點投射到64高維空間,在作一個高維空間的變換,造成一個更加歸一化的64維矩陣,繼續作MLP將64維映射到1024維,在1024中能夠作對稱性的操做,就是maxpooling,獲得globle fearue,1024維度 ,經過級聯的全鏈接網絡生成k (分類)

 

    

   

  若是是分割呢?

  能夠定以成對每一個點的分類問題,經過全局座標是無法對每一個點進行分割的,簡單有效的作法是,將局部單個點的特徵和全局的座標結合起來,實現分割的功能

  最簡單的作法是將全局特徵重複N遍,和每個原來單個點的特徵鏈接在一塊兒,至關於單個點在全局特徵中進行了一次檢索,檢索到在哪一個位置就是哪一個類別,對鏈接起來的特徵進行MLP的變換,最後輸出m類至關於m個score:(將單個點和整體的特徵鏈接到一塊兒,斷定在整體中的位置,來決定是哪一個分類)

  

結果:

  

   分類,pointnet 當時最先 點雲界

   

  部件分割和完整的分割。shapenetpart

  

   2D-3D-S

   

   仍是個很是輕量級的網絡:對比2D圖片和3D柵格

  

  適用於移動設備:

  

 

 

   同時對數據的丟失也是很是的魯棒,對比於voxelnet 的對比

  

 

   在modelnet 40 的分類問題上,在丟失50%的點的狀況下,pointnet僅僅收到2%的影響,與之想一想比Voxnet3D精度相差了20%

  爲何這麼魯棒呢?

  第一行是原始的,咱們想知道哪些點對全局特徵作出了貢獻,maxpooling有些點embedded的特徵很是小,在通過maxpooling以後對全局特徵沒有任何的貢獻,哪些點是剩下來的勝利者

  Critial points  (Maxpooling 以後存活下來的大特徵點)

  

 

   只要輪廓和骨骼獲得保存,就能把形狀分類正確。

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

PointNet++

  pointnet 缺陷:對比3Dcnn

    3D和2D很像,只是變成了3D卷積,多級學習 不斷抽象特徵,平移不變性。

  

 

  pointnet 一開始對每一個點作MLP低維到高維的映射,把全部點映射到高維的特徵經過Max pooling 結合到一塊兒

  本質上來講,要麼對一個點作操做,要麼對全部點作操做,實際上沒有局部的概念(loal context) ,比較難對精細的特徵作學習,在分割上有侷限性

二、沒有local context 在平移不變性上也有侷限性。(世界座標系和局部座標系

  (xyz)對點雲數據作平移 全部的數據都不同了,致使全部的特徵,全局特徵都不同了,分類也不同

  對於單個的物體還好,能夠將其平移到座標系的中心,把他的大小歸一化到一個球中,在一個場景中有多個物體很差辦,對哪一個物體作歸一化呢?

  -------------------------

  -------------------------

  

 

   pointnet ++ 核心的想法在局部區域重複性的迭代使用pointnet在小區域使用pointnet 生成新的點,新的點定義新的小區域多級的特徵學習,應爲是在區域中,咱們能夠用局部座標系,能夠實現平移的不變性,同時在小區域中仍是使用的PN,對點的順序是無關的,保證置換不變性

具體的例子: 多級的點雲學習:

 

 

 

  2D卡通的例子,世界座標系,先找到一個局部的區域,由於不想受總體平移的影響

  一、能夠先把局部的點轉換到一個局部座標系中  

  二、在局部中使用pointnet 來提取特徵

  三、提取完特徵之後會獲得一個新的點,F (x,y )在整個點雲中的位置 在歐氏空間中,還有個向量特徵F(高緯的特徵空間),表明小區域的幾何形狀,

    

  若是重複這個操做就會獲得一組新的點,在數量上少於原先的點,可是新的每一個點表明了它周圍一個區域的幾何特色

   

  點集的簡化: layer:選擇小區域,提取小區域提取局部座標系,應用point net聯合而成。

  咱們能夠重複set abstraction的過程,實現一個多級的網絡,下圖展現兩級, 使得點的數量愈來愈少,可是每一個點表明的區域以及感覺野,愈來愈大,這個cnn的概念很相似,,最後把點作一個pooling 獲得globle feature,用來作分類。

  

  咱們能夠將最後的點從新上卷積的方式傳回原來的點上,既能夠經過3D的插值,能夠經過另外一種經過PN的方式回傳。

  

  在多級網絡中有一個頗有意思的問題,如何選擇局部區域的大小,相較而言就是怎麼選擇卷積核的大小寬度,若是選擇pointnet 做用區域的球的半徑?

  在卷積神經網絡中大量應用小的kernal(VGG 3*3*3),在pointcloud中是否同樣呢?不必定。 

  由於pointnet 常見的採樣率的不均勻,好比有個depth camera 採到的圖像,近的點很是密集,遠的點很是稀疏,在密的地方沒有問題,在稀疏的會有問題,好比極端的狀況,只有一個點,這樣學到的特徵會很是的不穩定,咱們因該避免。

  爲了量化這個問題,有個控制變量的實驗,在1024上訓練,減小點的數量至關於減小點的密度,不均勻的減小,

  在剛開始1024點的時候point net ++ 更增強大,獲得更高的精確度,應爲它是在小區域上,隨着密度的降低,性能收到了極大的影響,在小於500個點之後性能低於pointnet

  

  

  結論:在pointcloud 中 若是局部的kernel 操做過小的話,會影響性能被採樣率不均勻。

  針對於這個問題,咱們但願設計一個神經網絡來智能學習,如何綜合不一樣區域大小的特徵,獲得一個魯棒的學習層

  但願在密集的地方相信這個特徵,稀疏的地方不相信這個特徵,而去看更大的區域。(MSG/MRG)

   

 

  

 

  比較簡單的作法是設計一個Multi-scale :  在這個2D的例子中 將不一樣半徑的區域 ,聯合在一塊兒。有點像inception 中的結構,

  但不同的是,在訓練過程當中隨機的對輸入的dropout, 迫使網絡學習若何結合不一樣的尺度應對損失的數據的特徵。

  另一種方式不是在同一級中,而是在不一樣網絡集中綜合,它有個好處,能夠節省計算,在下一級的特徵已經計算好了,只須要把它池化拿來用就好了。 而在mutile scale中須要對不一樣尺度分別計算。

  

  發現加了MRG和MSG中,丟失數據後魯棒性能好不少。丟失75%的點 分類都不會受到影響。

  下圖是在scanenet 上對場景分割作評估:

  

 

   pointnet ++ 大幅提升了場景分割性能,由於多級的結構,使得他對局部的特徵更好的學習,同時還有平移不變性的特色。同時多級分割稍稍提高了性能。

  若是是局部點雲的分割:單個角度,局部點雲,多級結構對採樣率更魯棒的MSG大幅提高了partial scan的性能。

  

 

 

   另外一個POINT ++很是好的性能是  不侷限於2D或者3D歐式空間,能夠拓展到任意的測度空間,只要有個定義好的距離函數,下面展現對可變性物體,有機物提分割的數據集

  好比分類:AB 屬於幾何外形類似,可是屬於不一樣的類別,AC反之。

  不是想依靠XYZ,想依靠物體表面形狀的變化。

  

  上面網絡結構、設計原理

 ----------------------------------------------------------------------------------------------------------------------------------------------

   PN在三維場景理解中的應用:

  點雲支持咱們探索全新的解決方案,基於3D數據的解決方案

   

   側重前者,3D場流估計能夠跳過,

  

  上面是在圖片中的表達

  下面是在點雲中可視化的例子

  以前的工做是怎麼處理三維物體的呢?

  

 

  很大一套工做是基於,

  一、先在三維空間中作region proposal

     基於點雲投影到圖片上(鳥瞰圖),在圖片中proposal 三維的box

    也能夠是3D的cnn來作,

  二、propos完之 後能夠把2D和3D的feature 結合到proposal中,作一個分類。

  缺點是:三維搜索空間很是大,計算量也很是大

  並且在3D中proposal 點雲的分辨率很是有限,不少時候很難發現比較小的物體。

  

  另一套思路是基於圖片的,我想經過RGB的圖片估計3D的box,依賴於對物體大小的先驗知識,很難精確的估計物體的大小和位置

  另外也能夠基於depth image。對其領域的定義有不少侷限,好比兩個點在空間中距離很遠,可是投影以後的距離會很是近。

   因此在圖片的表達形式下,2D的cnn收到了很大的侷限。很難精確的估計物體的深度和大小

  

 

  咱們的設計思路 但願結合2D和3D的優勢,針對與RGB-D 的輸入 

      先在RGB圖片上用一個2Ddector 獲得一個2D的檢測框,由於咱們知道camera intrases(投影角度,投影點),咱們能夠有2D的區域(逆投影)生成一個3D的視錐frustum

      接下來對物體的搜索就能夠在視錐內進行搜索,咱們能夠將其轉化成在3D點雲中搜索的問題

    好處有了兩個:

      一、利用2D的detector 來縮小搜索的範圍,原本須要在整個3D空間中,由於有2Ddector的幫忙,能夠在視錐的範圍內搜索,大幅減小了搜索的計算量和複雜度

       二、在視錐內能夠針對於點雲作操做,利用點雲幾何的精確性。利用3D,deeplearning 的工具(pointnet)直接處理點雲的數據,獲得很是精確的3DBB

    

    

     

 

     基於視錐的3D物體檢測,有兩個挑戰:

      一、前景的遮擋和後景的干擾,基於層級的方法在這都會敗下陣來

      二、點的範圍很大,很難用3D cnn 網格化柵格化。

 

    解決方案用pointnets來解決這個問題,(基於3D點雲數據的方法):

    

 

    一、利用一個2Ddection 將物體檢測出來,根據照相機的投影角度參數,能夠把2D box 變換到 3d 視錐的範圍,在視錐內搜索車在哪裏(Frustum Proposal )

    二、理論上能夠直接在視錐內找3D的BOX,可是因爲前景的干擾和後景的干擾,但願把關鍵點拿出來,不要受到干擾點的影響,因此後面會接一個3D pointnet的分割網絡。

    三、分割出來之後呢,再用一個精確的網絡估計物體的3D bb,位置,大小 ,姿態

    result:

    

 

    在汽車 小物體(行人 自行車)優點更大。由於2D的分辨率很高,小物體有優點

    爲何有這麼優異的結果呢?

    有兩方面緣由:

    1 , 2D的分辨率很是高,比較容易把2D區域propasal出來。

    2   選擇了3D 分割方法,相比mask-rcn 。將2d mask的depth point 拿出來發現分割效果很是差,緣由是:在圖片中很近,可是在3d中很遠的 

    

    

 

 

    3  對輸入作歸一化,由於對點雲的歸一化,能夠簡化學習問題:

    好比:

    

    a:俯視圖,汽車的位置視錐的範圍x 很大

    b:歸一化以後,能夠旋轉座標系,旋轉z軸,把z指向視錐的中心方向,簡化了x的分佈和學習問題

    c:進一步,在深度上,z上有很大的分佈,咱們基於3D物體分割能夠找到分割後的中心,物體的點集中在原點附近,進一步簡化

    d:能夠經過一個網絡,去估計物體真實的中心,分割和物體中心可能不同,在最後綠色座標系進行bb估計

    由於是點雲數據,因此歸一化操做比較方便。矩陣乘法就能夠

V3 亦能夠檢測,V4 很是遠的點。

室內場景

加速100 1k效果加速

總結:

  兩個網絡,對輸入順序的置換不變性,輕量級的結構,對數據的丟失很是魯棒,提供了一個統一的框架爲不一樣的任務服務。具體在3d場景理解中,3d物體識別的應用

  AI不只僅在場景理解中有用,產品設計,圖片集合中 圖片之間的關係

FAQ:

  1  PN沒考慮點之間的關係,在PN ++ 中有考慮

  2  數據集,部件分割shapenet part 場景 s-3d-s  scan-net

  3  若是僅僅使用雷達,作3D物體檢測,有沒有可能進行拓展?

     簡單的拓展是在雷達中進行propal , 就不是一個視錐的propal了

    把雷達投影到地面變成一個鳥瞰圖,在裏面進行區域的pp,在pp裏在用Pointnet 估計3DBBx,這仍是基於投影的方法。

    可否直接在3D中作PP呢?

    蘋果voxelnet  利用了pointnet 和3D cnn 直接在雷達數據中進行PP 和 dection 

  4  點的數量的評價?

    輸入點數量是可變嗎?訓練的時候是固定的,測試時候是可變的。

    若是是單個圖片的話,是可變的。多個其實也是能夠的。只須要強行pad到同樣的數目便可

  5  將來發展趨勢?

    2D和3D結合,傳感器的分辨率不高,3D幾何信息豐富,更好的結合

  6 激光雷達 近密遠疏 ,該怎麼處理呢?

    pointnet ++ 中有些結構 能處理這些不均勻採樣率的問題,進一步 能夠加W 來調節點雲的分佈

    github 上都有數據集下載 能夠 Frustum pointnet

   7 pointnet ++  如何用到實例分割

    其實frustum pointnet 就是一種實例分割,實例分割在3D中是一個先作的問題,先有實例分割,後又物體檢測

  8 pointnet ++ 由於須要對局部特徵作處理對GPU有要求

    能夠解決,能夠專門寫cuda layer 減小gpu的使用率。

    1024  batch32    6G內存

  9 frustum point 2d檢測是gt仍是檢測結果:

    gt ,進行了擾動,2個好處: 一、簡單  二、能夠和 2 d dector 有個分離,能夠隨時換2d dector,而不用從新訓練後面的網絡。

  9 測試注意?

    測試方向旋轉 而後平均,數據加強,隨機drop 一些點,魯棒性更好。

  10 有沒有可能直接用PN++ 直接對點雲數據作檢測?

    正在研究,voxelnet 也是解決相似的問題

  11 volnet 只對點雲數據訓練作到kitti第一?

    只在車上,由於車相對比較大,只用點雲應該夠用,行人和自行車比較困難

  12 法向量的做用?

    若是仔細看的話,物體基於Mutil-view仍是最領先的,分辨率高,鍵盤的建, 可是在點雲上看和平板沒區別。 在mesh上提取的法向量,就能把平板和鍵盤區別開

  13 貓和馬非歐空間是怎麼處理的?

    先算測地距離,降爲到3d,用3d的歐式距離模擬測地距離

  14 Tnet 能夠用姿態gt 監督其訓練

  15  point ++ 結果不太問題,modelnet data size限制的,split test,鼓勵在test 時進行屢次旋轉之後平均結果

  16 人臉點雲頗有潛力

  17 3D行人檢測有意義嗎?

     圖片暗的時候,能夠預防交通事故

  18 pointnet ++ 中 release 版本沒有+T-net  

    在model-net分類上Tnet幫助不大,由於PN++ 已經學了局部特徵,局部特徵其實對旋轉不太敏感,已經能夠取得比較好效果

  19 PN++ 有對局部點雲變換的不變性嗎?

    局部加T-net 是不太合理的,並不能保證不一樣局部的變換是統一的,若是須要實現統一,capsil(?) net 

 

 

  20 法國數據集是室外的。 能夠試試metapoint3D的數據集

  21  RGB 相對於點雲是錦上添花的

  22 爲何用FPS降採樣?但願達到一個均勻採樣的效果,儘量採遠處的點,也能夠隨機的採樣   

  23 point++ 提供了多卡的

  24 frustum 在2d檢測不許的時候影響截斷最終的結果嗎?

    會,可是有能力復原。可是2d的部分很是很差,會限制3D部分

  25 GCNN 和 pointnet ++ 有不少相通的地方,在點雲上的應用?

    都是在3D空間中尋找局部,而後再局部定義某種操做,造成多級的網絡架構

    pointnet ++ 不只適用於2d和3d ,還適用於很是高維的空間

相關文章
相關標籤/搜索