FCOS(Fully Convolutional One-Stage Object Detection)學習筆記

論文: FCOS: Fully Convolutional One-Stage Object Detection

代碼: https://github.com/tianzhi0549/FCOS

作者: Zhi Tian, Chunhua Shen, Hao Chen, Tong He

FCOS的提出

當前所有主流的檢測器如Faster R-CNN, SSD, YOLOv2,v3等都依賴於一組預定義的anchor boxes,長期以來人們人們一直認爲使用anchor boxes是檢測器成功的關鍵。但基於anchor boxes的檢測器具有以下缺點:

  1. 檢測器的性能對anchor boxes的尺寸、寬高比和數量等比較敏感,如RetianNet通過改變這些參數可以在COCO數據上使得AP提高4%。因此這些超參數需要在基於anchor boxes的檢測器中仔細調整。
  2. 即使精心設計,由於anchor boxes的尺寸、寬高比是固定的,檢測器在處理形狀變化較大的物體時也會遇到困難。預定義的anchor boxes還妨礙了檢測器的泛化能力,因爲它們需要針對不同尺寸或寬高比的新的檢測任務上重新設計。
  3. 爲了實現較高的召回率,基於anchor boxes的檢測器需要將anchor boxes密集地放置在圖像上。在訓練過程中,大多數這些anchor boxes都標記爲負樣本。負樣本的數量過多會加劇訓練過程中正樣本與負樣本之間的不平衡。
  4. Anchor boxes還設計複雜的計算,例如計算與真實框的IoU

使得作者設計FCOS的另外一個原因是,object detection由於使用了anchor boxes,可能是唯一偏離整潔的全卷積像素框架的高級視覺任務,因此,作者在想,能否想FCN對於語義分割一樣,以整齊的逐像素預測方式類解決object detection任務呢? 這樣基本視覺任務就(幾乎)可以統一在一個框架中。

因此,作者提出了anchor-free和proposal-free的檢測器FCOS,它具有以下優點:

  • FCOS使得檢測可以與許多其他FCN可解決的任務(如語義分割)統一在一起,從而可以re-use這些任務中的思想
  • 它是anchor-free和proposal-free,因此減少了需要設計的參數的數量
  • 消除了和anchor box有關的計算,比如與真實框的IoU計算、匹配等任務
  • 在所有one-stage檢測器中取得了最好的效果。另外FCOS可以作爲two-stage的RPNs來使用,而且具有更好的性能
  • FCOS可以很快的進行擴展,以最小的修改來解決其他視覺任務,包括實例分割和關鍵點檢測。

FCOS介紹

Object detection當做像素級任務來做有兩個挑戰:

  1. 很容易得到低的Recall, 因爲當步幅較大時,在最終特徵圖上沒有信息(位置)的object是很難召回的。
  2. 一個正樣本像素點出現在ground truth boxes的交叉區域時,該像素點應該回歸哪個ground truth box? 如 Fig1所示。

在這裏插入圖片描述

下面看看FCOS是如何解決這些問題的。

FCOS的網絡如Fig2所示。

在這裏插入圖片描述

2.1 Object detection的全卷積形式的表示

FCOS同FCN一樣,它的訓練樣本是各個像素點,比如位置(x, y)如果落在了任何一個ground-truth box的內部,它就是一個正樣本,它的類別就是ground-truth box的類別。如果它沒有落在任何一個ground truth box內部,它就是一個負樣本,類別是0(背景類)。

以上部分基本和語義分割一樣,不同於語義分割的是,除了每個位置的label,我們還需要回歸一個4D的向量t=(l,t,r,b)t^* = (l^*, t^*, r^*, b^*)。假設位置(x, y)落在ground-truth box Bi 中,Bi的左上角和右下角座標爲(x0(i),y0(i),x1(i),y1(i))(x_0^{(i)}, y_0^{(i)}, x_1^{(i)}, y_1^{(i)}),則(x, y)位置需要回歸的值爲
l=xx0(i),t=yy0(i),r=x1(i)x,b=yi(i)yl^* = x - x_0^{(i)}, t^* = y - y_0^{(i)}, r^* = x_1^{(i)} - x, b^* = y_i^{(i)} - y

相比於基於anchor boxes的檢測器,只考慮與ground-truth有高IoU的anchor boxes作爲正樣本;FCOS因爲使用像素作爲樣本,因此利用了更多的正樣本訓練。作者也認爲它可能是FCOS比對應的anchor-based檢測器性能好的一個原因。

網絡的輸出
最後一層特徵圖的每一個位置輸出一個**多維(C + 1 + 4)**向量, 對於前面C維,是C個二分類器,在COCO數據集中C= 80。1表示是center-ness,用來去掉一些低質量的檢測框,下面的2.3會詳細介紹。4 表示的距離四個邊界的信息t=(l,t,r,b)t^* = (l^*, t^*, r^*, b^*),如前面介紹的。另外,由於迴歸的目標總是正值,我們這裏使用exp函數對tt^*進行修正。這相比於每個位置使用9個anchor boxes的RetinaNet和FPN等,輸出的參數少了9倍。

Loss 函數

L({px,y},{tx,y})=1NposΣx,yLcls(px,y,cx,y)+λNposΣx,y1cx,y>0Lreg(tx,y,tx,y) \begin{aligned} L(\lbrace{p_{x, y}}\rbrace,\lbrace{t_{x, y}}\rbrace) & = \frac{1}{N_{pos}}\Sigma_{x, y}L_{cls}(p_{x, y}, c_{x,y}^*) \\\\ & + \frac{\lambda}{N_{pos}}\Sigma_{x,y}1_{c_{x, y}^* > 0}L_{reg}(t_{x, y}, t_{x, y}^*) \end{aligned}

