四. 基于環視Camera的BEV感知算法-PETR

目錄

    • 前言
    • 0. 簡述
    • 1. 算法動機&開創性思路
    • 2. 主體結構
    • 3. 損失函數
    • 4. 性能對比
    • 5. PETRv2
    • 總結
    • 下載鏈接
    • 參考

前言

自動駕駛之心推出的《國內首個BVE感知全棧系列學習教程》,鏈接。記錄下個人學習筆記,僅供自己參考

本次課程我們來學習下課程第四章——基于環視Camera的BEV感知算法,一起去學習下 PETR 感知算法

課程大綱可以看下面的思維導圖

在這里插入圖片描述

0. 簡述

本次課程我們再一起學習一篇非常好的多視角 3D 目標檢測工作叫 PETR,大家可以想一下,P 是什么,E 是什么,TR 我們知道是 Transformer,P 是 Position,E 是 Embedding,PE 合在一起是 Position Embedding 位置編碼,所以說我們從題目中也能看出核心思路在哪呢,在位置編碼的設計上

和之前一樣我們依然從四個方面展開,也就是算法動機&開創性工作、主體結構、損失函數以及性能對比

1. 算法動機&開創性思路

我們在講解 PETR 之前先帶大家回顧一下 DETR3D 這篇工作,因為 PETR 是針對 DETR3D 做改進的工作,大家沒有印象的可以先去復習一下之前 4.4 小節的內容

在這里插入圖片描述

DETR3D 是一篇關于多視角圖像的 3D 目標檢測工作,輸入是多視角的圖像,輸出是 3D 檢測結果,對輸入的多視角圖像用什么處理呢,圖像處理網絡提取多視角的圖像特征,那 DETR3D 用的是什么呢,是 ResNet 和 FPN,那 ResNet 作為 Backbone 提取圖像特征,FPN 是特征金字塔網絡用來處理多尺度特征,所以我們最后得到的圖像特征是什么呢,我們叫多尺度的圖像融合特征,有了圖像特征之后我們再怎么做呢,初始化一系列的 Object Query,以 Object Query 為基礎從圖像中拿特征,通過這種方式 2D 特征其實被采樣成一系列的 Object Query Feature,物體特征有了,我們后續自然可以拿來做檢測

所以我們這里再詳細拆解一下 2D 到 3D 的特征變化過程,對應圖中的 2D-to-3D Feature Transformation 模塊,我們說它名字叫這個,其實它的過程是一個反方向的過程,是一個從 3D 到 2D 的過程,有了圖像特征之后第一步初始化 Object Query,Query 的作用是隨機初始化一系列查詢向量,這是第一步,用于查詢空間當中哪里有物體,那我們具體怎么查呢,通過網絡來預測,對應圖中的第二步也就是圖中藍色箭頭所示的步驟

我們具體來講一下,Object Query 通過 Transformer 模塊來預測生成 3D reference points,我們叫參考點對應圖中的 c l i c_{li} cli?,有了參考點之后就可以通過相機內外參數將參考點逆投影回圖像空間找到參考點在圖像上對應的位置也就是 c l m i c_{lmi} clmi?,那這個過程對于圖中的第三步,也就是綠色箭頭所示的步驟,有了原始圖像中的像素位置之后我們可以找到該像素位置對應的特征或者說不同尺度的 2D 特征

那圖中給了幾種不同大小的尺度特征,有比較小的,比較中等的,比較大的,通過三種尺度特征的融合我們得到最終的也就是圖中步驟 5 所示的圖像特征,有了圖像特征之后我們就可以做預測了,那這個過程其實是迭代預測的過程,是多次 refining 的過程,我們可以不斷地得到新的 Object Query,可以不斷的更新預測,DETR3D 是通過這樣一個過程去做 3D 目標檢測任務的,回顧完 DETR3D 之后我們再來看看 PETR 的動機

在這里插入圖片描述

我們先簡單總結下上圖中的三個網絡框架:

DETR 設計流程

  • 輸入 1:2D 位置編碼
  • 輸入 2:Object Query
  • 解碼模塊:Decoder

DETR3D 設計流程

  • 輸入 1:Object Query
  • 流程 1:提取 ref point
  • 流程 2:采樣圖像特征
  • 解碼模塊:Decoder

