https://msc.berkeley.edu/research/autonomous-vehicle/sparse_rcnn.pdf?

msc.berkeley.edu


detr最近的進展我都不是很熟,跟做ocr的小夥伴聊了下,他說paper的幾個點在這條線上上看會比較順,我完全不懂,期待有大佬給一些新的視角解讀吧。

昨晚看完直接失眠了,躺在牀上捋清楚了幾個細節,比如學出來的anchor為啥不會很相似,為什麼這樣能去掉nms之類,越想越覺得太秒了

由於dense的anchor設計加上cnn feature map的平滑性質,導致我們在正負樣本劃分不得不使用一對多的形式以及使用nms這樣的後處理,這兩個東西很蛋疼,從而從去年開始導致了一系列做正負樣本劃分以及設計loss適應nms的工作。

我之前跟mentor討論,他堅信cnn上也能像detr一樣去掉nms,但是我就勸他說不用position encoding 這樣的東西,cnn這個平滑性好像必須有這麼個設計,之後的嘗試也完全走偏了,這個認知在dense anchor的基礎上也是對的,但是之後就往怎麼增加feature map高頻上做了,完全沒意識到dense anchor有什麼問題,當然也承認,認識到我也一點不敢想能做成sparse的形式。

其實能想到現在檢測幾個令人頭疼的問題是出在dense的anchor已經很不容易了,之後detr可能啟發了sparse 能做work,最近幾年dynamics 的生成運算參數的工作(condinst之類)為sparse的work奠定了基礎,感覺真的是一個剛剛好的時候。

真的太強了,相比一些想出來感覺不快點做就會被別人做的東西,這個就是那種根本想不到的東西。


將 two stage anchor detector 升級為了 two stage set prediction detector.

1、Learnable proposal box 可以看作 RPN,然後用ROIAlign提取ROI feature。

2、Learnable proposal feature 可以看作是Detr中的object query,相當於anchor。

3、ROI feature 和 Learnable proposal feature 用 optimal bipartite matching做匹配,而不是沿用IOU做匹配。

4、Detr中使用了 transformer讓每個object query都和全局的特徵圖交互,而Sparse R-CNN 通過Learnable proposal box生成了sparse candidates和sparse feature,這樣就避免了和全局特徵的交互。

5、從工業部署角度看,對於端側,sparse detector並不是很友好,dense detecor更直接而且網路也能夠輕量。

最後,Set Prediction detector也開始分為兩類了:

  • One-stage:Detr
  • Two-stage:Sparse R-CNN

看起來set prediction挺香的,只不過,set prediction的檢測器,同等測試條件下還是anchor/anchor-free的檢測器在精度上差一點,和Sparse R-CNN作者也討論了下,set prediction還有優化的空間。

set prediction的檢測器很簡潔,部署也很方便,如果把精度和速度肝上去了,就可以造福工業界了。


本文解讀:

深度眸:Sparse R-CNN:簡化版fast rcnn?

zhuanlan.zhihu.com圖標

特意把論文和代碼都看了,結合對relation和relation++、detr的瞭解,說下粗略的感受吧。

Sparse R-CNN確實做的很好,等的就是這樣的工作!極致簡單,不需要複雜anchor先驗設置、不需要nms、不需要RPN,將整個faster rcnn的pipeline變得非常簡潔。

論文核心思想應該是借鑒了上述三篇論文做法,簡單來說是核心組件是:

  1. 可學習proposal boxes
  2. 可學習proposal feature

上述兩個組件中最重要的是可學習proposal feature,而可學習proposal boxes只是為了提出roi而已,不然RCNN咋弄?而可學習proposal feature和detr的object query作用非常類似,都是提供全局注意力或者說提供實例級別的統計信息,由於維度比較高,其可以嵌入的信息很多,例如物體姿態或者shape。強烈建議作者在預測時候進行可視化proposal feature,應該可以看出很多東西

對應到relation論文,那麼proposal boxes就是常說的幾何特徵,而proposal feature就是外觀特徵。我覺得沒啥本質區別,因為都是自發學的,學到最後其實可視化看看都一樣應該。

