1. 程式人生 > >RetinaNet論文理解

RetinaNet論文理解

paper:Focal Loss for Dense Object Detection
linkRetinaNet

引言

  • 目前精度最高的目標檢測器都是基於R-CNN結構衍生出來的two-stage目標檢測方法,相反one-stage的探測器應用於目標可能位置的密集取樣中,具有更快更簡單的特點但是精度落後two-stage的檢測器;在本文的研究中發現造成這種情況的核心問題是密集檢測器在訓練過程中會遇到foreground和background類別極度不平衡的問題;
  • Focal loss是針對這種情況重新設計的CE loss來解決類別不平衡問題,降低分類良好例子的loss,focal loss將訓練重點放在一組稀疏的例子上,防止在訓練期間大量的easy negatives給檢測器帶來壓制影響;
  • 為了評估focal loss的有效性,設計和訓練出了RetinaNet,在使用focal loss對RetinaNet進行訓練時可以匹配之前的one-stage的方法,同時在精度上超過了目前所有的two-stage檢測器;

介紹

  • 目前精度高的檢測器都是基於two-stage,proposal-driven機制,第一階段生成稀疏的候選物件位置集,第二階段使用CNN進一步將每個候選位置分為前景或者背景以及確定其類別;
  • 提出一個one-stage檢測器可以匹配two-stage檢測器在COCO上AP,例如FPN、Mask R-CNN,為了到達這一結果針對訓練過程中類別不平衡這個阻礙問題,設計出一個新的loss,focal loss;
  • R-CNN類檢測器可以通過two-stage級聯和啟發式採用來解決class imbalance問題,proposal stage包括:Selective Search、EdgeBoxes、DeepMask、RPN,可以迅速候選區域數目降低過濾大量background樣本;在第二個分類stage啟發式取樣,可以採取的策略有:固定前景和背景的比例1:3或者採用OHEM線上困難樣本挖掘,可以用來維持前景和背景樣本可操作性平衡;
  • one stage檢測器需要處理更大的候選位置集,雖然也應用了同樣的啟發式取樣,但是效率低下因為在訓練過程中很容易受到簡單背景樣本的支配;這種低效率問題是目標檢測的典型問題,對此典型的解決方法是bootstrapping、HEM;
  • focal loss是一個能夠動態縮放的cross entropy loss,當正確類別的置信度提高時縮放因子衰減為0,縮放因子可以自動降低easy例子在訓練期間貢獻loss的權重,使得模型注重hard例子;
  • 為了驗證focal loss的有效性設計了一種one-stage的目標檢測器RetinaNet,它的設計利用了高效的網路特徵金字塔以及採用了anchor boxes,表現最好的RetinaNet結構是以ResNet-101-FPN為bakcbone,在COCO測試集能達到39.1的AP,速度為5fps;

創新點

  • Focal Loss:blanced corss entropy通過設定 α \alpha 來解決平衡問題 C E ( p t ) = α t l o g ( p t ) CE\left ( p_{t} \right )=-\alpha _{t}log\left ( p_{t} \right ) ,但是 α \alpha 只能平衡positive/negtive樣本的重要性,不能區分easy/hard樣本,因此提出重構CE loss為了降低easy樣本的權重把更多注意力放到hard negtive訓練上,focal loss的標準公式為 F L ( p t ) = ( 1 p t ) γ l o g ( p t ) FL\left ( p_{t} \right )=-\left ( 1-p_{t} \right )^{\gamma }log\left ( p_{t} \right ) ,文中實驗還加上了 α \alpha 平衡引數 F L ( p t ) = α t ( 1 p t ) γ l o g ( p t ) FL\left ( p_{t} \right )=-\alpha _{t}\left ( 1-p_{t} \right )^{\gamma }log\left ( p_{t} \right ) ;參考其他論文讀者對focal loss的理解,它所帶來的效果是:

    loss的量級 數量大的類別:backgroud 數量少的類別:foregroud
    正確分類loss值 大幅度下降 稍微下降
    錯誤分類loss值 稍微下降 基本不變

    在one-stage的網路中,假設正負樣本的比例達到1:10000,就會出現兩個問題,一是樣本不平衡,二是負樣本主導loss,雖然負樣本的loss小,但是由於大量的負樣本是easy example,大量負樣本是準確率很高的第0類,但是數量很多加起來loss甚至大於正樣本的loss;在one-stage的網路中loss由負樣本主導,但是負樣本大多數準確率很高,經過focal loss後變成了正負樣本共同主導,也可以理解為概率低的主導,思想同ohem相似然loss大的樣本主導訓練;但是兩者的區別在於,ohem選出loss較大的樣本,忽略loss較小的easy的負樣本,雖然easy負樣本loss小但是數量多,加起來loss較大,對loss有一定貢獻,focal loss是希望把loss較小的樣本也融入loss計算中,有助於訓練但是又不希望easy 負樣本主導loss,這時候就用到了衰減因子對它們的loss貢獻進行調整,最後通過balanced cross entropy平衡類別

  • RetinaNet:為了驗證focal loss的效果,設計了一個簡單的one-stage detector來進行檢測,網路結構名為RetinaNet:

  • RetinaNet本質上是由resnet+FPN+兩個FCN子網路組成,設計思路是backbone選擇vgg、resnet等有效的特徵提取網路,主要嘗試了resnet50、resnet101,FPN是針對resnet裡面形成的多尺度特徵進行強化利用獲得表達力更強包含多尺度目標區域資訊的feature map,最後在FPN的feature map集合上分別使用兩個結構相同但是不share引數的FCN子網路,從而完成目標框類別分類和bbox位置迴歸任務;
  • Anchor資訊:anchor的面積從 3 2 2 32^2 51 2 2 512^2 在特徵金字塔p3到p7等級上,在每一個level上都有三種不同的長寬比例{1:2,1:1,2:1},針對denser scale coverage,在每一個level的anchor集合上加入{ 2 0 2^0 , 2 1 / 3 2^{1/3} , 2 2 / 3 2^{2/3} }三種不同的size;每一個anchor分配一個長度為K的vector作為分類資訊,以及一個長度為4的bbox迴歸資訊;
  • 模型的訓練和部署:使用訓練好的模型針對每個FPN level上目標存在概率最高的前1000bbox進行下一步的decoding處理,然後將所有level的bbox彙總,使用0.5threshold的nms過濾bbox最後得到目標最終的bbox位置;訓練的loss由bbox位置資訊L1 loss和類別資訊的focal loss組成,在模型初始化的時候考慮到正負樣本極度不平衡的情況對最後一個conv的bias引數做了有偏初始化;

RetinaNet程式碼分析

TODO