6D-VNet論文理解

解決什麼問題

車輛的位姿估計


本文創新點\貢獻

  1. 展現了位移的估計對6D估計的影響
  2. 相鄰車的加權non-local塊交互
  3. 根據幾何基礎設計的loss
  4. 同時用visual clue和bbox信息進行translation head的訓練

前人方法

之前的方法大多是兩階段,第一階段是3D旋轉估計,第二階段是通過投影距離估計,主要使用的bin picking任務

這個投影距離估計有點意思啊

在不同的場景下,對不同的信息的精準度要求是不同的:

  1. 機器人擰螺母的情況下,ZZ爲的對齊、攝像機的光軸都沒有X,YX,Y軸的對齊重要,旋轉很重要
  2. 在無人駕駛的情況下,路上的車輛間的縱軸變化很大,位移比旋轉更難估計

傳統的方法是在分類之後再預測位移,然後用幾何射影的方法來估計旋轉。

幾何投影方法假定:

  1. 3D的物體的中心被攝影到2D圖像的目標bbox中心
  2. 對預測的對象類和旋轉向量進行了正確的估計(如果差的太大就不行了)

不過這些幾何攝影方法都是後處理方法,分類估計和旋轉回歸的誤差也會帶到位移的預測中。

作者說的這些的DeepIM不太一樣,DeepIM也是後處理,但是是在已經初步預測的基礎上,而不是先預測一些,再預測一些


本文IDEA來源

沒說


方法

方法概述

在ResNet後面增加 加權non-local操作,然後利用MaskRCNN預測的class和加權後的權重來再進行分類、旋轉預測。
另一個分支利用bbox信息,再結合之前用於預測分類、旋轉的特徵圖,得到位移的估計。

Weighted Non-local neighbour embedding In

一句話概括

將響應變成加權的

解決的點

探究檢測的物體之間的空間依賴關係

優點

  1. non-local [ A non-local algorithm for image denoising ] 操作通過計算任意兩個位置之間的相互作用來直接捕獲遠程依賴,不需要考慮他們的位置距離

    爲什麼會有效,剛纔的距離不是相鄰的車嗎?
    答:這就是注意力機制

  2. 可以使用多樣的輸入尺寸,而且還可以簡單的和其他操作結合
  3. 提出的加權操作使得將輸出映射自我注意機制相關聯成爲可能,從而獲得更好的可解釋性。

    ???

原理

作者覺得利用相鄰的物體之間的依賴,比單獨使用能更好的預測6D位姿。

比如在同一巷道形式的車,會有相同的方向並保持一定的距離

來源
基於圖像中的全部像素的非局部平均[ Non-local neural networks ]

這篇論文裏引入的 non-local 操作是使用深度學習網絡來獲取長距離依賴的有效、通用的手段

直觀地說,一個 non-local 操作將一個位置的響應計算爲輸入特徵圖中所有位置的特徵的加權和

所以這個響應是什麼,是和什麼響應的?
類似重要程度的東西?

方法

yi=1C(x)jf(xi,xj)g(xj)y_i = \frac{1}{C(x)} \sum_{\mathclap{\forall j}}f(x_i,x_j)g(x_j)

ii表示輸出位置的index
jj表示枚舉所有的可能的位置
xx是輸入信號,yy是輸出信號,尺寸和xx相同
ff函數計算兩個位置之間的標量關係,應該就是權重
gg函數是一元的,計算jj位置的輸入信號
C(x)C(x)是用來正則化響應的

non-local模型對f,gf,g的選擇都不敏感,怎樣選擇不太會影響結果

也就說重要的是這個框架,裏面的函數的設置根據問題環境的需要而修改?

作者爲了簡單快速的計算,設置gg爲:
g(xj)=Wgxjg(x_j) = W_gx_j
WgW_g是一個需要學習的權重矩陣

