論文地址:
End-to-End Object Detection with Transformers
?Detr是Facebook提出來的一種目標(biāo)檢測(cè)結(jié)構(gòu),使用了一種基于transformer的全新網(wǎng)絡(luò)結(jié)構(gòu),在沒有使用以往的諸如yolo之類的算法的情況下就能取得相當(dāng)不錯(cuò)的表現(xiàn),再次印證了transformer的優(yōu)越性能。
目錄
Introduction
Set Prediction
DETR architecture
Backbone
Transformers and Parallel Decoding
Prediction feed-forward networks (FFNs)
實(shí)驗(yàn)結(jié)果
DETR for panoptic segmentation
對(duì)于Detr模型的評(píng)價(jià)
自己的做的一點(diǎn)工作
Introduction
Detr處理的問題是目標(biāo)檢測(cè)問題。這類問題可以簡化為預(yù)測(cè)圖片中物體的包圍盒。現(xiàn)有的針對(duì)這類問題的處理方法都往往比較復(fù)雜,包括 defining surrogate regression and classification problems on a large set of proposals [37,5], anchors [23], or window centers [53,46]. Detr提供了一種使用transformer的encoder-decoder結(jié)構(gòu)來直接預(yù)測(cè)包圍盒的方法:
Detr模型 先通過一個(gè)CNN的backbone網(wǎng)絡(luò)對(duì)圖片的進(jìn)行特征提取,使用一個(gè)transformer的encoder-decoder結(jié)構(gòu)直接獲得N個(gè)固定數(shù)量的包圍盒的預(yù)測(cè)。
本文的最主要貢獻(xiàn)是使用bipartite matching loss來計(jì)算預(yù)測(cè)結(jié)果與ground truth之間的損失,以及使用transformer來代替之前復(fù)雜的處理流程。與gpt里面的encoder-decoder不同,這里的decoder是一次性預(yù)測(cè)所有的bounding box。
接下來就這兩個(gè)關(guān)鍵問題進(jìn)行介紹:
Set Prediction
包圍盒的檢測(cè)也就是一個(gè)集合預(yù)測(cè)的問題。這類問題有時(shí)候會(huì)遇到集合交疊的問題:
以往處理這類問題的方法有Non Maximal Suppression。
同時(shí)由于Detr模型直接預(yù)測(cè)N個(gè)包圍盒的位置,而實(shí)際圖像里面往往只有很少的物體,所以就需要確定一種匹配的方法,來將物體包圍盒的ground truth來與這N個(gè)預(yù)測(cè)進(jìn)行匹配,沒有匹配成功的直接作為背景進(jìn)行padding。
由于多個(gè)包圍盒構(gòu)成了一個(gè)集合,所以模型預(yù)測(cè)出來的結(jié)果應(yīng)當(dāng)具有集合中的順序不變性。
這里使用的匹配算法是匈牙利匹配算法,這個(gè)算法計(jì)算每對(duì)預(yù)測(cè)的包圍盒和ground truth的包圍盒的距離,采用使得距離之和最小的匹配方式來進(jìn)行匹配:
注意這里的σ實(shí)際上是1~N的一個(gè)全排列。也就是每個(gè)配對(duì)的包圍盒的標(biāo)簽對(duì)應(yīng)關(guān)系。
那么具體是怎么計(jì)算這個(gè)距離的呢? 這里貼一段原文里面的計(jì)算公式:
?具體來說,包圍盒的距離由分類分?jǐn)?shù)和距離分?jǐn)?shù)所組成,總的配對(duì)目標(biāo)就是最小化下面的值:
?另外原文中提到,在ci是空集(也即是背景)的時(shí)候要將對(duì)數(shù)損失減小十倍,以平衡樣本??占c預(yù)測(cè)值之間的Lbox距離是一個(gè)常數(shù),也就意味著這一部分實(shí)際上對(duì)匹配結(jié)果沒有影響
這個(gè)Bounding box loss的計(jì)算方式如下,還是比較復(fù)雜的。具體的計(jì)算方式在作者代碼的models\matcher.py里面,感興趣的可以自己去看看。
DETR architecture
Backbone
預(yù)處理的backbone網(wǎng)絡(luò)是一個(gè)對(duì)圖片的維度進(jìn)行變換的網(wǎng)絡(luò),通過卷積層來將圖片的大小降低,通道提高。
Transformers and Parallel Decoding
Detr所使用的transformer結(jié)構(gòu)其實(shí)與transformer里面的encoder-decoder非常相似:
Detr先將從backbone得到的C=2048的輸入用1*1的卷積層進(jìn)行降維,然后flatten后加入position embedding送入encoder中去。
在decoder的時(shí)候,使用0初始化object queries,再加上position embedding,可以這么理解:求取每一個(gè)position對(duì)應(yīng)的patch與圖片中的物體的embedding的相似度,使用position的query去查找對(duì)應(yīng)的K有沒有要查找的物體。
有幾個(gè)需要注意的點(diǎn):
1. Detr的encoder和decoder的position embedding是加在每一層multihead self-attention layer上的,而且只加在Q和K上,不加在V上,作者并沒有給出這樣做的原因,可能是因?yàn)镈etr的任務(wù)與position密切相關(guān),所以需要在每一層上都加。
2. 原版transformer里面的outputs在輸入模型前需要加入attention mask,在預(yù)測(cè)的時(shí)候需要將預(yù)測(cè)出的當(dāng)前token輸入模型計(jì)算下一個(gè)token。而Detr的預(yù)測(cè)實(shí)際上是并行的,也不需要attention mask。
3. 在計(jì)算損失函數(shù)的時(shí)候,為了更塊的訓(xùn)練,在decoder的每一層上都將中間結(jié)果送入FFN中計(jì)算損失函數(shù):
?作者還提到,Detr需要較長的訓(xùn)練時(shí)間。這是由于采用了transfomer結(jié)構(gòu)造成的。
Prediction feed-forward networks (FFNs)
將Decoder的輸出送入一個(gè)三層的FFN中,預(yù)測(cè)五個(gè)值:包圍盒相對(duì)圖片的中心xy坐標(biāo),包圍盒相對(duì)于圖片的height和width,以及包圍盒的class label,也就是包圍盒是否為背景。隨后使用上面所講的box loss就可以訓(xùn)練模型。
實(shí)驗(yàn)結(jié)果
作者與Faster R-CNN做了比較,并做了大量的消融實(shí)驗(yàn),證明了計(jì)算auxiliary losses的有用性。
同時(shí)也對(duì)position embedding做了消融實(shí)驗(yàn)最后得出sine at attn是最好的position embedding方式:
這里有一張比較有意思的圖:?
這里是encoder attention的可視化,可以看到encoder確實(shí)是注意到了圖片中的不同部分
這里是decoder的可視化,可以看到即使對(duì)于重疊的動(dòng)物的腿,detr依然能分的非常清除,這個(gè)效果還是很不錯(cuò)的。
另外對(duì)于decoder輸入的100個(gè)slot,detr統(tǒng)計(jì)了它們所預(yù)測(cè)的包圍盒的分布:
?每個(gè)點(diǎn)的位置代表著包圍盒的位置,點(diǎn)的顏色代表包圍盒的大小,可以看出不同的slot負(fù)責(zé)圖像中不同的部分,所有slot都有可能預(yù)測(cè)整個(gè)圖片大小的包圍盒,這與coco的數(shù)據(jù)分布有關(guān)。
作者還測(cè)試了面對(duì)數(shù)據(jù)集中從未出現(xiàn)過的數(shù)量的包圍盒的模型泛化能力:
DETR for panoptic segmentation
只需要對(duì)Detr做一點(diǎn)小小的修改,就可以將這個(gè)模型應(yīng)用到全景分割的任務(wù)上:
為每一個(gè)預(yù)測(cè)出來的包圍盒,使用一個(gè)panoptic head來生成圖片對(duì)應(yīng)的物體的二元分割。然后使用argmax求出每一個(gè)pixel最可能對(duì)應(yīng)的物體。
訓(xùn)練的時(shí)候,有兩種訓(xùn)練策略:可以同時(shí)訓(xùn)練兩個(gè)head,也可以先訓(xùn)練預(yù)測(cè)box的head,再訓(xùn)練預(yù)測(cè)二元全景分割的head。
對(duì)于Detr模型的評(píng)價(jià)
detr模型使用一種全新的方式處理了物體分割這個(gè)已經(jīng)有了很成熟的算法的問題,而且出道即顛峰。可見transformer對(duì)于不同領(lǐng)域的問題都能解決的很好,有成為通用人工智能的無限潛力。
至于模型的缺點(diǎn),作者也承認(rèn),對(duì)于小目標(biāo)的檢測(cè)效果并不出眾。我認(rèn)為使用transformer的結(jié)構(gòu)在目前和未來是很難完全取代CNN的。這是因?yàn)楝F(xiàn)有的Vit模型都將圖片分成一個(gè)固定大小的patch,而不能像CNN那樣每一層有著不同的感受野,能獲取圖像不同尺寸特征的細(xì)節(jié)結(jié)構(gòu)。因此我們需要一種能夠感知圖像不同resolution的特征的方法,而不是全都劃分成同樣大小的patch一刀切。
而且detr模型收斂速度慢,資源消耗多。使用transformer來處理圖像往往都會(huì)遇到這種問題。
我認(rèn)為未來的許多cv問題都可以嘗試這種使用transformer作為中間層的處理方式,將重點(diǎn)放在輸入層輸出層以及其訓(xùn)練方法上。實(shí)踐已經(jīng)檢驗(yàn)了這些方法的有效性。
在后面的swin-transformer中,直接將圖片經(jīng)過簡單的全連接層處理就輸入到transformer中,但是我們完全可以嘗試更多的網(wǎng)絡(luò)結(jié)構(gòu)組合。文章來源:http://www.zghlxwxcb.cn/news/detail-451786.html
另外,我認(rèn)為可以充分利用圖像中的對(duì)稱性,比如將圖像左右翻轉(zhuǎn)計(jì)算包圍盒,然后將得到的包圍盒再次翻轉(zhuǎn)與原來的計(jì)算平均值。文章來源地址http://www.zghlxwxcb.cn/news/detail-451786.html
到了這里,關(guān)于一文帶你讀懂DETR模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!