avod論文理解與代碼解讀


論文簡析

參考文章:
csdn

代碼:
代碼
文獻:
論文

概述

這篇論文的特點是多數據融合。自動駕駛領域對安全性的要求更加嚴格,這對檢測的准確性要求很高。多數據的融合提供了更多的信息,相對的檢測能力更好一些。avod網絡以雷達點雲數據生成BEV map和image作為輸入,經過特征提取成兩個相應的feature map,通過anchor的映射融合兩個特征圖,經過rpn網絡產生non-oriented region proposals,(事實上rpn網絡只對class和bounding box進行回歸)
將這些proposals送入子網絡second stage detector network產生精確的有方向的3D bounding boxs,完成3D物體的檢測。網絡結構如下:
avod 網絡結構圖

網絡結構

BEV map

將點雲數據處理成6channel BEV map.在水平面上分辨率為0.1,選取[-40, 40]x[0, 70]范圍的點處理成700x800的BEV map.在豎直方向上選取[0, 2.5]平分為五段,這樣就將點雲數據划分成700x800x5的體素。然后在每個體素中提取高度信息,在整體的700x800的圖上提取整體密度信息。最終構成700x800x6的BEV map.但是感覺所提特征不明顯,對結果有很大的影響。
如圖:
BEV map

特征提取

avod 為了提高小目標物體的檢測准確率,采用FPN的想法,得到全分辨的feature map送入rpn網絡。如圖:
fpn 特征提取網絡

rpn 網絡

1.anchors以6參數形式表示。(tx, ty, tz)表示中心點,(dx, dy, dz)表示三個軸的尺寸。在BEV上以0.5米的間距采樣(tx, ty), tz由傳感器與地面間的距離等因素決定。anchors的大小由訓練樣本數據而得(怎么確定暫時沒看,應該類似最近鄰的方式統計出來的吧,也可以自己設定一個固定預設值,類似faster rcnn)。  
2.rpn的loss計算分為兩部分:
類別loss: 采用交叉熵loss.
box regression loss: 采用smooth L1 loss.
3.在BEV上通過判定anchors與ground truth的IoU分辨object/background,在BEV上采用2D NMS將top k proposals 送入第二階段檢測網絡。

特征融合

每個3D anchor投影到BEV以及image獲得兩個roi,每個roi進行resized to 3x3然后進行像素級別的特征融合。

第二階段檢測網絡

全連接層得到類別,bounding box,方向的回歸。

box 編碼

本文采用4corner + 2 height offset方式編碼,利用3D舉行框頂點對齊的幾何限制減少參數並利用物體與ground plane的偏移,得到更精確的定位。回歸形式是( ∆x1…∆x4,∆y1…∆y4, ∆h1, ∆h2)。實現中的ground plane參數為4個系數,ax+by+cz+d=0確定的平面。box表示形式如圖:box 表示方式

方向確定

avod采用regressed orientation vector以及計算(cos(ry),sin(ry)),可以由BEV平面的唯一單位向量表示。每個bounding box有四個可能的朝向,選取離regressed orientation vector最近的朝向。

代碼解讀

anchor 的產生

根據得到的cluster的每個尺寸產生兩個方向的anchor。最終的anchor數量計算為70x80/0.5/0.5x(num_cluster)*2.源碼中num_cluster為2,這樣anchor的總數量為89600個。即每幅圖產生89600個anchor。
在這里插入圖片描述
在這里插入圖片描述

mini batch的產生與作用

gen_mini_batches.py 會利用生成的anchors與gt來生成最終輸入網絡的信息。開始生成的anchors總共有89600,去除掉空的anchors,大約在8k到15k之間。然后用剩下的這些anchors與gt計算iou,最終iou大於0的大約150(只有一個gt的大致結果)。這個結果與論文不符,不知道自己哪理解的有問題。附上論文介紹:
在這里插入圖片描述
最終產生的文件在文件夾mini_batches中。具體信息為:
shape:(N, 9)
index:對應的每幁圖片的name, 例如:000000 或是0(記不太清了)
iou: anchors 與gt的iou.
offset(6個): anchor與gt的共同結果,計算公式如下:
t_x_gt = (x_gt - x_anch)/dim_x_anch
t_y_gt = (y_gt - y_anch)/dim_y_anch
t_z_gt = (z_gt - z_anch)/dim_z_anch
t_dx_gt = log(dim_x_gt/dim_x_anch)
t_dy_gt = log(dim_y_gt/dim_y_anch)
t_dz_gt = log(dim_z_gt/dim_z_anch)
class_index:每種object類別對應的數值,例如 car:1
另外:這個過程中可以設置類別,難度等的設置。這樣數據的好壞有個分類,這樣比較更加細致一些。

rpn model

這個網絡主要是利用數據預處理的anchors與label進行粗預測,檢測出rois.這些rois很可能是需要檢測的區域。這一塊利用了anchor來進行點雲與圖像數據的融合。生成的rois用於下一階段的融合與檢測。

avod model

利用rpn_model生成的rois來進行數據融合與檢測。

loss

包括定位,類別,方向預測。

不足

1.我覺得這篇論文對點雲的處理不夠細致,提取的特征不足。
2.整體的網絡也很平常,沒有對與小物體的優化處理,網絡結構可以更加豐富一些。
3.loss可以更優化一些。


免責聲明!

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



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