close


關注公眾號,發現CV技術之美




本文轉自曠視研究院。


此篇論文已被 AAAI 2022 收錄,論文鏈接請見「閱讀原文」。

● 簡介●

近年來,以 DETR[1]為代表的基於 transformer 的端到端目標檢測算法開始廣受大家的關注。這類方法通過一組目標查詢來推理物體與圖像上下文的關係從而得到最終預測結果,且不需要 NMS 後處理,成為了一種目標檢測的新範式。

但是,這類方法尚有一些不足之處。

首先,DETR 解碼器的目標查詢是一組可學習的向量。這組向量人類難以解釋,沒有顯式的物理意義。同時,目標查詢對應的預測結果的分布也沒有明顯的規律,這也導致模型較難優化。

為了解決上述問題,本文提出了一種基於錨點的查詢設計,因此目標查詢有了顯式的物理意義,且每個查詢僅關注對應錨點附近的區域,使得模型更容易優化。
此外,本文還提出了一種 attention 結構的變種,可以顯著降低顯存消耗,且對於檢測任務中較難的 cross attention 依舊能保持精度不降。
如表 1 所示,最終本文算法比 DETR 精度更高,消耗顯存更少,速度更快,且收斂更快(所需訓練輪次更少)。

表1

● Attention 回顧●

首先,我們回顧一下 DETR 中 attention 的形式:,,

這裡 Q、K 和 V 分別為查詢、鍵和值,下標f和 P分別表示特徵和位置編碼向量,標量為特徵的維度。實際上,Q、K 和 V 還會分別經過一個全連接層,這裡為了簡潔省略了這部分。

DETR 的解碼器包含兩種 attention,一種是 self-attention,另一種是 cross-attention。

在 self-attention 中,和與一樣,與一樣。其中由上一個解碼器層的輸出得到,第一個解碼器層的被初始化為一個常數向量,如零向量;而設置為一組可學的向量,為解碼器中所有的共享:,

在 cross-attention 中,由之前的 self-attention 的輸出得到;而和是編碼器的輸出特徵;是編碼器輸出特徵對應的位置編碼向量,DETR 採用了正餘弦函數來作為位置編碼函數,我們將該位置編碼函數記作,若編碼器特徵對應的位置記作,那麼:在此解釋一下,H, W, C 分別是特徵的高、寬和通道數目,而是預設的目標查詢數目。


● 查詢設計 ●

通常我們把解碼器中的認作是目標查詢,這是因為它負責分辨不同的物體(解碼器中的初始為零向量沒有分辨能力)。

如前文所述,DETR 中的目標查詢是一組可學向量,其難以解釋且沒有顯式的物理意義。觀察這些目標查詢對應的預測結果的分布,如圖 1 所示,每個方格中的點表示一個目標查詢對應的所有圖像預測結果的中心點,可以看到,每個查詢都負責非常大的範圍,且導致負責的區域有很大的重疊,這種模糊性也使得網絡很難優化。

圖 1

為了解決這個問題,本文提出基於錨點的查詢設計,每個目標查詢為錨點坐標的編碼,因此具有了顯式的物體意義。並且,每個查詢僅關注錨點附近的區域,可使得網絡模型更易優化。

在基於 CNN 的檢測算法中,錨點通常都是特徵網格點的坐標。而在本文中,錨點可以更加靈活。可以使用預設的網格位置的錨點,也可以是一組可以隨網絡學習的位置點。如圖 2 所示,我們發現最終學習到的錨點分布與網格點較為相似,都是趨於均勻分布在整個圖像上。這可能是因為在整個圖像集中,圖像的各個位置都會出現物體。

圖 2

記錨點為,其表示有個錨點,每個錨點記錄點的(x,y)坐標。那麼,基於錨點的目標查詢則是:()即目標查詢為錨點坐標的編碼。那麼如何選擇位置編碼函數呢?最自然地,本文選擇與鍵特徵共享一樣的位置編碼函數:(),()其中,g 為位置編碼函數,它可以是前述的,也可以是其它的形式。在本文中我們對啟發式的額外加入了兩個全連接層以更好地調整它。


