目標(biāo)檢測(cè)RetinaRet--2018
算法概述
RetinaNet算法源自2018年Facebook AI Research的論文 Focal Loss for Dense Object Detection,作者包括了Ross大神、Kaiming大神和Piotr大神。該論文最大的貢獻(xiàn)在于提出了Focal Loss用于解決類別不均衡問(wèn)題,從而創(chuàng)造了RetinaNet(One Stage目標(biāo)檢測(cè)算法)這個(gè)精度超越經(jīng)典Two Stage的Faster-RCNN的目標(biāo)檢測(cè)網(wǎng)絡(luò)。
目標(biāo)檢測(cè)的 Two Stage 與 One Stage
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法有兩類經(jīng)典的結(jié)構(gòu):Two Stage 和 One Stage。
Two Stage:例如Faster-RCNN算法。第一級(jí)專注于proposal的提取,第二級(jí)對(duì)提取出的proposal進(jìn)行分類和精確坐標(biāo)回歸。兩級(jí)結(jié)構(gòu)準(zhǔn)確度較高,但因?yàn)榈诙?jí)需要單獨(dú)對(duì)每個(gè)proposal進(jìn)行分類/回歸,速度上就打了折扣
One Stage:例如SSD,YOLO算法。此類算法摒棄了提取proposal的過(guò)程,只用一級(jí)就完成了識(shí)別/回歸,雖然速度較快但準(zhǔn)確率遠(yuǎn)遠(yuǎn)比不上兩級(jí)結(jié)構(gòu)、
產(chǎn)生精度差異的主要原因:類別失衡(Class Imbalance)。One Stage方法在得到特征圖后,會(huì)產(chǎn)生密集的目標(biāo)候選區(qū)域,而這些大量的候選區(qū)域中只有很少一部分是真正的目標(biāo),這樣就造成了機(jī)器學(xué)習(xí)中經(jīng)典的訓(xùn)練樣本正負(fù)不平衡的問(wèn)題。它往往會(huì)造成最終算出的training loss為占絕對(duì)多數(shù)但包含信息量卻很少的負(fù)樣本所支配,少樣正樣本提供的關(guān)鍵信息卻不能在一般所用的training loss中發(fā)揮正常作用,從而無(wú)法得出一個(gè)能對(duì)模型訓(xùn)練提供正確指導(dǎo)的loss(而Two Stage方法得到proposal后,其候選區(qū)域要遠(yuǎn)遠(yuǎn)小于One Stage產(chǎn)生的候選區(qū)域,因此不會(huì)產(chǎn)生嚴(yán)重的類別失衡問(wèn)題)。常用的解決此問(wèn)題的方法就是負(fù)樣本挖掘,或其它更復(fù)雜的用于過(guò)濾負(fù)樣本從而使正負(fù)樣本數(shù)維持一定比率的樣本取樣方法。該論文中提出了Focal Loss來(lái)對(duì)最終的Loss進(jìn)行校正。
Focal Loss
Focal Loss的目的:消除類別不平衡 + 挖掘難分樣本
Focal Loss非常簡(jiǎn)單,就是在原有的交叉熵?fù)p失函數(shù)上增加了一個(gè)因子,讓損失函數(shù)更加關(guān)注hard examples,以下是用于二值分類的交叉熵?fù)p失函數(shù)。其中
為類別真實(shí)標(biāo)簽,
是模型預(yù)測(cè)的
的概率。

可以進(jìn)行如下定義:

因此交叉熵可以寫成如下形式,即如下loss曲線圖中藍(lán)色曲線所示,可以認(rèn)為當(dāng)模型預(yù)測(cè)得到的
的樣本為容易分類的樣本,而
值預(yù)測(cè)較小的樣本為hard examples,最后震整個(gè)網(wǎng)絡(luò)的loss就是所有訓(xùn)練樣本經(jīng)過(guò)模型預(yù)測(cè)得到的值的累加,因?yàn)閔ard examples通常為少數(shù)樣本,所以雖然其對(duì)應(yīng)的loss值較高,但是最后全部累加后,大部分的loss值來(lái)自于容易分類的樣本,這樣在模型優(yōu)化的過(guò)程中就會(huì)將更多的優(yōu)化放到容易分類的樣本中,而忽略hard examples。