PETR 設計流程

  • 輸入 1:3D 位置編碼
  • 輸入 2:Object Query
  • 解模模塊:Decoder

圖 (a) 是 DETR 的框架,它有什么輸入呢,有 Feature,有 2D 的 Position Embedding,2D 的位置編碼,還有什么呢,有 Query,每一個 Query 都代表一個目標,通過 Object Query 找到 2D 特征圖對應的特征,再結合 2D 位置編碼信息去迭代更新 Object Query,我們最后會得到一個檢測結果,可以看到整體流程非常簡潔

圖 (b) 是 DETR3D 的框架,有什么呢,有特征,還有什么呢,有 Query,Query 生成一系列的 reference point 參考點去 2D 圖像采樣特征,采樣完事之后去更新 Object Query 然后用來做預測

PETR 作者認為 DETR3D 的流程不是特別優雅存在一些缺陷,首先第一個問題利用參考點索引圖像特征是不合理的,也就是說參考點索引出來的圖像特征可能不是特別準確,如果參考點位置出錯了,投影回圖像位置就會產生一定的偏差,比如投影到目標區域以外的區域,從而導致采樣到的圖像特征是無效的

其次還有一個問題,作者認為 DETR3D 如果只采用參考點投影位置得到圖像特征來更新 Query 是不夠充分的,可能導致模型對于全局特征學習得不夠充分,我們也能想到它屬于一個比較 Local 的比較局部的特征,因為只有一個參考點的特征,所以說對于全局特征的學習其實不是特別充分,另外一個問題是 PETR 的作者認為像 DETR3D 的方法采樣的過程比較復雜很難落地

那所以作者在 PETR 原文中也進行了表述,PETR 通過 3D 位置編碼將多視角的 2D 圖像特征轉換為 3D 感知特征,2D 圖像特征和 3D 位置編碼融合后生成的特征我們叫 3D 感知特征。本身的 2D 特征和 3D 位置編碼合在一起我們就有了 3D 感知信息的特征表達,那使得 Query 可以在 3D 語義環境下進行更新,從而省略了這個來回反投影的過程以及特征重復采樣的過程,所以大大簡化了 DETR3D 的完整流程

2. 主體結構

我們再來看看 PETR 的模型結構是什么,其主體結構如下所示:

在這里插入圖片描述

和之前一樣,分析一個模型從輸入輸出看起,輸入是多視角圖像,以 nuScenes 數據集為例,輸入有 6 個不同視角的圖像,輸出對于 3D 目標檢測任務而言是 3D 檢測框,由目標的類別和邊界框組成,所以 PETR 功能性表述就是輸入是多視角的圖像輸出是 3D 檢測結果

那具體的框架流程是什么樣的呢,從圖中可以清晰的看出 PETR 主要包括什么呢,圖像處理模塊、圖像特征提取,圖像是怎么得到特征的,3D 坐標生成模塊,3D 位置編碼,還有解碼五個部分,那對于輸入的多視角圖像經過一個 Backbone 可以得到圖像特征,同時 3D 坐標生成器可以經過一系列的坐標轉換將圖像坐標轉化為 3D 空間中的坐標,然后 2D 圖像特征和 3D 位置坐標同時送到 3D 位置編碼器當中我們得到產生 3D 位置感知的特征,那也就是我們把 3D 位置融到了 2D 特征里面生成一系列的 Object Query 與我們得到的特征一起去得到預測結果

那上面是 PETR 整個流程模塊,我們再仔細看一下 PETR 各個模塊是怎么工作的,首先是 PETR 的 Backbone,那也就是我們之前一直說的 Image-view Encoder 圖像編碼器,作用是什么呢,是提取多視角圖像特征,輸出是啥,是圖像特征,輸入的維度是 3 × H I × W I 3\times H_I\times W_I 3×HI?×WI?,其中 3 是通道數, H I × W I H_I \times W_I HI?×WI? 是圖像尺寸, I I I 表示什么呢,表示不同視角的編號,通過一個 Backbone 之后可以得到多尺度的圖像特征,維度是什么呢,是 C × H F × W F C\times H_F \times W_F C×HF?×WF?,我們說過 C C C 是通道數, H F × W F H_F\times W_F HF?×WF? 是下采樣后的圖像尺寸也就是特征圖的尺寸

