2022年11月BEVFormer v2來了,帶著nuScenes Camera-only Detection Task SOTA來和大家見面了! 傳送門0: BEVFormer v2原論文《BEVFormer v2: Adapting Modern Image Backbones to Bird's-Eye-View Recognition via Perspective Supervision》 傳送門1:對(duì)BEVFormer 第一版感興趣的小伙伴,想要快速了解,可以翻閱本篇解讀作者的另外一篇BEVFormer筆記:《一文讀懂BEVFormer論文》 傳送門2:另外,由于BEV方法的核心框架原理或要解決的核心問題大都來自自底向上類的BEV方法,如果想要系統(tǒng)性了解BEV方法,強(qiáng)烈推薦先從自底向上方法了解,可參考本篇解讀作者的另外一篇筆記:《一文讀懂BEV自底向上方法:LSS 和 BEVDepth》 本文先把BEVFormer最核心的一部分翻譯或講解出來,后續(xù)待BEVFormer代碼工程發(fā)布后,再結(jié)合具體實(shí)現(xiàn),在實(shí)施層面做更深入解讀。 如有問題,歡迎大家評(píng)論留言。 1. Introduction典型BEV模型的框架結(jié)構(gòu)是:先構(gòu)建一個(gè)image backbone生成透視特征圖,后面連接一個(gè)把透視特征圖lift成BEV features的視角轉(zhuǎn)換模塊,最后用BEV feature encoder和一些具體任務(wù)的head處理BEV features。已經(jīng)有很多工作關(guān)注如何設(shè)計(jì)視角轉(zhuǎn)換模塊,以及結(jié)合仍在持續(xù)增長的更多下游任務(wù)應(yīng)用此框架,但是關(guān)于BEV模型中image backbone的研究并不多。先進(jìn)的image backbone作為一個(gè)最前沿且具有強(qiáng)需求的研究領(lǐng)域,把它們引入自動(dòng)駕駛領(lǐng)是情理之中的事情。令人驚訝的是,目前BEV模型研究社區(qū)一直在使用VoVNet,并且沉浸在它的大規(guī)模深度預(yù)訓(xùn)練中無法自拔。本文作者關(guān)注解除在BEV識(shí)別中應(yīng)用先進(jìn)image backbone的束縛,為未來探索把更好的backbone應(yīng)用于BEV識(shí)別打開大門。 如果不進(jìn)行合適的預(yù)訓(xùn)練,而直接使用先進(jìn)的image backbone,往往會(huì)讓期望生成滿意的結(jié)果面臨失敗。 例如,ImageNet預(yù)訓(xùn)練的ConvNext-XL主干性能,與DDAD-15M預(yù)訓(xùn)練的用于3D目標(biāo)檢測的Vovnet-99不相上下,盡管后者的參數(shù)量是前者的3.5倍。 目前,在BEV識(shí)別中使用先進(jìn)imge backbone時(shí),往往是苦苦掙扎卻不得解(達(dá)不到利用深度預(yù)訓(xùn)練的效果),本文作者把問題歸結(jié)成以下兩方面:
為了克服現(xiàn)代backbone(modern backbone,包含已研究發(fā)布和未來研究產(chǎn)出的先進(jìn)image backbones)用于BEV識(shí)別遇到的困難,本文把透視監(jiān)督引入到了BEVFormer,即從透視視角產(chǎn)生的監(jiān)督信號(hào)直接作用于backbone。它指導(dǎo)backbone學(xué)習(xí)2D識(shí)別任務(wù)中丟失的3D知識(shí),同時(shí)克服BEV檢測器的復(fù)雜結(jié)構(gòu),極大地促進(jìn)了模型優(yōu)化。 具體來說就是,在Backbone之上建立了一個(gè)透視3D檢測頭,以image features作為輸入,直接預(yù)測3D B-boxes和類別。透視頭上計(jì)算的損失(后續(xù)稱為透視損失)作為輔助損失,與原本來自BEV 檢測頭的loss相加。這兩個(gè)檢測頭用它們的損失項(xiàng)聯(lián)合訓(xùn)練。 另外,作者還提出把這兩個(gè)檢測頭合并成一個(gè)two-stage BEV檢測器。因?yàn)橥敢暀z測頭自身用于目標(biāo)檢測本就是合格的,它可以在透視視角中生成高質(zhì)量的候選目標(biāo),作為第一階段的候選。然后把它們編碼到object queries中,與原本BEVFormer中的可學(xué)習(xí)object queries一起形成混合object queries,然后送入第二階段檢測器(BEV 檢測頭),并生成最終預(yù)測結(jié)果。 作者做了大量的試驗(yàn)來證明本文所提出透視監(jiān)督的有效性和必要性。透視損失促進(jìn)了image backbone對(duì)BEV 識(shí)別的適應(yīng)性,提高了檢測性能和模型收斂速度。如果不用透視監(jiān)督,即使訓(xùn)練更長時(shí)間,模型也達(dá)不到這么好的結(jié)果。因此,作者把先進(jìn)的image backbone應(yīng)用到了BEV model中,在nuScenes 測試集中取得了63.4%的NDS成績。 本文的貢獻(xiàn)總結(jié)如下:
2. Overall Architectureimage backbone生成Multi-view features。perspective 3D head做透視預(yù)測,然后把結(jié)果后處理&編碼成object queries。BEV head是encoder-decoder結(jié)構(gòu):spatial encoder融合multi-view features生成BEV features;然后temporal encoder收集前序時(shí)刻BEV features的信息,融合成此時(shí)刻的BEV features;decoder用hybrid queries作為輸入,并基于BEV features做最終的BEV預(yù)測。整個(gè)模型用兩個(gè)檢測頭的兩項(xiàng)loss進(jìn)行訓(xùn)練:和。 如圖1所示,BEVFormer v2主要包括5個(gè)模塊:
其中,相比于原始BEVFormer,除了spatial encoder之外,其它4個(gè)模塊都被改變了。 需要特別說明:BEVFormer v2中的image backbone沒有使用任何自動(dòng)駕駛數(shù)據(jù)集或其它深度估計(jì)數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練。 引入perspective 3D detection head是為了促進(jìn)2D image backbone針對(duì)3D檢測任務(wù)的適應(yīng)性,同時(shí)為BEV detection head 生成候選目標(biāo)。 為了融合更長時(shí)間的時(shí)序信息,采用新優(yōu)化的temporal BEV encoder。 BEV detection head接收混合object queries集合作為輸入。這里,混合object queries是合并了第一階段(perspective 3D detection head)的proposals和原來的可學(xué)習(xí)object queries。 3. Perspective Supervision(透視監(jiān)督)首先分析常見BEV模型的問題來解釋引入額外監(jiān)督(透視監(jiān)督)的必要性。 典型的BEV模型維護(hù)附著于BEV平面上的柵格形(grid-shaped)features,即BEV features,其中每個(gè)grid從相應(yīng)的多視角圖像2D像素的features上提取3D信息?;贐EV features預(yù)測目標(biāo)物體的3D bounding box,這里把構(gòu)建在BEV features之上的監(jiān)督稱為BEV監(jiān)督。 以BEVFormer為例,它使用encoder-decoder結(jié)構(gòu)來生成并使用BEV features。Encoder為BEV平面上的每個(gè)柵格(grid cell)分配一個(gè)3D reference points集合(這些points位于BEV平面上的相同grid位置,垂直于BEV平面的高度不同),然后把它們投影到多視角圖像上形成2D reference points。之后,在這些2D reference points周圍采樣圖像特征,并利用空間交叉注意力機(jī)制(spatial cross-attention)把這些特征聚合到BEV features中。Decoder就是一個(gè)Deformable DETR head,用少量固定數(shù)目的object queries預(yù)測BEV 坐標(biāo)系下的3D bounding boxes。Fig2展示了BEV監(jiān)督的兩個(gè)潛在問題,它們來自3D-to-2D視角轉(zhuǎn)換和DETR head:
BEV detection head要進(jìn)行3D目標(biāo)預(yù)測,非常依賴包含在圖像feature中的3D信息,但是在如何編碼這些信息方面并沒有給backbone提供充分指導(dǎo),導(dǎo)致提取到的3D信息不充足,這樣訓(xùn)練時(shí)就出現(xiàn)了矛盾。 為什么以前的BEV方法并沒有嚴(yán)重地受限于上述矛盾,它們甚至都沒意識(shí)到這是個(gè)問題? 因?yàn)橐郧胺椒ǖ腂ackbone尺度可能相對(duì)更小(不需要太直接、太稠密的監(jiān)督信號(hào)就能達(dá)到很好的效果),或者它們的Backbone曾與單目Detection head一起被3D detection任務(wù)預(yù)訓(xùn)練過。 相比于BEV head,透視3D檢測任務(wù)(如Fcos3D、DD3D等)在image features上進(jìn)行逐像素的目標(biāo)預(yù)測,為適應(yīng)2D圖像backbone提供了更豐富的監(jiān)督信號(hào)。這里把構(gòu)建在image features之上的監(jiān)督稱為透視監(jiān)督。如圖2所示,不同于BEV監(jiān)督,透視檢測的loss會(huì)直接且稠密地作用于image features上。作者猜測透視監(jiān)督可以顯性地指導(dǎo)backbone觀察3D場景,并提取有效信息,例如物體的深度和朝向,這就克服了BEV監(jiān)督的缺點(diǎn),因此在BEV模型用現(xiàn)代圖像backbone訓(xùn)練時(shí),透視監(jiān)督是有必要的。 4. Perspective Loss前面描述了額外引入透視監(jiān)督的必要性,那么怎么引入透視監(jiān)督呢? BEVFormer v2給出的方法就是用Perspective loss來實(shí)現(xiàn):在backbone上建立透視3D head,然后用透視視角檢測目標(biāo),具體來說就是采用類似FCOS3D的檢測頭,它能預(yù)測3D B-boxes的中心位置(center location)、尺寸(size)、朝向(orientation)和投影的中心度(projected center-ness)。把這個(gè)檢測頭的loss叫做透視loss,記為,作為BEV loss 的補(bǔ)充,促進(jìn)backbone的優(yōu)化。 BEVFormer v2的整體Loss就是: 5. Two-stage BEV Decoder第3節(jié)說明了額外引入透視監(jiān)督的必要性,那么如何有效地組織透視檢測器和BEV檢測器呢? 最簡單的組織方法是聯(lián)合訓(xùn)練這兩個(gè)檢測器,即在原來只有一個(gè)BEV檢測器的基礎(chǔ)上,添加一個(gè)透視檢測器分支,它們的檢測結(jié)果不直接交互,僅在反向傳播過程中分別為Backbone提供監(jiān)督信號(hào)。這雖然能克服3節(jié)提到的單獨(dú)使用BEV檢測器所提供監(jiān)督信號(hào)不直接、太稀疏的問題,但這僅僅從不同視角獲得了兩套獨(dú)立的檢測結(jié)果。 如何把這兩套檢測結(jié)果更有機(jī)地結(jié)合起來呢?最樸素的想法就是:
相比于這兩個(gè)過于樸素的方法,作者設(shè)計(jì)了一個(gè)全新的結(jié)構(gòu),能把兩個(gè)檢測器“有機(jī)地”集成到一個(gè)two-stage predicting pipeline中,叫做two-stage BEV detector。 在介紹two-stage BEV detector之前,我們先看看BEV head detector有哪些問題,然后再看結(jié)合透視檢測器結(jié)果如何解決。 BEV head中的object decoder,即DETR decoder,用一些可學(xué)習(xí)的embedding作為object queries,通過訓(xùn)練在數(shù)據(jù)集中來學(xué)習(xí)目標(biāo)物體可能出現(xiàn)在哪里。但是這會(huì)造成兩個(gè)問題:1. 隨機(jī)地初始化embedding,要花很長時(shí)間來學(xué)習(xí)合適的位置;2. 在inference時(shí),從整個(gè)數(shù)據(jù)集上學(xué)習(xí)到的object queries對(duì)所有圖像都是固定的,但是由于數(shù)據(jù)集中不同圖像的目標(biāo)在空間分布上變化較大,就會(huì)導(dǎo)致這些固定的object queries對(duì)具體某張圖像來說不夠精確。 為了解決這些問題,先用后處理方法過濾透視檢測器的預(yù)測結(jié)果,然后把它們?nèi)诤系絛ecoder的object queries中,形成two-stage處理流程。這些混合的object queries提供較高概率的目標(biāo)候選位置,讓第二階段的BEV head更容易捕捉目標(biāo)物體。注意,第一階段的候選不一定來自透視檢測頭,例如也可以來自另一個(gè)BEV檢測頭,但是試驗(yàn)表明,只有來自透視視角的預(yù)測對(duì)第二階段的BEV head才有幫助。即4. Experiemtns中Table2不同視角或視角組合的對(duì)比試驗(yàn)。Perspective & BEV 的NDS是0.451, 比BEV & BEV的NDS(0.428)高出0.023。 6. Decoder with Hybrid Object Queries本節(jié)重點(diǎn)介紹“有機(jī)地”集成兩個(gè)檢測器的關(guān)鍵實(shí)施步驟,即如何為BEV檢測器生成混合目標(biāo)queries。 ps:重點(diǎn)是理解用哪兩種Object Queries混合,以及為何要混合兩種不同Hybrid Queries? 為了把第一階段(透視檢測)的proposals融合到第二階段(BEV 檢測)的object queries中,BEVFormer v2中的BEV Head Decoder基于BEVFormer中用到的Deformable DETR進(jìn)行修改,這個(gè)Decoder中包含交替堆疊的多個(gè)Self-attention層和Cross-attention層。其中的Cross-attention層是一個(gè)Deformable DETR所介紹的deformable attention模塊,用下面三部分作為輸入:
first-stage 輸出proposals的投影中心,在second-stage的BEV head中被用作per-image reference points(紫色),并且與可學(xué)習(xí)positional embeddings線性變化后的per-dataset reference points(藍(lán)色)組合到一起,再加上per-dataset 可學(xué)習(xí)content queries,組成混合的object queries。 下面通過與BEVFormer對(duì)比,來說明BEVFormer v2中把這3項(xiàng)輸入到Cross-attention層的意義。 在原始BEVFormer中:
相比于BEVFormer,BEVFormer v2主要修改的是第2項(xiàng)輸入,即如何生成混合Reference points:首先從透視頭(perspective head)獲取proposals,通過后處理選取其中一部分,把選出proposals在BEV 平面的投影box中心作為per-image reference points,然后與類似BEVFormer那樣通過positional embedding來生成的per-dataset reference points合并在一起,作為整體的混合reference points。 問:這里全部使用per-image reference points不行么?為何還要在其中混合per-dataset reference points呢? 答:per-image reference points直接表示輸入的這幀圖像中目標(biāo)物體在BEV平面上可能出現(xiàn)的位置,它能讓decoder檢測目標(biāo)變得容易。然而,由于一小部分目標(biāo)物體被遮擋或出現(xiàn)在兩個(gè)交叉視角的邊緣處,它們很可能會(huì)被perspective head 漏檢。為了避免漏掉這些目標(biāo),論文中就保留了BEVFormer中原始的per-dataset reference points,通過學(xué)習(xí)完整數(shù)據(jù)集中的空間先驗(yàn)(spatial prior)來捕捉它們,而不只是依賴per-image的reference points。 圖4表明,BEVFormer v2中BEV head decoder的cross-attention layer包含3部分輸入:Content query,Reference point和BEV feature。 這里僅畫出了一個(gè)object query,因此第二項(xiàng)reference point也是單數(shù)一個(gè),但是在Deformable DETR的思想,圍繞此參考點(diǎn)會(huì)選取k個(gè)采樣點(diǎn),并通過基于Content query的Linear layer預(yù)測的采樣點(diǎn)偏移值(sampling offsets)來修正這k個(gè)采樣點(diǎn)的精確位置,圖中示意地畫出了3個(gè)采樣點(diǎn)。 Content query經(jīng)過Linear和Softmax還生成了attention weight,用來表示k個(gè)采樣點(diǎn)Value的attention權(quán)重。(備注,圖片引自Deformable DETR,結(jié)合本文做了紅色部分的加注修改) |
|