更進一步考慮,有時一個位置可能會出現多個物體。顯然,若一個錨點僅能預測一個物體的話,那麼該位置的其它物體則需要其它位置的錨點來一同預測。這導致每個錨點負責的區域擴大,增加了其位置模糊性。為了解決這個問題,本文對每個錨點加入多種模式,使其可以有多個預測。

回顧 DETR,其中初始的查詢特徵為,對於個目標查詢來說,每個都只有一種模式,其中表示目標查詢的索引。

因此,本文為每個目標查詢設置多種模式,其中為模式的數目,是一個較小的值,如=3。具體而言,本文使用一組可學向量,作為目標查詢的多種模式。考慮移動不變性,我們希望這些模式與位置無關,因此讓各個錨點共享多種模式。如此,我們便可得到增廣的初始查詢特徵和查詢位置編碼。

觀察改進後的目標查詢對應的預測結果的分布,如圖 3 所示,其中最後一行為錨點,前三行是對應錨點的三種模式的預測,可以看到,基於錨點的查詢將關注錨點附近的區域,查詢對應的預測框中心點都分布在錨點周圍。此時查詢不需要預測離對應錨點很遠的物體,因此其具體特定的語義,從而模型將更容易優化。

圖 3

圖 4 展示了各個查詢模式對應預測的分布,可以發現模式與物體大小存在一定關係,例如大物體幾乎都出現在模式(a)中,模式(b)則關注小物體,模式(c)介於兩者之間。另外我們還可以發現,所有的模式都會預測小物體,這是因為小物體更容易出現一個位置多個物體的情況。

圖 4

● Attention 變種●

目前許多的 attention 變種,如 Deformable DETR[2]、Efficient Attention[3]等,都可以大幅度降低 transformer 占用的顯存。然而,也許是由於 DETR 類方法中 transformer 解碼器的 cross attention 較難,若使用同樣的特徵,這些方法將會導致一定程度上的精度降低。

本文提出了一種行列特徵解耦的 attention 變種(Row-Column Decoupled Attention, RCDA),將鍵特徵解耦為列特徵和行特徵,再依次進行列 attention 和行 attention。該方法不僅可以降低顯存消耗,還可以得到和原先的標準 attention 相似或者更高的精度。


首先,對於鍵特徵,先將其解耦為行特徵和列特徵,本文採用的解耦方式為分別沿着列和行做均值。

接下來,則可以分別計算查詢對於行、列鍵特徵的注意力圖:()()

其中,,,

(),(),,(),(),
最後則依據行列注意力圖,對值特徵依次沿着行、列進行加權和。不失一般的,我們假設 W≤H,可如下式先沿着列加權,再沿着行加權(若 W>H,則可先沿着行加權,使中間結果的顯存占用小一些):

其中行列解耦的 attention 變種的原理上文便介紹完了,現在我們再來討論一下它為什麼可以節省顯存。

在之前的表述中,我們不失一般的假設 Attention 頭的數目為 1 以更加簡潔,現在我們設其為 M。在標準的 Attention 中,注意力圖為主要的顯存占用瓶頸,而在行列解耦的attention中,行列注意力圖和的顯存遠小於標準 attention 中的注意力圖。

由於特徵的通道數目 C 通常大於 M,RCDA 的中間結果 Z 的顯存占用要大於行列注意力圖,因此我們主要比較 RCDA 的中間結果與標準Attention 中注意力圖之間的關係。顯然,隨着圖像特徵分辨率的增大(H 與 W 增大),標準 attention 的顯存占用增長得更快。


行列解耦 attention 較標準 attention 可以節省顯存的倍數為:

在默認的設置中,M=8,C=256,因此當特徵長邊 H 大於 32 時,RCDA 可以節省顯存。在目標檢測任務中,特徵邊長 32 是 C5 特徵的一個典型值,因此使用 C5 特徵顯存占用相差不大,使用更大的 C4 特徵顯存可省 2 倍,依次類推。


● 總體流程●