對(duì)于這種類別不均衡問(wèn)題常用的方法是引入一個(gè)權(quán)重因子
,對(duì)于類別1的使用權(quán)重
,對(duì)于類別-1使用權(quán)重
,公式如下所示。但采用這種加權(quán)方式可以平衡正負(fù)樣本的重要性,但無(wú)法區(qū)分容易分類的樣本與難分類的樣本。

因此論文中提出在交叉熵前增加一個(gè)調(diào)節(jié)因子
,其中
為focusing parameter,且
,其公式變?yōu)槿缦拢?dāng)
取不同數(shù)值時(shí)loss曲線如圖1所示。通過(guò)途中可以看到,當(dāng)
越來(lái)越大時(shí),loss函數(shù)在容易分類的部分其loss幾乎為零,而
較小的部分(hard examples部分)loss值仍然較大,這樣就可以保證在類別不平衡較大時(shí),累加樣本loss,可以讓hard examples貢獻(xiàn)更多的loss,從而可以在訓(xùn)練時(shí)給與hard examples部分更多的優(yōu)化。

在實(shí)際使用時(shí),論文中提出在上述公式的基礎(chǔ)上,增加一個(gè)
平衡因子,可以產(chǎn)生一個(gè)輕微的精度提升,公式如下所示。


RetinaNet
下圖是RetinaNet的網(wǎng)絡(luò)結(jié)構(gòu),整個(gè)網(wǎng)絡(luò)相對(duì)Faster-RCNN簡(jiǎn)單了很多,主要由ResNet+FPN+2xFCN子網(wǎng)絡(luò)構(gòu)成。

首先RetinaNet的Backbone是由ResNet+FPN構(gòu)成,關(guān)于此Backbone可以參考以下鏈接中關(guān)于Backbone的講解。輸入圖像經(jīng)過(guò)Backbone的特征提取后,可以得到
特征圖金字塔,其中下標(biāo)
表示特征金字塔的層數(shù)(
特征圖的分辨率比輸入圖像小
),得到的特征金字塔的每層
通道。

在得到特征金字塔后,對(duì)每層特征金字塔分別使用兩個(gè)子網(wǎng)絡(luò)(分類網(wǎng)絡(luò)+檢測(cè)框位置回歸)。這兩個(gè)子網(wǎng)絡(luò)由RPN網(wǎng)絡(luò)修改得到。
與RPN網(wǎng)絡(luò)類似,也使用anchors來(lái)產(chǎn)生proposals。特征金字塔的每層對(duì)應(yīng)一個(gè)anchor面積,為了產(chǎn)生更加密集的coverage,增加了三個(gè)面積比例
(即使用當(dāng)前anchor對(duì)應(yīng)的面積分別乘以相應(yīng)的比例,形成三個(gè)尺度),然后anchors的長(zhǎng)寬比仍為
,因此特征金字塔的每一層對(duì)應(yīng)A = 9種Anchors。原始RPN網(wǎng)絡(luò)的分類網(wǎng)絡(luò)只是區(qū)分前景與背景兩類,此處將其改為目標(biāo)類別的個(gè)數(shù)K
上面說(shuō)到的Focal Loss就應(yīng)用于類別分類的子網(wǎng)絡(luò),即可有效移植類別不均衡問(wèn)題。
特征金字塔每層都相應(yīng)的產(chǎn)生目標(biāo)類別與位置的預(yù)測(cè),最后再將其融合起來(lái),同時(shí)使用NMS來(lái)得到最后的檢測(cè)結(jié)果。下圖是論文中給出的試驗(yàn)結(jié)果,相比較于經(jīng)典的Two Stage檢測(cè)方法Faster-RCNN,RetinaNet具有更高的精度。

