Deformable DETR: 基于稀疏空間采樣的注意力機制,讓DCN與Transformer一起玩刊头!

Date: 2021/02/02

Coder: CW

Foreword:

DETR提出后黍瞧,Transformer就被帶到目標(biāo)檢測這邊玩起來了,而且還玩出各種花樣原杂,你看印颤,這不就來了個可變形的DETR——Deformable DETR(名字倒是挺帥)〈┮蓿看到'Deformable'字樣年局,估計各位煉丹師第一反應(yīng)都會是DCN(Deformable Convolutional Networks)。沒錯咸产,這里就是借鑒了DCN的思想矢否,將其應(yīng)用在注意力機制上。

相對于Transformer那種全局(global)&密集(dense)的注意力機制脑溢,這里提出了一種新玩法:每個參考點僅關(guān)注鄰域的一組采樣點僵朗,這些采樣點的位置并非固定,而是可學(xué)習(xí)的(和可變形卷積一樣)屑彻,從而實現(xiàn)了一種局部(local)&稀疏(sparse)的高效注意力機制验庙。

OK,接下來一起和CW看看具體是怎么玩的吧社牲!

附:Paper & Code


主要內(nèi)容

I. 研究動機

II. 方法概述

III. 主要方法

? ? i). Multi-Scale Features & Scale-Level Embedding

? ? ii). Deformable Attention(& Multi-Scale)

? ? iii). Deformable Transformer

? ? ? ? -Encoder

? ? ? ? -Decoder

IV. 改進策略

? ? a. Iterative Bounding Box Refinement

? ? b. Two-Stage Deformable DETR

V. 頭腦風(fēng)暴

? ? 1. 為何不需要FPN也能達到跨層融合的效果粪薛?

? ? 2. 為何注意力權(quán)重可由query直接通過全連接層預(yù)測?

? ? 3. 為何檢測頭部的回歸分支預(yù)測的是偏移量而非絕對坐標(biāo)值搏恤?

VI. 與其它方法比較

? ? i). vs DETR

? ? ii). vs Sparse R-CNN


I. 研究動機

DETR膩害啊违寿,DETR好哇(猜測作者內(nèi)心:太好了,我可以在這基礎(chǔ)上玩熟空,然后發(fā)paper了)藤巢!作者開篇先吹了DETR一波,那麼膩害在哪里痛阻、好在哪里呢菌瘪?

i). 第一個端到端的目標(biāo)檢測器腮敌;

ii). 不需要眾多手工設(shè)計組件(如anchor阱当、固定規(guī)則的標(biāo)簽分配策略俏扩、NMS后處理等)

iii). DETR實質(zhì)上相當(dāng)于是給出了一個方法論,猶如“普度眾生”弊添,告訴大家Transformer可以拿到目標(biāo)檢測中來玩录淡,并沒有過多地追求其它方面的成就(沒有使用一些騷里騷氣的tricks去漲點),剩下的就讓你們?nèi)ネ姘捎桶樱媸橇夹牧耍嫉戚。ㄋ揭詾椋髡呤①滵ETR最真實的在于這點哈哈哈~3喝Α)

OK彬檀,這波吹完后,作者開始為他的工作作鋪墊了瞬女,一個‘However’可謂峰回路轉(zhuǎn):

Howerver, it suffers from slow convergence and limited feature spatial resolution, due to the limitation of Transformer attention modules in processing image feature maps.

也就是說DETR收斂慢而且能夠處理的特征分辨率有限窍帝,而且,鍋還甩在了Transformer上(Transformer內(nèi)心:我好不容易來CV界混一混诽偷,還沒過足癮這就被噴了@ぱА?)报慕。至于原因嘛深浮,主要有以下兩點:

i). Transformer在初始化時,分配給所有特征像素的注意力權(quán)重幾乎是均等的眠冈,這就造成了模型需要長時間去學(xué)習(xí)關(guān)注真正有意義的位置飞苇,這些位置應(yīng)該是稀疏的;

ii). Transformer在計算注意力權(quán)重時蜗顽,伴隨著高計算量與空間復(fù)雜度玄柠。特別是在編碼器部分,與特征像素點的數(shù)量成平方級關(guān)系诫舅,因此難以處理高分辨率的特征(這點也是DETR檢測小目標(biāo)效果差的原因)

至此羽利,作者認為鋪墊得差不多了,再噴下去就過分了(Tranformer內(nèi)心:我太難了~)刊懈,見好就收这弧。


II. 方法概述

鋪墊完,是時候秀秀自己的工作了虚汛。作者認為匾浪,既然要學(xué)習(xí)稀疏的空間位置,為何不用可變形卷積那套呢卷哩?但是蛋辈,可變形卷積同時也缺乏關(guān)系建模能力,而這點恰好是Transformer最擅長的,于是作者最終就將兩者放在一起玩冷溶,這個玩法就是 Deformable DETR渐白。