那在實現過程當中我們的 Backbone 可以用什么呢,也有很多選擇包括 ResNet 和 Swin Transformer 等等成熟的框架可以作為 Backbone 提取圖像特征,然后利用 FPN 網絡也就是我們說的 Neck 網絡進一步的得到多尺度的圖像特征,那我們前面提到過 PETR 動機是什么呢,是通過引入 3D 位置編碼從而將多視角圖像的 2D 特征轉換為 3D 位置感知特征

那么如何生成這個 3D 信息,那所以作者在這里引入了一個叫 3D 坐標生成器的方法,通過這個 3D 坐標的 Generator 可以將圖像坐標轉化為 3D 空間坐標,從而完成 2D 到 3D 的轉換,那 3D Generation 怎么做呢,如下圖所示:

在這里插入圖片描述

3D Coordinates Generator 設計流程如下

  • 1. 將相機視錐空間離散成大小為 ( W F , H F , D ) (W_F,H_F,D) (WF?,HF?,D) 的網格,網格中的每一個點用 p j m = ( u j × d j , v j × d j , d j , 1 ) T \begin{aligned}p_{j}^{m}=(u_{j}\times d_{j},v_{j}\times d_{j},d_{j},1)^{T}\end{aligned} pjm?=(uj?×dj?,vj?×dj?,dj?,1)T? 表述
  • 2. 以 nuScenes 為例,包含 6 個視角的相機圖像,相機 i i i 的視錐空間中的一個點 j j j 在 3D 世界空間的坐標用 p i , j 3 d = ( x i , j , y i , j , z i , j , 1 ) T p_{i,j}^{3d}=(x_{i,j},y_{i,j},z_{i,j},1)^{T} pi,j3d?=(xi,j?,yi,j?,zi,j?,1)T 表示
  • 3. 通過相機內外參可以將相機視錐空間轉換到 3D 世界坐標 p i , j 3 d = K i ? 1 p j m p_{i,j}^{3d}=K_i^{-1}p_j^m pi,j3d?=Ki?1?pjm? K i K_i Ki? 是相機 i i i 的轉換矩陣
  • 4. 最后進行歸一化

首先相機的視錐空間可以離散為一系列的網格,維度是 W F × H F × D W_F\times H_F\times D WF?×HF?×D 的三維網格,如下圖所示所示,網格中的每個點用什么表示呢,用 p j m p_j^m pjm? 表示, u j u_j uj? v j v_j vj? 是像素坐標, d j d_j dj? 是深度值,每一個 j j j 表示當前離散化網格內的一個點,前面我們提到過 PETR 輸入是什么,是多視角圖像,那以 nuScenes 為例包含 6 個視角的相機圖像,我們相機 i i i 在視錐空間中的第 j j j 個點在 3D 空間應該表示成 p i , j 3 d p_{i,j}^{3d} pi,j3d? i i i 是第 i i i 個相機,后面的 j j j 是相機空間中的第 j j j 個點, p i , j 3 d p_{i,j}^{3d} pi,j3d? 就表示第 i i i 個相機中的第 j j j 個點的 3D 坐標,用 ( x i , j , y i , j , z i , j ) (x_{i,j},y_{i,j},z_{i,j}) (xi,j?,yi,j?,zi,j?) 來表示

在這里插入圖片描述

那怎么得到 p i , j 3 d p_{i,j}^{3d} pi,j3d? 呢,分析它是我們的主要目的,我們怎么能得到它呢,從 p j m p_{j}^{m} pjm? 能不能得到它呢,是可以的,通過相機坐標系到世界坐標系的轉換公式,也就是通過相機內外參矩陣可以將 p j m p_{j}^{m} pjm? 變換到 p i , j 3 d p_{i,j}^{3d} pi,j3d? 上,那也就是我們上面提到的 3D 坐標生成的第三步, K i K_i Ki? 是相機 i i i 的轉換矩陣,通過這樣一個變換,我們就可以把 p j m p_{j}^{m} pjm? 變換到 p i , j 3 d p_{i,j}^{3d} pi,j3d?,那這個變換其實很簡單乘上轉換矩陣就好了,每個視角的圖像都經過相應的轉換后可以得到 6 個視角下的不同坐標轉換結果

在這里插入圖片描述

