3D點(diǎn)云 (Lidar)檢測入門篇 : PointPillars PyTorch實(shí)現(xiàn)
點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號(hào)
重磅干貨,第一時(shí)間送達(dá)


一、KITTI 3D檢測數(shù)據(jù)集
1.1 數(shù)據(jù)集信息:
utils/io.py。1.2 ground truth label信息 [file]

1.3 坐標(biāo)系的變換
utils/process.py。
1.4 數(shù)據(jù)增強(qiáng)
dataset/data_aug.py。采樣gt bbox并將其復(fù)制到當(dāng)前幀的點(diǎn)云 從Car, Pedestrian, Cyclist的database數(shù)據(jù)集中隨機(jī)采集一定數(shù)量的bbox及inside points, 使每類bboxes的數(shù)量分別達(dá)到15, 10, 10. 將這些采樣的bboxes進(jìn)行碰撞檢測, 通過碰撞檢測的bboxes和對應(yīng)labels加到gt_bboxes_3d, gt_labels 把位于這些采樣bboxes內(nèi)點(diǎn)刪除掉, 替換成bboxes內(nèi)部的點(diǎn). bbox 隨機(jī)旋轉(zhuǎn)平移 以某個(gè)bbox為例, 隨機(jī)產(chǎn)生num_try個(gè)平移向量t和旋轉(zhuǎn)角度r, 旋轉(zhuǎn)角度可以轉(zhuǎn)成旋轉(zhuǎn)矩陣(mat). 對bbox進(jìn)行旋轉(zhuǎn)和平移, 找到num_try中第一個(gè)通過碰撞測試的平移向量t和旋轉(zhuǎn)角度r(mat). 對bbox內(nèi)部的點(diǎn)進(jìn)行旋轉(zhuǎn)和平移. 對bbox進(jìn)行旋轉(zhuǎn)和平移. 隨機(jī)水平翻轉(zhuǎn) points水平翻轉(zhuǎn) bboxes水平翻轉(zhuǎn) 整體旋轉(zhuǎn)/平移/縮放 object旋轉(zhuǎn), 縮放和平移 point旋轉(zhuǎn), 縮放和平移 對points進(jìn)行shuffle: 打亂點(diǎn)云數(shù)據(jù)中points的順序。

二、網(wǎng)絡(luò)結(jié)構(gòu)與訓(xùn)練


2.2 GT值生成
model/anchors.py

2.3 損失函數(shù)和訓(xùn)練
loss/loss.py。
torch.optim.AdamW(), 學(xué)習(xí)率的調(diào)整torch.optim.lr_scheduler.OneCycleLR(); 模型共訓(xùn)練160epoches。三、單幀預(yù)測和可視化
model/pointpillars.py。一般經(jīng)過以下幾個(gè)步驟:
過濾掉類別score 小于 score_thr (0.1) 的bboxes 基于nms_thr (0.01), nms過濾掉重疊框:

test.py和utils/vis_o3d.py。下圖是對驗(yàn)證集中id=000134的數(shù)據(jù)進(jìn)行可視化的結(jié)果。

四、模型評(píng)估

pre_process_kitti.py#L16-32。類別=Car,?difficulty=1?AP的計(jì)算。注意, difficulty=1的數(shù)據(jù)實(shí)際上是指difficulty<=1的數(shù)據(jù); 另外這里主要介紹大致步驟, 具體實(shí)現(xiàn)見evaluate.py。iou3d(bboxes1, bboxes2)), 用于判定一個(gè)det bbox是否和gt bbox匹配上 (IoU > 0.7)。類別=Car,?difficulty=1選擇gt bboxes和det bboxes。gt bboxes: 選擇 類別=Car,?difficulty<=1的bboxes;det bboxes: 選擇 預(yù)測類別=Car的bboxes。

本文僅做學(xué)術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
評(píng)論
圖片
表情