當(dāng)然,這不是玩玩而已逞频,Deformable DETR是能解決DETR的慢收斂與高計算復(fù)雜度問題的纯衍。作者秀到:這個玩法最大的亮點在于提出了可變形注意力模塊,相比于Transformer那種有點'low'的方式苗胀,在這里襟诸,每個特征像素不必與所有特征像素交互計算,只需要與部分基于采樣獲得的其它像素“親密接觸”(交互)即可基协,這就大大加速了模型收斂歌亲,同時也降低了計算復(fù)雜度與所需的空間資源。另外澜驮,該模塊能夠很方便地應(yīng)用到多尺度特征上应结,連FPN都不需要。

這么一看泉唁,好像有點膩害哦鹅龄,具體是怎么做到的?下面CW就帶大家一起來看看亭畜。


III. 主要方法


i). Multi-Scale Features & Scale-Level Embedding

在上一節(jié)也提到過扮休,作者說可變形注意力能夠用于處理多尺度特征,于是在backbone部分提取了不同層級的特征拴鸵,總共有4層玷坠,其中C_{3}~C_{5} 來自ResNet,下采樣率對應(yīng)為8劲藐、16八堡、32,C_{6} C_{5} 經(jīng)過步長為2的3x3卷積得到聘芜。

多尺度特征構(gòu)建

要知道兄渺,DETR僅用了單尺度特征,于是對于特征點位置信息的編碼汰现,使用的是三角函數(shù)挂谍,不同位置的特征點會對應(yīng)不同的編碼值,沒問題瞎饲。但是口叙,注意了,這僅能區(qū)分位于單尺度特征點的位置嗅战!而在多尺度特征中妄田,位于不同特征層的特征點可能擁有相同的(h,w)坐標(biāo),這樣就無法區(qū)分它們的位置編碼了。

針對這個問題疟呐,作者增加使用一個稱之為'scale-level embedding'的東東脚曾,它僅用于區(qū)分不同的特征層,也就是同一特征層中的所有特征點會對應(yīng)相同的scale-level embedding萨醒,于是有幾層特征就使用幾個不同的scale-level embedding斟珊。

另外苇倡,不同于三角函數(shù)那種固定地利用公式計算出來的編碼方式富纸,這個scale-level embedding是隨機初始化并且是隨網(wǎng)絡(luò)一起訓(xùn)練的、是可學(xué)習(xí)的:

scale level embedding的實現(xiàn)

在實際使用時旨椒,這個 scale-level embedding 與基于三角函數(shù)公式計算的 position embedding 相加在一起作為位置信息的嵌入:

scale level embedding的使用


ii). Deformable Attention(& Multi-Scale)

可變形注意力的道理用大白話來說很簡單:query不是和全局每個位置的key都計算注意力權(quán)重晓褪,而是對于每個query,僅在全局位置中采樣部分位置的key综慎,并且value也是基于這些位置進行采樣插值得到的涣仿,最后將這個局部&稀疏的注意力權(quán)重施加在對應(yīng)的value上。

OK示惊,“普通話”講完好港,該高大上(公式+代碼)一番了。Transformer中多頭注意力的公式如下:

Transformer中的多頭注意力公式

其中米罚,z_{q} 看作query钧汹,由x經(jīng)過線性變換生成,q是對應(yīng)的索引录择,k是key的索引拔莱,\Omega _{k} 即所有的k集合,m代表是第幾個注意力頭部隘竭,W_{m} 是對注意力施加在value后的結(jié)果進行線性變換從而得到不同頭部的輸出結(jié)果塘秦,W_{m} ' 用于將x_{k} 變換成value,A_{mqk} 代表歸一化的注意力權(quán)重动看。

由此可知尊剔,在Transformer的多頭注意力計算中,每個query都要與所有位置的key計算注意力權(quán)重菱皆,并且對應(yīng)施加在所有的value上赋兵。

再來看看我們(哦,不是我們搔预,與我無關(guān)霹期,你們要嗎?)的Deformable Attetion:

Deformable Attention公式

和Transformer的很像是不是拯田?(老師我沒有抄作業(yè)历造,別兇..)可以看到,這里多了p_{q} \Delta p_{mqk} 。其中吭产,前者代表z_{q} 的位置(理解成坐標(biāo)即可)侣监,是2d向量,作者稱其為參考點(reference points)臣淤;而后者是采樣集合點相對于參考點的位置偏移(offsets)橄霉。

