0
| 本文作者: 我在思考中 | 2021-09-03 10:40 |

本文是我們ICCV2021的工作,作為白菜的渣作還是硬著頭皮來宣傳啦。本文目的在于講解我們原始的motivation,可能會有部分與原始論文不同的視角,希望可以方便大家理解以及節省大家閱讀正文的時間。
摘要:幾何投影是單目3D物體檢測任務中一種強大且常見的深度估計方法。它根據估計的物體高度導出深度,這使得數學先驗被引入到深度估計模型中。但是,該過程同樣引入了誤差放大問題,其輸入的物體高度存在的估計誤差會被放大,并加大反映在輸出端的深度數值上。這種特性導致深度推斷具有不可控性,并且還會損害模型的訓練效率。
在本文中,我們提出了一個幾何不確定性投影網絡 (GUP Net) 來嘗試解決誤差放大效應在推理和訓練階段帶來的負面影響。具體來說,我們提出了 GUP 模塊來獲得推斷深度的基于幾何的不確定性,其為每個深度提供高度可靠的置信度,其不僅有利于推理階段的得分計算,而且有利于模型的學習。
此外,在訓練階段,我們提出了一種分層任務學習策略來減少誤差放大引起的不穩定性。該學習算法通過監控每個任務的學習情況來動態地給每個任務分配不同的學習權重。每個任務的訓練的多少取決于其前置任務的訓練情況,該方案可以顯著提高訓練過程的穩定性和效率。
實驗證提出的方法可以推斷出比現有方法更可靠的物體深度數值,并且表現優于最先進的基于圖像的單目 3D 檢測器約3.74%和4.7%的性能(在KITTI數據集的汽車和行人類別上的AP40性能)。
作者介紹:陸巖,悉尼大學工程學博士生,研究方向為多模態數據處理,3D計算機視覺。
http://arxiv.org/abs/2107.13774
點擊觀看視頻解讀:
(1) 什么是單目3D物體檢測:3D物體檢測是一個體系很大的計算機視覺任務。它的主要目標為從輸入信號中估計出物體的位置,大小以及方位角,其數學形式為:

而根據輸入信號的不同,我們可以講3D物體檢測進行如下分類:以圖像和激光雷達點云共同作為輸入的多模態3D物體檢測,輸入多張圖片的多目3D物體檢測,僅輸入激光雷達的點云3D物體檢測以及僅輸入單張圖像的單目3D物體檢測。
鏈接:https://zhuanlan.zhihu.com/p/106170250
(2) 單目3D物體檢測在做什么以及潛在的問題:本文要處理的問題為單目3D物體檢測(下文簡稱mono3Ddet)問題。這個任務相比于傳統的3D物體檢測而言,其本質是個病態問題(ill-posed),所以獲得真正精確的depth從理論上就有極大的困難。總得來說,這個任務的難度比以往的標準3D物體檢測以及2D物體檢測都要高一些,其問題的根源在于depth的不適定,所以現階段的主流工作均在解決depth估計的問題,本文也并不例外。
(3) 單目3D物體檢測的核心難點是景深計算(Depth estimation):在mono3Ddet所有的7DoF參數中,z (depth)是引起性能低下的根本原因,雖然諸如size與angle也是病態的估計問題,但是他們對mono3Ddet的質量下降其實貢獻并不多,這一點已經被AM3D等工作證明過[4][5]。
(4) 單目3D檢測中投影模型是一種很常見的引入幾何信息的方法:幾何投影模型是一種最常見的depth prior,也就是說我們在估計depth的時候,可以通過以下關系得到:

其中f是相機焦距,
是物體的3D高度,
是物體的2D高度。在該關系下,depth估計可以轉化為先估計
與
,再通過投影的方式得到,這種做法也在諸多3D物體檢測中得以驗證,是一種有效的引入depth先驗知識的策略。
(5) Score是提高單目3D檢測性能的重要途徑之一:過去有不少mono3Ddet的方法忽略了3D score對結果的影響,例如pseudo lidar的AM3D和PatchNet。它們都使用了前端2D score作為自己的最終3D檢測得分,而諸如MonoDis這類使用了得分的方法,往往并沒有在paper里強調3D得分的作用,這種make sense的做法可能會被大家忽略,實際上在mono3Ddet里,Score是極為重要的東西,因為檢測類算法最終的評估指標是AP而不是Acc,所以,單純地“做對”一定數量的樣本是沒有用的,只有高得分樣本做對才有用。
那么回到本文,本文所要解決的問題其實是投影模型中的誤差放大(error amplification)現象,這里定性地說明下什么是誤差放大,也即輸入(前端估計的高度)的誤差會被乘倍數的放大并在輸出端(計算出的depth)。例如我們對投影模型的輸入加入一個微小的偏置,其輸出則會變成原始的投影結果與偏置項引發的depth誤差的和:

那么這一項直接看不夠直觀,實際上我們對該式子進行了定量地測試,我們將
設置為0.1(一個不算大的誤差)。然后觀察這樣一個0.1的偏置對depth結果會產生多大的抖動,結果如下:

圖1. 綠色的框代表原始投影結果,藍色與紅色框對應加入0.1的bias后的投影結果
可以看出,0.1的偏差引入的誤差對于iou要求在0.7以上的3D物體檢測而言是比較大的。其最大甚至可以引入幾米的誤差。那么這樣一個事情會帶來哪些危害呢?我們認為:使得depth的估計不確定性高,也即其輸出可靠性差。輸出可靠性差會使得其得分/不確定性難以預測。那么這件事會對物體檢測產生訓練與測試兩個方面的不同影響。
1). 對于測試而言(Inference Stage),在前文我說明了一個結論:好的高質量的得分是AP高的必要條件。而誤差放大引起的不穩定性會使得高品質的得分的非常難以獲得,因為實際在3D物體檢測中,大部分情況下,獲得得分的途徑是使用神經網絡進行端到端回歸(例如直接預測每個box的IOU value或者對每個box預測uncertainty),其本質上是要求神經網絡可以根據輸入特征對當前物體的檢測難度進行一個動態的評估。這里給出一個具體的例子說明這個問題:

圖2. 常見的uncertainty estimation pipeline
任何種類的mono3Ddet模型都可以拆成上圖的樣子,其中task layers對應與task相關的節點。而score layers則對應與得分相關的節點,其輸出 c 為得分,一般使用不確定度loss訓練或者使用iou loss[1]訓練等。可以想象,從input x 上直接估計出得分顯然是個病態問題,因為最終得分對于輸入而言是一個不可知(agnostic)的量,因此,我們認為,得分估計問題可以等價于對輸入特征進行難度估計。然而,因為幾何投影模型引入的誤差放大效應的存在,使得這件事情的難度大幅提高。特征層面一個及其微弱的擾動會使得depth估計結果抖動極大,因此得分估計這件事就變成了:push神經網絡去對特征微小的抖動進行區分。如下圖:

圖3. error amplification給score估計帶來的問題
舉例來說,假設feature f 可以產生一個很好的depth估計結果,此時神經網絡需要Score layers的輸出可能拉高,以反應其回歸的高質量。然而假設存在對于一個微小的擾動使得feature f 產生了一個很小的波動,其同樣引起了 h 的一個很小的擾動,這個擾動從數值上看可能微不足道,但是它卻被投影模型放大從而產生了非常巨大的depth偏移(例如0.01的 h 的擾動可能引起0.5m的depth偏移,但這足以使得iou暴降),此時卻要求神經網絡給出很低的得分,因此得分估計變得較為困難。而且除此以外,在現有的單目3d物體檢測方法中,得分也即uncertainty,往往也是訓練loss的一部分,因此得分質量差會對訓練和測試均產生不同程度的影響。
2). 除此以外,對于訓練而言,誤差放大會使得depth的訓練在前期較為不穩定,因為在前期,模型對于高度的預測是非常糟糕的,這時候就會在depth輸出端產生極其巨大的輸出擾動,對整個模型產生影響。
所以,面對這兩個問題,我們提出了基于不確定度的幾何投影模型(Geometry Uncertainty Projection Network,下文簡稱GUPNet)。
本節我將重點講解原始論文GUP module以及HTL的部分,其他部分大家可以參考原文。首先,我們的baseline是CenterNet的魔改版本,具體細節等價于MonoPair刪除Pair relation后剩余的部分,大家可以參考MonoPair的原文,此處不在贅述。在這里我先給出我們的網絡框架:

圖4. GUPNet網絡結構
輸入圖像首先經過backbone net提取出2d的bounding box,然后該bounding box經過ROI Align后提取出ROI特征,該特征會與3D坐標系進行concatenate從而獲得最終的ROI特征,所有的3D信息推斷均會在此ROI特征上進行。我們首先估計出3D box除了depth以外的所有參數。然后2D與3D bounding box的高度將被輸入到GUP模塊中提取出最終的depth,訓練階段HTL將會對每個部分進行控制從而實現multi-task learning。
Backbone Network
我們的backbone網絡結構為常規單目3D檢測的網絡結構,前端的2D檢測器是基于CenterNet,其輸入一個2D heatmap以及2D box的長寬和位置修正量。之后對每個2D的ROI,使用ROI Align獲得特征,再與坐標圖結合即獲得了全部的2D Roi。之后偏航角,3D box尺寸以及3D投影中心點的offset會被3D頭計算。
GUP Module
為了實現對depth進行更好的uncertainty的估計,我們認為把投影過程體現在uncertainty的計算過程中尤為重要。為什么端到端的uncertainty評估不好呢,其本質就是因為投影過程對于uncertainty regression部分而言是agnostic的,其沒有直接參與到投影過程的計算中,因此使得不確定度的估計質量不高(此處如果沒有說明清楚的話,還請各位老師同學在評論區指出)。因此在本文中,我們采用基于概率模型的方法對不確定度的估計同樣引入投影先驗,我們首先假設投影過程中的
是拉普拉斯分布
,也即:

將此式代入投影模型,可計算獲得輸出depth為:

其中是一個歸一化拉普拉斯分布La(0,1)。從上式可以得到
的均值
和標準差
分別是
和
,其中
是拉普拉斯分布
的標準差,它與
的關系為:
。對于結果
而言,其均值
對應投影depth結果,而標準差
則反應了投影不確定度。在此基礎上,為了更精準的depth輸出,我們額外讓神經網絡預測出一個depth的修正值(depth bias),我們假設該修正值也是拉普拉斯分布
,因此最終depth則變成:

那么這時輸出端的不確定度就同時反應了投影模型放大的輸入端的不確定性以及網絡bias引入的不確定度。為了獲得最終得分,我們對該不確定度做了一個指數變換,把它映射到0~1之間:

該得分的計算過程相較于圖2的版本,其計算過程引入了投影模型的先驗,因此由投影模型引起的誤差放大效應可以被一定程度上解決,因為由估計誤差引起的放大誤差會被很好的反應在計算的不確定度中,所以基于此不確定度得到的得分質量將大幅上升。
上述結論在我們的ablation中得以體現,此處整理如下:

上表對應原始論文表3的(b)~(f)行。第一行是我們的baseline,第二行證明了單獨用不確定度作為得分很有效(也安利給各位做單目3D檢測的小伙伴嘗試,真的很能提點)。第三行為單獨的投影模型,也可以漲點(漲點量不多推測是因為我們的baseline中存在坐標map,本身就有一定的幾何先驗)。所以既然單獨的不確定度得分和投影模塊可以漲點,我們很自然地認為combine他們可以漲點,結果在第四行,居然事與愿違。反而不如普通第二行的模型高。之所以會這樣,就是因為第二行的模型對應本blog的圖2,第四行對應本blog圖4。一場圖4受到了誤差放大的影響,得分難學了很多。而第五行則是我們的GUP module(相當于在第四行的基礎上加入我們的幾何不確定度)的結果。其效果明顯好轉,至少超過了簡單的combination,使得投影模型與不確定度得分可以很好地并存。
Hierarchical Task Learning
GUP Module可以較好地處理inference時得分質量的問題。但是在訓練階段,誤差放大依然會帶來一些問題,一個最典型的問題就是在訓練初期,的估計質量非常低,因此本身就已經很大的的誤差將會在輸出端引起巨量的誤差,使訓練直接走偏到其他方向。因此我們提出了一個多級task學習(HTL)策略來進行multi-task learning(MTL)。
以往的MTL算法大多都是假設task之間是獨立的[2],或者至少認為task之間應當享有平衡的資源[3]。然而這些在我們的模型中均不合理,我們試圖將[2][3]的方法引入我們的模型,結果性能不升反降(可參考原文表4)。原因很簡單,對于Task Uncertainty[2],它的task之間獨立的假設在我們的方法上完全不成立,我們的方法畫成一個graph的話,如下圖:

圖5. Task Graph
可以看出來,task之間存在級聯關系,級聯的task本身就不可能獨立,因此強行獨立的假設會破壞Task Uncertainty的原本假設,因此帶來性能退化。而對于GradNorm[3],其本質是希望平衡每個task對loss的貢獻量,但是這在mono3Dder中同樣難以成立,因為不同loss的尺度差異很大,諸如depth的單位是m,且范圍很廣,他的loss數值就會很大,而對于這種本身范圍就很小的輸出,他的損失函數數值也會很小。因此梯度之間的關系也會不同,強行平衡各個term的貢獻會使得depth估計訓練不充分,下降性能。
因此,我們針對GUPNet設計了HTL算法,其總體的思路為,一個task的訓練要有它的先制任務(pre-task)的訓練狀態決定,如果先制任務訓練完成,則當前任務展開訓練。這種做法就類似于學校上課,一年級課程上完了再上二年級一樣,所以總得來說,我們需要兩個元素實現這件事情:
1). 任務學習狀態評估:用于評估先制任務的學習狀態,
2). 當前任務控制器:當先制任務學習達標后,提高當前任務的權重。
任務學習狀態評估:對于第個任務的學習狀態的評估,我們首先計算如下函數:

這個函數的本質就是對于一個loss曲線,在t時刻,取一個過去時刻長度為K的滑窗,然后平均每個時刻的變化率(導數),從而獲得滑窗內的平均變化率。之后對于該時刻的學習狀態評估即為:

其含義為計算當前滑窗內的平均變化率與初始時刻滑窗平均變化率的關系,其可以圖解為下圖:

圖6. HTL中的任務狀態評估圖解
本質上即為比較兩個滑窗內變化率的關系,較一致時說明訓練不充分,反之則說明訓練較為充分。
當前任務控制器:
而對于第i個任務,我們使用如下的線性函數控制他的訓練:

之所以使用該函數是因為形式簡單且無需調整超參數,其中為總epoch數,
為該任務所有前置任務的學習狀態評估值的乘積:

可以看出,前置任務學習充分的話,會加速最終
的提升速度,而線性函數也保證了
的上升是平滑的而非跳邊的。對于每個task,我們都可以獲得這樣一個權重,最終總損失函數如下:

本文探究了基于幾何的不確定度在單目3D檢測中的應用,但是在實際實現中,我們只考慮了3D高度對結果的不確定度的影響,而沒有考慮2D,這是因為一方面2D高度結果較之3D比較穩定,二來,引入基于分布的2D高度會使結果變得較為復雜,優化難度變高,在我們目前的實驗中,難以取得較大幅度的性能提高,也歡迎大家關注我們未來的工作,我們未來會著重針對這個問題進行進一步的研究。
以上就是本工作的全部內容介紹,總得來說,GUP module嘗試通過公式計算不確定度從而使得其轉換出的3D得分可靠性上升。而HTL則通過一種手工策略,嘗試更加針對性地解決GUPNet的串行multi-task learning的問題。以上即為本文的內容,歡迎大家討論。
[1] Jiang B, Luo R, Mao J, et al. Acquisition of localization confidence for accurate object detection[C]//Proceedings of the European conference on computer vision (ECCV). 2018: 784-799.
[2] Kendall A, Gal Y, Cipolla R. Multi-task learning using uncertainty to weigh losses for scene geometry and semantics[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7482-7491.
[3] Chen Z, Badrinarayanan V, Lee C Y, et al. Gradnorm: Gradient normalization for adaptive loss balancing in deep multitask networks[C]//International Conference on Machine Learning. PMLR, 2018: 794-803.
[4] Ma X, Wang Z, Li H, et al. Accurate monocular 3d object detection via color-embedded 3d reconstruction for autonomous driving[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019: 6851-6860.
[5] Ma X, Zhang Y, Xu D, et al. Delving into Localization Errors for Monocular 3D Object Detection[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 4721-4730.
掃碼添加小助手微信(AIyanxishe3),備注“ICCV 2021”拉你進群。

雷峰網特約稿件,未經授權禁止轉載。詳情見轉載須知。