飛槳火力全開,重磅上線3D模型:PointNet++、PointRCNN!

11年前的「阿凡達」讓少年的咱們第一次戴上3D眼鏡,聲勢浩大的瀑布奔流而下,星羅棋佈飄浮在空中的羣山,無一不體現着對生命的敬意,妥妥的坐穩了2010年北美、海外、中國和全球票房No.1的寶座,「3D」正式進入了大衆的視線。git

圖片來自網絡github

11年過去了,出走半生,咱們依舊少年,「阿凡達2」依舊沒有如約上映,但3D應用卻在此期間獲得了蓬勃的發展。這一方面得益於3D傳感器技術的飛速發展,用戶能夠更加便捷地獲取到三維圖像數據;另外一方面隨着機器人、無人駕駛、AR&VR等業務的日趨成熟,須要快速處理和理解海量的3D數據,以便精確感知周邊物體的空間信息,3D數據的深度學習需求應運而生。隨着2020年中國新基建政策的發佈,相信將來3D視覺技術將會有更廣闊的應用空間。web

下載安裝命令

## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

3D深度學習須要什麼格式的數據輸入?算法

2D圖像能夠自然的表示成二維矩陣,但3D數據卻很是複雜,它有不少種表達形式,如:點雲、體積像素、多邊形網格和多視圖。在3D深度學習領域中,點雲數據應用最爲普遍。這是由於點雲數據很是接近原始的傳感器數據,採用這種形式,能夠更好的挖掘原始數據中的信息,使用較少的數據便可表徵較多的細節的特性。此外點雲的表達形式很是簡單,模型訓練時,對GPU性能沒有過高的要求。網絡

可是點雲是不規則的數據,在空間中能夠任意分佈。傳統狀況下,能夠先將點雲數據轉化成體積像素表示方式,再複用2D圖像的CNN模型,可是代價會很是高。緣由是體積像素在空間中的稀疏性使得3D CNN訓練對顯存要求極高,模型難以收斂。框架

那麼,是否有方法能夠直接在點雲上數據上實現特徵學習呢?性能

飛槳開源框架1.7版本發佈了用於3D點雲分類、分割和檢測的PointNet++和PointRCNN模型。支持ShapeNet,ModelNet,KITTI等多種點雲數據集,在ModelNet40數據集上,PointNet++分類精度可達90%,在 KITTI(Car)的Easy數據子集上,PointRCNN檢測精度可達86.66%,持平世界領先水平。開發者在飛槳框架基礎上可快速完成任務,實現工業應用。3D模型體驗請戳以下連接:學習

https://github.com/PaddlePaddle/models/tree/release/1.7/PaddleCV/3d_vision測試

PointNet++原理和實驗表現編碼

PointNet++核心是經過多級點集特徵學習提取點雲數據的特徵,而後將提取的特徵分別輸入到分類和分割網絡,進行3D數據的圖像分類和語義分割,PointNet++網絡結構下圖所示。

  • 多級點集特徵學習(Hierarchical point set feature learning)

集合抽象層是多級點集特徵學習的基本模塊,由以下三個關鍵部分組成:

  1. 採樣層:使用最遠點採樣(FPS)的方法,從輸入點中選擇一組點,定義局部區域的中心。

  2. 分組層:根據中心點進行分組,將雲點數據劃分紅若干個局部區域。

  3. 特徵提取:經過PointNet++ 對各個局部區域進行特徵提取,得到局部特徵。

經過下面的動態圖,能夠幫助你們更好的理解多級點集特徵學習的實現。 

圖中將Paddle首字母「P」作一個局部座標,經過PointNet++提取特徵,獲得一個新的點。重複這個操做,會獲得另外一個小區域的點。通過一系列操做以後,會獲得一組新的點。這組點在數量上少於輸入的點,但每一個點都表明了周圍區域的幾何特徵。

  • 分類任務(Classification)

相似於傳統的圖像分類,模型將全局特徵送入全鏈接網絡中,最終獲得預測的類別機率。

  • 分割任務(Segmentation)

對於語義分割任務,須要從低分辨率特徵中上採樣還原高分辨率的特徵。對於CNN模型,通常是使用2D圖像插值的方式實現。PointNet++模型採用提取最近的3個近鄰點,並經過這三個點加權平均的方式插值得到上採樣點。

此外,PointNet++還因其對輸入數據順序置換的不變性、輕量級結構、對數據丟失很是魯棒等特徵,很是適合工業領域應用。

實驗結論

PointNet++模型測試精度以下:

PointRCNN原理和實驗表現

3D目標檢測模型PointRCNN借鑑了PointNet++和RCNN的思想,提出了自底向上的生成和調整候選檢測區域的算法,網絡結構以下圖所示:

PointRCNN的網絡結構分爲兩個階段:第一階段自底向上生成3D候選預測框;第二階段在規範座標中對候選預測框進行搜索和微調,獲得更爲精確的預測框做爲檢測結果。

第一階段:對3D點雲數據進行語義分割和前背景劃分,生成候選預測框,有以下三個關鍵步驟:

  • 點雲特徵提取:經過PointNet++對點雲數據進行編碼和解碼,提取點雲特徵向量。

  • 前景點分割:根據提取的點雲特徵向量,使用focal loss區分前景點和背景點。focal loss能有效地平衡前景點和背景點比例失衡問題,從而獲得更爲準確的分類效果。

  • 生成候選框:採用候選框箱模型(bin)的方法,將前背景點分割信息生成預測候選框。

舉例來講,將候選框定義爲參數(x,y,z,h,w,l,θ)表徵的空間中的箱體,其中(x,y,z)爲箱體中心座標,( h,w,l)爲箱體在中心座標方向上的大小,θ爲鳥瞰視角上(y方向從上往下看)箱體在x-z平面的角度。

bin的執行方式爲:先根據前景點的分割信息粗分其所屬的箱體;再在箱體內部對其作迴歸,獲得箱體參數做爲預測框;最後對預測框作NMS(Non-Max Suppress,非極大值抑制),獲得最終預測候選框。

第二階段:在規範座標中微調候選預測框,得到最終的檢測結果,有以下五個關鍵部分:

  • 區域池化:對候選框內每一個點的特徵進行池化。

  • 座標轉化:爲了更好地獲取局部信息,須要將多個候選區域中的前景點座標(同一個座標系)轉化爲局域座標系中的規範座標(以預測框爲中心點的多個座標系),以下圖所示:

  • 特徵編碼:將規範座標時丟失的深度信息、規範後的座標信息、先後背景語義信息等通過多層感知機提取特徵,做爲每一個點的編碼特徵。

  • 微調預測框:通過上一步編碼後的特徵,經PointNet++網絡進行特徵提取,最後迴歸獲得局部座標系下的3D預測框。

實驗結論

目前發佈的KITTI數據集下Car檢測精度以下:

以上就是飛槳1.7發佈的PointNet++和PointRCNN模型,基於飛槳框架,開發者可快速實現3D圖像的分類、語義分割和目標檢測任務,模型精度持平世界一流水平。歡迎感興趣的夥伴在PaddleCV的模型庫中,在文末的Github地址中獲取相關數據集和代碼,嘗試實現本身的3D應用。(3D模型存在自定義OP,須要在GPU+Linux平臺實現)

>> 訪問 PaddlePaddle 官網,瞭解更多相關內容 

下載安裝命令

## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
相關文章
相關標籤/搜索