上面這個圖給得也很清楚,它表示 6 個視角的相機在 3D 空間中所覆蓋的區域范圍,為什么會有 6 種顏色呢,因為有 6 個視角下不同的轉換結果,有沒有重疊區域呢,有一定的重疊區域,6 個視角下不同的轉換結果組成了完整的 3D 空間,那最后我們得到 3D 坐標之后然后再進行歸一化,PETR 作者就得到 3D 坐標生成了。那所以到這里 3D 坐標 Generator 任務就完成了,將每個視角相機空間的像素坐標轉換到對應的 3D 世界坐標中從而為后續的 3D Position Encoder 做準備

在這里插入圖片描述

那這里可能稍微比較難理解一些,所以說得稍微多一點,希望大家可以理解這個 3D 坐標生成器是怎么工作的,我們得到 3D 坐標之后我們現在有了什么東西呢,一個是圖像的 2D Feature, F i 2 d F_{i}^{2d} Fi2d? 表示的是第 i i i 相機下的 2D 圖像特征,一個是 P i 3 d P_{i}^{3d} Pi3d? 表示的是第 i i i 個相機下生成的坐標網格,有了 F i 2 d F_{i}^{2d} Fi2d? 有了 P i 3 d P_{i}^{3d} Pi3d?,我們要做什么,PETR 作者引入了 3D Position Encoder 將坐標信息編碼到 2D 圖像當中,如上圖所示,也就是說通過一個變換網絡可以得到我們認為融合了坐標位置的 3D 感知特征,那有一個表述詞叫 Position-aware Feature 也就是能感知 3D 位置的特征

所以總的來說 3D Position Encoder 完成的是哪個功能呢,其實就是位置編碼的功能,我們怎么樣把位置信息可以編碼到特征當中呢,我們接著看

在這里插入圖片描述

3D Position Encoder 設計流程

  • 輸入 1:2D 圖像特征
  • 輸入 2:3D 坐標
  • 步驟:特征-坐標自適應映射
    • 步驟 1:2D 特征卷積進行通道降維
    • 步驟 2:3D 坐標進行位置編碼
    • 步驟 3:特征整合,再展平
  • 輸出:3D Position-aware Feature

我們這里的網絡就是剛提到的位置編碼網絡,也就是 PETR 里面的 Position Encoder 模塊,模塊的輸入有兩個,一個是 2D Feature 是我們得到的圖像特征,一個是 3D 世界坐標,那作者用兩個支路分別處理這兩個輸入,那對于 2D 特征圖作者直接用一個 1x1 的卷積去做的,那對于 3D 坐標我們發現一個事情,如果想和圖像特征直接相加的話,能不能直接相加呢,不行,維度不一樣

對于 3D 坐標而言,每一張圖像每一個視角的圖像是 C C C 維通道的, N N N 表示的是相機的數量, H F × W F H_F\times W_F HF?×WF? 是圖像尺寸,那后面 D × 4 D\times 4 D×4 是什么呢,是每一個相機視角下 3D 空間位置的坐標維度,那這個 D D D 是深度值,我們知道是離散化的深度網格的深度量,4 其實是一個 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1) 的坐標,那這個 D × 4 D\times 4 D×4 維的向量要怎么和通道做對齊呢

那所以作者引入了一個 3D PE 的模塊,這個模塊的作用其實就是把通道維度變成和圖像的通道維度一樣,這樣它們倆就可以相加了,那相加完事之后就得到了后續的特征,我們叫 F 3 d F^{3d} F3d F 3 d F^{3d} F3d 的維度跟實際的我們 2D Feature 的維度是不一樣的,維度不一樣的點在于得到的 F 3 d F^{3d} F3d 我們認為它是融合了 P 3 d P^{3d} P3d 的特征也就是最終的 Position-aware Features 其實是融合了位置信息的特征的

那這個特征由于編碼了位置信息 PETR 作者認為它更適合用來做任務,那這個 ? 的意思是叫 Flatten 一個展平,那把原本的 N 個相機特征進行展平可以得到 6 個,那這個展平后的特征是作為 Decoder 的輸入的,和 Object Query 一起用來預測最后的檢測結果

那所以后續是利用這個 Query Generator 去生成一系列的可學習的 Query,那初始化其實是一個比較復雜的過程,所以 PETR 作者為了降低初始化場景的收斂難度,在 3D 空間當中以均勻分布的方式先初始化一些可學習的 3D anchor,這些 anchor 通過 MLP 去生成所謂的 Object Query,然后將 3D Position-aware Feature 和 Object Query 一起喂給 Decoder,可以迭代更新 Object Query 然后可以去做檢測

