Focal Loss
轉(zhuǎn)自:https://blog.csdn.net/u014380165/article/details/77019084
論文:Focal Loss for Dense Object Detection
論文鏈接:https://arxiv.org/abs/1708.02002
優(yōu)化版的MXNet實(shí)現(xiàn):https://github.com/miraclewkf/FocalLoss-MXNet
RBG和Kaiming大神的新作。
我們知道object detection的算法主要可以分為兩大類:two-stage detector和one-stage detector。前者是指類似Faster RCNN,RFCN這樣需要region proposal的檢測算法,這類算法可以達(dá)到很高的準(zhǔn)確率,但是速度較慢。雖然可以通過減少proposal的數(shù)量或降低輸入圖像的分辨率等方式達(dá)到提速,但是速度并沒有質(zhì)的提升。后者是指類似YOLO,SSD這樣不需要region proposal,直接回歸的檢測算法,這類算法速度很快,但是準(zhǔn)確率不如前者。作者提出focal loss的出發(fā)點(diǎn)也是希望one-stage detector可以達(dá)到two-stage detector的準(zhǔn)確率,同時(shí)不影響原有的速度。
既然有了出發(fā)點(diǎn),那么就要找one-stage detector的準(zhǔn)確率不如two-stage detector的原因,作者認(rèn)為原因是:樣本的類別不均衡導(dǎo)致的。我們知道在object detection領(lǐng)域,一張圖像可能生成成千上萬的candidate locations,但是其中只有很少一部分是包含object的,這就帶來了類別不均衡。那么類別不均衡會(huì)帶來什么后果呢?引用原文講的兩個(gè)后果:(1) training is inefficient as most locations are easy negatives that contribute no useful learning signal; (2) en masse, the easy negatives can overwhelm training and lead to degenerate models. 什么意思呢?負(fù)樣本數(shù)量太大,占總的loss的大部分,而且多是容易分類的,因此使得模型的優(yōu)化方向并不是我們所希望的那樣。其實(shí)先前也有一些算法來處理類別不均衡的問題,比如OHEM(online hard example mining),OHEM的主要思想可以用原文的一句話概括:In OHEM each example is scored by its loss, non-maximum suppression (nms) is then applied, and a minibatch is constructed with the highest-loss examples。OHEM算法雖然增加了錯(cuò)分類樣本的權(quán)重,但是OHEM算法忽略了容易分類的樣本。
因此針對類別不均衡問題,作者提出一種新的損失函數(shù):focal loss,這個(gè)損失函數(shù)是在標(biāo)準(zhǔn)交叉熵?fù)p失基礎(chǔ)上修改得到的。這個(gè)函數(shù)可以通過減少易分類樣本的權(quán)重,使得模型在訓(xùn)練時(shí)更專注于難分類的樣本。為了證明focal loss的有效性,作者設(shè)計(jì)了一個(gè)dense detector:RetinaNet,并且在訓(xùn)練時(shí)采用focal loss訓(xùn)練。實(shí)驗(yàn)證明RetinaNet不僅可以達(dá)到one-stage detector的速度,也能有two-stage detector的準(zhǔn)確率。
focal loss的含義可以看如下Figure1,橫坐標(biāo)是pt,縱坐標(biāo)是loss。CE(pt)表示標(biāo)準(zhǔn)的交叉熵公式,FL(pt)表示focal loss中用到的改進(jìn)的交叉熵,可以看出和原來的交叉熵對比多了一個(gè)調(diào)制系數(shù)(modulating factor)。為什么要加上這個(gè)調(diào)制系數(shù)呢?目的是通過減少易分類樣本的權(quán)重,從而使得模型在訓(xùn)練時(shí)更專注于難分類的樣本。首先pt的范圍是0到1,所以不管γ是多少,這個(gè)調(diào)制系數(shù)都是大于等于0的。易分類的樣本再多,你的權(quán)重很小,那么對于total loss的共享也就不會(huì)太大。那么怎么控制樣本權(quán)重呢?舉個(gè)例子,假設(shè)一個(gè)二分類,樣本x1屬于類別1的pt=0.9,樣本x2屬于類別1的pt=0.6,顯然前者更可能是類別1,假設(shè)γ=1,那么對于pt=0.9,調(diào)制系數(shù)則為0.1;對于pt=0.6,調(diào)制系數(shù)則為0.4,這個(gè)調(diào)制系數(shù)就是這個(gè)樣本對loss的貢獻(xiàn)程度,也就是權(quán)重,所以難分的樣本(pt=0.6)的權(quán)重更大。Figure1中γ=0的藍(lán)色曲線就是標(biāo)準(zhǔn)的交叉熵?fù)p失。
Figure2是在COCO數(shù)據(jù)集上幾個(gè)模型的實(shí)驗(yàn)對比結(jié)果。可以看看再AP和time的對比下,本文算法和其他one-stage和two-stage檢測算法的差別。
看完實(shí)驗(yàn)結(jié)果和提出算法的出發(fā)點(diǎn),接下來就要介紹focal loss了。在介紹focal loss之前,先來看看交叉熵?fù)p失,這里以二分類為例,p表示概率,公式如下:
因?yàn)槭嵌诸?#xff0c;所以y的值是正1或負(fù)1,p的范圍為0到1。當(dāng)真實(shí)label是1,也就是y=1時(shí),假如某個(gè)樣本x預(yù)測為1這個(gè)類的概率p=0.6,那么損失就是-log(0.6),注意這個(gè)損失是大于等于0的。如果p=0.9,那么損失就是-log(0.9),所以p=0.6的損失要大于p=0.9的損失,這很容易理解。
為了方便,用pt代替p,如下公式2:。這里的pt就是前面Figure1中的橫坐標(biāo)。
接下來介紹一個(gè)最基本的對交叉熵的改進(jìn),也將作為本文實(shí)驗(yàn)的baseline,如下公式3。什么意思呢?增加了一個(gè)系數(shù)at,跟pt的定義類似,當(dāng)label=1的時(shí)候,at=a;當(dāng)label=-1的時(shí)候,at=1-a,a的范圍也是0到1。因此可以通過設(shè)定a的值(一般而言假如1這個(gè)類的樣本數(shù)比-1這個(gè)類的樣本數(shù)多很多,那么a會(huì)取0到0.5來增加-1這個(gè)類的樣本的權(quán)重)來控制正負(fù)樣本對總的loss的共享權(quán)重。
顯然前面的公式3雖然可以控制正負(fù)樣本的權(quán)重,但是沒法控制容易分類和難分類樣本的權(quán)重,于是就有了focal loss:
這里的γ稱作focusing parameter,γ>=0。
稱為調(diào)制系數(shù)(modulating factor)
這里介紹下focal loss的兩個(gè)重要性質(zhì):1、當(dāng)一個(gè)樣本被分錯(cuò)的時(shí)候,pt是很小的(請結(jié)合公式2,比如當(dāng)y=1時(shí),p要小于0.5才是錯(cuò)分類,此時(shí)pt就比較小,反之亦然),因此調(diào)制系數(shù)就趨于1,也就是說相比原來的loss是沒有什么大的改變的。當(dāng)pt趨于1的時(shí)候(此時(shí)分類正確而且是易分類樣本),調(diào)制系數(shù)趨于0,也就是對于總的loss的貢獻(xiàn)很小。2、當(dāng)γ=0的時(shí)候,focal loss就是傳統(tǒng)的交叉熵?fù)p失,當(dāng)γ增加的時(shí)候,調(diào)制系數(shù)也會(huì)增加。
focal loss的兩個(gè)性質(zhì)算是核心,其實(shí)就是用一個(gè)合適的函數(shù)去度量難分類和易分類樣本對總的損失的貢獻(xiàn)。
作者在實(shí)驗(yàn)中采用的是公式5的focal loss(結(jié)合了公式3和公式4,這樣既能調(diào)整正負(fù)樣本的權(quán)重,又能控制難易分類樣本的權(quán)重):
在實(shí)驗(yàn)中a的選擇范圍也很廣,一般而言當(dāng)γ增加的時(shí)候,a需要減小一點(diǎn)(實(shí)驗(yàn)中γ=2,a=0.25的效果最好)
貼一下RetinaNet的結(jié)構(gòu)圖:Figure3。因?yàn)榫W(wǎng)絡(luò)結(jié)構(gòu)不是本文的重點(diǎn),所以這里就不詳細(xì)介紹了,感興趣的可以看論文的第4部分。
實(shí)驗(yàn)結(jié)果:
Table1是關(guān)于RetinaNet和Focal Loss的一些實(shí)驗(yàn)結(jié)果。(a)是在交叉熵的基礎(chǔ)上加上參數(shù)a,a=0.5就表示傳統(tǒng)的交叉熵,可以看出當(dāng)a=0.75的時(shí)候效果最好,AP值提升了0.9。(b)是對比不同的參數(shù)γ和a的實(shí)驗(yàn)結(jié)果,可以看出隨著γ的增加,AP提升比較明顯。(d)通過和OHEM的對比可以看出最好的Focal Loss比最好的OHEM提高了3.2AP。這里OHEM1:3表示在通過OHEM得到的minibatch上強(qiáng)制positive和negative樣本的比例為1:3,通過對比可以看出這種強(qiáng)制的操作并沒有提升AP。(e)加入了運(yùn)算時(shí)間的對比,可以和前面的Figure2結(jié)合起來看,速度方面也有優(yōu)勢!注意這里RetinaNet-101-800的AP是37.8,當(dāng)把訓(xùn)練時(shí)間擴(kuò)大1.5倍同時(shí)采用scale jitter,AP可以提高到39.1,這就是全文和table2中的最高的39.1AP的由來。
Figure4是對比forground和background樣本在不同γ情況下的累積誤差。縱坐標(biāo)是歸一化后的損失,橫坐標(biāo)是總的foreground或background樣本數(shù)的百分比。可以看出γ的變化對正(forground)樣本的累積誤差的影響并不大,但是對于負(fù)(background)樣本的累積誤差的影響還是很大的(γ=2時(shí),將近99%的background樣本的損失都非常小)。
總結(jié):
原文的這段話概括得很好:In this work, we identify class imbalance as the primary obstacle preventing one-stage object detectors from surpassing top-performing, two-stage methods, such as Faster R-CNN variants. To address this, we propose the focal loss which applies a modulating term to the cross entropy loss in order to focus learning on hard examples and down-weight the numerous easy negatives.
轉(zhuǎn)載于:https://www.cnblogs.com/leebxo/p/10433517.html
總結(jié)
以上是生活随笔為你收集整理的Focal Loss的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webToImage (网页转图片)模块
- 下一篇: find 和 findindes