前言
今天來介紹一下目標(biāo)檢測(cè)算法中RetinaNet丧凤,這篇論文是ICCV2017的作品,Kaiming He也是作者之一,同時(shí)這篇論文提出的Focal Loss也對(duì)工程上訓(xùn)練更好的目標(biāo)檢測(cè)模型做出了貢獻(xiàn)整袁,所以我們嘗試?yán)斫庖幌逻@篇論文的思想挽拂。論文地址為:https://arxiv.org/pdf/1708.02002.pdf
研究背景
前面我們介紹了一些One-Stage目標(biāo)檢測(cè)算法和Two-Stage目標(biāo)檢測(cè)算法卫旱,這些算法在精度和速度上都各有特點(diǎn)人灼,現(xiàn)在我們畫個(gè)圖總結(jié)一下之前介紹的各種算法的速度和精度:
可以看到One-Stage算法的精度相對(duì)于Two_Stage偏低,然后作者把這種問題的原因歸結(jié)于正負(fù)類別不平衡(簡(jiǎn)單難分類別不平衡)顾翼。因此論文通過重新設(shè)計(jì)標(biāo)準(zhǔn)的交叉熵?fù)p失來解決這種難易樣本不平衡的問題投放,即文章的核心Focal Loss。結(jié)合了Focal Loss的One-Stage的目標(biāo)檢測(cè)器被稱為RetinaNet适贸,該檢測(cè)器在COCO數(shù)據(jù)集上MAP值可以和FPN(特征金字塔目標(biāo)檢測(cè)器灸芳,前面介紹過,推文地址為:https://mp.weixin.qq.com/s/4KT6huH6gFAautE3weZENA)和MaskRCNN接近拜姿。
一些問題烙样?
什么是hard/esay postive/negtive example?
網(wǎng)上找到一張圖解釋在目標(biāo)檢測(cè)任務(wù)的一張圖中什么是hard/easy postive/negtive example。
候選框可以分成postive/negtive兩類蕊肥。當(dāng)bbox(由anchor加上偏移量得到)與ground truth間的IOU大于我們?cè)O(shè)置的閾值(一般取0.5)時(shí)谒获,會(huì)認(rèn)為該bbox屬于positive example,如果IOU小于下門限就認(rèn)為該bbox屬于negative example壁却。
為什么One-Stage檢測(cè)算法精度偏低批狱?
論文認(rèn)為One-Stage算法準(zhǔn)確度低是由于類別失衡引起的。因?yàn)樵谝粡埰胀▓D片中,目標(biāo)的所占的比例遠(yuǎn)遠(yuǎn)小于背景所占的比例,所以兩類候選框例子中以negtive example為主拓哟。這就導(dǎo)致了:
- (1)針對(duì)所有的negtive example,數(shù)量過多造成它的loss太大眼滤,以至于主導(dǎo)了損失函數(shù),不利于收斂。
- (2)針對(duì)單個(gè)negtive example來說,大多數(shù)的negative example不在前景和背景的過渡區(qū)域上惊完,分類很明確(這種易分類的negative稱為easy negative),訓(xùn)練時(shí)對(duì)應(yīng)的背景類score會(huì)很大处硬,換句話說就是單個(gè)example的loss很小,反向計(jì)算時(shí)梯度小拇派。梯度小造成easy negative example對(duì)參數(shù)的收斂作用很有限荷辕,我們更需要loss大的對(duì)參數(shù)收斂影響也更大的example,即hard positive/negative example件豌。
因此如果One-Stage算法如果無腦的將所有bbox拿去做分類損失疮方,因?yàn)閎box中屬于background的bbox太多了,所以如果分類器無腦地把所有bbox統(tǒng)一歸類為background茧彤,accuracy也可以刷得很高骡显。這就導(dǎo)致分類器訓(xùn)練失敗了,自然檢測(cè)精度就偏低了。 對(duì)于YOLO和SSD來講惫谤,他們也確實(shí)沒有無腦將所有的bbox拿去做分類損失壁顶,如在SSD中利用Hard-Negtive-Mining的方式將正負(fù)樣本的比例控制在1:3,YOLO通過損失函數(shù)中權(quán)重懲罰的方式增大正樣本對(duì)損失函數(shù)的影響等溜歪。但它們雖然可以處理第1個(gè)問題若专,但對(duì)于第2個(gè)問題就無能為了,這也是Focal Loss出現(xiàn)的原因蝴猪。
Faster-RCNN為什么精度更高调衰?
Faster-RCNN在FPN階段會(huì)根據(jù)前景分?jǐn)?shù)提出最可能是前景的example,這就會(huì)濾除大量背景概率高的easy negtive樣本自阱,這便解決了上面提出的第2個(gè)問題嚎莉。同時(shí),在生成樣本給ROIPooling層的時(shí)候沛豌,會(huì)據(jù)IOU的大小來調(diào)整positive和negative example的比例趋箩,比如設(shè)置成1:3,這樣防止了negative過多的情況(同時(shí)防止了easy negative和hard negative)琼懊,就解決了前面的第1個(gè)問題阁簸。因此,相對(duì)于One-Stage檢測(cè)器哼丈,F(xiàn)aster-RCNN的精度更高启妹。
Focal Loss
論文引入了Focal Loss來解決難易樣本數(shù)量不平衡。One-Stage的模板檢測(cè)器通常會(huì)產(chǎn)生10k數(shù)量級(jí)的框醉旦,但只有極少數(shù)是正樣本饶米,正負(fù)樣本數(shù)量非常不平衡。我們?cè)谟?jì)算分類的時(shí)候常用的損失——交叉熵的公式如下:
為了解決正負(fù)樣本數(shù)量不平衡的問題车胡,我們經(jīng)常在交叉熵?fù)p失前面加一個(gè)參數(shù)[圖片上傳失敗...(image-9a0dc1-1607910626257)]
檬输,即:
雖然[圖片上傳失敗...(image-f79604-1607910626257)]
平衡了正負(fù)樣本的數(shù)量,但實(shí)際上匈棘,目標(biāo)檢測(cè)中大量的候選目標(biāo)都是易分樣本丧慈。這些樣本的損失很低,但是由于數(shù)量極不平衡主卫,易分樣本的數(shù)量相對(duì)來講太多逃默,最終主導(dǎo)了總的損失。
因此簇搅,這篇論文認(rèn)為易分樣本(即完域,置信度高的樣本)對(duì)模型的提升效果非常小,模型應(yīng)該主要關(guān)注與那些難分樣本 瘩将。所以Focal Loss橫空出世了吟税。一個(gè)簡(jiǎn)單的想法就是只要我們將高置信度(p)樣本的損失降低一些就好了吧凹耙? 也即是下面的公式:
我們?nèi)圖片上傳失敗...(image-3d9b0-1607910626257)]
等于2來只管感受一下,如果[圖片上傳失敗...(image-590071-1607910626257)]
肠仪,那么,[圖片上傳失敗...(image-55b8cd-1607910626257)]
肖抱,損失降低了1000倍。最終Focal Loss還結(jié)合了公式(2)藤韵,這很好理解虐沥,公式(3)解決了難易樣本的不平衡,公式(2)解決了正負(fù)樣本的不平衡泽艘,將公式(2)與(3)結(jié)合使用欲险,同時(shí)解決正負(fù)難易2個(gè)問題!所以最終Focal Loss的形式如下:
下面這張圖展示了Focal Loss取不同的[圖片上傳失敗...(image-2ee061-1607910626257)]
時(shí)的損失函數(shù)下降匹涮。
實(shí)驗(yàn)結(jié)果展示天试,當(dāng)[圖片上傳失敗...(image-ecf981-1607910626257)]
,[圖片上傳失敗...(image-5ff039-1607910626257)]
時(shí)然低,效果最好喜每,這樣損失函數(shù)訓(xùn)練的過程中關(guān)注的樣本優(yōu)先級(jí)就是正難>負(fù)難>正易>負(fù)易了。
RetinaNet
說完了Focal Loss就回到文章RetinaNet雳攘,F(xiàn)ocal Loss與ResNet-101-FPN backbone結(jié)合就構(gòu)成了RetinaNet(one-stage檢測(cè)器)带兜,RetinaNet在COCO test-dev上達(dá)到39.1mAP,速度為5FPS吨灭。下圖展示了RetinaNet的網(wǎng)絡(luò)結(jié)構(gòu):
訓(xùn)練RetinaNet時(shí)有幾個(gè)值得注意的關(guān)鍵點(diǎn):
- 訓(xùn)練時(shí)FPN每一級(jí)的所有example都被用于計(jì)算Focal Loss刚照,loss值加到一起用來訓(xùn)練。
- 測(cè)試時(shí)FPN每一級(jí)只選取score最大的1000個(gè)example來做nms喧兄。
- 整個(gè)結(jié)構(gòu)不同層的head部分(上圖中的c和d部分)共享參數(shù)无畔,但分類和回歸分支間的參數(shù)不共享。
- 分類分支的最后一級(jí)卷積的bias初始化成前面提到的-log((1-π)/π吠冤。
RetinaNet和當(dāng)時(shí)流行的檢測(cè)算法速度和精度對(duì)比如下浑彰,可以看到從速度和精度都完成了對(duì)其他算法的壓制:
實(shí)驗(yàn)
Table1是關(guān)于RetinaNet和Focal Loss的一些實(shí)驗(yàn)結(jié)果。其中(a)是在交叉熵的基礎(chǔ)上加上參數(shù)[圖片上傳失敗...(image-6f8562-1607910626257)]
拯辙,[圖片上傳失敗...(image-3ce2c5-1607910626257)]
就表示傳統(tǒng)的交叉熵郭变,可以看出當(dāng)a=0.75的時(shí)候效果最好,AP值提升了0.9涯保。 (b)是對(duì)比不同的參數(shù)[圖片上傳失敗...(image-3971e2-1607910626257)]
和[圖片上傳失敗...(image-c0ab2a-1607910626257)]
的實(shí)驗(yàn)結(jié)果饵较,可以看出隨著[圖片上傳失敗...(image-f3a2a9-1607910626257)]
的增加,AP提升比較明顯遭赂。(c)是anchor對(duì)AP值的影響。(d)是通過和OHEM的對(duì)比可以看出最好的Focal Loss比最好的OHEM提高了3.2AP横辆。這里OHEM1:3表示在通過OHEM得到的minibatch上強(qiáng)制positive和negative樣本的比例為1:3撇他,通過對(duì)比可以看出這種強(qiáng)制的操作并沒有提升AP茄猫。(e)加入了運(yùn)算時(shí)間的對(duì)比,可以和前面的Figure2結(jié)合起來看困肩,速度方面也有優(yōu)勢(shì)划纽。Table2表示RetinaNet和One-Stage檢測(cè)器的比較,可以看到RetinaNet也是毫不順色的锌畸。
代碼實(shí)現(xiàn)
keras版本:https://github.com/fizyr/keras-retinanet pytorch版本: https://github.com/yhenon/pytorch-retinanet caffe-focal loss: https://github.com/chuanqi305/FocalLoss
后記
今天講了目標(biāo)檢測(cè)算法中的RetinaNet勇劣,希望可以對(duì)Focal Loss有清晰的了解,在工程上使用Focal Loss也是一種訓(xùn)練其他One-Stage檢測(cè)器的有效方法潭枣。今天就講到這里啦比默。
相關(guān)學(xué)習(xí)
1.Focal Loss理解
https://www.cnblogs.com/king-lps/p/9497836.html
Focal loss主要是為了解決one-stage目標(biāo)檢測(cè)中正負(fù)樣本比例嚴(yán)重失衡的問題。該損失函數(shù)降低了大量簡(jiǎn)單負(fù)樣本在訓(xùn)練中所占的權(quán)重盆犁,也可理解為一種困難樣本挖掘命咐。
基于視頻結(jié)構(gòu)化的應(yīng)用中,目標(biāo)在經(jīng)過跟蹤算法后谐岁,會(huì)得到一個(gè)唯一標(biāo)識(shí)和它對(duì)應(yīng)的運(yùn)動(dòng)軌跡醋奠,利用這兩個(gè)數(shù)據(jù)我們可以做一些后續(xù)工作:測(cè)速(交通類應(yīng)用場(chǎng)景)、計(jì)數(shù)(交通類應(yīng)用場(chǎng)景伊佃、安防類應(yīng)用場(chǎng)景)以及行為檢測(cè)(交通類應(yīng)用場(chǎng)景窜司、安防類應(yīng)用場(chǎng)景)。
3.基于PyTorch實(shí)現(xiàn)昆蟲分類任務(wù)
https://lab.datafountain.cn/forum?id=86
4.智能盤點(diǎn)-鋼筋數(shù)量AI識(shí)別-目標(biāo)檢測(cè)實(shí)踐
https://zhuanlan.zhihu.com/p/54951933
5.目標(biāo)檢測(cè)(YOLO航揉,F(xiàn)PN塞祈,RetinaNet,SSD)
https://blog.csdn.net/qq_39388410/article/details/88081631
6.目標(biāo)檢測(cè)(Object Detection)—— RetinaNet介紹 https://blog.csdn.net/qq_39388410/article/details/88081631