后續這個流程其實與常見的 DETR、DETR3D 都是一樣的,后續的損失函數其實都是一樣的,有分類損失,還有回歸損失等等,所以到這里 PETR 模型的主體結構我們已經說清楚了

3. 損失函數

我們再把完整流程過一遍,PETR 的框圖如下所示:

在這里插入圖片描述

PETR 輸入是多視角圖像,輸出是 3D 目標檢測結果,包括目標的類別和位置信息,那具體而言對于輸入的多視角 RGB 圖像首先經過一個共享的 Backbone 提取多視角圖像特征,同時利用 3D 坐標生成器,我們叫 3D Coordinates Generator 將相機視錐空間轉化為 3D World space 世界坐標空間,將 2D 特征和 3D 世界坐標一起輸入到 3D Position Encoder 一個 3D 坐標編碼的網絡生成 3D Position-aware Feature,3D 位置感知的特征,和得到的 Object Query 一起喂給 Decoder 最后用來生成 3D 目標檢測結果,這就是一個完整流程

4. 性能對比

我們來看看性能,如下表所示:

在這里插入圖片描述

從表 1 來講是 nuScenes 驗證集的結果,作者也實驗了不同的 Backbone 包括 DLA、ResNet50、ResNet101、Swin-Transformer 等等,在不同的分辨率和不同的預訓練模型之間來看性能的影響,那圖像 size 也實驗了很多,比如 1600x900、1056x384 等等,從實驗結果看分辨率越高的圖像性能是要明顯好于低分辨率圖像的,那更強大的 Backbone 性能也是更好的,那與我們常見的預期是一樣的

在這里插入圖片描述

在這里插入圖片描述

另外作者還給了一個什么呢,還給了 PETR 收斂性和速度的分析,與 DETR3D 相比 PETR 在初始階段收斂速度比較慢并且需要比較長的訓練時間才能收斂,那這其實也很好理解,因為我們說 PETR 是一種隱式位置編碼的關系,也就是說沒有顯示的告訴 PETR 這個網絡哪里是我們對應的特征,所以說僅僅依靠 Position Encoder 的操作,3D 位置編碼融合到 2D 特征當中是一個比較漫長的過程,同時作者還給了一個什么呢,還比較不同 Embedding 方式對性能的影響,也就是表 3,從表中能看到通過 3D 的 Position Embedding 性能提升還是比較明顯的

在這里插入圖片描述

另外一個是表 5,表 5 是一個消融實驗部分,那實驗中這個詳細的說明大家可以去看一下文章是怎么表述的,我們這里提一個點希望大家注意一下也就是表中紅色框標注的部分,從 3D 世界坐標得到 3D Position Embedding 需要什么呢,MLP,通過實驗作者發現如果這個 MLP 使用 3x3 的卷積模型將無法收斂,mAP 是等于 0 的,那作者認為這是由于什么呢,由于 3x3 的卷積會破壞 2D 特征和 3D 位置間的對應關系,那這個其實是一個比較有意思的發現

在這里插入圖片描述
在這里插入圖片描述

另外是一些可視化的結果,大家可以看一下,這里就不詳細的展開了,上面的圖是一個相似度的比較,可以看到我們的位置編碼和特征位置其實對應的相似度是很明顯的,比如說圖中框出的紅色的部分,我們在相對應的圖像上其實也能找得到它的相似度比較明顯的部分,比如我們左視圖上偏右側的部分,比如出現在中間也能很好的響應到,比如出現在右側也可以很好的響應到,那這里其實就說明了 Position Embedding 的一個作用,就 Position Embedding 可以很好的感知到圖像和圖像位置之間的關系

在這里插入圖片描述

另外還有一些可視化的結果,那 PETR 作者還是比較實在的,沒有過分吹噓自己算法怎么怎么好,還給出了一些 failure case 也就是失敗的案例,圖中紅色和綠色部分其實都是失敗的案例,紅色部分是什么失敗呢,是漏檢,我們看到上面就是 GT 的結果,如果 GT 中有框實際檢出沒有框的話,我們稱為漏檢。那漏檢的對象主要是遠處的車輛和一些小目標,比如交通錐一些比較難測的一些目標。另外一個是綠色部分,綠色部分其實是誤檢,屬于類別的誤檢,就像檢測目標本來是車,結果算法識別成卡車了,那就屬于類別不分

