點雲3d檢測模型pointpillar

PointPillars

一個來自工業界的模型.https://arxiv.org/abs/1812.05784python

3D目標檢測一般作法git

  • 3d卷積
  • 投影到前平面
  • 在bird-view上操做

處理思路依然是3d轉2d,先把3維的點雲轉成2d的僞圖像.
github

Feature Net

把點雲數據處理成相似圖像的數據.ide

pillar即柱子.點雲的特性決定了每一個柱子內的點是很稀少的.lua

一堆點,咱們將其視爲一個個柱子(即pillar),每一個pillar內有不少points.全部的pillar內的point即組成了點雲.設計

首先在x-y平面上投影出來一個h x w的網格.即劃出h x w個pillar出來.3d

原始的點雲數據point有(x,y,z,r)4個維度,r表明反射率.咱們將其擴展爲9個維度(x,y,z,r,x_c,y_c,z_c,x_p,y_p,帶c下標的是點相對於柱子中心的誤差,帶p下標的是對點相對於網格中心的誤差。每一個柱子中點多於N的進行採樣,少於N的進行填充0。因而就造成了(D,P,N)D=9, N爲每一個pillar的採樣點數(設定值),P爲pillar總數目,H*W。code

這樣點雲數據就表達成了一個(D,P,N)的Tensor.blog

而後卷積,獲得一個(C,P,N)的Tensor.在N這個維度上作max operation.獲得(C,P)的tensor.變形獲得(C,H,W)tensor.ip

至此,咱們就用一個(C,H,W)的tensor完成了點雲數據的表達.

Backbone

backbone完成特徵提取.

分爲2部分

  • top-down network產生空間分辨率逐步下降的feature map
  • second network作upsample和concatenation,精細化feature.

top-down部分能夠描述爲一系列的block(S,L,F) S表明相對pseudo-image(即feature net獲得的tensor)的stride. 一個block有L個3x3的2D卷積層. F表明輸出的channel數目.

backbone輸出的tensor爲(6C,H/2,W/2)

Detection

用的ssd.高度z是單獨迴歸的.

實驗細節

點雲轉圖像部分的C=64.backbone部分,車/人/自行車的S不同.

loss設計

3d box由(x,y,z,w,l,h,theta)肯定. 相似於2d box由(x,y,w,h)肯定,3d box多了一個z方向的數據,以及一個角度,用以預計3d box的朝向(繞z軸的角度).

loss由3部分組成

  • 定位loss,衡量3d box畫的準不許
  • 分類loss,衡量box內的物體類別判斷準不許
  • direction loss.定位loss雖然說已經考慮了角度,可是不能區分flipped box.即好比一個3d box內的車,朝着正南和朝着正北走,標出來的3d box都是同樣的.

定位loss:

分類loss: 

focal loss經過對不一樣樣本的loss賦予不一樣的權重,該權重是一個與當前樣本預測機率相關的值.
係數爲(1-p)的變種.從而達到p越小,loss權重越大的目的. 即放大hard example的loss.從而使得模型更好地適應難以分類的樣本.

方向loss:
由softmax獲得.

代碼解析

todo
代碼:https://github.com/traveller59/second.pytorch

python ./pytorch/train.py evaluate --config_path=./configs/car.fhd.config --model_dir=/path/to/model_dir --measure_time=True --batch_size=1
相關文章
相關標籤/搜索