> [name=謝朋諺(Adam Hsieh)]
> [time=Wed, Sep 13, 2023 10:39 AM]
---
# PGD: Probabilistic and Geometric Depth: Detecting Objects in Perspective
[論文連結](https://arxiv.org/pdf/2107.14160.pdf)
{%pdf https://arxiv.org/pdf/2107.14160.pdf %}
## Outline
> [TOC]
---
## Reference
> [Arxiv | 3D Detection | PGD](https://zhuanlan.zhihu.com/p/394978938)
> [CoRL 2021单目三维目标检测算法PGD:Probabilistic and Geometric Depth: Detecting Objects in Perspective](https://zhuanlan.zhihu.com/p/468643418)
> [Monocular 3D Detection总结(二)](https://zhuanlan.zhihu.com/p/452444655)
---
## 摘要重點
- 使用機率表示的方式來表達深度的不確定性。
- 將深度劃分為離散的區間,然後通過分佈的期望值來計算深度值。
- 從分佈裡面的前 K 個信心分數平均值是為深度的不確定性。
- 本論文模型是基於 FCOS3D 去實現的。

:::info
:bulb: 為了解決 Monocular 3DOD 中深度的估計問題提出以下解法:
(a) 使用機率表示來預測每個深度的不確定性。
(b) 進一步構造幾何關係圖來增強上下文之間關係
(c) 在 KITTI 3D Car Detection 上,所提出的方法在性能和速度方面均顯著優於其他工作。
:::
## Preliminary and Motivating Study

:::info
:bulb: PGD Framework Overview.
- 建立在 FCOS3D 的做法,只針對深度預測的部分多做了一些客製化。
- 導入 Probabilistic depth estimation 來對 Uncertainty 進行建模,然後用深度傳播圖導出幾何深度,最後將它們融合以獲得最終的深度預測。
:::
- 如上圖左側所示,總體有兩個分支,分別用於 classification 和 localization。
- 對於 Detector 的 regression 分支主要預測 3D 屬性,包括相對於投影 3D 中心的偏移量 $\triangle x$、$\triangle y$、深度 $d$、3D 尺寸 $w^{3D}$、$l^{3D}$、$h^{3D}$、旋轉 $\theta$ 的 sin 值、方向類別 $C_\theta$、centerness $c$,以及輸出 dense map 上每個位置到 2D 框 $l$、$r$、$t$、$b$ 四個邊的距離。
## Approach
### Uncertainty Modeling with Probabilistic Representation
- 如上圖所示,假設輸入特徵圖的形狀為 $H \times W$,則 Directly Depth Regression 輸出可以表示為 $D_R \in \mathbb{R}^{H \times W}$。
- 本文將深度區間統一量化為一組離散值,假設檢測範圍為 $0 ∼ D_{max}$,離散單元為 $U$,則會有 $C = \lfloor D_{max}/U\rfloor + 1$ 個分割點。
- 本文引入與 Directly Depth Regression 平行的新 head 模塊以便生成機率圖 $D_{PM}$,假設分割點的權重向量為 $\omega \in \mathbb{R}^C$,則機率輸出圖將可表示為: $$D_P=\omega^T softmax(D_{PM})$$
- 其中 $D_P$ 為機率深度。
- 除了機率深度也可以得到深度的信心分數: $s^d\in S_D$
- 實際應用是在 $U=10m$ 的條件下計算深度值的 top-2 信心分數的平均值;在 Inference 的時候,它將乘以 Center-ness 和分類分數作為預測的最終排名標準。
- 之後利用 data-agnostic 的單一參數 lambda 的 sigmoid 值來融合 $D_R$ 和 $D_P$,可得:$$D_L=\sigma(\lambda)D_R+(1-\sigma(\lambda))D_P$$
### Depth Propagation from Perspective Geometry
**Perspective Relationship**:
- 假設相機內參:$$P=\begin{pmatrix}
f & 0 & c_u & -fb_x \\
0 & f & c_v & -fb_y \\
0 & 0 & 1 & -fb_c
\end{pmatrix}$$
- $f$ 是焦距
- $c_u$, $c_v$ 是相機照片水平和垂直的中心
- $b_x$, $b_y$, $b_z$ 是相對於相機的基準線(KITTI 是非零數值,nuScenes 則是 0)
- 這裡使用的焦距值適用於大部分相機。
- 一個相機的 3D 點座標 $x^{3D}=(x,y,z,1)^T$ 可以被投影在圖片的 2D 座標 $x^{2D}=(u',v',1)^T$ 可表示為: $$dx_{2D}=Px_{3D}$$
- 為了簡化結果取代 $v'$ 為 $v+c_v$,且 $v$ 代表與地平線的距離(照片座標往下是 positive):$$vd=f(y-b_y+c_vb_z)$$
- 上面這公式對於 $u$ 也是一樣的道理。
- 考慮到所有物體都是在地面上的,所有物體底部中心的 $y$ 值應該要是一樣的,所以我們只考慮 $v$ 的關係,假設有兩個物體 1. 和 2.,這個中心深度間的可以被推導為:$$d_2=\dfrac{v_1}{v_2}d_1+\dfrac{f}{v_2}(y_2-y_1)\thickapprox\dfrac{v_1}{v_2}d_1+\dfrac{f}{2v_2}(h^{3D}_1-h^{3D}_2)\triangleq d^P_{1\to 2}$$
- 我們就可以透過上面公式根據 3D 中心高度的差別透過 $d_1$ 準確地預測 $d_2$。
- 除此之外可以利用底部高度相似的近似關係,$y_2-y_1$ 可以被 3D box 高度一半值的差值 $\dfrac{1}{2}(h^{3D}_1-h^{3D}_2)$ 來取代。
- 透過上面這個關係當 $h^{3D}_1=h^{3D}_2$ 則 $v_1d_1=v_2d_2$,就可以想成當一個物件接近消失線時代表它是非常遠的,但這也有可能導致一些錯誤,假設 $|(y_2-y_1)-\dfrac{1}{2}(h_1-h_2)|=\delta$ 深度誤差為 $\triangle d=\dfrac{f}{v_2}\delta$,當 $\delta=0.1m, v_2=50(pixels)$ 則 $\triangle d$ 大概是 1.5m,雖然對於 30m 遠的物體 ($v_2=50$) 是可以接受的,但仍然需要

:::info
:bulb: 透過透視幾何可以沿著綠色箭頭表示其他物體可靠的深度預測,如第 2 台車可以透過第 1,3,4 台車來幫助模型精確預測物體的深度,也就是透過整體上下文幫助提高 Inference 結果。
:::
**Graph-Based Depth Propagation**
- 如上圖,假設我們有 N 個預測的物件 $\mathcal{P}=\{1,2,...,n\}$,我們可以在給定物件 $i$ 的深度 $d^P_{j \to i}$ 而所有 $j\in\mathcal{P}$,幾何深度可以定義為: $d^G_i\in D_G$
- 根據作者觀察,同一類別鄰近的物體可以很好的滿足同一地面條件,因此本文選擇以下三個最重要的因素來決定哪些 edges 更有影響性跟可信賴,包含深度信心值 $s^d_i$、2D 深度分數 $s_{ij}^{2D}$、還有分類相似度 $s^{cls}_{ij}$,後兩個和整體的 edge score $s^e_{j\to i}$ 可被計算為:$$s^{2D}_{ij}=1-\dfrac{t^{2D}_{ij}}{t^{2D}_{max}},\ \ \ s^{cls}_{ij}=\dfrac{f_i\cdot f_j}{||f_i||_2||f_i||_2},\ \ s^e_{j\to i}=\dfrac{s^d_j\cdot s^{2D}_{ij}\cdot s^{cls}_{ij}}{\sum^k_{j=1}s^d_j\cdot s^{2D}_{ij}\cdot s^{cls}_{ij}}$$
- $t^{2D}_{ij}$ 為物件 $i$ 和 $j$ 投影中心的 2D 距離。
- $t^{2D}_{max}$ 為影像對角長度。
- $f_i$ 和 $f_j$ 來自分類分支的兩個物件信心值向量輸出。
- $k$ 是 edge 修剪後的最大數量 (top-k 個 edge score 被保留的意思)
- 每個 edge score 被用來當作閘門控制,因此每個頂點根據他們的重要性來做用於 edge:$$d^G_i=\sum^k_{j=1}s^e_{j\to i}d^P_{j\to i}$$
- 記住 geometric depth map $D_G$ 是不需要學習的參數,所以為了避免被影響會去掉這一部分的梯度反向傳播,只關注在如何整合 $D_L$、$D_G$。
### Probabilistic and Geometric Depth Estimation
- 從上面章節可以得到兩個深度預測 $D_L$,以及基於圖的上下文預測中得到深度 $D_G$,然後用一種學習方式將兩種互補融合。
- 考慮到他們動態的關係結合二者是更為複雜的問題,因此進一步引入一個分支來生成一個 location-aware weight map $\alpha\in \mathbb{R}^{H\times W}$ 公式可表示為:$$D=\sigma(\alpha)\circ D_L+(1-\sigma(\alpha))\circ D_G$$
- 這個融合的深度 $D$ 取代了直接回歸的 $D_R$,並且是用 end-to-end 的 smooth L1 loss 進行。
- 加入了中間的約束 ($\sigma$) 可以幫助訓練更加穩定,但不會幫出提升效果。
## Experiments
### Datasets & Evaluation Metrics
**Datasets**:
- KITTI
- training: 3712
- validation: 3769
- testing: 7518
- Metrics: $AP_{BEV}$、$AP_{3D}$
- nuScenes 共有 1000 個場景,包含 6 個 camera 的 RGB 影像,5 個 Radars 還有 1 個 LiDAR 資料,共有 1.4M 個包含 10 種類別的 3D bboxes 標記。
- training: 700 場景
- validation: 150 場景
- testing: 150 場景
- 使用 mAP 跟 NDS 作為主要 Metrics,還有一些這份資料集常用的 metrics
### Implementation Details
**Network Architectures**
- 主要基於 FCOS3D
- Backbone 使用 ResNet101
- Neck 使用 FPN
- Detection Heads 共享多個 level 的 Feature map 輸出,並用三個 scales factor 來區分它們的最終回歸結果,包括偏移量、深度、大小。
- 深度估計 module 的超參數,$U$ 設為 10m,$k$ 設置為 5。
**Training Parameters**
- 所有實驗都是隨機初始網路。
- 使用 SGD Optimizer 進行訓練。
- 採用 gradient clip 和 warm-up 策略
- Learning rate 為 0.001
- Warm-up 迭代次數為 500,比率為 0.33
- Batch Size 在不同資料集 nuScenes/KITTI 為 32/12 並在 16/4 GTX 1080Ti GPU 上。
**Data Augmentation**
- 僅使用水平影像翻轉來進行增強。
### Quantitative Analysis


### Ablation Studies



## Conclusion
- 提出了一種新穎的方法,利用透視中的幾何關係來構建 connecting instance estimation 與 Uncertainty 的圖,從而更準確地預測深度。
# Appendix
## Implementation Details
### Local Geometric Constraints

- 考慮到 Detector 在 2D car 檢測上可以達到 90% 的準確度,本文將 2D 定位添加到模型裡面,並用它來規範 3D 輸出。
- 如上圖所示,在估計的 2D 框和 3D 預測的外部 2D 框之間添加了一致性損失(GIoU loss),以增強最後結果,這對於小型 KITTI 資料集非常有用。
:::warning
:warning: 請注意,由於回歸精確深度的困難,本文在計算一致性損失時使用 Ground Truth 的深度來推導 3D bounding box。
:::

:::info
:bulb: 將 2D 定位添加到目標中,並使用相對可靠的 2D 框來規範 3D 預測。
- 第 1 列是一般的 3D 框 detecion 結果,第 2 列是使用了 2D box 來限制 3D 結果。
- 可以看到 Baseline 預測的大型物件方向非常不准確。
- 將更可靠的 2D 定位添加到我們的目標中,以規範模型的 3D 預測,簡單的局部約束可以緩解這個問題,同時不會給 Inference 帶來額外的計算成本。
:::
### Loss
**Overall Loss Design**
- 使用 focal loss 來做分類 loss: $$L_{cls}=-\alpha(1-p)^\gamma logp$$
- $p$ 是分類機率
- $\alpha=0.25$
- $\gamma=2$
- 對於在 nuScenes 的 Attributes Classification 這邊使用簡單的 softmax classification loss: $L_{attr}$
- Regression Branch 這邊除了 centerness 以外其他都是使用 smooth L1 loss:$$L_{loc}=\sum_{b\in(\triangle x,\triangle y,d,w,l,h,\theta,v_x,v_y)}SmoothL1(\triangle b)$$
- $\triangle x,\triangle y,d,w,l,h,\theta$ 的 error 權重都是設為 1,而在 $v_x, v_y$ 則是 $0.05$
- 使用 softmax + binary cross entropy (BCE) loss 作為方向的分類表示為:$L_{dir}$。
- centerness regression 定義為 $L_{ct}$
- 對於 local geometric constraints 也就是預測的 2D box 定義為 $B_{2D}$,3D boxes 投影出來的最小外接 2D boxes 定義為 $B_{proj}$,則 consistency loss 可定義為:$$L_{geo}=GIoU(B_{2D},B_{proj})$$
- 最後的總 loss:$$L=\dfrac{1}{N_{pos}}(\beta_{cls}L_{cls}+\beta_{attr}L_{attr}+\beta_{loc}L_{loc}+\beta_{dir}L_{dir}+\beta_{ct}L_{ct}+\beta_{geo}L_{geo})$$
- $N_{pos}$ 代表 positive 的預測數量
- $\beta_{cls}=\beta_{attr}=\beta_{loc}=\beta_{dir}=\beta_{ct}=\beta_{geo}=1$
- $L_{attr}$ 跟 $L_{loc}$ 只適用在 nuScenes。
**Specific Loss Designs for KITTI experiments**
- 將 8 個關鍵點(3D boxes 的 8 個點)相對於前景點的 2D 偏移量表示為 $k \in \mathbb{R}^{1×16}$ (我猜是指 2D x,y 座標,8 個點所以有 16 個維度),然後我們將這些偏移量作為上面公式 $L_{loc}$ 中 $b$ 的 16 個附加維度,並將其權重設置為 0.2。
- 為了使 FPN 的學習穩定,本文對這些偏移量進行 Normalized,就像將這些偏移量 Normalized 到 2D 框的四個邊一樣。
- 除此之外這邊也加強了 uncertainty formulation 對於這個 multi-task 的學習問題:$$L_{depth}=\dfrac{L_1(\hat{D},D)}{2\sigma^2}+log\sigma$$
- $\hat{D}$ 和 $D$ 是深度的 target 和 prediction。
- $L_1$ 表示原始 smooth L1 loss,$\delta = 3.0$
- $\sigma$ 是不確定性變量。
- 在實踐中,為了使學習更容易,本文訓練網路來預測 log variance: $s = log\sigma^2$,而這個只用在做深度估計,這比直接預測 variance 數值更穩定,所以深度 loss 就可以表示為:$exp(−s)$。
- 另外,Uncertainty $exp(−s)$ 也可以作為另一個信心分數,在 Inference 時相乘,這樣深度越準確的預測分數就會特別高。
:::warning
:warning: 請注意,這種強大的不確定性指標只能為 KITTI 實驗帶來顯著收益,同時嚴重損害 nuScenes 數據集上評估的總體性能。
:::
**Alternative Depth Loss Designs**
- 考慮到模型中有幾個中間深度預測,如 $D_R$、$D_P$ 和 $D_L$,進一步為這些預測定義了幾個中間監督預測深度 L1 loss,並嘗試用它們的加權和來代替 $L_{loc}$ 中的原始深度損失。但實驗證明,雖然這種方法可以使訓練過程更加穩定,但它並沒有帶來任何性能增益。
- 作者還發現,即使僅對最終預測進行監督,該框架也不會過度擬合僅依賴於一種估計,如第 2 節所示。 3.2. 這表明這些預測和組件確實從互補的方面協同工作。
### Inference
- 輸入 image 並獲得 bounding box 的 class scores、attribute scores(如果需要)和 centerness 預測。
- 將 class score、預測的 centerness 和 Depth 信心分數相乘作為每個預測的整體信心分數。
- 並在鳥瞰圖中像大多數 3D Detector 一樣進行 rotated Non-Maximum Suppression(NMS)。
## Explanation of Oracle Analyses
### Detailed Explanations and Conclusions
**Basic Observations**

:::info
:bulb: 從左到右分別是:3D IoU based mAP on KITTI、NuScenes Detection Score (NDS) 還有 distance-based mAP on nuScenes.
- 作者逐步用 Ground Truth 替換模型的預測,並觀察性能的改進。
- 準確的深度可以帶來顯著的性能提升(綠線),只有準確的深度才能實現其他 oracles 帶來的提升。
:::
**Comparison with Best LiDAR-Based Methods**
- 上圖也有跟現在最好的 LiDAR-Based 方法做一個比較,可以看到分類對於 nuScenes 資料集有顯著的幫助,即便定位拿了 Ground Truth 的資料也沒有贏過他。
- 但這個結果有一點 dataset-specific,作者推測應該是因為 nuScenes 10 個類別所以分類問題比較困難,或者標註主要在點雲上進行,會導致物件在影像中消失。
## Supplementary Experimental Results
### Basic Validation of Depth Propagation

:::info
:bulb: 物件不一致的底部
- 雖然影像中的所有物件在大多數情況下都具有相似的底部高度,但極端情況仍然存在。
- 從上圖可看到在相機坐標中標記底部的高度(向下為 positive)。
- 這個問題可能是由實際地形引起的,例如,台階上有行人,也可能是由標記 noise 引起的,特別是對於不同類別和遠處的物件。
- 這一觀察結果是作者提出的深度傳播中為何要 pruning/gating 方案的原因。
:::
- 假設給兩個物件 1. 和物件 2.,他們的中心點嚴格滿足: $$d_2=\dfrac{v_1}{v_2}d_1+\dfrac{f}{v_2}(y_2-y_1)$$
考慮到兩個物件共享一樣的地板(同樣底部高度),則就可以近似他們的關係是: $$d_2=\dfrac{v_1}{v_2}d_1+\dfrac{f}{2v_2}(h^{3D}_1-h^{3D}_2)$$
- $d$ 是深度
- $v$ 是兩個物件的 2D 水平投影距離
- $y$ 是 3D 中心點高度
- $h^{3D}$ 則是 3D box 的高度
- 以上圖 8 台車為例 {5.23, 11.80, 16.50, 22.05, 23.64, 28.53, 29.07, 42.85},大概只能準確預測前兩個深度 {5.23, 11.74, 16.78, 22.92, 21.13, 26.59, 25.78, 36.51},越遠的物件會有越大的誤差。
### Quantitative Analysis
**Difference Between Datasets**

:::info
:bulb: 比較有沒有深度分數的 PR 曲線
- 可以看到深度分數(實線)顯著提高了 Low Recall 和嚴格匹配閾值(如 0.5m 和 1.0m 的藍線和黃線)下的 Precision,同時影響了 High Recall 和較不嚴格匹配閾值下的結果(如 2.0 和 4.0m 的綠線和紅線)。
:::
**Mean AP for Multi-Class Detection on nuScenes**

:::info
:bulb: 在 nuScenes 資料及上對每個類別的 AP test benchmark
- CV 是指 construction vehicle
- TC 是指 traffic cone
:::
**Contributions of Each Depth Estimation**


:::info
- 為了最終的整合,本文對 NMS 之前在驗證集上匹配 Ground Truth 預測 Location-Aware weights $\sigma(\alpha)$ 進行統計,並在圖 10 中繪製其分佈(值越高意味著來自 local 估計的貢獻越大)。
- 另外還繪製了這些權重相對於估計深度和不同類別的散點圖(圖 11 和 12)。我們可以看到,幾何深度對非常近的物體(可以在圖像中被截斷)和像行人這樣的小物體的估計貢獻更大。
:::
**Ablation Studies for Alternative Depth Division Methods**

:::info
- 圖 10 表明更細粒度的劃分並不能帶來性能提升。
- 圖 11 使用不同的分箱化的方法包含 Log 和 Linear 方式(也就是 SID, LID),後來發現用 Uniform division 方法取得了最好的結果。
- 另外這個 Ablation Study 是用 $U=10M$ 的設定進行,如果用更細粒度的劃分可能就會有不同的結論。
:::
**Ablation Studies for Geometric Depth**

:::info
:bulb: 作者還嘗試了距離分數的其他替代方案,包括 3D 底部之間的高度差、3D 中心和這篇論文最後採用的 2D 中心的距離如上表。
:::
**Depth Error Analysis**

:::info
:bulb: 比較 Baseline(FCOS3D) 與這篇論文(PGD) 的錯誤分析。
:::
### Qualitative Analysis

:::info
:bulb: Qualitative analysis of detection results.
- 對於 bird-eye-view,這篇論文的方法的深度正確率相對比起 FCOS3D 改善很多,尤其是紅色圓圈的部分。
:::