可以看到,每個query在每個頭部中采樣K個位置邑蒋,只需和這些位置的特征交互x(p_{q}+\Delta p_{mqk}? )代表基于采樣點位置插值出來的value)姓蜂,并不需要像Transformer般一開始先從全局位置開始學(xué)習(xí)才能逐漸過渡到關(guān)注局部(&稀疏的)的、真正有意義的位置医吊。

需要注意的是钱慢,如可變形卷積一樣,位置偏移\Delta? p_{mqk} 是可學(xué)習(xí)的卿堂,由query經(jīng)過全連接層得到束莫。并且,注意力權(quán)重也一樣草描,直接由query經(jīng)過全連接層得到因此览绿,在可變形注意力機制下,其實沒有真正所謂的key來與query交互計算穗慕,為何可以這樣做饿敲,后文CW會談自己的看法)!同時在K個采樣點之間歸一化揍诽,而非像Transformer般是由query與key交互計算得出的诀蓉。

OK,順著來暑脆,看看可變形注意力是如何應(yīng)用到多尺度特征上的渠啤,依舊是公式走起:

Multi-Scale Deformable Attention公式

這個也和上面的非常想是不是!添吗?(老師我真的沒有抄作業(yè)啊..太難了~)相比于上面沥曹,這里多了\left\{ x^l?  \right\} _{l=1}^L\phi _{l} 。另外p_{q} 頭上多了個小尖角碟联,代表歸一化到[0,1]妓美,而\phi _{l} 正是用于將歸一化的坐標(biāo)映射(re-scales)到各個特征層去,這樣鲤孵,每個參考點在所有特征層都會有一個對應(yīng)的(歸一化)坐標(biāo)壶栋,從而方便計算在不同特征層進行采樣的那些點的位置。至于\left\{ x^l?  \right\} _{l=1}^L嘛普监,當(dāng)然就是代表多尺度特征咯贵试,x^l 代表第l層的特征琉兜。

在這里,每個query在每個特征層都會采樣K個點毙玻,共有L層特征豌蟋,從而在每個頭部內(nèi)共采樣LK個點,注意力權(quán)重也是在這LK個點之間進行歸一化桑滩。

另外梧疲,作者還提到,當(dāng)L=K=1W_{m} ' 是identity矩陣時运准,該模塊就退化成可變形卷積幌氮;相對地,當(dāng)采樣所有可能的位置(即全局位置)時戳吝,該模塊等效于Transfomer中的注意力浩销。

道理說完贯涎,依舊如CW的風(fēng)格听哭,是時候上代碼了。

MSDeformAttn(i)
MSDeformAttn(ii)

接下來有個亮點塘雳,在以上最后的_reset_parameters()中陆盘,是關(guān)于生成初始的采樣點位置的:

MSDeformAttn(iii)

具體實現(xiàn)以及道理看以上代碼和CW的注釋,最終效果就是败明,初始的采樣點位置相當(dāng)于會分布在參考點3x3隘马、5x5、7x7妻顶、9x9方形鄰域酸员。在github上有朋友提過相關(guān)的issue,CW那時正好逛到讳嘱,也給予了相應(yīng)的互動:Why sampling_offsets in `MSDeformAttn` is normalized by n_points

另外幔嗦,對于注意力權(quán)重的初始化,CW發(fā)現(xiàn)作者的源碼實現(xiàn)和paper中描述得有出入:

MSDeformAttn(iv)

若按照以上的實現(xiàn)沥潭,感覺明顯不合理邀泉,這樣會導(dǎo)致注意力權(quán)重為全0,從而使得這個模塊的輸出結(jié)果也會變?yōu)槿?钝鸽。CW在github上提了issue汇恤,暫未有回復(fù):Initialization for bias parameters of the attention weights seems to be wrong

接下來看看最重要的前向過程:

MSDeformAttn(v)

Deformable DETR有2-stage模式,后文會講到拔恰。在2-stage模式下因谎,輸入到Decoder的參考點和object query&query embedding會有所不同。

MSDeformAttn(vi)

以下主要是計算出采樣點的位置颜懊。2-stage模式下财岔,輸入到Decoder的參考點是Encoder預(yù)測的top-k proposal boxes阱穗,也就是說是4d的(非2-stage情況下是2d),于是需要分情況處理:

MSDeformAttn(vii)

注意力權(quán)重有了使鹅,采樣點位置有了揪阶,最后就是計算結(jié)果了。

MSDeformAttn(viii)

在這里患朱,將注意力權(quán)重與value進行weighted sum的實現(xiàn)是調(diào)用了用CUDA來實現(xiàn)的版本鲁僚,因為Pytorch版性能有點尷尬,不過我們也可以看看Pytorch的實現(xiàn)裁厅,了解其中的邏輯冰沙。

ms_deform_attn_core_pytorch(i)

以下就是基于采樣點位置插值出對應(yīng)的采樣特征(value):

ms_deform_attn_core_pytorch(ii)

最后就是將注意力權(quán)重和采樣特征進行weighted sum:

ms_deform_attn_core_pytorch(iii)


iii). Deformable Transformer

這里的Transformer和DETR中的大體過程一致,最主要的區(qū)別在于用可變形注意力替代了Encoder中的自注意力(self-attention)以及Decoder中的交叉注意力(cross-attention)执虹。在分別解析Encoder和Decoder前拓挥,CW先向大家梳理下這里Transformer的整個pipeline(有源碼解析哦!)袋励。

1). 為Encoder的輸入做準備

? ? 主要是將一些輸入元素的維度展平(flatten)侥啤,這些輸入元素包括:多尺度特征圖、各尺度特征圖對應(yīng)的mask(指示哪些部分屬于padding)茬故、各尺度特征圖對應(yīng)的位置信息(position embedding + scale-level embedding)盖灸,另外還有些輔助信息,比如:各尺度特征圖的寬高磺芭、不同尺度特征對應(yīng)于被flatten的那個維度的起始索引赁炎、各尺度特征圖中非padding部分的邊長占其邊長的比例。

為Encoder的輸入作準備(i)
為Encoder的輸入作準備(ii)
為Encoder的輸入作準備(iii)
為Encoder的輸入作準備(iv)

2). Encoder編碼特征

? ? 源碼對應(yīng)上圖最后一句钾腺。

? ? 輸出memory(編碼后的特征表示)徙垫,shape是 (bs, h_lvl1*w_lvl1+h_lvl2*w_lvl2+.., c=256),其中h_lvli和w_lvli分別代表第i層特征圖的高和寬放棒,于是第二個維度就是所有特征點的數(shù)量姻报。編碼后,特征的最后一個維度(hidden_dim)為256哨查。

3). 處理Encoder的輸出逗抑,為Decoder的輸入做準備

? ? 這一步主要是得到參考點(reference points)。需要說明下寒亥,在2-stage模式下邮府,參考點和輸入到Decoder的object query及query embedding的生成方式和形式會有所不同:

? ? --如果是2-stage模式,那么參考點就是由Encoder預(yù)測的top-k得分最高的proposal boxes(注意溉奕,這時參考點是4d的褂傀,是bbox形式)。然后通過對參考點進行位置嵌入(position embedding)來生成Decoder的object query(target) 和對應(yīng)的 query embedding加勤;

? ? --否則仙辟,Decoder的 object query(target )和 query embedding 就是預(yù)設(shè)的embedding同波,然后將query embedding經(jīng)過全連接層輸出2d參考點,這時的參考點是歸一化的中心坐標(biāo)形式叠国。

? ? 另外未檩,兩種情況下生成的參考點數(shù)量可能不同:2-stage時是有top-k(作者設(shè)置為300)個,而1-stage時是num_queries(作者也設(shè)置為300)個粟焊,也就是和object query的數(shù)量一致(可以理解為冤狡,此時參考點就是object query本身的位置)。

為Decoder的輸入作準備(i)

在閱讀源碼的過程中项棠,CW發(fā)現(xiàn)這里有個小問題悲雳,貌似不妥。由于分類預(yù)測頭部的輸出維度是多分類的香追,而proposals僅需二分類就足夠了合瓢,作者在取top-k得分時直接用第一個類別預(yù)測的結(jié)果來計算:

為Decoder的輸入作準備(ii)

同時,在不使用iterative bbox refine策略的情況下透典,會使得在第二階段對解碼輸出進行分類時都傾向于預(yù)測第一個類別(使用iterative bbox refine時晴楔,對Decoder每層都有不同的分類預(yù)測頭部實例,參數(shù)不共享掷匠,并且在這里會額外使用一個獨立的分類預(yù)測頭部滥崩,與應(yīng)用到Decoder中的不相關(guān))岖圈。關(guān)于檢測頭部的設(shè)置讹语,代碼如下:

檢測頭部的設(shè)置與初始化

繼續(xù),緊接著pipeline來吧蜂科。

為Decoder的輸入作準備(iii)
為Decoder的輸入作準備(iv)

4). Decoder解碼特征并輸出參考點

? ? 若使用了iterative bbox refine策略顽决,則Decoder每層都會預(yù)測bbox,這些bbox就會作為新一輪的參考點供下一層使用导匣,相當(dāng)于coarse-to-fine的過程才菠,不斷地對參考點進行校正,最終會返回最后一層的校正結(jié)果贡定。