5. PETRv2

另外這里給大家補充一下就是說我們 PETR 和 PETRv2 的版本,PETR 之后曠世很快就發布了 PETRv2,那 v2 整體框架還是建立在 PETR 基礎上的,它主要區別其實在于一個是時域的建模,我們可以看到下面 PETRv2 的框圖中引入了 t-1 的時域,也就是時序的信息,另外一個是引入了一個多任務學習,那這個多任務也就不僅僅包括我們的 detection head 也就是檢測頭了還包括分割頭還包括車道線

那所以這里包括兩個關鍵詞,一個是時序建模另一個是多任務學習,時域建模的一個關鍵問題是什么,是要如何在 3D 空間中對齊不同幀的位置關系,像我們上節課講過的 BEVDet4D 通過姿態變換的方式顯式的對齊幀與幀之間的 BEV 特征,我們要知道顯式對齊,那 PETR 一直在強調的一個概念是什么,叫隱式對齊

它覺得我并不用顯式的告訴網絡那個變換矩陣是什么,網絡是可以自己學到變換矩陣的,我們不用很明白的告訴對齊要怎么做,網絡可以自己學明白,那所以作者發現一個問題,是只要對齊相鄰幀的 3D 目標其性能就可以表現得很好,而 3D 目標是什么東西,是 PETR 前面 Generator 做的事情

所以說時域建模中不同幀的對齊問題就已經解決了,通過生成的 3D 坐標點和歷史的 3D 坐標點,它們兩個做對齊可以得到一個新的位置表示,拿這個位置表示和得到的特征送入到 Feature Position Encoder 這個網絡當中它就可以得到一個我們認為叫 Position-aware Feature,融合了時序信息,融合了位置信息的 Feature,拿這個 Feature 去做檢測那自然可以得到更好的結果

另外一個是 Object Query 發生了變化,由于 PETRv2 是多任務處理的,所以針對不同任務設計了不同的 Query,那說了這么多我們一起來看一看這個網絡

在這里插入圖片描述

首先看模型還是先看輸入輸出,和 PETR 一樣 PETRv2 的輸入也是多視角輸入,由于是多任務的,輸出也比較多,包括它的一些檢測框、分割、車道線等等,所以輸出是一個多任務的輸出。那對于多視角圖像輸入和 PETR 一樣,PETRv2 是通過 ResNet、Swin Transformer 等等提取特征,那得到圖中淺藍色的 2D Feature,通過 3D 坐標生成可以得到圖中橙色的 3D 坐標,那當前幀是圖中的 t frame,歷史幀是 t-1 frame,那在 PETR 中 2D Feature 和 3D 坐標怎么做的,通過我們說的 Position Encoder 將 3D 位置坐標信息編碼到 2D 特征當中,我們得到一個 Position-aware Feature

在 PETRv2 中怎么做呢,紅色框 1 的部分是第一個區別,PETRv2 因為要考慮時序信息,所以說首先要通過姿態變換,將前一幀的 3D 坐標變換到當前幀的坐標系當中,然后將當前幀和前一幀的 3D 坐標信息和 2D 特征一起送到后續的 Encoder 當中,關聯 2D 特征和 3D 坐標之間的關系。另外一個我們得到了融合時序的 BEV 特征之后怎么做檢測呢,那就是圖中 3 這個模塊所圈出的內容,原本的單路學習變成多路學習,換句話說就是 PETR 只能做 3D 目標檢測,而 PETRv2 不僅可以做 3D 目標檢測還可以做車道線檢測,BEV 分割等等,而且性能都是不錯的

所以 PETRv2 的名字才敢說它是一個 unified framework perception,它是一個 3D 感知的聯合框架,那這個聯合統一的一致的框架是什么呢,其實是對于多任務而言的,把不同任務統一到了 PETRv2 中,在實驗性能方面同時也做了很多的實驗比較,畢竟是大廠所以說顯卡資源還是挺豐富的,大家感興趣的可以自己去看一下

那我們有關 PETR 和 PETRv2 一系列的課程講解到這里就結束了

