天天看點

Focal Loss for Dense Object Detection(Retina Net)

Focal Loss for Dense Object Detection

Intro

Problems

Loss

Trick

RetinaNet Detector

OHEM

Code

這又是一篇與何凱明大神有關的作品,文章主要解決了one-stage網絡識别率普遍低于two-stage網絡的問題,其指出其根本原因是樣本類别不均衡導緻,一針見血,通過改變傳統的loss(CE)變為focal loss,瞬間提升了one-stage網絡的準确率。與此同時,為了測試該loss對網絡改進的影響,文章還特地設計了一個網絡,retina net,證明了其想法。

為啥one-stage網絡的準确率普遍會低于two-stage呢?

文章指出,one-stage網絡是在訓練階段,極度不平衡的類别數量導緻準确率下降,一張圖檔裡box為目标類别的樣本就那麼點,而是背景沒有目标的樣本卻遠遠高于目标樣本,這導緻分類為背景的樣本數目占據樣本數目極大部分,是以,這種不平衡導緻了模型會把更多的重心放在背景樣本的學習上去。正常的做法可以是負樣本挖掘,來維持正負樣本1:3的比例,這似乎起到了點作用。但是,本文的做法是改變原有的loss,提出新的loss來解決。由于容易被分類的負樣本的數量非常龐大,是以這些樣本就會左右梯度的方向,繼而使得模型更專注于分負樣本而非具體的類别。

為啥two-stage的準确率不會受到樣本類别不均衡的影響呢?

因為two-stage網絡一般會經曆類似rpn網絡,第一個網絡已經濾去了大多數背景樣本,在第二個網絡裡負樣本的數量大量減少,是以對分類的影響也會減少。但two-stage網絡仍然有大量負樣本,隻是不均衡程度減輕了,是以,這是識别準确率不高的根本原因在于樣本類别是否均衡。

Focal Loss for Dense Object Detection(Retina Net)

下面給一張圖,來說明下作者到底是怎麼想的。對于普通的ce loss,由于負樣本數量巨大,正樣本很少,是以負樣本被錯分為正樣本的的loss會占據loss的主導。那麼好的做法就是,盡量減少負樣本loss所占的比例,或者增大正樣本被錯分為負樣本的loss所占的比例。于是本文的想法大緻就成型了。

Focal Loss for Dense Object Detection(Retina Net)

首先要讓正負樣本所占的比例均衡,沒有使用負樣本挖掘等手段,本文直接在ce loss前面乘以一個參數α,這樣可以友善控制正負樣本loss所占的比例,即如果gt為1也就是正樣本,那麼下式表示的就是正樣本被錯分為負樣本的loss,我們乘以alpha用于調整這個loss的大小,顯然應該放大這個loss:

Focal Loss for Dense Object Detection(Retina Net)

然而,盡管這樣做可以做可以起到一些作用,如果分類的結果接近正确,比如正樣本以0.9的機率被分為正樣本,但是0.9和1之間也是有loss的,這部分loss也會因為前面乘了一個alpha被放大,這其實是我們不希望看到的,因為這一部分已經被分的足夠好了,盡管乘了alpha,但預測為0.4的正樣本和預測為0.6的正樣本的loss相差是不大的,我們希望把這個差距拉開,希望看到的是,被分類的足夠好的樣本loss不需要太大的alpha權重,而被錯分嚴重的,比如預測機率小于0.5的正樣本,我們需要将他的loss放大,錯分越嚴重loss應該被放大的越多,是以可以用下面的指數函數來實作:

Focal Loss for Dense Object Detection(Retina Net)

由上面的圖可以看出,當γ為5的時候,預測機率小于0.5的正樣本因為前面乘了個指數的關系可以将loss放到很大,而大于0.5的分類的很好的正樣本的loss會乘一個接近0的東西,這就很符合我們的要求。

然後,最終的loss長這個樣子:

Focal Loss for Dense Object Detection(Retina Net)

類别不平衡問題在訓練最開始階段會導緻訓練不是很穩定,這是因為我們一般初始化參數的時候都會認為參數其結果服從一個先驗分布,一般我們就認為是正太分布,對于分類的最後一層,我們的初始化就是讓每個類别的機率都相等,這樣做的結果是在反向過程中會使得訓練初期訓練不穩定,因為負樣本非常多,你讓各種類别機率相等之後顯然是增加了負樣本分錯的數目,也就是增加了負樣本在訓練時候的loss,是以好的做法是讓最後一層的分布符合正樣本相對負樣本的分布,這樣做能夠保證訓練初期的穩定性。

retinanet的網絡結構是在FPN的每個特征層後面接兩個子網絡,分别是classification subnet 和 bbox regression subnet。

前者是先用四次C個3*3的卷積核卷積+relu激活,然後用KA個3*3的卷積核卷積,用sigmoid來激活最後一層,對每個特征層進行類别預測。KA是K種類别A個anchor的預測結果,實驗中設定C = 256。

後者也差不多,也是接一個FCN(不含全連接配接的全卷積),最後預測的是4*A個量,這個與faster rcnn中的類似。

與RPN相比的話,retinanet并沒有共享預測類别的網絡權重和回歸網絡的權重,因為作者說他們這樣不共享網絡權重最終得到的準确率遠比調整超參效果要好。

網絡結構如圖:

Focal Loss for Dense Object Detection(Retina Net)

(Online Hard Example Mining)OHEM是來幫助two-stage網路訓練的方法,OHEM作用是在NMS之前,先将各個樣本的loss排序,隻留下loss較大的樣本繼續NMS,這樣做也可以更加專注于錯分樣本的訓練,但是其也有缺點,其直接扔掉了簡單樣本,顯然會導緻簡單樣本的訓練出現問題。作者通過實驗說明了FL比OHEM更加有效。

Focal Loss for Dense Object Detection(Retina Net)

分類: 機器視覺, 論文了解

Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection(Retina Net)

繼續閱讀