? ? 由此可知赋访,即便不是2-stage模式,只要使用了iterative bbox refine策略缓待,這里返回的參考點也會變?yōu)?d的形式蚓耽。因為檢測頭部的回歸分支預(yù)測出來的結(jié)果是4d(xywh)形式的,而且是相對于參考點的偏移量(并非絕對坐標(biāo)位置)旋炒。如果初始進來的參考點是2d的步悠,那么wh就僅由檢測頭部的預(yù)測結(jié)果決定潦闲。

? ? 相對地昔头,如果沒有使用iterative bbox refine策略,那么這里返回的參考點和初始輸進來的一樣,保持不變啤它。

Decoder解碼特征并輸出參考點

5). 輸出解碼特征和參考點

? ? 這里輸出的參考點有兩個,包括初始進入Decoder前的和Decoder返回的横殴。在上一步也說過昆禽,如果沒有使用iterative bbox refine策略,則兩者是一樣的择卦。


Encoder

這里的Encoder與Transformer中最主要的區(qū)別在于使用可變形注意力替代了原生的自注意力睁壁。類似地,在每層編碼時會將上一層輸出的編碼特征作為下一層的輸入互捌,這個輸入與position emebdding結(jié)合作為query潘明、而經(jīng)過線性變換則作為value。

Encoder的編碼過程

現(xiàn)在具體來看看主要有哪些過程:

i). 計算參考點的位置

? ? 這里的參考點實質(zhì)就是多尺度特征點的歸一化坐標(biāo)秕噪。注意钳降,每個特征點在所有特征層都會計算出一個對應(yīng)的歸一化坐標(biāo)(后文會談到為何這樣做)

計算參考點位置(i)
計算參考點位置(ii)

CW通過源碼發(fā)現(xiàn)有個小問題:這里在對坐標(biāo)歸一化時使用的是非padding部分的特征圖邊長腌巾,而不同層非padding部分的邊長比例有可能由于計算時的舍入誤差而不一致遂填,從而導(dǎo)致最終歸一化后的坐標(biāo)值大于1。

ii). self-attention

? ? 使用(多尺度)可變形注意力模塊替代原生的Transformer自注意力澈蝙,query和value均來自特征圖吓坚,只不過query要結(jié)合position embedding,注意灯荧,這里的position embedding實質(zhì)是position emebedding + scale-level emebedding礁击。

iii). feed-forward network

? ? 前向反饋網(wǎng)絡(luò),和Transformer中的一致:由全連接層逗载、激活函數(shù)哆窿、Dropout、殘差連接以及層歸一化(LayerNorm)組成厉斟。

self-attention+ffn


Decoder

這里與Transformer中主要的區(qū)別在于使用可變形注意力替代了原生的交叉注意力挚躯。類似地,每層的解碼過程是self-attention+cross-attention+ffn擦秽,下一層輸入的object query是上一層輸出的解碼特征码荔。

Decoder解碼

一起具體來看看每層的主要過程:

i). 將參考點坐標(biāo)映射(re-scales)到各尺度特征層

? ? 將每個參考點的坐標(biāo)分別都乘以各特征層非padding部分邊長的比例,使得一個參考點在所有尺度特征層上都有相應(yīng)的歸一化坐標(biāo)值(后文會談到為何這樣做)感挥。

對參考點坐標(biāo)進行處理(i)
對參考點坐標(biāo)進行處理(ii)

ii). self-attention

? ? 這一步是為了學(xué)習(xí)各個目標(biāo)之間的關(guān)系缩搅,query和key都是object query+query embedding,value就是object query(注意不需要位置嵌入哦)链快。

self-attention

iii). cross-attention

? ? 使用(多尺度)可變形注意力模塊替代原生的Transformer交叉注意力誉己,object query來自self-attention層的輸出,同時也要加上query embedding域蜗;value由Encoder編碼的特征經(jīng)過線性變換得到巨双。

cross-attention

iv). feed-forward network

? ? 輸入來自cross-attention的輸出噪猾,詳細過程就不再闡述了,都是老朋友了~

feed-forward network

v). iterative bounding box refinement

? ? 僅當(dāng)使用了iterative bbox refine策略時有這一步:使用bbox檢測頭部對解碼特征進行預(yù)測筑累,得到相對于參考點(boxes or points)的偏移量袱蜡,然后加上參考點坐標(biāo)(先經(jīng)過反sigmoid處理,即先從歸一化的空間從還原出來)慢宗,最后這個結(jié)果再經(jīng)過sigmoid(歸一化)得到校正的參考點坪蚁,供下一層使用(在輸入下一層之前會取消梯度,因為這個參考點在各層相當(dāng)于作為先驗的角色)镜沽。

refine(i)
refine(ii)