總結

這節課程我們學習了一個非常經典的純視覺 BEV 感知算法 PETR,PETR 的作者認為像 DETR3D 這種通過參考點來采樣圖像特征更新 Query 的方式可能會導致采樣的特征不是特別準確,存在一定的偏差,此外參考點比較 Local 對于全局特征的學習不夠充分,而且采樣過程比較復雜難落地。所以 PETR 的作者考慮的是引入 3D 位置編碼將多視角的 2D 圖像特征轉換為 3D 位置感知特征,其中的 3D 信息通過 3D 坐標器生成,具體是將相機視錐空間離散成網格,通過相機內外參將網格中的每個點轉換到 3D 世界坐標下,融合了位置信息的 3D 感知特征會和 Object Query 一起送入到 Decoder 來生成 3D 目標檢測結果,這就是 PETR 完整的流程。此外,我們還簡單介紹了一下 PETRv2,它與 PTER 的主要區別在于時序建模和多任務學習,引入時序信息可以生成更好的特征,不過需要保證不同幀的對齊,多任務意味著不僅僅有檢測任務還包含分割、車道線等等

OK,以上就是 PETR 的全部內容了,下節我們學習另外一篇非常經典的 BEV 感知算法 BEVDepth,敬請期待😄

下載鏈接

  • 論文下載鏈接【提取碼:6463】
  • 數據集下載鏈接【提取碼:data】

參考

  • [1] Liu et al. Petr: Position embedding transformation for multi-view 3d object detection
  • [2] Liu et al. Petrv2: A unified framework for 3d perception from multi-camera images

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371883.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371883.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java EE 6 VS Spring 3:Java EE已經殺死了Spring? 沒門!

介紹 幾天前,我在聽Java Spotlight Podcast的插曲85 。 在這次演講中, Bert Ertman和Paul Bakker討論了從Spring遷移到Java EE。 基本上,在他們的介紹中,他們說,如今,選擇Spring而不是Java EE是沒有意義的。…

usb檢測串口是哪個角_怎樣測試串口和串口線是否正常

一步:把串口線或者USB轉串口線插到計算機上。二步:打開串口調試助手接著選擇串口,串口線和 USB 轉串口的端口號查看路徑:電腦上--右鍵--屬性--硬件--設備管理器-端口(COM 和LPT),點開端口前面的號查看即可。注釋:1、US…

NodeJS常用模塊介紹

收集了NodeJS開發中常用的一些模塊。MVC框架 - Express Express 是輕量靈活的Nodejs Web應用框架,它可以快速地搭建網站。Express框架建立在Nodejs內置的Http模塊上,并對Http模塊再包裝,從而實際Web請求處理的 功能。它支持多種前端模板&…

Java泛型面試問題

Java面試中的通用面試問題在相當長的時間內在Java 5周圍越來越普遍,許多應用程序都轉移到Java 5上,并且幾乎所有新的Java開發都發生在Tiger(Java 5的代號)上。 泛型和Java 5功能(例如Enum)的重要性&#xf…

隱層元素閃一下_太陽一直依靠什么元素在燃燒,地球上的重元素又是怎么來的?...

本文基于回答網友一個這樣的問題:太陽目前氫核聚變是氦碳氧穩定燃燒地球上的鐵鎳重元素哪里來的?可以說,這是一個毫無邏輯亂七八糟的問題,但既然邀請回答,就從中挑出幾個稍顯合理的問題說明一下。太陽核心每時每刻都在…

基于Token的WEB后臺認證機制

基于Token的WEB后臺認證機制 幾種常用的認證機制 HTTP Basic Auth HTTP Basic Auth簡單點說明就是每次請求API時都提供用戶的username和password,簡言之,Basic Auth是配合RESTful API 使用的最簡單的認證方式,只需提供用戶名密碼即可&#xf…

JSF基于事件的溝通:過時的方法

用JSF編寫的Web應用程序由相互交互的bean組成。 在開發Web應用程序時,bean之間的通信是主要的設計模式之一。 有時,一個bean需要向其他bean發送事件,以通知它們某些更改或其他任何更改。 我們通常可以將托管bean或Spring bean注入另一個bean的…

mysql調優 基礎