設置ffembedding Gaussian :
f(xi,xj)=eθ(xi)Tϕ(xj)f(x_i,x_j) = e^{\theta (x_i)^T \phi (x_j)}
其中θ(xi)=Wθxi\theta(x_i)=W_{\theta}x_iϕ(xj)=Wϕxj\phi(x_j)=W_{\phi}x_j是兩個嵌入向量

C(x)=jf(xi,xj)C(x) = \sum_{\forall j}f(x_i,x_j)

現在有一個新的版本的注意力模型[ Attention is all you need ],就是上述的一種特殊情況,將1C(x)f(xi,xj)\frac{1}{C(x)} \sum f(x_i,x_j) 變成了 softmaxjj的維度上計算,所以得出:
y=softmax(xTWθTWϕx)g(x)y = softmax(x^TW^T_{\theta}W_{\phi}x)g(x)

現在設定輸入大小是H×W×CH\times W \times CCC是通道數,d=H×Wd=H\times W
當輸入dd變大時,點積會量級的增長,推動softmax函數到極端的梯度區域,所以yy也會變成一個極端的值。

這是使用softmax的情況

爲了解決這個問題,提出使用加權的non-local來計算自我注意力映射AA:
A=softmax(xTWθTWϕxd)A = softmax(\frac {x^TW^T_{\theta}W_{\phi}x}{\sqrt{d}})
因此y=Ag(x)y = A \cdot g(x)

要學習這裏作者解決問題的方法,首先得到問題,因爲輸入size改變的問題,計算量也變化了,又因爲是加權操作,所以最後得到的值也變化了,爲了穩定值的變化,就要讓最終得出的值和輸入的size保持一定的關係,那麼就要從加權這一塊下手,或者直接說把比例與size連接,這樣不管什麼輸入size,最後得到的結果都在一個區域,都可以拿出來比較

這樣加權非局部操作將點積注意方差縮放到單元1,就不會出現值變得很極端的問題,[ Distilling the knowledge in a neural network ]也有相似的操作

方差是怎麼搞的?這樣就能到1了?
這作者涉獵也太多了吧,注意力機制、知識蒸餾都用上

然而,在softmax中確定合適的環境是很困難的。
作爲一種選擇的,作者將點積輸入方差縮放到單元1。同樣,softmax操作後的輸出映射將以一種自我關注的方式提供一個合理的解釋。

這個解釋不知道在講什麼
答:看了下面的圖能知道一點,就是關注的後視鏡、車輪


訓練

backbone

ResNet-101 加上 FPN 用來檢測
實例分割的head用的是Apolloscape scene dataset裏的八個實例預訓練的(car, motorcycle, bicy- cle, pedestrian, truck, bus, and tricycle)

網絡結構

作者在MaskRCNN的基礎上加了預測,爲了還能使用與訓練的權重,對模型的改動很小心

這點要學習,精心設計,對權重的加載更魯棒一些

在這裏插入圖片描述
分兩階段,第一階段是Mask RCNN;第二階段是估計6D位姿信息的定製頭

這個6D估計分支被分成兩部分:

  1. 第一部分提取屬於車的分類的候選框的RoIAlign,然後執行子分類和旋轉估計。對於每個給定的車輛類別來說,旋轉是唯一的,所有車輛都具有相同的偏航、俯仰和滾轉角的旋轉特性。

    第一部分是在進行細分類,然後預測角度,因爲角度和類別是無關的,車都差不多
    但是現在有了車的子分類了,那也能用model了呀
    看來還是要想辦法把給的信息都用上
    類別太細,就用兩層分類

  2. 第二部分利用了RoIAlign特徵(從上面下來的吧)和bbox信息,然後通過串聯操作來估計3維的位移向量。這個組合的特徵通過合併操作(圖中的\bigoplus)暗中包含了物體類別和旋轉的信息,將位移回歸頭和子類分類和四元(旋轉)迴歸的聯合loss相結合的時候,就能協同工作。

    這操作太神奇了,這告訴了我們想讓不同的結果之間協同工作,那麼這兩個結果的過程之間要有一定的聯繫
    這個聯繫本身就很神奇,相當於把分類、旋轉信息都考慮進去了,和bbox共同的處位移。
    或許是因爲位移是最難預測的,纔給了位移這麼多信息吧,就是說給最難預測的結果最多的信息?