vi). 輸出各層的解碼特征和參考點

輸出各層的解碼特征和參考點

IV. 改進策略

Deformable DETR是怎么讓DCN和Transformer一起玩的敏晤,CW在上述已基本解析完畢。無奈作者還研究了“高配版”的Deformable DETR缅茉,涉及兩個提升性能的策略:iterative bounding box refinement & two-stage嘴脾。于是,CW又要多碼不知道多少字了..

a. Iterative Bounding Box Refinement

字面意思就是迭代地對bbox進行校正蔬墩,類似于cascaded head译打,實質(zhì)上也是coarse-to-fine不斷校正的一個過程。第d層Decoder校正后歸一化的bbox用公式表示如下:

bbox校正公式

其中\Delta b_{q\{x,y,w,h\}}^d 是第d層Decoder利用檢測頭部的回歸分支預(yù)測的結(jié)果(偏移量)拇颅,\sigma \sigma ^{-1} 分別代表sigmoid和反sigmoid函數(shù)奏司。

在這里需要注意兩點:1. 各層的檢測頭部是不共享參數(shù)的;2. 校正后的bbox梯度會被阻斷(detach)樟插,不會跨層傳播

具體實現(xiàn)和解析在上一節(jié)講Decoder的時候已詳細說明韵洋,這里就讓CW偷懶一下下吧~

b. Two-Stage Deformable DETR

2-stage模式下,Encoder會輸出一批proposals(并不是基于網(wǎng)絡(luò)預(yù)測岸夯,而是像anchor一樣計算出來的)麻献,boxes中心就是各特征點的中心,而寬猜扮、高的設(shè)置則與所在的特征層相關(guān),base值設(shè)置為0.05监婶。這時的proposals相對于anchors的角色旅赢。

然后,使用檢測頭部的分類分支對Encoder編碼的特征(memory)進行預(yù)測惑惶,對應(yīng)各個proposals的分類結(jié)果煮盼;同時使用回歸分支也對編碼特征也進行預(yù)測,得到相對于proposals(xywh)的偏移量带污,接著將偏移量加在proposals的中心坐標(biāo)和寬僵控、高上得到第一階段預(yù)測的proposals。

最后鱼冀,取top-k分數(shù)最高的那批預(yù)測proposals作為Decoder的參考點报破。并且悠就,Decoder的object query和query embedding都由參考點通過位置嵌入(position embedding)來生成。

具體的代碼過程在前面Deformable Transformer已有解析充易,這里就不再重復(fù)啦~


V. 頭腦風(fēng)暴

如果認真思考梗脾,會發(fā)現(xiàn)Deformable DETR中有許多值得考量的地方。


1. 為何不需要FPN也能達到跨層融合的效果盹靴?

作者在paper中說到炸茧,多尺度可變形注意力可以在不同尺度的特征之間交換信息,因此不需要FPN:

Note that the top-down structure in FPN (Lin et al., 2017a) is not used, because our proposed multi-scale deformable attention in itself can exchange information among multi-scale feature maps.

那么到底是為何稿静?具體是怎么做到的呢梭冠?

其實前文也提到了,每個參考點在各尺度特征層都會進行采樣改备。而且在上述處理參考點坐標(biāo)的過程中妈嘹,我們也可以看到,無論在Encoder還是Decoder绍妨,都會對參考點進行處理润脸,使得一個參考點在所有尺度特征層上都有相應(yīng)的歸一化坐標(biāo)值。為什么這樣做呢他去?這樣做其實就是為了計算出每個參考點在各尺度特征層對應(yīng)的采樣點位置毙驯。

那么你可能又會奇怪了,一個參考點明明是只處于某個特定的特征層灾测,怎么能夠把它放到另一個特征層去呢爆价?這樣合理嗎?

合理不合理由網(wǎng)絡(luò)去進行學(xué)習(xí)媳搪,基于最終的匹配效果來證明铭段。但是可不可行我們倒是可分析的,可以這么看:我們知道秦爆,由于特征圖是經(jīng)過原圖下采樣得到序愚,因此一個像素點無論是處于原圖還是各層特征圖中,其坐標(biāo)的歸一化值應(yīng)該是一致的(忽略細微的計算誤差)等限。那么爸吮,既然這里參考點坐標(biāo)是歸一化的,它就能夠映射(re-scales)到各尺度特征中去望门,這部分對應(yīng)以下公式中的\phi _{l} 函數(shù):

MSDeformAttn公式

作者在paper中是這么描述的:

Function \phi _{l} re-scales the normalized coordinates \hat{p} _{q} to the input feature map of the l-th level.


2. 為何注意力權(quán)重可由query直接通過全連接層預(yù)測得到形娇?

