概述
之前的DETR使用Transformer成功地實現了目標檢測,而Deformable DETR針對DETR的缺點提出了一些改進。DETR主要有以下兩個缺點:
- 相比於其它的目標檢測模型,DETR需要更多的epoch才能收斂
- DETR很難檢測出小物體
對於第一個問題,作者認為這是Attention機制的鍋,在初始化時,Attention的權重是均勻分布在圖片的每個像素上的,因此需要大量的epoch才能讓權重集中在稀少的區域上。對於第二個問題,其它的目標檢測模型會使用多個不同大小的feature map預測,然而對於DETR來說這是不可行的,這是因為Transformer的Encoder的時間復雜度對於像素數量是平方級的。
為了解決這些問題,作者提出了Deformable Attention機制,讓Attention只關注圖片的部分像素,而不是全部像素,而關注哪些像素是模型自己學出來的,通過這種方式能夠更快地收斂,並且由於時間復雜度的降低,還能夠很容易地使用多尺寸的feature map預測而不需要使用FPN。最后,作者還提出了iterative bounding box refinement和two-stage Deformable DETR來進一步提高AP值。
模型
模型部分只有Transformer和DETR差別很大,其它部分差別很小或完全一樣。
Transformer會接受4種尺寸的feature map輸入,其中3個來自ResNet的C3,C4,C5,最后一個由C5經過3x3步長為2的卷積操作得到,如圖1所示:
將feature map輸入到Transformer之前,和DETR一樣都需要加上位置編碼,不過作者還給不同尺寸的feature map添加了不同的位置編碼,同一尺寸內的所有點該位置編碼相同,並且該位置編碼是可學習的。 加上位置編碼后就會輸入到Deformable Attention中,Encoder的Attention全是MS-Self-Attention(MS代表多尺寸),Decoder的第一個Attention是SS-Self-Attention(SS代表單尺寸),Decoder的第二個Attention是MS-Cross-Attention,Deformable Attention流程圖如圖2所示:
Deformable Attention核心思想就是關注一組reference points附近的一些像素,並計算它們的權重。對於Encoder來說reference points就是feature map的每個點(做了一些處理),對於Decoder來說reference points是一組可以學習的query_embedding,這會讓模型自己學習應該關注哪些點的附近。有了reference points了,那么應該關注哪些附近的點呢?這些附近的點也是學出來的,具體來說,它是query通過一個全連接層學習出來的偏移值,將這些偏移值和reference points相加就可以得到采樣點。value經過一個全連接層之后得到V,將V和采樣點做雙線性插值(這里我沒看懂),query經過一個全連接層和softmax得到Attention權重(論文和代碼中都沒用到key,這和原始的Transformer有很大的不同),再將該權重與插值之后的結果相乘,就可以得到輸出。
經過Transformer之后的流程和DETR就一樣了,這里就不再贅述了。
總結
Deformable DETR使用了Deformable Attention實現目標檢測,加快了DETR的收斂速度,並且取得了更好的性能。
參考資料
Deformable DETR: Deformable Transformers for End-to-End Object Detection
