飛槳火力全開,重磅上線3D模型:PointNet++、PointRCNN!
11 年前的「阿凡達」讓少年的我們第一次戴上 3D 眼鏡,聲勢浩大的瀑布奔流而下,星羅棋布飄浮在空中的群山,無一不體現著對生命的敬意,妥妥的坐穩了 2010 年北美、海外、中國和全球票房 No.1 的寶座,「3D」正式進入了大眾的視線。
圖片來自網絡
11 年過去了,出走半生,我們依舊少年,「阿凡達 2」依舊沒有如約上映,但 3D 應用卻在此期間得到了蓬勃的發展。
這一方面得益于 3D 傳感器技術的飛速發展,用戶可以更加便捷地獲取到三維圖像數據;另一方面隨著機器人、無人駕駛、AR&VR 等業務的日趨成熟,需要快速處理和理解海量的 3D 數據,以便精確感知周邊物體的空間信息,3D 數據的深度學習需求應運而生。
3D 深度學習需要什么格式的數據輸入呢?
2D 圖像可以天然的表示成二維矩陣,但 3D 數據卻非常復雜,它有很多種表達形式,如:點云、體積像素、多邊形網格和多視圖。
在 3D 深度學習領域中,點云數據應用最為廣泛。這是因為點云數據非常接近原始的傳感器數據,采用這種形式,可以更好的挖掘原始數據中的信息,使用較少的數據即可表征較多的細節的特性。
但是點云是不規則的數據,在空間中可以任意分布。傳統情況下,可以先將點云數據轉化成體積像素表示方式,再復用 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++ 原理和實驗表現
①多級點集特征學習(Hierarchical point set feature learning)
集合抽象層是多級點集特征學習的基本模塊,由如下三個關鍵部分組成:
-
采樣層:使用最遠點采樣(FPS)的方法,從輸入點中選擇一組點,定義局部區域的中心。
-
分組層:根據中心點進行分組,將云點數據劃分成若干個局部區域。
-
特征提取:通過 PointNet++ 對各個局部區域進行特征提取,獲得局部特征。
圖中將 Paddle 首字母“P”做一個局部坐標,通過 PointNet++ 提取特征,得到一個新的點。重復這個操作,會得到另一個小區域的點。
經過一系列操作之后,會得到一組新的點。這組點在數量上少于輸入的點,但每個點都代表了周圍區域的幾何特征。
②分類任務(Classification)
類似于傳統的圖像分類,模型將全局特征送入全連接網絡中,最終得到預測的類別概率。
③分割任務(Segmentation)
對于語義分割任務,需要從低分辨率特征中上采樣還原高分辨率的特征。對于 CNN 模型,一般是使用 2D 圖像插值的方式實現。
PointNet++ 模型采用提取最近的 3 個近鄰點,并通過這三個點加權平均的方式插值獲得上采樣點。
此外,PointNet++ 還因其對輸入數據順序置換的不變性、輕量級結構、對數據丟失非常魯棒等特征,非常適合工業領域應用。
實驗結論 PointRCNN 原理和實驗表現
PointRCNN 的網絡結構分為兩個階段:第一階段自底向上生成 3D 候選預測框;第二階段在規范坐標中對候選預測框進行搜索和微調,得到更為精確的預測框作為檢測結果。
第一階段:對 3D 點云數據進行語義分割和前背景劃分,生成候選預測框,有如下三個關鍵部。
①點云特征提取:通過 PointNet++ 對點云數據進行編碼和解碼,提取點云特征向量。
②前景點分割:根據提取的點云特征向量,使用 focal loss 區分前景點和背景點。focal loss 能有效地平衡前景點和背景點比例失衡問題,從而得到更為準確的分類效果。
③生成候選框:采用候選框箱模型(bin)的方法,將前背景點分割信息生成預測候選框。
bin 的執行方式為:先根據前景點的分割信息粗分其所屬的箱體;再在箱體內部對其做回歸,得到箱體參數作為預測框;最后對預測框做 NMS(Non-Max Suppress,非極大值抑制),得到最終預測候選框。
第二階段:在規范坐標中微調候選預測框,獲得最終的檢測結果,有如下五個關鍵部分。
①區域池化:對候選框內每個點的特征進行池化。
③特征編碼:將規范坐標時丟失的深度信息、規范后的坐標信息、前后背景語義信息等經過多層感知機提取特征,作為每個點的編碼特征。
④微調預測框:經過上一步編碼后的特征,經 PointNet++ 網絡進行特征提取,最后回歸得到局部坐標系下的 3D 預測框。
實驗結論
以上就是飛槳 1.7 發布的 PointNet++ 和 PointRCNN 模型,基于飛槳框架,開發者可快速實現 3D 圖像的分類、語義分割和目標檢測任務,模型精度持平世界一流水平。
歡迎感興趣的伙伴在 PaddleCV 的模型庫中,獲取相關數據集和代碼,嘗試實現自己的 3D 應用。(3D 模型存在自定義 OP,需要在 GPU+Linux 平臺實現)
如果您加入官方 QQ 群,您將遇上大批志同道合的深度學習同學。官方 QQ 群:703252161。
如果您想詳細了解更多飛槳的相關內容,請參閱以下文檔。
官網地址:https://www.paddlepaddle.org.cn
飛槳開源框架項目地址:
-
GitHub: https://github.com/PaddlePaddle/models/tree/release/1.7/PaddleCV/3d_vision
-
Gitee: https://gitee.com/paddlepaddle/Paddle
3D 模型體驗請戳如下鏈接:
-
https://github.com/PaddlePaddle/models/tree/release/1.7/PaddleCV/3d_vision