前言:
本文作者「知乎 ID:巫婆塔裡的工程師」,某大型科技公司自動駕駛感知算法工程師/負責人。
本系列文章著重講解「自動駕駛環境感知算法」相關知識,由特約作者「巫婆塔裡的工程師」編寫,「焉知新能源汽車」媒體獨家發佈。
前言:
本文作者「知乎 ID:巫婆塔裡的工程師」,某大型科技公司自動駕駛感知算法工程師/負責人。
本系列文章著重講解「自動駕駛環境感知算法」相關知識,由特約作者「巫婆塔裡的工程師」編寫,「焉知新能源汽車」媒體獨家發佈。
作為關注自動駕駛環境感知的專欄,對這部分內容的介紹當然也是必不可少的。
關於注意力機制和 Transformer 的文章非常多,其中也不乏非常好的分析和解讀。
自動駕駛環境感知的一個核心任務是「物體檢測」,因此本文也會側重從這個角度來進行介紹。
這次的注意力機制專題計劃包含三篇文章:
-
第一篇文章《也就是本篇文章》裡我會回顧一下視覺感知算法尤其是物體檢測算法中常用的一些注意力機制。
-
第二篇文章會介紹 Transformer 和自注意力機制在物體檢測領域的應用和最新進展,也會包括一些學術界和工業界在這個方向的的討論。
-
第三篇文章會介紹一下最近興起的 BEV 感知方法,其中交叉注意力機制起到了非常關鍵的作用。
第一篇文章《也就是本篇文章》裡我會回顧一下視覺感知算法尤其是物體檢測算法中常用的一些注意力機制。
第二篇文章會介紹 Transformer 和自注意力機制在物體檢測領域的應用和最新進展,也會包括一些學術界和工業界在這個方向的的討論。
第三篇文章會介紹一下最近興起的 BEV 感知方法,其中交叉注意力機制起到了非常關鍵的作用。
近些年來,注意力機制在人工智能領域可以說是大火特火。
基於自注意力機制的 Transformer 模型首先在自然語言處理《NLP》領域取得了顯著的性能提升,取代了之前常用的循環神經網絡結構《RNN》。
之後,Transformer 也被應用到了計算機視覺領域,在圖像分類、物體檢測、語義分割等視覺任務上都展示出了非常強大的潛力。
在自動駕駛系統中,視覺感知是非常關鍵的一個模塊。
因此,Transformer 模型自然也得到了廣泛的關注。
01 早期的注意力機制
「注意力《Attention》」這個詞最近幾年在人工智能的各個領域都被頻繁提及,說的大家都有點審美疲勞了。
其實注意力也不是什麼特別新的概念,就像卷積神經網絡《CNN》一樣,概念其實幾十年前就有了,隻是當時受限於 數據量、算力以及訓練方法,其效果並不理想,因此也沒有得到廣泛的關注。
在計算機視覺領域,注意力機制一直以來都是熱門的研究課題之一,隻不過早期的研究主要關注如何提取數據中具有顯著性《Saliency》的部分。
這種方法一般采用自底向上的方式,從底層特征出發,通過預先定義的一些指標來計算圖像或者視頻數據中具有顯著性的部分。
這裡一個最典型的例子就是:在一副動物的照片中,算法會將動物而不是背景作為顯著性區域。
這種顯著性提取方法雖然與人類的感知有相似之處, 但其實更像是一種前景背景分割,其隱含的假設就是前景比背景更具有顯著性。
這種簡單的數據及其隱含的簡單假設在實際應用中很可能是無法滿足要求的。
實際應用中通常我們都會有一個特定的任務,因此,顯著性的提取也需要由任務來進行驅動,也就是說采用 「自頂向下」的方式。
圖像中的顯著性區域提取前面說了,物體檢測是視覺感知中的關鍵任務之一。
因此,下面就以物體檢測這個任務為例來介紹一下自頂向下的注意力。
其實,在物體檢測的發展歷程中,對注意力的研究是一直存在的,隻是有的時候其表現形式並不太明顯。
在神經網絡興起之前,物體檢測主要依賴於 特征和分類器設計。
為了提高檢測的效率, 研究者們會首先用簡單的特征過濾掉圖像中大部分的背景區域,然後再用復雜的特征來處理剩下的區域。
這是一種典型的「由粗到精」的過程,在物體檢測發展的早期非常常見。
這裡「剩下的區域」其實就是顯著性區域,通過快速的顯著性區域提取,檢測算法的運行速度可以得到極大的提升。
即使是在神經網絡被廣泛用於物體檢測以後,這種由粗到精的策略還是存在其中的。
大家回想一下基於神經網絡的兩階段檢測器,第一階段的目標就是得到圖像中的感興趣區域《ROI》,然後在第二階段中再對 ROI 進行進一步的處理,最終得到目標的類別、位置、大小等信息。
這裡的 ROI 其實也就是顯著性區域的概念,與傳統方法中采用簡單特征快速得到的顯著性區域沒有本質的差別。
但是,這裡我們需要注意的是, 無論是傳統方法還是基於神經網絡的方法,模型都是通過訓練得到的,顯著性區域的提取也都是與下遊任務相關的,因此它們都是任務驅動的自頂向下的方式。
兩階段物體檢測網絡 R-CNN
02 神經網絡中的注意力機制
通過以上的分析,我們大致可以把注意力機制分為「自底向上」和「自頂向下」兩種。
前者不關聯特定的任務,而後者則是由任務驅動的。
在大數據時代,引起人們更多關注的自然是 「任務驅動」,或者說 「數據驅動」的方式。
上一節中介紹的自頂向下的注意力機制,無論是在傳統方法中還是深度學習方法中應用,都是作用在 ROI 這個級別上,是一種相對粗粒度的注意力表達方式。
除了這種方式以外,現階段大家所討論的更多的是一種細粒度的注意力,在神經網絡模型中通常表現為:
-
通道注意力;
-
空間注意力;
-
分支注意力;
-
自注意力;
-
交叉注意力。
通道注意力;
空間注意力;
分支注意力;
自注意力;
交叉注意力。
下面就來介紹一下這幾種比較常用的注意力機制。
通道注意力
在神經網絡模型中,每一層的輸入和輸出都有多個特征通道,每個通道描述了輸入數據中不同的信息,比如物體的紋理、顏色、形狀等。
對於不同的下遊任務,不同信息的重要性也不盡相同。
舉個簡單的例子,車輛檢測可能更依賴於形狀信息, 而車道線檢測可能更依賴於紋理和顏色信息。
那麼對於一個通用的物體檢測網絡,其特征通道會包含各種各樣的信息。
當輸入圖像中出現了車輛時,神經網絡就會自動的給包含形狀信息的通道更大的權重,以更好的完成車輛檢測的任務。
當然這裡隻是一個直觀的解釋,實際的通道加權過程可能非常復雜,並不一定具有很好的解釋性。
以上就是通道注意力的基本設計動機。
這裡有一點需要注意的是: 通道的權重並不是離線學習好的,而是在線根據輸入數據進行調整的。
這種動態的注意力機制可以使神經網絡在處理不同任務時具有非常好的靈活性。
通道注意力的基本做法是: 為每一個通道計算一個權重。
這個權重是通過多個通道互相作用《全局或者局部的操作》得到的。
這裡一個重要的步驟是「提取通道的描述特征」,一般會采用全局的均值 Pooling 操作來得到每個通道的標量《scalar》特征。
Squeeze&Excitation Attention,也可以簡稱 SE Attention,是一個典型的采用通道注意力的方法。
該方法對每個通道進行全局的均值 Pooling 操作,從而將通道壓縮《Squeeze》到一個標量值。
來自多個通道的標量值形成一個向量,經過全連接層《FC》的處理之後,再利用 Sigmoid 函數將其變換為 0 – 1 之間的值,而這些值就對應了不同通道的權重。
這個給通道加權的過程對應了 SE 中的 Excitation。
SE Attention 網絡結構
以 SE Attention 為基準,後續又有很多工作對其進行了擴展。
這些擴展主要體現在兩方面:
-
一是通道特征的提取;
-
二是如何由通道特征得到權重。
一是通道特征的提取;
二是如何由通道特征得到權重。
對於前者,SE Attention 中采用全局均值 Pooling 來提取通道特征,這可以看作是一種一階的特征提取方法。
改進的方案通常是采用二階或高階的復雜特征。
對於後者,SE Attention 中采用全連接層來生成權重,因此每一個通道的權重計算都包含了所有通道特征的信息,是一種全局的計算方式。
改進的方案通常 采用1D卷積操作來進行局部的權重計算,也就是說每一個通道的權重計算隻與其相鄰的部分通道相關。
ECA-Net中基於相鄰通道的局部權重計算方式
空間注意力
相對於通道注意力,空間注意力更容易理解。
與顯著性圖類似,空間注意力的基本思路也是賦予不同空間位置不同的權重,以此來體現模型所關注的區域。
不同的是,顯著性圖是自底向上的方式,與任務和數據沒有直接的關系, 而空間注意力則完全是由「任務和數據驅動」的。
空間注意力與前面提到的物體檢測中由粗到精的策略類似,都是在空間維度上進行操作。
但不同的是,物體檢測中的采用的是硬注意力機制,也就說會直接拋棄掉不關注的區域,而且這種操作是以物體框為基礎的。
而空間注意力則是作用於圖像或者特征圖的像素,對每個像素進行加權而不是選擇拋棄一些像素。
因此,空間注意力是看作是一種像素級別的軟注意力機制。
CBAM《Convolutional Block Attention Module》模型中提出了一種典型的空間注意力計算方法。
其基本思路是采用 Pooling 操作將特征圖的多個通道壓縮為一個通道,這個單通道特征圖經過卷積和sigmoid操作後,可以得到一個值在 0 – 1 之間的空間注意力圖《spatial attention map》。
如下圖所示,CBAM 同時采用了 Max 和 Mean Pooling,然後將得到的特征拼接起來,再壓縮到一個通道。
CBAM 中的空間注意力計算
這種空間注意力的計算方式與通道注意力非常相似,隻不過前者在通道維度上進行壓縮,而後者在空間維度上進行壓縮。
空間注意力最後表現為一張單通道的 2D Map,而通道注意力最後表現為一個 1D Vector。
空間注意力和通道注意力分別描述了數據不同維度的信息,因此也有研究者提出將二者進行結合。
比如在 Pyramid Feature Attention 中,主幹網絡中的底層特征被用來計算空間注意力,而高層特征被用來計算通道注意力。
通道注意力與任務相關性較大《參考上一節中物體檢測的例子》,因此需要包含更多語義信息的高層特征,而基於高層語義信息的通道注意力會用於輔助空間注意力的生成,一定程度上也會幫助選擇空間上的細節信息。
Pyramid Feature Attention 中空間和通道注意力的結合
分支注意力
神經網絡的結構中經常會出現多個分支,比如 ResNet 結構中的 Shortcut 分支,Inception 結構中不同大小的卷積核對應的多個分支,金字塔結構中不同分辨率的分支等。
這些分支的特征通常會被組合起來《Concat》形成新的特征,而組合的權重則是可學習的參數,通過網絡訓練固定下來,與當前輸入數據沒有關系,也就是說這些權重是靜態的。
為了使特征組合更加靈活,更好的適應當前的輸入數據, 我們可以采用注意力機制來對不同分支進行動態加權。
在 Highway Networks 中,類似於 ResNet 的兩個分支《一個shortcut分支,一個正常的特征變換分支》被賦予動態的權重。
這個權重也是由輸入數據經過一定的處理得到的。
下面公式中的 x 是輸入數據,同時也是 Shortcut 分支的輸出《不做任何處理,保持原數據》,而 H 分支是正常的特征變換分支。
兩個分支分別用 T《transform gate》和 C《carry gate》進行動態加權,T 和 C 也是輸入數據 x 的函數,因此根據數據動態變化的。
一般來說,我們可以認為 C 和 T 是相關的,也就是 C = 1 – T,下面的公式也可以進一步簡化。
在 Selective Kernel Network 中,不同的分支中采用不同大小的卷積核,以提取不同大小感受野的特征。
這種結構與 Inception 網絡類似,但是不同的分支也是采用動態的加權方式進行組合。
如下圖所示,兩個不同大小的卷積核《3×3 和 5×5》生成的特征組合起來之後,經過一系列處理會生成組合權重。
這個動態的組合權重最後被用來將兩個分支的特征進行組合。
Selective Kernel Network 在 Dynamic Head 這個工作中,金字塔結構中不同分辨率的特征也被進行動態加權,也就是下圖中的 Scale-aware Attention。
這個工作還同時采用空間注意力《對應 Spatial-aware Attention》和通道注意力《對應 Task-aware Attention》。
Dynamic Head
自注意力
如果上面的你不太熟悉,那大名鼎鼎的 Transformer 你肯定在熟悉不過了,特斯拉將 Transformer 的應用思路推向了市場的高潮。
Transformer 中采用的是「自注意力機制」, 其主要思路是計算輸入數據之間的相關性,用這個相關性再對輸入數據進行重新編碼。
理論上說,自注意力並沒有限定其作用的范圍,其輸入數據的基本形式就是一組元素。
這些元素可以來自一個序列中不同時間點的數據《時間維度》,也可以來自一張圖像上不同位置的數據《空間維度》,甚至也可以來自不同通道的數據《通道維度》。
從這個意義上說,按照輸入數據的不同,自注意力也可以被認為是空間注意力或者通道注意力。
當然一般來說,在視覺領域,自注意力操作一般還是在空間維度上進行的。
自注意力機制首先在自然語言處理《NLP》領域被用來處理序列形式的文本數據,並取得了非常好的效果。
與處理序列數據常用的 RNN 不同,自注意力機制並不會按照順序來處理數據,而是為序列中每個元素提供全局的上下文,也就是說, 每個元素和序列中的所有元素都會產生聯系。
這樣就保證了不管在時序上相距多遠,元素之間的相關性都可以被很好地保留。
而這種長時相關性對於 NLP 的任務來說通常都是非常重要的。
比如在下圖的例子中,句子中的「it」所指的是「The animal」,但是這兩個元素之間相距較遠,如果用 RNN 來順序處理的話很難建立起兩者之前的聯系。
而自注意力並不關心順序,在計算相關性時,每個元素的重要性是根據數據本身的語義信息計算出來的,因此可以輕松的提取任意兩個元素之間的相關性。
一個句子中各個單詞之間的相關性以上提到的相關性計算就是 Transformer 中的一個重要概念,也就是自注意力機制《Self Attention》。
之所以叫自注意力,是因為計算的是自身元素之間的相關性,而相關性高的元素需要給予更多的注意力。
還是以上圖的句子為例,句子中的每個單詞都需要跟所有單詞計算相似度《每個單詞有一個特征向量》。
Transformer 對每個單詞的編碼過程就是對所有單詞進行加權平均,而權重則是上一步中計算的相似度。
每個單詞進行編碼之後的表示形式依然是一個特征向量,因此以上編碼過程可以堆疊多次,以獲得更好的特征提取能力。
在自注意力機制中,有三個重要的概念:Query《Q》,Key《K》,Value《V》。
其中 Query 和 Key 用來計算權重,然後再和 Value 組合進行加權平均就可以得到最終的編碼輸出。
下面的公式對這個過程進行了形式化。
在自注意力中 Q,K,V 都來自於輸入數據 X,雖然進行了不同的特征變換《不同的 W 矩陣》,但本質上還是同一個來源。
下一節中介紹的交叉注意力在這一點上就會有明顯的不同。
在視覺任務上,自注意力機制同樣取得了巨大的的成功。
原因主要有兩點:
首先,圖像雖然本身不是時間序列數據,但其實可以看作空間上的序列。
視覺任務一個關鍵的步驟就是要提取像素之間的相關性,普通的 CNN 是通過卷積核來提取局部的相關性《也成為局部感受野》。
與 CNN 的局部感受野不同,Transformer 可以提供全局的感受野,因此特征學習能力相比 CNN 要強很多。
其次,如果進一步考慮視頻輸入數據的話,那麼這本身就是時序數據,因此更加適合采用Transformer來處理。
首先,圖像雖然本身不是時間序列數據,但其實可以看作空間上的序列。
視覺任務一個關鍵的步驟就是要提取像素之間的相關性,普通的 CNN 是通過卷積核來提取局部的相關性《也成為局部感受野》。
與 CNN 的局部感受野不同,Transformer 可以提供全局的感受野,因此特征學習能力相比 CNN 要強很多。
其次,如果進一步考慮視頻輸入數據的話,那麼這本身就是時序數據,因此更加適合采用Transformer來處理。
在下圖的例子中,Transformer 被用來完成圖像分類的任務。
圖像被均勻的分成若幹小塊,按照空間排列的順序組成了一個圖像塊的序列。
每個圖像塊的像素值《或者其他特征》組成了該圖像塊的特征向量,經過 Transformer 編碼在進行拼接後就得到整幅圖像的特征。
下圖右側給出了編碼器的具體結構,其關鍵部分是一個多頭注意力模塊《Multi-Head Attention》。
簡單來說, 多頭注意力其實就是多個自注意力模塊的集成,這些模塊各自獨立的進行編碼,提取不同方面的特征,在增加編碼能力的同時,也可以非常高效的在計算芯片上實現並行處理。
以上簡單回顧了一下自注意力機制的基本原理,以及在自然語言處理和計算機視覺任務中的典型應用。
自注意力及其在物體檢測任務中的應用,會在本專題的第二篇文章再進行詳細的介紹。
交叉注意力
自注意力提取的是同一數據自身的相關性,而交叉注意力提取的則是不同數據之間的相關性。
這些數據可以是不同模態的數據,比如文本、語音和圖像。
在自動駕駛環境感知的應用中, 我們一般關心的是來自不同傳感器的數據,而感知任務的核心之一就是將它們進行有效的融合。
交叉注意力非常適合來完成這個任務,特別是將來自不同傳感器的數據融合到一個統一的坐標系下。
在目前的自動駕駛系統中,多個傳感器共同協作已經成為標配,即使是 Tesla 目前采用的純視覺方案,其感知系統也包含了安裝在車身上不同位置的多個攝像頭。
對於 L3/4 級的系統來說,激光雷達和毫米波雷達目前來看更是必不可少的配置。
不同的傳感器會采用不同的坐標系,比如, 攝像頭采用透視坐標系,激光雷達和毫米波雷達的通常采用的是 俯視圖坐標系《也被稱為 Bird’s Eye View,簡稱 BEV》。
傳感器融合需要一個統一的坐標系, BEV 對應的是世界坐標系,因此更加適合自動駕駛系統的需求。
所以一般來說, 我們需要將來自不同攝像頭的圖像數據,或者從圖像數據中得到的感知結果,轉換到 BEV 坐標系下,再與其它傳感器的數據或結果進行融合。
前者對應特征層融合,後者對應決策層融合。
選擇特征層融合還是決策層融合一直都是感知領域討論的熱門話題。
工業界現在應用比較多的是 決策層融合,其優點是不同傳感器之間的獨立性較強,對空間和時間對齊的精度要求較低,因此系統設計也相對簡單。
近兩年來,隨著 Tesla 在 AI Day 上提出 BEV 感知這個概念以來,特征層融合也開始逐漸盛行起來,工業界的解決方案也開始慢慢往這個方向發展。
Tesla 的 BEV 感知, 其核心思路就是采用「交叉注意力機制」建立圖像空間到 BEV 空間的對應關系。
BEV 空間中的每個位置,其特征都可以用圖像中所有位置特征的加權組合來表示,當然對應位置的權重肯定大一些。
這個加權組合的過程通過交叉注意力和空間編碼來自動的實現,不需要手工設計,完全根據需要完成的任務來進行端對端的學習。
當然,這套 BEV 感知系統還包括時序融合,相機標定以及數據標註等環節。
學術界中最近也有很多 BEV 感知相關的工作,其中一個典型的方法就是 BEV Former。
它的基本的思路也是采用空間上的交叉注意力機制來融合來自多個攝像頭的圖像數據。
如下圖所示,輸入數據是來自多個視角的圖像《通過主幹網絡轉換為圖像特征》,輸出的結果是 BEV 視圖下融合後的特征。
為了完成這個任務,首先需要定義 BEV 網格,這個網格會作為注意力機制中的 Query,是一組可學習的參數。
回顧一下自注意力,其中的 Query、Key 和 Value 都來自於輸入數據《圖像》。
而在交叉注意力中,來自另外一個坐標系的 BEV 網格會作為 Query,這也就是為什麼稱之為交叉注意力的原因。
理論上說,Query 的每個網格都可以與來自每個視角,每個位置的特征產生關聯。
但是實際上,每個網格位置隻需要對應一部分的視角,因為一個網格位置並不是在所有視角的圖像上都能看到。
此外,一個網格也隻需要對應圖像上的一個局部區域。
如果對應全圖的話計算量會非常大,而且對於自動駕駛中這種大場景的數據來說也沒有太大的必要。
因此,BEV Former 中采用了 Deformable Attention 來定義這種局部的對應關系。
BEVFormer的網絡結構
以上簡單回顧了一下交叉注意力機制的設計動機,以及在 BEV 感知中的典型應用。
本專題的第三篇文章會對 BEV 感知進行詳細的介紹,其中也會包含一些並不是基於注意力機制的方法。
寫在最後
本文作為注意力機制專題的第一篇文章,首先回顧了一下注意力機制研究的歷史,然後對目前常用的注意力機制,及其在環境感知中的應用進行了介紹。
主要觀點可以總結為以下幾個方面:
-
注意力機制並不是一個新的概念。
計算機視覺領域很早就有關於顯著性《自底向上的注意力》的研究,物體檢測中常用的由粗到精策略也可以看作是一種注意力《自頂向下的硬注意力》。
-
神經網絡中的注意力機制一般都是指自頂向下的,或者說任務/數據驅動的軟注意力機制,包括通道注意力,空間注意力,分支注意力,自注意力和交叉注意力等。
-
Transformer 中的自注意力和 BEV 感知中的交叉注意力是目前研究較多的兩種注意力機制。
前者常用於視覺感知中的特征提取,而後者常用於多傳感器感知中的特征層融合。
注意力機制並不是一個新的概念。
計算機視覺領域很早就有關於顯著性《自底向上的注意力》的研究,物體檢測中常用的由粗到精策略也可以看作是一種注意力《自頂向下的硬注意力》。
神經網絡中的注意力機制一般都是指自頂向下的,或者說任務/數據驅動的軟注意力機制,包括通道注意力,空間注意力,分支注意力,自注意力和交叉注意力等。
Transformer 中的自注意力和 BEV 感知中的交叉注意力是目前研究較多的兩種注意力機制。
前者常用於視覺感知中的特征提取,而後者常用於多傳感器感知中的特征層融合。
更多閱讀
我們研究了特斯拉、毫末「自動駕駛算法」的秘密
Momenta CEO曹旭東:自動駕駛沒有百億美金公司,要麼千億美金、要麼被收購或淘汰
2022,車載高規激光雷達量產元年