LclsL_{cls}是focal loss, LregL_{reg}是IOU loss,這個是有些與衆不同的地方

Inference

FCOS的inference是直接的。給定一張輸入圖片,讓其通過FCOS得到分類特徵圖px,yp_{x, y}和位置tx,yt_{x, y}。我們選擇px,y>0.05p_{x, y} > 0.05的位置作爲正樣本,通過公式

l=xx0(i),t=yy0(i),r=x1(i)x,b=yi(i)yl^* = x - x_0^{(i)}, t^* = y - y_0^{(i)}, r^* = x_1^{(i)} - x, b^* = y_i^{(i)} - y

求得bouding boxes的位置。通過nms求得最後的結果。

注意: FCOS引入center ness了來降低低質量檢測框的權重,從而抑制這些低質量的檢測。這個在2.3會詳細介紹。

2.2 通過FPN實現multi-level預測

這裏是解決上述兩個問題(低Recall, overlap不清晰的迴歸對象)的解決方案。

CNN中最後輸出的特徵圖由於比較大的stride(比如16),會導致相對較低的 best possible recall(BPR,可以達到召回率的上界)。基於anchor box的檢測器可以通過在判別正、負anchors時降低IoU的閾值。

然而,作者通過經驗表明,即使stride較大,基於FCN的FCOS仍然能夠產生良好的BPR,甚至可以比基於anchor的檢測器的BPR更好。從而, FCOS可以解決低Recall的問題

具體怎麼解決的,目前我還沒有想清楚。 ???

第二個問題overlap中的不確定的迴歸問題在很大程度上也可以通過multi-level預測來解決

依據FPN,作者在不同level的特徵圖上檢測不同尺寸的object

如Fig2所示,作者使用了5個level的特徵圖,P3,P4,P5,P6,P7P_3, P_4, P_5, P_6, P_7,其中P3,P4P_3, P_4P5P_5由骨幹網絡產生(上採樣, concat操作等)。P6P_6P7P_7由步長(stride=2)卷積得到。P3,P4,P5,P6,P7P_3, P_4, P_5, P_6, P_7的stride分別爲8, 16, 32, 64和128。

不像基於anchor的檢測器,在不同level的特徵上賦予anchor boxes不同的尺寸,作者直接限制了每一個level中bounding box迴歸的返回大小(本質區別是什麼???)。例如, 首先記S = max(l,t,r,b)max(l^*, t^*, r^*, b^*), P3P_3迴歸的是S在0-64的樣本, P4P_4迴歸的是S在64-128的樣本,P5P_5迴歸的是S在128-256的樣本,P6P_6迴歸的S是在256-512的樣本,P7P_7迴歸的是S大於512的樣本。

這樣大部分的overlap問題就可以解決了。如果一個位置(x, y)在使用了multi-level預測之後,仍舊有多於一個ground-truth boxes的overlap,簡單的選擇具有最小面積的bouding box作爲其迴歸對象。

Head部分在不同level特徵之間是共享的,不僅使得檢測器parameter-efficient的而且提高了檢測性能。

然而,作者觀察到不同level的特徵需要回歸不同的尺寸range,對於不同level的特徵使用相同的heads是不合理的。因此作者使用帶有訓練參數sis_iexp(six)exp(s_ix)來代替exp(x)exp(x)進行調整,這輕微得提高了檢測性能。

2.3 Center-ness

在使用了multi-level預測之後,在FCOS和基於anchor的檢測器在性能上仍有一定的差距。作者發現這是由於很多由遠離object中心點位置預測出的低質量的檢測框。

論文中介紹了一種簡單的、無需引入超參數的但是有效的策略來抑制這些低質量的檢測框。通引入在分類分支旁邊引入single-layer 分支,來預測一個位置的center-ness, 如Fig2所示。

(x, y)的center-ness描述了(x, y)距離”(x, y)位置負責預測”的object的中心的標準化距離。給定一個位置的l,t,r,bl^*, t^*, r^*, b^*,center-ness定義爲

centerness=min(l,r)max(l,r)min(t,b)max(t,b)center-ness = \sqrt {\frac{min(l^*, r^*)}{max(l^*, r^*)} * \frac{min(t^*, b^*)}{max(t^*, b^*)}}

可以看到,當(x, y)位於object的中心時,根據定義center-ness的值爲1,當(x, y)位於object的邊界時,center-ness的值爲0。因此center-ness可以反映距離中心的偏移。

這裏採用開方是爲了減慢center-ness的衰減, center-loss採用binary cross entropy(BCE) loss。

通過Fig7,我們可以看到center-ness對於FCOS的影響,它可以使得低質量(高score, 低IoU)的框減少。

在這裏插入圖片描述

在測試時,最終的score是分類score和center-ness相乘,center-ness可以削減遠離object中心點的bouding boxes的score。因此這些具有高score但低質量的bounding boxes可以被最後的NMS過濾掉,因此可以顯著的提高檢測性能。

一種center-ness的替代是隻使用grounding truth box的中心部分作爲訓練的正樣本。這兩個方法的綜合可以獲得更好的性能。詳情參見https://github.com/yqyao/FCOS_PLUS

FCOS實驗結果

與其他模型的對比

在這裏插入圖片描述

FCOS的缺點

在使用了multi-level預測後,如果一個overlap的位置落在了同一個level,雖然作者選擇了最小面積的target的作爲迴歸對象,這會對模型有什麼影響嗎? 或者作者爲什麼這樣做? ??

疑惑

  • FCOS multi-level預測和基於anchor的檢測器中不同level設置不同size的anchors的方法有什麼區別?
  • FCOS如何解決Recall低的問題?
  • 當multi-level預測不能解決overlap的時候,爲什麼選擇了最小面積的target的作爲迴歸對象?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章