至於roi特徵和proposal feature的交互過程非常重要,雖然論文說具體細節不重要,這個交叉注意力計算過程和transformer裡面的做法類似,作者成為動態head,確實有動態的意味。

最後的loss,也是參考了detr裡面的先雙邊匹配,然後再計算loss的做法,使得最後輸出的預測結果不需要nms。

其他的迭代refine思想應該是為了提點而已,和cascade rcnn做法類似。

以上就是全部核心知識點了。可以發現極其簡單,只要你熟悉了上述所提的3篇論文就能夠理解了。

至於未來嘛,transformer思想還是很值得期待的,雖然本文好像沒有引入(但是我覺得思想還是引入了)。如果哪天將CNN徹底拋棄,僅僅依靠transformer或者類似注意力思想統治了CV領域,那也不用奇怪!

代碼還沒有跑過,暫時不知道裡面有沒有啥坑!

如果對transformer和detr不熟悉的,可以看我的文章:

深度眸:3W字長文帶你輕鬆入門視覺transformer?

zhuanlan.zhihu.com圖標

由於 Sparse RCNN 有受到 DETR 啟發, 所以先分析 DETR.

我覺得 DETR 的成功有兩個關鍵點:

  1. Set prediction loss
  2. Self-attention 帶來的 proposal 之間的強關聯性, 使得整個輸出結果更加整體

同時, DETR 有個大的缺點, 就是對 local feature 利用不足. 這會導致一個問題: bbox 邊界回歸不準. 表現為小物體的 mAP 非常低(如下表).

DETR 的 APs 比 Sparse RCNN 低了6個點!

但 mAP_small 低有可能有兩個原因:

  1. 邊界回歸不準
  2. 漏掉了小物體

為了找到 mAP_small 低的具體原因, 我們對比了一下 DETR 和 MaskRCNN 的 bbox mAP_small 曲線:

縱坐標:mAP_small. 橫坐標: IoU閾值[0.5:1:0.05]. 藍色 DETR, 橙色 MaskRCNN

發現 DETR(藍色) 在 IoU 閾值為 0.5 時候, mAP_small 比 MaskRCNN還高, 所以 DETR 感知到小物體的能力還挺強的, "邊界回歸不準"纔是 mAP_small 低的主要原因.


再回到主角 Sparse RCNN, Sparse RCNN 完全繼承了 DETR 的兩個關鍵優點:

  1. Set prediction loss
  2. Proposal 之間的強關聯性(iteration+dynamic 機制類比於 self-attention)

同時, 由於 Sparse RCNN 是全卷積的, 具有 CNN local feature 強的優點. 所以在邊界回歸的準確度上會優於 DETR.

綜上, Sparse RCNN 集成了 DETR 的兩個優點, 並摒棄了 transformer 帶來的缺點, 並在結果上超過了 DETR. 但老實說, Sparse RCNN 只高了0.3 的 mmAP, 而 mAP50 和 AP_large 上都低了不少, 說明 Sparse RCNN 還有挺多進步空間的.


補充:

其實可以換一種方式來解決 DETR 對 local feature 利用不足的缺點, 就是直接學 RCNN, 做 two-stage 的回歸.

具體的, 在第二個 stage 找出 small object 的 bbox, padding 一點點, 在高清一點的 CNN feature 上 crop 一個 RoI 出來. 給 RoI 加上 spatial positional encoding 和 object 的 query 一起丟給 transformer 的 decoder, 輸出一個 refine 後的 bbox.


之前的方法是 大量初始proposal + 1-2 refine stage。用過飽和的proposal保證預測質量,最後用NMS濾除。

這篇是 少量的初始proposal + 多輪 refine stage。 proposal box 和 proposal feature可以與輸入圖像無關 就證明瞭 不靠譜的初始proposal是可以考多輪 refine修正回來的。還是挺神奇的。

我很想看看每輪refine前後 box的變化,到底 圖片無關的proposal box是怎麼和Object對應的,有什麼規律。


推薦閱讀:
相關文章