算法的總體流程如圖 5 所示,首先通過 CNN 網絡提取圖像特徵,然後再經過transformer 編碼器通過 self attention 處理圖像特徵,輸出的圖像特徵將作為解碼器的鍵和值特徵。解碼器的查詢為前文所述基於錨點的多模式查詢,在解碼器中,各個查詢分別根據注意力圖聚合感興趣的圖像特徵,最後輸出最終的預測結果。預測框的中心點預測相對錨點的偏移量,而框的大小則預測其相對圖像的大小。編碼器和解碼器中的 attention 可以採用標準的 attention,也可以採用本文所述的行列解耦 attention。對於 attention 中各特徵的位置編碼,則依據其位置使用共享的位置編碼函數得到。

圖 5


● 實驗分析●

如表 2 所示,我們比較了本文算法與其它一些算法的性能比較,默認的骨幹網絡為 ResNet50。可以看到本文算法可以到達較好的性能,且繼承了 DETR 無需手工設計錨框、無需 NMS 後處理,且不涉及隨機內存訪問的優秀性質。

表 2

不涉及隨機內存訪問(RAM-free)的性質可以減小硬件的訪存代價,在實用中對硬件更加友好。

舉個例子,假設有個人(專用計算芯片)力氣很大(算力很強),他可以輕鬆地把一疊共 1000 張紙搬到指定的地方(計算處理某個張量)。而假如讓他取出其中的第 123 張和第 234 張紙搬到指定的地方,需要搬的紙雖然少了很多(計算量大幅度降低),但是由於需要找到這些指定的紙(隨機內存訪問),可能會更加費時(訪存代價增加)。

通常來說,兩階段的檢測算法由於感興趣的區域(RoI)的坐標對硬件來說隨機的,提取感興趣區域的特徵會涉及到隨機內存訪問。而 Deformable DETR 也涉及到提取特定坐標的特徵的情況,因此也非 RAM-free。

如表 3 所示,我們還分析了上述所提各個模塊的效果。首先,我們可以看到所提的查詢設計,即將錨點(anchors)編碼為解碼器查詢以及為錨點加入多種模式(patterns),可以將性能從 39.3 提升至 44.2,這個顯著的提升表明了本文的查詢設計較原 DETR 查詢設計的優越性。我們還可以看到,將標準的Attention 替換為 RCDA 性能近乎一致,這表明 RCDA 可以無損地降低顯存占用。還有一點比較有趣的現象,若我們為原 DETR 的查詢加入多種模式,其性能沒有明顯的變化,我們認為這是因為 DETR 的查詢與位置沒有明顯關係,不能獲得解決「一個位置多個物體」問題的收益。

表 3

如表 4 所示,我們比較了使用不同數目的錨點(anchor points)和模式(patterns)。100 個錨點數目過少性能較低,而 900 個錨點性能與 300 個錨點相差僅 0.3,因此我們默認使用 300 個錨點。可以看到,為每個錨點設置多種模式,性能會有明顯的提升。另外,當預測結果的數目一致時,即保持錨點數目乘以模式數目的值不變時,多種模式的性能也比一種模式效果更好,這說明了多種模式的提升並非是因為預測的數目增加,而是本質更好。

表 4

如表 5 所示,我們比較了 attention 變種的效果。可以看到,Efficient Attention 雖然可以大幅度降低顯存,但是由於 cross attention 較難,效果有明顯下降。而本文的 RCDA 將顯存占用從 10.5G 降低至 4.4G,而精度卻沒有明顯變化。

表 5
● 總結●
本文提出了一個基於 transformer 的檢測算法,其實現簡單,且比 DETR 精度更高,消耗顯存更少,速度更快,且收斂更快。
● 參考文獻●

[1] Carion N, Massa F, Synnaeve G, et al. End-to-end object detection with transformers[C]//European conference on computer vision. Springer, Cham, 2020: 213-229.

[2] Zhu X, Su W, Lu L, et al. Deformable detr: Deformable transformers for end-to-end object detection[J]. arXiv preprint arXiv:2010.04159, 2020.

[3] Shen Z, Zhang M, Zhao H, et al. Efficient attention: Attention with linear complexities[C]//Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision. 2021: 3531-3539.


END



歡迎加入「目標檢測」交流群👇備註:OD



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()