我們知道,在Transformer中筹误,注意力權(quán)重是由query和key交互計算得到的桐早。然而,在這里卻像開掛般直接通過query經(jīng)全連接層輸出得到(好家伙~!)哄酝,這節(jié)奏是不是不對勁呢友存?要分析這個問題,不妨先來看看Deformable DETR中參考點(reference points)和query之間的關(guān)系炫七。

在Encoder中:參考點是特征點本身的位置爬立,query embedding是特征圖對應(yīng)的position emebdding(其實還加上了scale-level embedding),object query則來自于特征圖万哪,最終注意力機制中的query就是object query + query embedding侠驯。

在Decoder中:2-stage時,由參考點經(jīng)過位置嵌入生成query embedding和object query奕巍;而1-stage時吟策,object query和query embedding都是預(yù)設(shè)的embedding,參考點則由query embedding經(jīng)全連接層生成的止,最終注意力機制中的query也是object query + query embedding檩坚。

綜上可知,參考點(reference points)和query之間是存在著對應(yīng)關(guān)系的(就有點“你生我诅福、我生你”的feel~)匾委。

OK,既然這樣氓润,那么基于參考點位置采樣插值出來的特征(value)自然就能夠和通過query經(jīng)過線性變換得到的注意力權(quán)重對應(yīng)起來了赂乐,這就是為什么可變形注意力模塊中不需要key與query來交互計算注意力權(quán)重了。

打個比方:A與B已建立起了對應(yīng)關(guān)系咖气,之后A再通過某種映射關(guān)系得到C挨措,B也通過某種映射關(guān)系得到D,那么C與D之間必然會有某種程度的耦合與對應(yīng)關(guān)系崩溪。這里A浅役、B、C伶唯、D就分別指代query觉既、reference points、attention weights以及value抵怎。

還有個問題值得思考奋救,為何在Decoder中,2-stage時由reference points生成query embedding是通過position embedding反惕,而1-stage時由query embedding生成reference points時卻用全連接層呢?

對此演侯,CW是這么想的:2-stage時姿染,參考點是由Encoder預(yù)測出來的proposals,本身一定程度上代表著物體的位置信息了(雖然這個位置可能并不精確),因此有必要用位置嵌入將這“寶貴"的信息給記錄下來悬赏;而1-stage時狡汉,預(yù)設(shè)的query embedding本身就是一個抽象體,盲猜的東西闽颇,因此用線性變換來做維度映射得到參考點比較合理盾戴,因為畢竟其本身并沒有實際意義的位置信息。


3. 為何檢測頭部的回歸分支預(yù)測的是偏移量而非絕對坐標(biāo)值兵多?

這個問題估計很多人會提出尖啡,為何這里不像DETR一樣直接預(yù)測bbox的坐標(biāo)而是預(yù)測偏移量呢?請你想想剩膘,Deformable DETR相比于DETR多了一個很顯眼的東西是什么衅斩?是參考點(reference points)暗『帧!(感覺通篇它都在秀存在感..)

采樣點的位置是基于參考點和對應(yīng)的坐標(biāo)偏移量計算出來的奈懒,也就是說采樣特征是分布在參考點附近的,既然這里需要由采樣特征回歸出bbox的位置磷杏,那么預(yù)測相對于參考點的偏移量就會比直接預(yù)測絕對坐標(biāo)更易優(yōu)化,更有利于模型學(xué)習(xí)茴丰。

Because the multi-scale deformable attention module extracts image features around the reference point, we let the detection head predict the bounding box as relative offsets w.r.t. the reference point to further reduce the optimization difficulty.

另外,由于采樣特征中注入了注意力贿肩,而預(yù)測框是基于采樣特征回歸得到的,loss是基于回歸結(jié)果計算的汰规,梯度是通過loss反向傳播的汤功,因此最終學(xué)習(xí)到的注意力權(quán)重就會和預(yù)測框有相對較強的聯(lián)系,這也起到了加速收斂的效果溜哮。

In this way, the learned decoder attention will have strong correlation with the predicted bounding boxes, which also accelerates the training convergence.


VI. 與其它方法比較

Deformable DETR是在DETR基礎(chǔ)上提出的滔金,因此,在這最后一部分CW打算將其與DETR作個比較茂嗓;另外餐茵,CW覺得其與Sparse R-CNN也有值得比較的地方(畢竟之前在CW的這篇文章: Sparse R-CNN: 青出于藍的R-CNN家族新晉小生,稀疏交互機制 & No RPN & No NMS = E2E 中說過Sparse R-CNN像是DETR的小弟哈哈哈)述吸。

以下列出的點都是僅出現(xiàn)在 Deformable DETR 中而在 DETR / Sparse R-CNN 中是沒有的忿族。


