retinanet


作為單階段網絡,retinanet兼具速度和精度(精度是沒問題,速度我持疑問),是非常耐用的一個檢測器,現在很多單階段檢測器也是以retinanet為baseline,進行各種改進,足見retinanet的重要,我想從以下幾個方面出發將retinanet解讀下,盡己所能。

  • retinanet出發點,目的,為什么
  • retinanet解決方案,做法,干什么
  • retinanet的效果,缺點,改什么
  • retinanet中的疑點(我個人的)

【出發點】

retinanet的出發點,作為一款單階段檢測器,開個玩笑,它其實是想為yolo,ssd等前輩找回牌面,畢竟在速度上是達到實時了,但是精度上依然被faster rcnn等兩階段檢測器吊打,着實沒面子,那既然痛點在精度上,本文的重點也在於此,作者認為單階段的精度差在於單階段檢測器中樣本的失衡,負樣本比例遠遠大於正樣本,占據樣本中多數,影響網絡的優化(如何解釋會妨礙網絡優化,我還解釋不清),而兩階段就沒有這樣的問題么,我覺得不是沒有,但問題小很多,因為第一階段會剔除掉大量負樣本,所以在第二階段訓練時候,正負樣本比例失衡並不嚴重,盡管第一階段也會面臨這樣的問題。也許可以將focal loss(retinanet采用的采樣方案或者說損失形式)用於RPN,按道理來講會提升的

既然負樣本太多,那我們也不是沒辦法,之前已有相關的處理方法,比如OHEM,專門挑比較難分類的負樣本進行分類,其余的負樣本不參與訓練,效果也是不錯的,大方向思路也沒問題,就是降低易分類樣本的影響,OHEM的思路是讓它們的影響為0,直接棄用,而本文的思路是降低它們的權重,提高難分類樣本的權重,如果再加上另一種方案,即所有樣本原封不動,參與訓練,那么這三種方案,OHEM屬於激進派,retinanet屬於溫和派,原封不動屬於保守派,最后的實驗結果表明 溫和派>激進派>保守派

【解決方案】

retinanet的解決方案十分的簡潔,簡潔到令人發指,就是在原本的分類損失上進行改動,加上權重因子,減小易分類樣本的權重,加大難分類樣本的權重(相對而言,不是絕對的變大了),至於回歸損失,保持不變

首先看原來的分類損失,以二分類為例(多分類基本是一樣的)

這就是標准的交叉熵損失,稍微變換一下

有下面公式

                                  

對於這個公式,Pt越大,代表越容易分類,也就是越接近target,

於是我們應該在Pt變大時,權重變小, 變小時,權重變大, 怎么做,加一個權重因子即可,我先來一個乞丐版的,在原公式前面乘以1-Pt。就成了

當然了,論文中稍微高大上一些,

γ(gamma,不是Y),是一個指數因子,論文里設為2

上面的公式就是focal loss,但還不是最終版,在類別不平衡中有一種做法,是給損失加上常數項正負樣本平衡因子,α,這個平衡因子是用來對正負樣本的損失進行平衡,並不能區分易分類樣本和難分類樣本哦,最終版focal loss也加入了這一項,於是變成(下標t與P的下標一個意思,針對兩種類別),相比公式4,效果輕微提升

     

論文中給出了,Focal loss和CE的對比圖,CE的loss在最上面,可以看到,越易分類的樣本,Focal loss損失越小

 

上面就是核心,下面我來講一下實現細節,網絡結構,anchor的設置,FPN的設置,等等

網絡結構

作者采用的網絡與faster rcnn或者FPN一樣,也是resnet50,101,然后加上FPN的結構,如下圖所示

對於金字塔的每一層,都有兩個分支,分類和回歸,A是每個預測位置的anchor數量,以該位置為中心,K是要預測的目標類別數,4是與類別無關的坐標回歸,也可以設置成與類別相關的,那就是4K個通道輸出了,論文中作者說這兩種設置效果相同,但類別無關的顯然參數更少。

另外需要注意的一點是不同金字塔級別的分類分支參數共享,就是使用同一個卷積組合,回歸分支,作者沒說是否參數共享

inference:前向推理階段,即測試階段,作者對金字塔每層特征圖都使用0.05的置信度閾值進行篩選,然后取置信度前1000的候選框(不足1000更好) ,接下來收集所有層的候選框,進行NMS,閾值0.5

train:訓練時,與GT的IOU大於0.5為正樣本,小於0.4為負樣本,否則忽略

anchor:anchor的設置與FPN論文略有不同,FPN中每一層一種尺度,三種比例,而retinanet中,每一層三種尺度,三種比例,在FPN中,5層金字塔,anchor尺度范圍是322到5122,而本文為每一層的尺度設置三種,20, 21/3, 22/3.比例依舊是1:1, 1:2,2:1,於是有9種anchor。

以輸入為800X800,五層金字塔尺度分別為100X100,50X50,25X25,12X12,6X6,算一下anchor數量,119745, 10幾萬anchor覆蓋在整張圖像中,密密麻麻,讓你知道什么是密集檢測,哈哈,插句話,10幾萬anchor中絕大多數都是負樣本,無用的計算太多,這也是現在anchor free的一個出發點。

網絡初始化:這一點本來沒什么可說的,大家都一樣,但是retinanet做了一點設置

【效果】

論文中給了好多對比試驗,也給出了好多map值,簡單貼一下,都是coco test-dev數據集的

37.8 resnet101-FPN 800

39.1 resnet101-FPN 800,scale jitter, longer train time

40.8 resNext101-FPN 800


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM