日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

详解3D物体检测模型: Voxel Transformer for 3D Object Detection

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解3D物体检测模型: Voxel Transformer for 3D Object Detection 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


本文介紹一個新的的3D物體檢測模型:VoTr,論文已收錄于ICCV 2021。 這是第一篇使用 voxel-based Transformer 做3D 主干網絡,用于點云數據3D物體檢測。由于有限的感受野,傳統的 3D 卷積網絡檢測器(voxel-based)不能有效地捕獲大量的環境信息, 于是在本文中作者引入基于 Transformer 的結構,通過自注意力的方式尋找長距離范圍內 voxel 之間的關系。

本文主要貢獻有:

  • 考慮到非空 voxel 的稀疏性及數量眾多的事實,直接對 voxel 使用標準的 Transformer 并不是一件容易的事情。為此,作者提出了 sparse voxel module 和 submanifold voxel module,它們可以有效地對空的和非空的 voxel 進行操作。
  • 為了進一步增大注意力范圍,同時維持與卷積檢測器相對應的計算開銷,作者進一步提出了兩種多頭注意力機制:Local Attention 和 Dilated Attention,同時作者還進一步提出了 Fast Voxel Query,用于加速 voxel 的查詢。
  • 本文提出的 VoTr 方法可以用在大多數 voxel-based 的3D檢測器,最后作者在 Waymo 和 KITTI 數據集上進行了實驗,證明本文提出的方法在提高檢測性能時并且保持了相當的計算效率。

論文鏈接為:https://arxiv.org/pdf/2109.02497.pdf

項目鏈接為:https://github.com/PointsCoder/VOTR


文章目錄

      • 1. Introduction & Related Work
      • 2. Voxel Transformer
        • 2.1 Overall Architecture
        • 2.2 Voxel Transformer Module
        • 2.3 Efficient Attention Mechanism
        • 2.4 Fast Voxel Query
      • 3. Experiments

1. Introduction & Related Work

首先是論文引言部分。之前的 3D 檢測方法主要分別兩種:point-based 和 voxel-based,voxel-based 的方法首先對點云做柵格化處理,將點云轉化為一個個 voxel 然后使用 3D 卷積網絡提取特征。之后將 voxel 轉換為鳥瞰圖最終在鳥瞰圖上生成 3D boxes。

但是由于感受野受限,影響著檢測器性能。例如,SECOND 模型 voxel 大小是 (0.05m,0.05m,0.1m)(0.05m,0.05m,0.1m)(0.05m,0.05m,0.1m),最后一層最大的感受野是 (3.65m,3.65m,7.3m)(3.65m,3.65m,7.3m)(3.65m,3.65m,7.3m),覆蓋不了一輛長度為 4m4m4m 的汽車。感受野的大小與 voxel size VVV,kernel size KKK,downsample stride SSS,layer number LLL 四者乘積成正比。增大 VVV 會導致點云量化誤差變大;增大 KKK 會導致卷積特征成三次方增大;增大 SSS 會導致低精度的鳥瞰圖,會降低最終預測結果; 增大 LLL 會需要更多的計算資源。但是在3D物體檢測時,由于點云的稀疏性和不完整性,而我們又需要增大感受野,因此就需要設計一種新的架構來編碼更多的上下文信息。

最近 Transformer 在2D物體分類、檢測、分割任務上取得了不錯的效果,主要是因為自注意力機制可以建立像素間的長距離關系。但是直接將 Transformer 用到 voxel 中會遇到兩個問題:

  • 非空的 voxel 分布很稀疏,而圖像中像素是很密集的,例如在 Waymo 數據集中非空的 voxel 只占所有的 voxel 0.1%0.1\%0.1%,因此需要設計一個特殊操作只作用于那些非空的 voxel 上;
  • 非空 voxel 的數量是龐大的,例如在 Waymo 數據集中達到了 90k90k90k,如果像標準的 Transformer 那樣使用全連接自注意力在計算上是吃不消的,因此,非常需要新的方法來擴大注意力范圍,同時將每個 query 的注意力 voxel 數保持在較小的范圍內。

為了解決這兩個問題,作者于是提出了 VoTr,具體方法在下一節介紹。下圖是3D卷積網絡和 VoTr 的感受野圖示。在圖(a)中,橘色立方體表示的是3D卷積核,黃色的 voxel 被以紅色 voxel 為中心的最大感受野所包含。在圖(b)中,紅色的 voxel 是待查詢的 voxel,藍色 voxel 是它的注意力 voxel,作者發現只使用一個自注意力層就可以覆蓋比整個卷積骨干網還要大的區域,而且還可以保持足夠細微的3D結構。


下面是相關研究工作:

  • 點云3D物體檢測方法:Frustum-PointNet、PointRCNN、3DSSD、VoxelNet、SECOND、HVNet、PV-RCNN;
  • Transformer 在計算機視覺的應用:ViT、DETR、SETR、MaX-DeepLab、Point Transformer、Pointformer;

2. Voxel Transformer

2.1 Overall Architecture

現在我們來開始詳細介紹 VoTr。整體結構設計和 SECOND 很相似,VoTr 包含三個 sparse voxel module,降采樣3次,每一個 sparse voxel module 跟著2個 submanifold voxel module,在所有的模塊中都使用到了多頭注意力機制。在多頭注意力機制中,每一個 query voxel 使用了兩種特別的注意力方法:Local Attention 、 Dilated Attention。

值得注意的是:submanifold voxel module 只在非空的 voxel 進行注意力操作,而 sparse voxel module 可以在空的 voxel 上提取特征。


2.2 Voxel Transformer Module

- self-attention on sparse voxels

這里首先介紹 sparse voxel 上的自注意力方法。

  • 假設總共有 NdenseN_{dense}Ndense? 個 voxels,非空 voxel 索引數組 V:Nsparse×3\mathcal{V}:N_{sparse} \times 3VNsparse?×3 以及對應特征數組 F:Nsparse×d\mathcal{F}:N_{sparse} \times dFNsparse?×d,且 Nsparse??Ndense?N_{\text {sparse }} \ll N_{\text {dense }}Nsparse???Ndense??
  • 特定地,一個要查詢的 voxel iii,其注意力范圍 Ω(i)?V\Omega(i) \subseteq \mathcal{V}Ω(i)?V 是由注意力機制確定,對注意力 voxel j?Ω(i)j \subseteq \Omega(i)j?Ω(i) 進行多頭注意力操作,得到注意力特征 fiattendf^{attend}_{i}fiattend?
  • fi,fj∈Ff_i,f_j\in\mathcal{F}fi?,fj?F 分別為查詢和注意力 voxel 特征,vi,vj∈Vv_i,v_j\in\mathcal{V}vi?,vj?V 分別為查詢和注意力 voxel 整數索引。根據索引得到 voxel 中心坐標 pi,pjp_i,p_jpi?,pj?,其中 p=t×(v+0.5)p=t\times(v+0.5)p=t×(v+0.5)。然后可以計算 Qi,Ki,ViQ_i,K_i,V_iQi?Ki?,Vi?
    Qi=fiWq,Kj=fjWk+Epos?,Vj=fjWv+Epos(1)Q_{i}=f_{i} W_{q}, K_{j}=f_{j} W_{k}+E_{\text {pos }}, V_{j}=f_{j} W_{v}+E_{p o s} \tag{1} Qi?=fi?Wq?,Kj?=fj?Wk?+Epos??,Vj?=fj?Wv?+Epos?(1)位置編碼 EposE_{pos}Epos? 為:
    Epos=(pi?pj)Wpos(2)E_{p o s}=\left(p_{i}-p_{j}\right) W_{p o s} \tag{2} Epos?=(pi??pj?)Wpos?(2)自注意力特征為:
    fiattend=∑j∈Ω(i)σ(QiKjd)?Vj(3)f_{i}^{a t t e n d}=\sum_{j \in \Omega(i)} \sigma\left(\frac{Q_{i} K_{j}}{\sqrtozvdkddzhkzd}\right) \cdot V_{j} \tag{3} fiattend?=jΩ(i)?σ(d?Qi?Kj??)?Vj?(3)
    其中,σ(?)\sigma(\cdot)σ(?) 是softmax歸一化函數,這里可以將 3D voxel 的自注意力機制看作是 2D 的自注意力機制的擴展,使用的相對坐標作為位置編碼。

- submanifold voxel module
此模塊,包含兩層網絡,第一層是自注意層,連接所有的注意力機制,第二層是簡單的前向傳播層,這里也使用了殘差連接。與標準的 Transformer 不同的是:

  • 在前向傳播層之后添加了線性投影層用于調整特征通道數量;
  • 使用了 BN 替代 LN;
  • 刪除了 dropout ,這是因為這里的注意力 voxel 數量太少了,再使用 dropout 可能會阻礙學習過程;

- sparse voxel module
由于在非空 voxel 沒有特征,于是得不到 QiQ_iQi?,使用如下方法得到近似 QiQ_iQi?
Qi=Aj∈Ω(i)(fj)(4)Q_{i}=\underset{j \in \Omega(i)}{\mathcal{A}}\left(f_{j}\right) \tag{4} Qi?=jΩ(i)A?(fj?)(4)其中 A\mathcal{A}A 是對所有注意力 voxel 特征做最大池化操作,同樣地使用公式(3) 進行多頭注意力操作,這里沒有使用殘差連接。


2.3 Efficient Attention Mechanism

現在,著重介紹注意力范圍 Ω(i)\Omega(i)Ω(i),注意力機制中非常重要的一個因素。Ω(i)\Omega(i)Ω(i) 應當滿足以下三點:

  • Ω(i)\Omega(i)Ω(i) 應該能覆蓋相鄰的 voxel 以保持細微的3D結構;
  • Ω(i)\Omega(i)Ω(i) 覆蓋的范圍應盡可能的遠以便獲得更大的上下文信息;
  • Ω(i)\Omega(i)Ω(i) 所包含的 voxel 數應該盡可能的少,例如小于50,避免計算負載過大;

- local attention
定義 ?(start,end,stride)\varnothing(start,end,stride)?(start,end,stride) 為一個返回非空索引的函數,例如 ?((0,0,0,),(1,1,1),(1,1,1))\varnothing((0,0,0,),(1,1,1),(1,1,1))?((0,0,0,),(1,1,1),(1,1,1)) 返回為 ?{(0,0,0,),(0,0,1),(0,1,0),...,(1,1,1)}\varnothing\{(0,0,0,),(0,0,1),(0,1,0),...,(1,1,1)\}?{(0,0,0,),(0,0,1),(0,1,0),...,(1,1,1)} 八個非空索引。在 Local Attention 中,注意力范圍為:
Ωlocal?(i)=?(vi?Rlocal?,vi+Rlocal?,(1,1,1))(5)\Omega_{\text {local }}(i)=\varnothing\left(v_{i}-R_{\text {local }}, v_{i}+R_{\text {local }},(1,1,1)\right) \tag{5} Ωlocal??(i)=?(vi??Rlocal??,vi?+Rlocal??,(1,1,1))(5) 其中 Rlocal=(1,1,1)R_{\text{local}}=(1,1,1)Rlocal?=(1,1,1),注意的是這里只返回非空 voxel 的索引。

- dilated attention
注意力范圍為:
Ωdilated?(i)=?m=1M?(vi?Rend?(m),vi+Rend?(m),Rstride?(m))\?(vi?Rstart?(m),vi+Rstart?(m),Rstride?(m)),(6)\begin{array}{r} \Omega_{\text {dilated }}(i)=\bigcup_{m=1}^{M} \varnothing\left(v_{i}-R_{\text {end }}^{(m)}, v_{i}+R_{\text {end }}^{(m)}, R_{\text {stride }}^{(m)}\right) \backslash \\ \varnothing\left(v_{i}-R_{\text {start }}^{(m)}, v_{i}+R_{\text {start }}^{(m)}, R_{\text {stride }}^{(m)}\right), \end{array} \tag{6} Ωdilated??(i)=?m=1M??(vi??Rend?(m)?,vi?+Rend?(m)?,Rstride?(m)?)\?(vi??Rstart?(m)?,vi?+Rstart?(m)?,Rstride?(m)?),?(6)

其中 \\backslash\ 是集合相減運算符,Rstart?(i)<Rend?(i)≤Rstart?(i+1),Rstride?(i)<Rstride?(i+1)R_{\text {start }}^{(i)}<R_{\text {end }}^{(i)} \leq R_{\text {start }}^{(i+1)} , R_{\text {stride }}^{(i)}<R_{\text {stride }}^{(i+1)}Rstart?(i)?<Rend?(i)?Rstart?(i+1)?,Rstride?(i)?<Rstride?(i+1)?, 因此可以逐漸增大查詢步伐 Rstride?(i)R_{\text {stride }}^{(i)}Rstride?(i)?
。經過認真設計,注意力機制所能搜尋的范圍可以達到15m,而查詢的 voxel 數量可以小于50。

下圖是一個2D的注意力機制說明(可以輕松擴展到3D場景)。對于要查詢的 voxel (紅色所示),Local Attention 關注的是局部區域,淺藍色 voxel 在查詢范圍內,最終被選擇為注意力 voxel;Dilated Attention 查詢的范圍比較大(綠色所示),最終非空的 voxel 被選擇為注意力 voxel。


2.4 Fast Voxel Query

在上面設計的注意力機制中,查詢每個非空的注意力 voxel 是至關重要的。為了查詢每個注意力 voxel 可能要花費 O(Nsparse?)O\left(N_{\text {sparse }}\right)O(Nsparse??) 時間復雜度,這是十分耗時的(Waymo 數據集中 Nsparse=90kN_{\text{sparse}} = 90kNsparse?=90k),因此作者在這里提出了一個基于哈希表的快速查詢。

快速查詢流程如下圖所示,這里與之前的查詢方法不同的是,在哈希表中只需要查詢 NΩN_{\Omega}NΩ? 次,Ω\OmegaΩ 是注意力范圍,NΩ?Nsparse?N_{\Omega} \ll N_{\text {sparse }}NΩ??Nsparse??


3. Experiments

下面是實驗部分,作者分別在 Waymo 和 KITTI 數據上進行了測試。VoTr-SSD 選擇 SECOND 作為檢測框架,VoTr-TSD 選擇 PV-RCNN 作為檢測框架,將傳統的3D卷積替換為本文設計的 Transformer 結構。下面是 Waymo 驗證集上的結果。

下面是在 KITTI 數據集上的結果。這里在 SECOND 框架上提升比較多。

最后是消融實驗,可以看到不同注意力機制、dropout 參數、注意力 voxel 數量、模型參數、推理速度以及注意力權重的比較。

總結

以上是生活随笔為你收集整理的详解3D物体检测模型: Voxel Transformer for 3D Object Detection的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。