i). vs DETR

? ? 1. 多尺度特征;

? ? 2. 新增scale-level embedding,用于區(qū)分不同特征層(由于第1點)道批;

? ? 3. 使用了多尺度可變形注意力替代Encoder中的自注意力和Decoder中的交叉注意力错英;

? ? 4. 引入了參考點,某種程度上起到先驗的作用隆豹;

? ? 5. 為自己開發(fā)了“高配”版:迭代的框校正策略 兩階段模式椭岩;

? ? 6. 檢測頭部的回歸分支預(yù)測的是bbox偏移量而非絕對坐標(biāo)值


ii). vs Sparse R-CNN

? ? 1. 沒有使用FPN;

? ? 2. 使用了位置嵌入璃赡;

? ? 3. 2-stage時判哥,proposals是predicted的(而非Sparse R-CNN直接使用learnable embedding);

? ? 4. 使用了Transformer鉴吹;

? ? 5. 注意力機制是one-to-many iteraction(Sparse R-CNN由于‘Sparse’偶像包袱太重姨伟,是徹底的sparse,是one-to-one實例級別的交互)豆励;

? ? 6. 檢測頭部的回歸分支預(yù)測的是bbox偏移量而非絕對坐標(biāo)值


End

作者洞悉到DETR慢收斂和小目標(biāo)檢測效果差的原因在于Transformer的注意力計算模塊——其對全局密集的關(guān)系進行建模夺荒,這使得模型需要長時間去學(xué)習(xí)關(guān)注真正有意義的稀疏位置,同時還帶來了高復(fù)雜度的計算與空間資源消耗良蒸。

聯(lián)想到稀疏空間位置的學(xué)習(xí)是DCN的強項技扼,但同時其又缺乏關(guān)系建模能力,于是作者機智地將DCN與Transformer放在一起愉快地玩耍嫩痰,最終提出 Deformable DETR剿吻。

CW認為Deformable DETR的思想和整體工作還是很值得學(xué)習(xí)的,所以就決心研究一番串纺,也在此和大家分享了自己的思考與見解丽旅。CW在學(xué)習(xí)過程中,看過不少解析Deformable DETR的相關(guān)文章纺棺,但它們幾乎要不是將論文通俗地翻譯一遍就是泛泛而談榄笙,沒有一些深入的思考以及注入自己的見解,這種風(fēng)格實在太無聊了些..

吾以為祷蝌,既然要寫茅撞,就應(yīng)該寫出自己的風(fēng)格,更重要的是要注入自己的思想(考)米丘,提出自己的見解拄查,甚至去懷疑(不一昧向權(quán)威低頭)棚蓄,不然癣疟,真的很無趣耶!所以說睛挚,CW不要無聊的風(fēng)格~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載扎狱,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末匠抗,一起剝皮案震驚了整個濱河市汞贸,隨后出現(xiàn)的幾起案子印机,更是在濱河造成了極大的恐慌,老刑警劉巖多柑,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竣灌,死亡現(xiàn)場離奇詭異初嘹,居然都是意外死亡蛔屹,警方通過查閱死者的電腦和手機兔毒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迅脐,“玉大人谴蔑,你說我怎么就攤上這事∫В” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵蒂窒,是天一觀的道長洒琢。 經(jīng)常有香客問我褐桌,道長,這世上最難降的妖魔是什么呛踊? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任完丽,我火速辦了婚禮逻族,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘薄辅。我一直安慰自己站楚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布窿春。 她就那樣靜靜地躺著旧乞,像睡著了一般尺栖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上延赌,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音者蠕,去河邊找鬼蠢棱。 笑死甩栈,一個胖子當(dāng)著我的面吹牛量没,可吹牛的內(nèi)容都是我干的突想。 我是一名探鬼主播猾担,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稽荧!你這毒婦竟也來了姨丈?” 一聲冷哼從身側(cè)響起擅腰,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤趁冈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沐绒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洒沦,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡价淌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了括尸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡屁柏,死狀恐怖有送,靈堂內(nèi)的尸體忽然破棺而出雀摘,到底是詐尸還是另有隱情,我是刑警寧澤阵赠,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布匕荸,位于F島的核電站枷邪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏药薯。R本人自食惡果不足惜童本,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一脸候、第九天 我趴在偏房一處隱蔽的房頂上張望运沦。 院中可真熱鬧,春花似錦嫁盲、人聲如沸烈掠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佩抹。三九已至取董,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廊勃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工梭灿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堡妒,地道東北人皮迟。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓搬泥,卻偏偏與公主長得像忿檩,于是被迫代替她去往敵國和親燥透。 傳聞我的和親對象是個殘疾皇子辨图,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容