1. 動機
傳統的目標檢測任務需要大量的人工先驗知識,例如預定義的先驗anchor,NMS后處理策略等。這些人工先驗知識引入了很多人為因素,且較難處理。如果能夠端到端到直接生成目標檢測結果,將會使問題變得很優雅。
2. 主要貢獻
提出了一個新的目標函數,用二分圖匹配的方式強制模型輸出一個獨一無二的目標框,避免了傳統方法中的非極大值抑制。
首次把transformer引入到目標檢測領域。
簡化了檢測流程,有效地消除了對許多人工設計組件的需求,如NMS或anchor生成。實現了端到端的目標檢測。
3. 模型結構
DETR將目標檢測看作一種set prediction問題,并提出了一個十分簡潔的目標檢測pipeline,即CNN提取基礎特征,送入Transformer做關系建模,得到的輸出通過二分圖匹配算法與圖片上的ground truth做匹配。
先使用CNN對圖像進行特征提取,把得到的二維特征轉換到一維,然后送入transformer的encoder-decoder結構之中。然后利用decoder的結果預測檢測框的輸出。


3.1. backbone
DETR基礎版本的backbone使用torchvision上預訓練過的ResNet-50,訓練時凍結BN層參數。設輸入img維度為(3, H, W),經過backbone后變為。此外在后續實驗階段論文還使用了ResNet-101以及改進過的DC5版本。
3.2. transfomer
CNN提取的特征拉直(flatten)后加入位置編碼(positional encoding)得到序列特征,作為Transformer encoder的輸入。Transformer中的attention機制具有全局感受野,能夠實現全局上下文的關系建模,其中encoder和decoder均由多個encoder、decoder層堆疊而成。每個encoder層中包含self-attention機制,每個decoder中包含self-attention和cross-attention。
3.3. object queries
輸出100個目標框和它的分類。設計了一套全新的損失函數,能夠在訓練的時候把與ground truth匹配的框算作為正樣本,不匹配的框作為負樣本。在推理的時候使用一個閾值來選擇結果,預測得分高于閾值的作為輸出,低于閾值的忽略。
transformer解碼器中的序列是object queries。每個query對應圖像中的一個物體實例(包含背景實例 ?),它通過cross-attention從編碼器輸出的序列中對特定物體實例的特征做聚合,又通過self-attention建模該物體實例域其他物體實例之間的關系。最終,FFN基于特征聚合后的object queries做分類的檢測框的回歸。
值得一提的是,object queries是可學習的embedding,與當前輸入圖像的內容無關(不由當前圖像內容計算得到)。論文中對不同object query在COCO數據集上輸出檢測框的位置做了統計(如上圖所示),可以看不同object query是具有一定位置傾向性的。對object queries的理解可以有多個角度。首先,它隨機初始化,并隨著網絡的訓練而更新,因此隱式建模了整個訓練集上的統計信息。其次,在目標檢測中每個object query可以看作是一種可學習的動態anchor,可以發現,不同于Faster RCNN, RetinaNet等方法在特征的每個像素上構建稠密的anchor不同,detr只用少量稀疏的anchor(object queries)做預測,這也啟發了后續的一系列工作。
3.4. 損失函數
DETR有兩種損失:(1)二分圖匹配階段的損失,用于確定最優匹配。(2)在最優匹配下的模型損失。
3.4.1. 二分圖匹配
3.4.2. 匹配后損失計算
參考文獻
End-to-end object detection with transformers
DETR目標檢測新范式帶來的思考 - 知乎
DETR(DEtection TRansformer)要點總結-CSDN博客?
DETR 論文精讀【論文精讀】_嗶哩嗶哩_bilibili