論文名字:UniMODE: Unified Monocular 3D Object Detection
地址:https://arxiv.org/abs/2402.18573v1
主要內容

CVPR 2021 | 論文大盤點:3D目標檢測__Domain

1、針對多種數據集的處理

實驗基於六種數據集進行,每個都是不用的檢測範圍,如圖3室內和室外的範圍.也有不同的類別。

  • KITTI
  • nuScenes
  • Sun RGB-D
  • ARKitScenes
  • Hypersim
  • Objectron

CVPR 2021 | 論文大盤點:3D目標檢測__Domain_02

方案:

  • 採用 deformable DETR architecture ,應對geometry property difference
  • 採用 two-stage detection。
  • 採用了可變化的網格 Uneven BEV Grid

2、BEV 投影(解決單目3D)

採用 corresponding depth confidence 深度閾值,篩選需要投影的特徵點。

3、設計的Domain adaptive LN層 應對跨數據集

訓練數據來自多個不同的域(如不同數據集、不同相機參數、不同場景),這些域的數據分佈(顏色、風格、物體外觀等)存在巨大差異。直接混合訓練會導致模型性能下降。UniMODE 通過 “特徵視角” 和 “損失函數視角” 來解決這個問題。

要求1(泛化性):模型在推理時,即使遇到訓練時沒見過的新域圖像,也要能正常工作。
要求2(高效性):引入的域自適應機制不能增加太多計算開銷。

CVPR 2021 | 論文大盤點:3D目標檢測__數據集_03


工作原理

劃分域:首先將訓練數據劃分為 D個域(例如,D=4,分別對應4個不同的子數據集)。

創建可學習參數:為每個域 i創建一對專屬的可學習參數 (α_i, β_i)。初始化時,所有 α_i=1,所有 β_i=0。這樣,初始狀態下DALN等同於標準LayerNorm,保證訓練穩定性。

Domain Head(域識別頭):如圖2所示,Domain Head是一個小的卷積網絡,以圖像特徵 F為輸入。它的任務是預測當前輸入圖像屬於這 D個域的置信度分數 {c_i}(一個概率分佈,如圖2中的 (c1, c2, …, cn))。

根據預測出的置信度 {c_i},對 D個域的專屬參數進行加權求和,得到針對當前輸入圖像的、獨一無二的歸一化參數 (α, β)。

公式:α = Σ (c_i * α_i), β = Σ (c_i * β_i)。

這正是圖中 “Domain Confidence” -> “Domain Parameters” -> “Mini-adjust” 的數學實現。

自適應歸一化X:

X 的表示 x(b,l,c)

b、l、c 通常是深度學習(尤其是處理序列數據的模型中)用來表示張量不同維度的索引。結合上下文 Xl ∈ RB×L×C,這很可能是一個具有 Batch大小、序列長度 和 特徵維度 的三維張量。

下表詳細解釋了每個索引的常見含義:

索引符號 通常代表的維度 具體含義與上下文

b Batch Size (批次大小) 表示一次同時處理的獨立樣本(如圖像、句子)的數量。例如,b=0 代表這一批數據中的第一個樣本。

l Length / Position (序列長度/位置) 表示序列中元素的位置。在處理文本時,這可以是一個句子中的第 l 個單詞;在處理時間序列時,則代表第 l 個時間點。

c Channel / Feature (特徵維度) 表示每個序列點(或單詞)對應的特徵向量的維度。例如,在詞嵌入中,c 遍歷一個單詞的 C 維向量表示中的每一個數值。

💡 一個直觀的例子

假設我們有一個包含8個句子的批次(B=8),每個句子被填充或截斷到50個單詞的長度(L=50),每個單詞用一個300維的向量表示(C=300)。那麼,輸入張量 Xl 的形狀就是 [8, 50, 300]。

此時,x(b,l,c) 就指向了這個大張量中的一個具體數值:
• x(0, 4, 255) 表示:這個批次中第一個句子(b=0)裏的第五個單詞(l=4,因為索引通常從0開始)的第256維特徵值(c=255)。

操作

先用標準LayerNorm處理輸入特徵 X,得到 X_hat。

然後用計算出的 (α, β)對 X_hat進行縮放和偏移:X_bar = α * X_hat + β。

X_bar就是經過域自適應調整後的輸出特徵。

CVPR 2021 | 論文大盤點:3D目標檢測__#人工智能_04

4、類別對齊損失(Class Alignment Loss)

不同數據集的標註類別空間不同。例如,數據集A標註了“窗户”,但數據集B沒有標註“窗户”。

當把數據集A和B合併時,總的類別空間是它們所有類別的並集。對於數據集B的一張圖,其中可能包含“窗户”,但這個“窗户”沒有被標註(在數據集B的標註裏,它不屬於任何目標)。

在訓練時,模型可能會把這個“窗户”檢測為某個物體,但由於數據集B的標註裏沒有“窗户”,這個檢測結果會被錯誤地視為“背景”上的假陽性目標而受到懲罰。這會嚴重干擾模型收斂。

解決方案:Class Alignment Loss

這個損失函數的邏輯非常巧妙:

判斷類別是否在數據集的標註範圍內:對於當前樣本(來自第 i個數據集),如果其真實標籤 y_bar是背景(B),並且這個背景所對應的真實類別(即模型可能預測的那個類別)y並不屬於第 i個數據集的標註空間 Ω_i。

減輕懲罰:當上述條件滿足時,就認為這個“錯誤”是由於標註衝突造成的,而不是模型真的判斷錯了。因此,計算損失時,對這個樣本的懲罰會乘以一個縮小因子 γ (0 < γ < 1),從而減輕對這類情況的懲罰力度。

正常懲罰:對於其他情況(例如,模型把貓誤判成狗,而貓和狗都在數據集的標註範圍內),則按正常損失計算。

總結一下:這個損失函數教會模型“知之為知之,不知為不知”。對於一個數據集未標註的類別,即使模型沒檢測對,也不會受到嚴厲的懲罰,從而避免了標註不一致帶來的訓練干擾。