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

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

圖片來自網絡

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

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平臺實現)

如果您加入官方QQ羣,您將遇上大批志同道合的深度學習同學。官方QQ羣:703252161。

如果您想詳細瞭解更多飛槳的相關內容,請參閱以下文檔:

官網地址:

https://www.paddlepaddle.org.cn

3D模型體驗:

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

飛槳開源框架項目地址:

https://github.com/PaddlePaddle/

Gitee: 

https://gitee.com/paddlepaddle/Paddle

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章