目標(biāo)檢測(cè)算法之RetinaNet(引入Focal Loss)

前言

今天來介紹一下目標(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é)一下之前介紹的各種算法的速度和精度:

image

可以看到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。

image

候選框可以分成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í)候常用的損失——交叉熵的公式如下:

image

為了解決正負(fù)樣本數(shù)量不平衡的問題车胡,我們經(jīng)常在交叉熵?fù)p失前面加一個(gè)參數(shù)[圖片上傳失敗...(image-9a0dc1-1607910626257)]

檬输,即:

image

雖然[圖片上傳失敗...(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)樣本的損失降低一些就好了吧凹耙? 也即是下面的公式:

image

我們?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的形式如下:

image

下面這張圖展示了Focal Loss取不同的[圖片上傳失敗...(image-2ee061-1607910626257)]

時(shí)的損失函數(shù)下降匹涮。

image

實(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):

image

訓(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ì)其他算法的壓制:

image

實(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也是毫不順色的锌畸。

image
image

代碼實(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)重盆犁,也可理解為一種困難樣本挖掘命咐。

  1. [AI開發(fā)]目標(biāo)跟蹤之計(jì)數(shù)
    https://www.cnblogs.com/xiaozhi_5638/p/11010749.html

基于視頻結(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迷捧,一起剝皮案震驚了整個(gè)濱河市织咧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漠秋,老刑警劉巖笙蒙,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異庆锦,居然都是意外死亡捅位,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門搂抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艇搀,“玉大人,你說我怎么就攤上這事求晶⊙娴瘢” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵芳杏,是天一觀的道長(zhǎng)矩屁。 經(jīng)常有香客問我辟宗,道長(zhǎng),這世上最難降的妖魔是什么吝秕? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任泊脐,我火速辦了婚禮,結(jié)果婚禮上烁峭,老公的妹妹穿的比我還像新娘容客。我一直安慰自己,他們只是感情好约郁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布缩挑。 她就那樣靜靜地躺著,像睡著了一般棍现。 火紅的嫁衣襯著肌膚如雪调煎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天己肮,我揣著相機(jī)與錄音士袄,去河邊找鬼。 笑死谎僻,一個(gè)胖子當(dāng)著我的面吹牛娄柳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艘绍,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼赤拒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了诱鞠?” 一聲冷哼從身側(cè)響起挎挖,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎航夺,沒想到半個(gè)月后蕉朵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阳掐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年始衅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缭保。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汛闸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出艺骂,到底是詐尸還是另有隱情诸老,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布钳恕,位于F島的核電站别伏,受9級(jí)特大地震影響吮廉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜畸肆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宙址。 院中可真熱鬧轴脐,春花似錦、人聲如沸抡砂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽注益。三九已至碴巾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丑搔,已是汗流浹背厦瓢。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啤月,地道東北人煮仇。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谎仲,于是被迫代替她去往敵國(guó)和親浙垫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容