實驗證明這個新穎的操作比那些把位置估計當成一個後處理步驟的精準度高很多。

在很需要位移精準度的時候,這種操作很重要

loss

L=Ldet+LinstL = L_{det} + L_{inst}
其中LdetL_{det}是多任務lossloss
Ldet=Lcls+Lbox+LmaskL_{det} = L_{cls} + L_{box} + L_{mask}
LclsL_{cls}是分類的losslossLboxL_{box}是2D bbox 的losslossLmaskL_{mask}是2D mask的lossloss。這些都是Mask RCNN中的設置。

但是現在可以使用預訓練權重,所以把這些頭都固定住了,方法是在反向傳播的時候將LdetL_{det}設置爲0

我和之前設置不取梯度不一樣,效果應該是一樣吧

LinstL_{inst}是每個子類的6D估計的實例lossloss:
Linst=λsub_clsLsub_cls+λrotLrot+λtransLtransL_{inst} = \lambda_{sub\_cls}L_{sub\_cls} + \lambda_{rot}L_{rot} + \lambda_{trans}L_{trans}
λ\lambda是用來平衡對應lossloss的超參數。

Sub-category classification loss

用來做更精細的車輛分類,但是車出現的頻率也不一樣,所以採用加權的交叉熵來計算

我當時在角度分類那也想了用加權來處理分佈不均衡的分類問題
應該就是用佔比來作爲權重吧

Rotation loss

度量單位的選擇
一般有三種表達旋轉的方式:歐拉角、李代數、四元數

要在這裏學會如何選擇

歐拉角
歐拉角是最好懂且直接的,但是迴歸歐拉角有兩個問題:

  1. 非唯一性,同一個角能用多個數+2π2\pi來表示,所以這不是 uni-modal 的迴歸任務
  2. 萬向鎖

給定物體的三維模型,解決該問題的一種方法是將每個視圖以固定的間隔旋轉,覆蓋整個SO(3)SO(3),然後找到最近的鄰居[ Im- plicit 3d orientation learning for 6d object detection from rgb images ]或最近的視點[ Ssd- 6d: Making rgb-based 3d detection and 6d pose estimation great again ],將旋轉估計問題視爲分類問題

是否就是多bin的分類?

但是這樣就需要完整的CAD模型還有離散的方向角度,就不能直接估計了

爲了直接估計旋轉矩陣,[Real-time monoc- ular object instance 6d pose estimation]提出了一個基於旋轉表示的LieNet來回歸一個李代數,但是,一個3×3的正交矩陣是超參數化的,強化正交併不適應普通的情況

四元數:
用四個值來表示旋轉,比構建正交旋轉矩陣更簡單一些。

而且四元數是連續且平滑的,方便方向傳播

關注了數值是否連續,是否方便算loss

但是四元數的問題也在非單一性:來自兩個半球的qqq-q都能表示同一個值

所以作者提出了一個方法來約束所有的四元數到一個半球中,這樣就只有一值了。

方法在附錄

所以,旋轉的lossloss是用的四元數:
在這裏插入圖片描述

這個迴歸範式 r||\ ||_r是一個很重要的選擇,一般的深度模型都使用L1L_1L2L_2,作者發現在這裏面L1L_1表現最好,表現是不會隨着量級平方的增加,也不會過度衰減大的殘差。

根據數據集來選擇參數

Translation loss

用世界單位代替像素單位迴歸位移向量,會讓損失更穩定

爲什麼?像素的單位跨度太大?還是說不合理?在不同的位置的像素代表的屬性也不同?
或許在像素單位上受Z的影響

