論文地址:https://arxiv.org/pdf/2005.12872
代碼地址:https://github.com/facebookresearch/detr
相關學習視頻:https://space.bilibili.com/94779326/lists?sid=1531941
標題前言:
DETR 是 Facebook 團隊于 2020 年提出的基于 Transformer 的端到端目標檢測,是Transformer在目標檢測的開山之作 – DEtection TRansformer。
相比于傳統的RCNN、Fast-RCNN、Faster-RCNN、YOLO系列,DETR有以下幾個優點:
- 無需NMS后處理2
- 無需設定anchor
- 高效并行預測。
整個由網絡實現端到端的目標檢測實現,大大簡化了目標檢測的 pipeline。DETR在COCO 數據集上效果與 Faster RCNN 相當,在大目標
上效果比 FasterRCNN 好,且可以很容易地將 DETR遷移到其他任務例如全景分割。
1. 基本結構
DETR的總體框架如圖,分為三個部分,分別是:
- 提取圖像的特征的backbone
- 使用了transformer的編碼器解碼器
- prediction heads:FFN,前饋神經網絡給出最后的類別和Box信息的預測
首先使用傳統的卷積神經網絡(CNN)主干網絡來學習輸入圖像的二維表示。隨后將特征信息加上位置編碼送入encoder,這里的encoder進行特征序列構造。在decoder中會首先初始化100個向量(object queries),這些向量通不斷學習encoder構造的特征序列,再經過prediction heads將解碼器的每個輸出嵌入傳遞給一個共享前饋網絡(FFN),該網絡會預測檢測結果(類別和邊界框)或者 “無目標” 類別。
2. 基礎的backbone
CNN:圖像經過 CNN 學習后,得到 (2048,H/32,W/32) 的輸出,然后和 position encoding 相加,輸入 transformer-encoder
3. Encoder和Decoder
不同于原始的 transformer ,DETR 在以下方面對其進行修改
1)positional embeding: DETR 的只作用于 encoder 的 Q 和 encoder-decoder K,原始 transformer 作用于所有的 Q、K、V
2)object queries:DETR 的 object queries 一次性全部輸入 decoder,而原始 transformer 是通過 shifted right 一個一個地移動
借用一張知乎對比圖:
Object queries 是 N 個 learnable embedding,訓練剛開始時可以隨機初始化,比如 transformer-encoder 輸出是 (B, N’, C),則 Object queries 生成后得到大小為 (B, N, C)數,相當于用 Object queries 去查詢 transformer-encoder 輸出的目標類別和 box,N 一般取 100
訓練時隨機初始化 Object queries,訓練過程中學習這個 embedding,訓練完成后,embedding 確定下來,后續推理直接使用
4. FNN
prediction heads是DETR的分類器與回歸器,其實就是對decoder提取出來的100個目標進行FFN操作,FFN采用全連接,經過FFN分別得到種類和邊界框參數,將100個預測結構object predictions和真實框ground truth box之間通過匈牙利算法進行二分匹配,一個真實框只匹配一個預測結果,其它的預測結果作為背景進行擬合。最后通過反向傳播來優化模型參數。
5. loss和匈牙利算法
集合到集合的預測看起來非常直接,但是在訓練的過程就會遇到一個問題,就是如何把預測出來的100個框與ground truth做匹配,然后得到損失。DETR就非常暴力,直接利用pd(predicttion)與gt(ground truth)按照最小權重做一對一匹配,剩余的框全部當做背景處理。
6. 總結
在本文閱讀過程中,寫作其實還是很絲滑的,自己來回閱讀,大致看懂了一些,剩下翻閱博客繼續閱讀。
- 目標檢測 DETR(2020)
- 目標檢測 Deformable DETR(2021)詳細解讀
- DETR:End-to-End Object Detection with Transformers
- 目標檢測Python代碼 目標檢測detr