OpenPCDet: Open-MMLab 面向LiDAR點雲表征的3D目標檢測代碼庫


  OpenPCDet: Open-MMLab 面向LiDAR點雲表征的3D目標檢測代碼庫

  隨着自動駕駛與機器人技術的不斷發展,基於點雲表征的3D目標檢測領域在近年來取得了不斷的發展。然而,層出不窮的點雲數據集(KITTI、NuScene、Lyft、Waymo、PandaSet等)在數據格式與3D坐標系上往往定義各不相同,各式各樣的點雲感知算法(point-based、 voxel-based、one-stage/two-stage等)也形態各異,使得相關研究者難以在一個統一的框架內進行各種組合實驗。

  為此,我們開源了一套基於PyTorch實現的點雲3D目標檢測代碼庫 - OpenPCDet:

  https://github.com/open-mmlab/OpenPCDetgithub.com

  其主要包括了全新改版的 PCDet (v0.2) 點雲3D目標檢測框架 (包括我們首次開源的 PV-RCNN 3D目標檢測算法)。

  接下來,我們主要介紹 PCDet 3D目標檢測框架的整體結構設計與優勢,以及如何添加新的數據集、如何組合\研發新的model等簡要使用說明。

  PCDet 3D目標檢測框架介紹

  數據-模型分離的頂層代碼框架設計思想

  不同於圖像處理,點雲3D目標檢測中不同數據集的繁多3D坐標定義與轉換往往使研究者迷失其中。為此,PCDet定義了統一的規范化3D坐標表示貫穿整個數據處理與模型計算,從而將數據模塊與模型處理模塊完全分離,其優勢體現在: (1) 研究者在研發不同結構模型時,統一使用標准化的3D坐標系進行各種相關處理(比如計算loss、RoI Pooling和模型后處理等),而無需理會不同數據集的坐標表示差異性;(2) 研究者在添加新數據集時,只需寫少量代碼將原始數據轉化到標准化坐標定義下,PCDet將自動進行數據增強並適配到各種模型中。

  PCDet 數據-模型分離的頂層設計,使得研究者可以輕松適配各種模型到不同的點雲3D目標檢測數據集上,免去研發模型時迷失在3D坐標轉換中的顧慮。

圖1: PCDet 數據-模型分離的代碼框架設計

  圖1: PCDet 數據-模型分離的代碼框架設計

  統一的3D目標檢測坐標定義

  不同的點雲數據集在坐標系以及3D框的定義上往往不一樣(KITTI數據集中的camera和LiDAR兩個坐標系的混用也常使新手迷茫),因此在 PCDet 中我們采用了固定的統一點雲坐標系(如圖1右下角所示),以及更規范的3D檢測框定義,貫穿整個數據增強、處理、模型計算以及檢測后處理過程。3D檢測框的7維信息定義如下(如圖2所示):

  3D bounding box: (cx, cy, cz, dx, dy, dz, heading)

  其中,(cx, cy, cz) 為物體3D框的幾何中心位置,(dx, dy, dz)分別為物體3D框在heading角度為0時沿着x-y-z三個方向的長度,heading為物體在俯視圖下的朝向角 (沿着x軸方向為0度角,逆時針x到y角度增加)。

圖2: PCDet采用的標准化3D檢測框示意圖 (俯視)   圖2: PCDet采用的標准化3D檢測框示意圖 (俯視)

  圖2: PCDet采用的標准化3D檢測框示意圖 (俯視)

  基於 PCDet 所采用的標准化3D框定義,我們再也不用糾結到底是物體3D中心還是物體底部中心;再也不用糾結物體三維尺寸到底是l-w-h排列還是w-l-h排列;再也不用糾結heading 0度角到底是哪,到底順時針增加還是逆時針增加。

  靈活全面的模塊化模型拓撲設計

  基於圖3所示的靈活且全面的模塊化設計,我們在PCDet中搭建3D目標檢測框架只需要寫config文件將所需模塊定義清楚,然后PCDet將自動根據模塊間的拓撲順序組合為3D目標檢測框架,來進行訓練和測試。

圖3: PCDet模塊化的3D目標檢測框架,支持不同類型的3D目標檢測算法

  圖3: PCDet模塊化的3D目標檢測框架,支持不同類型的3D目標檢測算法

  基於圖3所示框架,PCDet可以支持目前已有的絕大多數面向LiDAR點雲的3D目標檢測算法,包括voxel-based,point-based,point-voxel hybrid以及one-stage/two-stage等等3D目標檢測算法(參見圖4示例圖)。

圖4: PCDet模塊化設計可以支持多種3D目標檢測框架

  圖4: PCDet模塊化設計可以支持多種3D目標檢測框架

  清晰簡潔的代碼結構

  PCDet全新重構了基於numpy+PyTorch的數據增強模塊與數據預處理模塊,依托data_augmentor與data_processor兩個基類可靈活添加、刪除各種數據增強與預處理操作。

  我們在重構PCDet代碼時,盡量做到代碼結構清晰簡潔,用最簡單的python+pytorch完成整個結構(涉及的CUDA代碼也都提供了明確接口定義),從而更好的讓研究者輕松理解代碼邏輯和修改使用。

  更強的3D目標檢測性能

  作為最早開源二階段3D點雲目標檢測代碼的團隊之一,我們不斷提出了PointRCNN、PartA2-Net、PV-RCNN等高性能3D目標檢測算法。在這次PCDet代碼更新中,我們首次開源了PV-RCNN算法,其目前仍是在KITTI+Waymo榜上性能最強的純點雲3D目標檢測算法。

圖5: PCDet首次開源PV-RCNN高性能3D目標檢測算法,其在KITTI榜上性能顯著高於已有算法

  圖5: PCDet首次開源PV-RCNN高性能3D目標檢測算法,其在KITTI榜上性能顯著高於已有算法

  希望我們在PCDet中開源的多個高性能3D目標檢測算法可以為各位研究者提供更強的baseline算法,並成為大家的比賽刷榜利器。

  如何支持新的數據集?

  如之前所說,PCDet的數據-模型分離框架設計與規范化的坐標表示使得其很容易擴展到新的數據集上。具體來說,研究者只需要在自己的dataloader里面做以下兩件事:

  (1) 在 self._getitem_() 中加載自己的數據,並將點雲與3D標注框均轉至前述統一坐標定義下,送入數據基類提供的 self.prepare_data();

  (2) 在 self.generate_prediction_dicts()中接收模型預測的在統一坐標系下表示的3D檢測框,並轉回自己所需格式即可。

  如何組合、改進舊模型+支持新的模型?

  如圖3所示,PCDet中實際上已經支持了絕大部分的模塊。對於一個新的(組合的)3D檢測模型來說,只要在PCDet框架中實現其所特有的模塊(比如新的backbone或新的head)來替換掉原有模塊,並修改響應模型配置文件,其他模塊以及數據處理部分直接利用PCDet中已有部分即可。

  總結

  OpenPCDet開源項目旨在為學術界和工業界提供一個更靈活、全面、高效的點雲3D目標檢測代碼框架,也希望吸引更多的研究者參與進來支持更多的算法與數據集,從而推動這個領域的不斷發展。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM