基于Lidar的object檢測模型包括Point-based [PointRCNN(CVPR19), IA-SSD(CVPR22)等], Voxel-based [PointPillars(CVPR19), CenterPoint(CVPR21)等],Point-Voxel-based [PV-RCNN(CVPR20), HVPR(CVPR21)等]和Multi-view-based[PIXOR(CVPR18)等]等。本博客主要記錄,作為菜鳥的我,在KITTI數據集上(3類)基于PyTorch實現PointPillars的一些學習心得, 訓練和測試的pipeline如Figure 1所示。這里按照深度學習算法的流程進行展開: 數據 + 網絡結構 + 預測/可視化 + 評估,和實現的代碼結構是一一對應的,完整代碼已更新于github//github.com/zhulf0804/PointPillars
[說明 - 代碼的實現是通過閱讀mmdet3dv0.18.1源碼, 加上自己的理解完成的。因為不會寫cuda, 所以cuda代碼和少量代碼是從mmdet3dv0.18.1復制過來的。]
一、KITTI 3D檢測數據集
1.1 數據集信息:
·KITTI數據集論文:Are we ready for autonomous driving? the kitti vision benchmark suite[CVPR 2012] 和Vision meets robotics: The kitti dataset[IJRR 2013]·KITTI數據集下載(下載前需要登錄): point cloud(velodyne, 29GB), images(image_2, 12 GB), calibration files(calib, 16 MB)和labels(label_2, 5 MB)。數據velodyne, calib 和 label_2的讀取詳見utils/io.py
。1.2 ground truth label信息 [file]
對每一幀點云數據, label是 n個15維的向量, 組成了8個維度的信息。
1)訓練時主要用到的是類別信息(type) 和3d bbox 信息 (location, dimension, rotation_y).2)觀測角(alpha)和旋轉角(rotation_y)的區別和聯系可以參考博客blog.csdn.net/qq_161375。
1.3 坐標系的變換
因為gt label中提供的bbox信息是Camera坐標系的,因此在訓練時需要使用外參等將其轉換到Lidar坐標系; 有時想要把3d bbox映射到圖像中的2d bbox方便可視化,此時需要內參。具體轉換關系如Figure 2。坐標系轉換的代碼見utils/process.py
。
1.4 數據增強
數據增強應該是Lidar檢測中很重要的一環。發現其與2D檢測中的增強差別較大,比如3D中會做database sampling(我理解的是把gt bbox進行cut-paste), 會做碰撞檢測等。在本庫中主要使用了采用了5種數據增強, 相關代碼在dataset/data_aug.py
。-
采樣gt bbox并將其復制到當前幀的點云
- 從Car, Pedestrian, Cyclist的database數據集中隨機采集一定數量的bbox及inside points, 使每類bboxes的數量分別達到15, 10, 10.
- 將這些采樣的bboxes進行碰撞檢測, 通過碰撞檢測的bboxes和對應labels加到gt_bboxes_3d, gt_labels
- 把位于這些采樣bboxes內點刪除掉, 替換成bboxes內部的點.
-
bbox 隨機旋轉平移
- 以某個bbox為例, 隨機產生num_try個平移向量t和旋轉角度r, 旋轉角度可以轉成旋轉矩陣(mat).
- 對bbox進行旋轉和平移, 找到num_try中第一個通過碰撞測試的平移向量t和旋轉角度r(mat).
- 對bbox內部的點進行旋轉和平移.
- 對bbox進行旋轉和平移.
-
隨機水平翻轉
- points水平翻轉
- bboxes水平翻轉
-
整體旋轉/平移/縮放
- object旋轉, 縮放和平移
- point旋轉, 縮放和平移
- 對points進行shuffle: 打亂點云數據中points的順序。
二、網絡結構與訓練
2.2 GT值生成
Head的3個分支基于anchor分別預測了類別, bbox框(相對于anchor的偏移量和尺寸比)和旋轉角度的類別, 那么在訓練時, 如何得到每一個anchor對應的GT值呢 ? 相關代碼見model/anchors.py
2.3 損失函數和訓練
現在知道了類別分類head, bbox回歸head和朝向分類head的預測值和GT值, 接下來介紹損失函數。相關代碼見loss/loss.py
。
總loss = 1.0*類別分類loss + 2.0*回歸loss + 2.0*朝向分類loss。模型訓練: 優化器
torch.optim.AdamW()
, 學習率的調整torch.optim.lr_scheduler.OneCycleLR()
; 模型共訓練160epoches。三、單幀預測和可視化
基于Head的預測值和anchors, 如何得到最后的候選框呢 ? 相關代碼見model/pointpillars.py
。一般經過以下幾個步驟:基于預測的類別分數的scores, 選出nms_pre (100) 個anchors: 每一個anchor具有3個scores, 分別對應屬于每一類的概率, 這里選擇這3個scores中最大值作為該anchor的score; 根據每個anchor的score降序排序, 選擇anchors。
3. 逐類進行以下操作:
- 過濾掉類別score 小于 score_thr (0.1) 的bboxes
- 基于nms_thr (0.01), nms過濾掉重疊框:
另外, 基于Open3d實現了在Lidar和Image里3d bboxes的可視化, 相關代碼見
test.py
和utils/vis_o3d.py
。下圖是對驗證集中id=000134
的數據進行可視化的結果。
四、模型評估
評估指標同2D檢測類似, 也是采用AP, 即Precison-Recall曲線下的面積。不同的是, 在3D中可以計算3D bbox, BEV bbox 和 (2D bbox, AOS)的AP。先說明一下AOS指標和Difficulty的定義。
Difficulty: 根據2d框的高度, 遮擋程度和截斷程度, 把bbox分為 difficulty=0, 1, 2 或 其它。相關定義具體查看代碼
pre_process_kitti.py#L16-32
。這里以3D bbox為例, 介紹類別=Car
,difficulty=1
AP的計算。注意, difficulty=1
的數據實際上是指difficulty<=1
的數據; 另外這里主要介紹大致步驟, 具體實現見evaluate.py
。1.計算3D IoU (utils/process.pyiou3d(bboxes1, bboxes2)
), 用于判定一個det bbox是否和gt bbox匹配上 (IoU > 0.7)。2.根據類別=Car
,difficulty=1
選擇gt bboxes和det bboxes。-
gt bboxes: 選擇
類別=Car
,difficulty<=1
的bboxes; -
det bboxes: 選擇
預測類別=Car
的bboxes。
五、總結點云檢測, 相比于點云中其它任務(分類, 分割和配準等), 邏輯和代碼都更加復雜, 但這并不是體現在網絡結構上, 更多的是體現在數據增強, Anchors和GT生成, 單幀推理等。點云檢測, 相比于2D圖像檢測任務, 不同的是坐標系變換, 數據增強(碰撞檢測, 點是否在立方體判斷等), 斜長方體框IoU的計算等; 評估方式因為考慮到DontCare, difficulty等, 也更加復雜一些.初次接觸基于KITTI的3D檢測, 如有理解錯誤的, 還請指正; 內容太多了, 如有遺漏, 待以后補充。
審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
可視化
+關注
關注
1文章
1248瀏覽量
21654 -
數據集
+關注
關注
4文章
1223瀏覽量
25284 -
深度學習
+關注
關注
73文章
5555瀏覽量
122504
原文標題:3D點云 (Lidar)檢測入門篇 : PointPillars PyTorch實現
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
?超景深3D檢測顯微鏡技術解析
在現代科技領域,顯微鏡技術的發展始終是推動科學研究和技術進步的重要引擎。上海桐爾作為這一領域的探索者,其超景深3D檢測顯微鏡技術的突破,為科學研究、工業檢測和醫療診斷等領域帶來了全新的可能性。這項
發表于 02-25 10:51
SciChart 3D for WPF圖表庫
SciChart 3D for WPF 是一個實時、高性能的 WPF 3D 圖表庫,專為金融、醫療和科學應用程序而設計。非常適合需要極致性能和豐富的交互式 3D 圖表的項目。 使用我們

騰訊混元3D AI創作引擎正式發布
近日,騰訊公司宣布其自主研發的混元3D AI創作引擎已正式上線。這一創新性的創作工具將為用戶帶來前所未有的3D內容創作體驗,標志著騰訊在AI技術領域的又一重大突破。 混元3D AI創作引擎憑借其強大
騰訊混元3D AI創作引擎正式上線
近日,騰訊公司宣布其自主研發的混元3D AI創作引擎已正式上線。這一創新性的創作工具,標志著騰訊在3D內容生成領域邁出了重要一步。 混元3D AI創作引擎的核心功能極為強大,用戶只需通過簡單的提示詞

3D激光線掃輪廓傳感器在汽車行業的汽車車縫檢測的應用
在實際應用中,3D激光線掃傳感器可以集成到自動化檢測系統中,與機器人或自動化輸送系統配合,實現對汽車車縫的全面檢測。這些系統通常包括傳感器、控制軟件、數據處理單元和用戶界面,能夠自動分


安寶特產品 安寶特3D Analyzer:智能的3D CAD高級分析工具
安寶特3D Analyzer包含多種實用的3D CAD高級分析工具,包括自動比對模型、碰撞檢測、間隙檢查、壁厚檢查,以及拔模和底切分析,能夠有效提升3D CAD模型



裸眼3D筆記本電腦——先進的光場裸眼3D技術
隨著科技的不斷進步,裸眼3D技術已經不再是科幻電影中的幻想。如今,英倫科技裸眼3D筆記本電腦將這一前沿科技帶到了我們的日常生活中。無論你是專業的3D模型設計師,還是希望在視頻播放和模型展示中體驗逼真

評論