<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          3D點(diǎn)云 (Lidar)檢測入門篇 : PointPillars PyTorch實(shí)現(xiàn)

          共 3095字,需瀏覽 7分鐘

           ·

          2022-05-31 10:26

          點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號(hào)

          重磅干貨,第一時(shí)間送達(dá)

          作者丨千百度@知乎
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/521277176
          編輯丨3D視覺工坊

          基于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數(shù)據(jù)集上(3類)基于PyTorch實(shí)現(xiàn)PointPillars的一些學(xué)習(xí)心得, 訓(xùn)練和測試的pipeline如Figure 1所示。這里按照深度學(xué)習(xí)算法的流程進(jìn)行展開: 數(shù)據(jù) + 網(wǎng)絡(luò)結(jié)構(gòu) + 預(yù)測/可視化 + 評(píng)估,和實(shí)現(xiàn)的代碼結(jié)構(gòu)是一一對應(yīng)的,完整代碼已更新于github:https://github.com/zhulf0804/PointPillars

          [說明 - 代碼的實(shí)現(xiàn)是通過閱讀mmdet3dv0.18.1源碼, 加上自己的理解完成的。因?yàn)椴粫?huì)寫cuda, 所以cuda代碼和少量代碼是從mmdet3dv0.18.1復(fù)制過來的。]

          一、KITTI 3D檢測數(shù)據(jù)集

          1.1 數(shù)據(jù)集信息:

          ·KITTI數(shù)據(jù)集論文:?Are we ready for autonomous driving? the kitti vision benchmark suite?[CVPR 2012] 和?Vision meets robotics: The kitti dataset?[IJRR 2013]
          ·KITTI數(shù)據(jù)集下載(下載前需要登錄): point cloud(velodyne, 29GB), images(image_2, 12 GB), calibration files(calib, 16 MB)和labels(label_2, 5 MB)。數(shù)據(jù)velodyne, calib 和 label_2的讀取詳見utils/io.py。

          1.2 ground truth label信息 [file]

          對每一幀點(diǎn)云數(shù)據(jù), label是 n個(gè)15維的向量, 組成了8個(gè)維度的信息。

          1)訓(xùn)練時(shí)主要用到的是類別信息(type) 和3d bbox 信息 (location, dimension, rotation_y).
          2)觀測角(alpha)和旋轉(zhuǎn)角(rotation_y)的區(qū)別和聯(lián)系可以參考博客blog.csdn.net/qq_161375。

          1.3 坐標(biāo)系的變換

          因?yàn)間t label中提供的bbox信息是Camera坐標(biāo)系的,因此在訓(xùn)練時(shí)需要使用外參等將其轉(zhuǎn)換到Lidar坐標(biāo)系; 有時(shí)想要把3d bbox映射到圖像中的2d bbox方便可視化,此時(shí)需要內(nèi)參。具體轉(zhuǎn)換關(guān)系如Figure 2。坐標(biāo)系轉(zhuǎn)換的代碼見utils/process.py

          1.4 數(shù)據(jù)增強(qiáng)

          數(shù)據(jù)增強(qiáng)應(yīng)該是Lidar檢測中很重要的一環(huán)。發(fā)現(xiàn)其與2D檢測中的增強(qiáng)差別較大,比如3D中會(huì)做database sampling(我理解的是把gt bbox進(jìn)行cut-paste), 會(huì)做碰撞檢測等。在本庫中主要使用了采用了5種數(shù)據(jù)增強(qiáng), 相關(guān)代碼在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的順序。
          Figure3是對上述前4種數(shù)據(jù)增強(qiáng)的可視化結(jié)果。

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

          2.2 GT值生成

          Head的3個(gè)分支基于anchor分別預(yù)測了類別, bbox框(相對于anchor的偏移量和尺寸比)和旋轉(zhuǎn)角度的類別, 那么在訓(xùn)練時(shí), 如何得到每一個(gè)anchor對應(yīng)的GT值呢 ? 相關(guān)代碼見model/anchors.py

          2.3 損失函數(shù)和訓(xùn)練

          現(xiàn)在知道了類別分類head, bbox回歸head和朝向分類head的預(yù)測值和GT值, 接下來介紹損失函數(shù)。相關(guān)代碼見loss/loss.py。


          總loss = 1.0*類別分類loss + 2.0*回歸loss + 2.0*朝向分類loss。
          模型訓(xùn)練: 優(yōu)化器torch.optim.AdamW(), 學(xué)習(xí)率的調(diào)整torch.optim.lr_scheduler.OneCycleLR(); 模型共訓(xùn)練160epoches。

          三、單幀預(yù)測和可視化

          基于Head的預(yù)測值和anchors, 如何得到最后的候選框呢 ? 相關(guān)代碼見model/pointpillars.py。一般經(jīng)過以下幾個(gè)步驟:
          基于預(yù)測的類別分?jǐn)?shù)的scores, 選出nms_pre (100) 個(gè)anchors: 每一個(gè)anchor具有3個(gè)scores, 分別對應(yīng)屬于每一類的概率, 這里選擇這3個(gè)scores中最大值作為該anchor的score; 根據(jù)每個(gè)anchor的score降序排序, 選擇anchors。

          3. 逐類進(jìn)行以下操作:
          • 過濾掉類別score 小于 score_thr (0.1) 的bboxes
          • 基于nms_thr (0.01), nms過濾掉重疊框:



          另外, 基于Open3d實(shí)現(xiàn)了在Lidar和Image里3d bboxes的可視化, 相關(guān)代碼見test.pyutils/vis_o3d.py。下圖是對驗(yàn)證集中id=000134的數(shù)據(jù)進(jìn)行可視化的結(jié)果。

          四、模型評(píng)估

          評(píng)估指標(biāo)同2D檢測類似, 也是采用AP, 即Precison-Recall曲線下的面積。不同的是, 在3D中可以計(jì)算3D bbox, BEV bbox 和 (2D bbox, AOS)的AP。
          先說明一下AOS指標(biāo)和Difficulty的定義。

          Difficulty: 根據(jù)2d框的高度, 遮擋程度和截?cái)喑潭? 把bbox分為 difficulty=0, 1, 2 或 其它。相關(guān)定義具體查看代碼pre_process_kitti.py#L16-32。
          這里以3D bbox為例, 介紹類別=Car,?difficulty=1?AP的計(jì)算。注意, difficulty=1的數(shù)據(jù)實(shí)際上是指difficulty<=1的數(shù)據(jù); 另外這里主要介紹大致步驟, 具體實(shí)現(xiàn)見evaluate.py
          1.計(jì)算3D IoU (utils/process.py?iou3d(bboxes1, bboxes2)), 用于判定一個(gè)det bbox是否和gt bbox匹配上 (IoU > 0.7)。
          2.根據(jù)類別=Car,?difficulty=1選擇gt bboxes和det bboxes。
          • gt bboxes: 選擇類別=Car,?difficulty<=1的bboxes;
          • det bboxes: 選擇預(yù)測類別=Car的bboxes。
          3. 確定P-R曲線中的點(diǎn)對(Pi, Ri)對應(yīng)的score閾值。
          五、總結(jié)
          點(diǎn)云檢測, 相比于點(diǎn)云中其它任務(wù)(分類, 分割和配準(zhǔn)等), 邏輯和代碼都更加復(fù)雜, 但這并不是體現(xiàn)在網(wǎng)絡(luò)結(jié)構(gòu)上, 更多的是體現(xiàn)在數(shù)據(jù)增強(qiáng), Anchors和GT生成, 單幀推理等。
          點(diǎn)云檢測, 相比于2D圖像檢測任務(wù), 不同的是坐標(biāo)系變換, 數(shù)據(jù)增強(qiáng)(碰撞檢測, 點(diǎn)是否在立方體判斷等), 斜長方體框IoU的計(jì)算等; 評(píng)估方式因?yàn)榭紤]到DontCare, difficulty等, 也更加復(fù)雜一些.
          初次接觸基于KITTI的3D檢測, 如有理解錯(cuò)誤的, 還請指正; 內(nèi)容太多了, 如有遺漏, 待以后補(bǔ)充。

          本文僅做學(xué)術(shù)分享,如有侵權(quán),請聯(lián)系刪文。

          —THE END—
          瀏覽 210
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  女人黄色A级毛片 | 看操逼A片 | 国产天堂视频在线 | 国产三级日本三级 | 福利国产在线 |