檢測的目標的位移利用像素空間的2D bbox的中心,寬和高來獲取世界單位的中心,高,寬,用相機的內參來做:
在這裏插入圖片描述
位移lossloss方程:
在這裏插入圖片描述
其中t,t^t,\hat{t}是真實、預測的位移向量
δ\delta是個控制outline邊界的超參數,如果設爲1,就會變成smooth-L1損失,在這個論文裏設置的是2.8


實驗

數據集

作者設置的訓練和驗證的比例是18:1

mesh model有4000個頂點和5000個三角塊

參數設置

λsub_cls,λrot,λtrans\lambda_{sub\_cls},\lambda_{rot},\lambda_{trans}分別設置成1.0 1.0 0.11.0\ 1.0 \ 0.1

學習率:最初設置成0.01,共5×1045 \times 10^4次迭代,在1.5×1041.5\times 10^4次和3×1043 \times 10^4次迭代的時候分別減小10倍。

權重衰減:0.0001

動量:0.9

RoIAlign:利用從每個RoI中提取的7×77 \times 7大小的特徵圖

輸入大小:最大邊從 [ 2000, 2300 ] 中隨機選擇,引入了non-local block之後,就要調整成 [ 1500, 2000 ] ,因爲內存不夠

隨機變化大小,爲了增強魯棒性?

100張圖片中選擇1000個FPN的結果。

多尺度數據增強的檢測閾值設置爲0.1

結果和消融實驗

使用Faster RCNN的檢測效果作爲2D檢測的上限:
在這裏插入圖片描述

設置上限是爲了知道實驗要做到什麼程度?

端到端訓練的效果
作者發現小目標難以估計

在給定旋轉的情況下,深度估計是一個完全獨立的過程

看附錄

只用幾何的後處理方法來調整粗糙唯一估計,只能達到3.8%map,使用相同bbox信息的話,能提高到8.8%map

聯合損失的效果

在這裏插入圖片描述
fine-tune表示卷積的參數和Faster RCNN head沒被固定

微調是開放所有參數參與訓練?

加權non-local塊的效果
這個結構是放在ResNet最後一層的後面的

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

在這裏插入圖片描述
自注意力機制的可視化
這兩個圖都是驗證集的效果圖,粉色方塊是xix_i,紅色箭頭表示權重最大的十個xjx_j,可以看到能很好的關注到路上的其他車,而且第二個裏面還定位到了車輪和後視鏡的信息,這些信息確實對旋轉的估計很關鍵

太神奇了吧,注意力機制就是將全部的都參與考慮計算,對相似的目標加以檢測?越相似的地方權重會變得越大,越不相似的地方權重會變得越小
好不好用可以直接用這個看出來,這個怎麼做的要看看代碼,早就該瞭解這一塊了

這樣就能捕獲空間以來,然後根據相鄰的車的距離和方向調整預測

那從哪個車下手呢?還能動態調整嗎

在這裏插入圖片描述
預測結果展示

人家這結果展示是真的高端,我那個包圍盒展示也太垃圾了,原子彈和彈弓的差

車輛的顏色分別爲銀色、綠色、紅色,分別代表ground truth、true positive和false positive

粉色的箭頭表示使用了加權non-local修改預測的結果


總結

很關鍵的Non-local基本上是直接照搬的,亮點在於位移的預測使用的多種融合信息?

技巧

  1. 給難預測信息的更多的信息
  2. 考慮到現實情況來做出一些約束
  3. 從很多論文學習方法,然後根據自己的使用需要來改動
  4. 對backbone的改動精心設計
  5. 幾乎把給到的信息都用上了
  6. 根據值是否單一、是否連續且平滑、是否好訓練來選擇要預測的值
  7. 在迴歸單位或參考系的選擇上,選擇讓損失更穩定的
  8. 隨機輸入大小

方法

  1. 隨機輸入大小
  2. 大分類,再加一個分類來做子分類,而不是直接分類
  3. 融合多種信息
  4. 迴歸世界單位而不是像素單位
  5. 後處理Deepim: Deep iterative matching for 6d pose estimation和Iterative point matching for registration of freeform curves and surfaces.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章