MySQL調優可以從幾個方面來做:1. 架構層:做從庫,實現讀寫分離;2.系統層次:增加內存;給磁盤做raid0或者raid5以增加磁盤的讀寫速度;可以重新掛載磁盤,并加上noatime參數,這…

saltstack

第一:安裝前準備: 聲明我用的是ubuntu 16.04的系統 1.修改主機名,并保證兩臺機器可以互相ping同主機名 ip1 master_hostname ip2 slave_hostname 第二:安裝 服務器安裝 yum install salt-master -y客戶端安裝 yum install salt…

ios 百度地圖指定區域_獲取百度地圖可視區域范圍的數據

有個業務場景,需要根據獲取到的地圖區域顯示,根據相應的經緯度反查 左側區域的會議室。思路:1.得到百度地圖可視區域--可視區域的中心點2.可視區域的四個角的其中兩個(東北角西南角)http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_refer…

使用WS-Trust / STS采樣器擴展JMeter

JMeter沒有對WS-Security或WS-Trust的任何內置支持,這使我為JMeter開發了此STS Sampler –可以在負載測試STS時使任何人的生活變得更好。 首先,您需要擁有Apache JMeter發行版。 我正在使用v2.7。 然后,您可以從此處下載sts.sampler.zip –解…

分享一個使用閉包對一個對象繼承方式

function Person(name,age){this.name name;this.age age; }//定義一個new函數 繼承了對Person的繼承 function New(obj){return function(){var o {"__proto__":obj.proto};obj.apply(o,arguments);}return obj; }var n new New(Person)("對象繼承了person…

vue怎么改logo_vue全家桶項目構建教程

前言vue是現階段很流行的前端框架,很多人通過vue官方文檔的學習,對vue的使用都有了一定的了解,但再在項目工程化處理的時候,卻發現不知道改怎么更好的管理自己的項目,如何去引入一些框架以及vue全家桶其他框架的使用&a…

EclipseLink MOXy作為JAXB提供者

EclipseLink MOXy是JAXB提供程序,并且是內置在JDK中的默認JAXB提供程序的引人注目的替代品。 首先是一個簡單的測試,將Java對象編組為XML: 這是模型: XmlRootElement(nameMemberDetailsRequest, namespacehttp://bk.org/members…

monkeyrunner多點觸摸

思路是:在屏幕上某個位置按著不放:device.touch(x,y,md.DOWN) 然后再做一個滑動的操作:device.drap((x1,y1),(x2,y2),0.2,10) 然后再松開按鍵:device.touch(x,y,md.UP) #codeing:utf-8 from com.android.monkeyrunner import Monk…

雅虎前端優化的35條軍規

閱讀目錄 內容部分css部分js部分javascript, css 圖片 cookie移動端 服務器摘要:無論是在工作中,還是在面試中,web前端性能的優化都是很重要的,那么我們進行優化需要從哪些方面入手呢?可以遵循雅虎的前端優化34條軍規&…

stm32 內部sram大小_在SRAM、FLASH中調試代碼的配置方法(附詳細步驟)

聊天界面發送嵌入式大雜燴獲取1TB大雜燴資料包STM32的FLASH擦寫次數有限(大概為1萬次),所以為了延長FLASH的使用時間,我們平時調試時可以選擇在SRAM中進行硬件調試。除此之外,SRAM 存儲器的寫入速度比在內部 FLASH 中要快得多,所以…

Spring Profile模式示例

最近,我們介紹了Spring Profiles的概念。 此概念是針對不同部署環境的輕松配置區分符。 直接的用例(已提出)是對相關類進行注釋,以便Spring根據活動的配置文件加載適當的類。 但是,這種方法可能并不總是適用于常見的…

Android 樣式 (style) 和主題(theme)

轉載:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 樣式和主題 樣式是指為 View 或窗口指定外觀和格式的屬性集合。樣式可以指定高度、填充、字體顏色、字號、背景色等許多屬性。 樣式是在與指定布局的 XML 不同的 XML 資源中進行定義。 Android 中的樣式與…

自定義控件_VIewPager顯示多個Item

一直以來想搞明白這個不完全的VIewPager是怎么做到的&#xff0c;有幸看到這片篇文章 有二種實現方法 1.設置的屬性 1.clipChildren屬性 2.setPageMargin 3.更新Item外界面 2.重寫getPageWidth public class MultiplePagerAdapter extends PagerAdapter { private List<I…