超詳細(xì)解讀Faster R-CNN-FPN

0. 一些啰嗦

2021年了,竟然還有人寫(xiě)關(guān)于Faster R-CNN的文章柜思?我的原因主要有兩點(diǎn):

  1. 根據(jù)我們?cè)趯?shí)際項(xiàng)目和比賽中的經(jīng)驗(yàn),基于RoIAlign和FPN的Faster R-CNN(后面簡(jiǎn)稱Faster R-CNN-FPN)是一個(gè)表現(xiàn)很強(qiáng)的基線,有必要充分了解它的思想和細(xì)節(jié);

  2. 客觀來(lái)說(shuō)变姨,相比單階段、anchor free和基于transformer的檢測(cè)方法厌丑,F(xiàn)aster R-CNN-FPN是一個(gè)細(xì)節(jié)很繁瑣的方法定欧,即使復(fù)現(xiàn)過(guò)一遍,時(shí)間長(zhǎng)了很多細(xì)節(jié)也會(huì)忘記怒竿,而網(wǎng)上詳細(xì)介紹該方法的文章較少砍鸠,要了解方法的每個(gè)細(xì)節(jié)則必須閱讀涉及Faster R-CNN-FPN演進(jìn)的多篇論文或者源碼。因此耕驰,很有必要用文字的方式記錄Faster R-CNN-FPN的關(guān)鍵思想和細(xì)節(jié)爷辱,便于日后翻閱。

1. 關(guān)鍵思想

1.1 概述

我們先從全局上了解Faster R-CNN-FPN朦肘,然后再關(guān)注其中涉及的細(xì)節(jié)饭弓。下面是Faster R-CNN-FPN的網(wǎng)絡(luò)框架圖(或稱為tensor流動(dòng)圖)。

眾所周知媒抠,F(xiàn)aster R-CNN-FPN(主要是Faster R-CNN)是個(gè)兩階段的對(duì)象檢測(cè)方法弟断,主要由兩部分網(wǎng)絡(luò)組成,RPN和Fast R-CNN趴生。

RPN的作用是以bouding box(后簡(jiǎn)稱為box)的方式預(yù)測(cè)出圖片中對(duì)象可能的位置阀趴,并過(guò)濾掉圖片中絕大部分的背景區(qū)域,目標(biāo)是達(dá)到盡量召回圖像中感興趣的對(duì)象冲秽,預(yù)測(cè)box盡量能夠與實(shí)際對(duì)象的box貼合舍咖,并且保證一定的預(yù)測(cè)精度(Precision)。另外锉桑,RPN并不需要指出預(yù)測(cè)的box中對(duì)象具體的類別排霉,RPN預(yù)測(cè)的box稱為RoI(Region of Interest),由于是以box的方式輸出民轴,所以后面我們統(tǒng)一將其稱為proposal box攻柠。

Fast R-CNN則是在FPN預(yù)測(cè)的proposal box基礎(chǔ)上進(jìn)一步預(yù)測(cè)box中對(duì)象具體的類別,并對(duì)proposal box進(jìn)行微調(diào)后裸,使得最終預(yù)測(cè)的box盡量貼合目標(biāo)對(duì)象瑰钮。大致的做法是根據(jù)RPN預(yù)測(cè)的proposal box,從原圖backbone的feature map上通過(guò)RoIPooling或RoIAlign(Faster R-CNN-FPN使用RoIAlign)提取每個(gè)proposal box對(duì)應(yīng)區(qū)域的feature map微驶,在這些區(qū)域feature map上進(jìn)一步預(yù)測(cè)box的類別和相對(duì)proposal box的偏移量(微調(diào))浪谴。另外开睡,RPN和Fast R-CNN共用同一個(gè)backbone網(wǎng)絡(luò)提取圖像的feature map,大大減少了推理耗時(shí)苟耻。

從上面的介紹可以看出篇恒,RPN和Fast R-CNN的配合作用其實(shí)可以理解為一種注意力機(jī)制,先大致確定目標(biāo)在視野中的位置凶杖,然后再鎖定目標(biāo)仔細(xì)觀察胁艰,確定目標(biāo)的類別和更加精確的位置,簡(jiǎn)單來(lái)說(shuō)就是look twice智蝠,相比單階段的look once腾么,當(dāng)然是比較耗時(shí)的,但也換來(lái)了更好的效果(雖然很多單階段方法號(hào)稱已經(jīng)獲得相當(dāng)或好于兩階段的效果)杈湾。

下面以Faster R-CNN-FPN發(fā)展順序的匯總介紹每個(gè)改進(jìn)的核心思想解虱。

1.1.1 Fast R-CNN

在R-CNN中,CNN只被用來(lái)作為特征抽取毛秘,后接SVM和線性回歸模型分別用于分類和box修正回歸饭寺。在此基礎(chǔ)上阻课,F(xiàn)ast R-CNN直接對(duì)原輸入圖進(jìn)行特征抽取叫挟,然后在整張圖片的特征圖上分別對(duì)每個(gè)RoI使用RoIPooling提取(后面會(huì)介紹RoIPooling的原理)特定長(zhǎng)度的特征向量(論文中空降尺寸為7*7)限煞,去掉SVM和線性回歸模型抹恳,在特征向量上直接使用若干FC層進(jìn)行回歸,然后分別使用兩個(gè)FC分支預(yù)測(cè)RoI相關(guān)的類別和box署驻,從而顯著提升速度和預(yù)測(cè)效果奋献。 整體框架圖如下:

1.1.2 RPN

在Fast RCNN的基礎(chǔ)上進(jìn)一步優(yōu)化,用CNN網(wǎng)絡(luò)代替Fast R-CNN中的region proposal模塊(使用傳統(tǒng)Selective Search方法)旺上,從而實(shí)現(xiàn)了全神經(jīng)網(wǎng)絡(luò)的檢測(cè)方法瓶蚂,在召回和速度上都超過(guò)了傳統(tǒng)的Selective Search。作者將提供proposal region的網(wǎng)絡(luò)稱為RPN(Region Proposal Network)宣吱,與檢測(cè)網(wǎng)絡(luò)Fast RCNN共享同一backbone窃这,大大縮減了推理速度。

RPN在backbone產(chǎn)生的feature map(圖中的conv feature map)之上執(zhí)行n*n的滑窗操作征候,每個(gè)滑窗范圍內(nèi)的feature map會(huì)被映射為多個(gè)proposal box(圖中的reg layer分支)以及每個(gè)box對(duì)應(yīng)是否存在對(duì)象的類別信息(圖中的cls layer分支)杭攻。由于CNN天然就是滑窗操作,所以RPN使用CNN作為窗口內(nèi)特征的提取器(對(duì)應(yīng)圖中的intermediate layer疤坝,后面簡(jiǎn)稱為“新增CNN層”)兆解,窗口大小n=3,將feature map映射為較低維的feature map以節(jié)省計(jì)算量(論文中為256)跑揉。雖然只使用了3*3的卷積锅睛,但是在原圖上的有效的感受野還是很大的,感受野大小不等于網(wǎng)絡(luò)的降采樣率,對(duì)于VGG網(wǎng)絡(luò)现拒,降采樣率為16乖订,但是感受野為228像素。類似于Fast-RCNN具练,為了分別得到box和box對(duì)應(yīng)的類別(此處類別只是表示有沒(méi)有目標(biāo)乍构,不識(shí)別具體類別),CNN操作之后會(huì)分為兩個(gè)子網(wǎng)絡(luò)扛点,它們的輸入都是新增CNN層輸出的feature map哥遮,一個(gè)子網(wǎng)絡(luò)負(fù)責(zé)box回歸,一個(gè)負(fù)責(zé)類別回歸陵究。由于新增CNN層產(chǎn)生的feature map的每個(gè)空間位置的特征(包括通道方向眠饮,shape為1*1*256)都被用來(lái)預(yù)測(cè)映射前窗口對(duì)應(yīng)位置是否存在對(duì)象(類別)和對(duì)象的box,那么使用1*1的CNN進(jìn)行計(jì)算正合適(等效于FC層)铜邮,這便是RPN的做法仪召。綜上所述,所有滑窗位置共享一個(gè)新增CNN層和后續(xù)的分類和box回歸分支網(wǎng)絡(luò)松蒜。下圖是RPN在一個(gè)窗口位置上執(zhí)行計(jì)算的原理示意扔茅。

由于滑窗操作是通過(guò)正方形的CNN卷積實(shí)現(xiàn)的,為了訓(xùn)練網(wǎng)絡(luò)適應(yīng)不同長(zhǎng)寬比和尺寸的對(duì)象秸苗,RPN引入了anchor box的概念召娜。每個(gè)滑窗位置會(huì)預(yù)置k個(gè)anchor box,每個(gè)anchor box的位置便是滑窗的中心點(diǎn)惊楼,k個(gè)anchor box的長(zhǎng)寬比和尺寸不同玖瘸,作者使用了9種,分別是長(zhǎng)寬比為1:2檀咙、1:12:1雅倒,尺寸為128*128, 256*256512*512的9種不同組合。分類分支和box回歸分支會(huì)將新增CNN層輸出的feature map的每個(gè)空間位置的tensor(shape為1*1*256)映射為k個(gè)box和與之對(duì)應(yīng)的類別弧可,假設(shè)每個(gè)位置的anchor box數(shù)量為k(如前所述蔑匣,k=9),則分類分支輸出的特征向量為2k(兩個(gè)類別),box回歸分支輸出為4k(4為box信息侣诺,box中心點(diǎn)x坐標(biāo)殖演、box中心點(diǎn)y坐標(biāo)、box寬w和box高h(yuǎn))年鸳。box分支預(yù)測(cè)的位置(x,y,w,h)都是相對(duì)anchor box的偏移量趴久。從功能上來(lái)看,anchor box的作用有點(diǎn)類似于提供給Fast RCNN的propsal box的作用搔确,也表示目標(biāo)可能出現(xiàn)的位置box彼棍,但是anchor box是均勻采樣的灭忠,而proposal box是通過(guò)特征抽取(或包含訓(xùn)練)回歸得到的座硕。由此可以看出弛作,anchor box與預(yù)測(cè)的box是一一對(duì)應(yīng)的。從后文將會(huì)了解到华匾,通過(guò)anchor box與gt box的IoU的關(guān)系映琳,可以確定每個(gè)預(yù)測(cè)box的正負(fù)樣本類別。通過(guò)監(jiān)督的方式讓特定的box負(fù)責(zé)特定位置蜘拉、特定尺寸和特定長(zhǎng)寬比的對(duì)象萨西,模型就學(xué)會(huì)了擬合不同尺寸和大小的對(duì)象。另外旭旭,由于預(yù)測(cè)的box是相對(duì)anchor box的偏移量谎脯,而anchor box是均勻分布在feature map上的,只有距離和尺寸與gt box接近(IoU較大)的anchor box對(duì)應(yīng)的預(yù)測(cè)box才會(huì)與gt box計(jì)算損失持寄,這大大簡(jiǎn)化了訓(xùn)練源梭,不然會(huì)有大量的預(yù)測(cè)box與gt box計(jì)算損失,尤其是在訓(xùn)練初始階段稍味,當(dāng)一切都是瞎猜的時(shí)候废麻。

1.1.3 Faster R-CNN-ResNet

在Faster RCNN基礎(chǔ)上,將backbone替換為ResNet50或ResNet101仲闽,涉及部分細(xì)節(jié)的改動(dòng)脑溢,我們放在本文的細(xì)節(jié)部分進(jìn)行描述。

1.1.4 FPN

在Faster RCNN-ResNet基礎(chǔ)上赖欣,引入FPN(特征金字塔網(wǎng)絡(luò))模塊,利用CNN網(wǎng)絡(luò)天然的特征金字塔特點(diǎn)验庙,模擬圖像金字塔功能顶吮,使得RPN和Fast RCNN可以在多個(gè)尺度級(jí)別(scale level)的feature map上分別預(yù)測(cè)不同尺寸的對(duì)象,大大提高了Faster RCNN的檢測(cè)能力粪薛。相比圖像金字塔大大節(jié)省了推理時(shí)間悴了。原理如下圖所示:

從上圖中可以看出,F(xiàn)PN并不是簡(jiǎn)單地使用backbone的多個(gè)CNN層輸出的feature map進(jìn)行box回歸和分類违寿,而是將不同層的feature map進(jìn)行了top-down和lateral connection形式的融合后使用湃交。這樣便將CNN網(wǎng)絡(luò)前向傳播(bottom-up)產(chǎn)生的深層語(yǔ)義低分辨率特征與淺層的淺語(yǔ)義高分辨率的特征進(jìn)行融合,從而彌補(bǔ)低層特征語(yǔ)義抽象不足的問(wèn)題藤巢,類似增加上下文信息搞莺。其中,top-down過(guò)程只是簡(jiǎn)單地使用最近鄰插值將低分辨率的feature map上采樣到即將與之融合的下層feature map相同的尺寸(尺寸上采樣到2倍)掂咒,lateral connection則是先將低層的feature map使用1*1的卷積縮放為即將與之融合的上層feature map相同的通道數(shù)(減少計(jì)算量)才沧,然后執(zhí)行像素級(jí)相加迈喉。融合后的feature map不僅會(huì)用于預(yù)測(cè),還會(huì)繼續(xù)沿著top-down方向向下傳播用于下層的特征融合温圆,直到最后一層挨摸。

1.1.5 RoIAlign

mask R-CNN提出的RoI Align緩解了RoIPooling的缺陷,能夠顯著提升小目標(biāo)物體的檢測(cè)能力岁歉。網(wǎng)上介紹RoIPooling和RoIAlign的文章很多得运,此處不再贅述,推薦閱讀個(gè)人覺(jué)得比較好的兩篇博客:RoIPoolingRoIAlign锅移。

此處稍微啰嗦下個(gè)人對(duì)RoIPooling的思考: 為什么RoIPooling不使用自適應(yīng)的池化操作澈圈,即根據(jù)輸入的feature map的尺寸和希望輸出的feature map尺寸,自動(dòng)調(diào)整池化窗口的大小和步長(zhǎng)以計(jì)算想要尺寸的feature map帆啃,類似于自適應(yīng)池化操作瞬女,而不是將輸入的feature map劃分成均勻的小區(qū)域(bins,論文中劃分為7*7個(gè)bins)努潘,然后每個(gè)小區(qū)域中分別計(jì)算MaxPooling诽偷。不管計(jì)算上是否高效,至少這種做法在輸入的feature map尺寸(比如2*2)小于期望的輸出feature map尺寸(比如7*7)時(shí)會(huì)失效疯坤,因?yàn)樵?*3的feature map上如果不使用padding的話是無(wú)法得到7*7的特征的报慕,而使用padding又是很低效的操作,因?yàn)橐獢U(kuò)展局部feature map的尺寸压怠,而使用劃分bins的方法眠冈,即使輸出的feature map尺寸遠(yuǎn)小于要輸出的feature map尺寸,也僅僅是在同一位置采樣多次而已菌瘫。

1.2 anchor的思想

本人之前介紹YOLOv3的文章也介紹過(guò)anchor box的作用蜗顽,再加上本文1.1.2節(jié)中的介紹應(yīng)該比較全面了,不再贅述雨让。

2.實(shí)現(xiàn)細(xì)節(jié)

此處的絕大部分細(xì)節(jié)來(lái)自論文雇盖,論文中未提及的部分,主要參考了mmdetection中的實(shí)現(xiàn)栖忠。

2.1 網(wǎng)絡(luò)結(jié)構(gòu)

整個(gè)模型的網(wǎng)絡(luò)結(jié)構(gòu)可以劃分為四個(gè)部分崔挖,分別為backbone、FPN庵寞、RPN head和Fast RCNN head狸相。

  1. backbone與Faster RCNN-ResNet相同,為ResNet系列(論文中實(shí)驗(yàn)時(shí)的網(wǎng)絡(luò))捐川;RPN和Fast RCNN使用的feature map原始多尺度f(wàn)eature map分別來(lái)自ResNet中的C2脓鹃、C3、C4属拾、C5階段将谊,即分別來(lái)自conv2_x冷溶、conv3_x、conv4_x和conv5_x階段的輸出尊浓。ResNet系列的結(jié)構(gòu)如下表所示逞频。
  1. FPN的結(jié)構(gòu)如1.1.4節(jié)的描述,次上層feature map(對(duì)應(yīng)為P5栋齿,見(jiàn)2.2中的FPN部分描述)的產(chǎn)生是通過(guò)在C5上執(zhí)行一個(gè)1*1*256的卷積得到苗胀,lateral connection的卷積核大小為1*1*256。輸出的feature map是在融合后(逐像素相加)的基礎(chǔ)上再執(zhí)行3*3卷積得到瓦堵。具體的示例如下圖基协,其中Up表示最近鄰上采樣,Down為MaxPooling操作 降采樣 菇用,圖中給出了每個(gè)feature map的維度澜驮,B為batch size,H和W分別為網(wǎng)絡(luò)輸入的圖片的高和寬惋鸥。
  1. RPN head操作是在多個(gè)尺寸不同的feature map上執(zhí)行滑窗操作杂穷,滑窗由3*3的卷積核實(shí)現(xiàn),之后直接連接兩個(gè)1*1卷積分支)卦绣,所有feature map共用同一RPN head耐量。具體如下圖所示,圖中也給出了每個(gè)feature map的維度滤港,B為batch size廊蜒,k為每個(gè)滑窗位置的anchor box數(shù)量,H和W分別為網(wǎng)絡(luò)輸入的圖片的高和寬溅漾。
  1. Fast RCNN head不同于Faster RCNN-ResNet的Fast RCNN head山叮,由于FPN直接使用了ResNet backbone的C5 feature map,所以conv5_x被挪回backbone中樟凄,F(xiàn)ast RCNN head直接在不同層的feature map上執(zhí)行RoIPooling或RoIAlign抽取7*7的feature map聘芜,依次輸入給兩個(gè)FC層(后接ReLU),最后兩個(gè)FC分支(后接ReLU)缝龄,然后輸入給類別和box回歸的輸出層。具體如下圖所示挂谍,圖中也給出了每個(gè)feature map的維度叔壤,B為batch size,C為類別數(shù)量口叙,H和W分別為網(wǎng)絡(luò)輸入的圖片的高和寬炼绘。

2.2 輸入/輸出

1.backbone: 原圖短邊被resize到800像素,這里值得注意的是妄田,如此resize后一個(gè)batch內(nèi)的每張圖片的大小很有可能并不一致俺亮,所以還無(wú)法合并為一個(gè)輸入矩陣驮捍,普遍的做法是將batch內(nèi)的每張圖片的左上角對(duì)齊,然后計(jì)算resize后batch內(nèi)所有圖片的最大寬和高脚曾,最后按照最大寬或高分別對(duì)每張圖片的寬或高進(jìn)行0值padding东且;輸出為4個(gè)不同尺寸的feature map(C2、C3本讥、C4珊泳、C5)。

2.FPN: ResNet backbone產(chǎn)生的4個(gè)不同尺寸的feature map(C2拷沸、C3色查、C4、C5)作為輸入撞芍,輸出5個(gè)不同尺寸的feature map(P2秧了、P3、P4序无、P5验毡、P6),P6是對(duì)P5進(jìn)行2倍降采樣得到愉镰,每個(gè)feature map的通道數(shù)為固定的256米罚;使用P6的原因是為了預(yù)測(cè)更大尺寸的對(duì)象。

3.RPN:輸入為FPN產(chǎn)生的feature map(P2丈探、P3录择、P4、P5碗降、P6)隘竭;由于RPN是在5個(gè)輸入feature map上進(jìn)行獨(dú)立的預(yù)測(cè),則每個(gè)feature map都會(huì)輸出 proposal box讼渊,因此不可能將所有的proposal box都提供給Fast R-CNN动看,這里的做法是對(duì)每個(gè)feature map上產(chǎn)生的proposal box按類別概率進(jìn)行排序(每個(gè)feature map上的proposal box獨(dú)立進(jìn)行),然后選擇前k個(gè)proposal box爪幻, 5個(gè)feature map一共會(huì) 產(chǎn)生5*k個(gè)proposal box菱皆,訓(xùn)練時(shí)k=2000,推理時(shí)k=1000挨稿。最后仇轻,將所有的5*k個(gè)proposal box合并后統(tǒng)一進(jìn)行NMS(IoU threshold=0.7)去掉冗余的box,最后選擇前m個(gè)輸出給Fast R-CNN奶甘,訓(xùn)練和測(cè)試時(shí)m都取1000篷店。

訓(xùn)練時(shí)將gt box通過(guò)下面的公式轉(zhuǎn)換為相對(duì)anchor box的偏移值,與網(wǎng)絡(luò)的預(yù)測(cè)計(jì)算loss臭家,至于將每個(gè)gt與具體的哪個(gè)anchor box計(jì)算偏移疲陕,則需要根據(jù)2.3.1節(jié)中的正負(fù)樣本方法來(lái)確定方淤。測(cè)試時(shí)將預(yù)測(cè)的box通過(guò)該公式中的逆運(yùn)算計(jì)算出當(dāng)前box相對(duì)原圖的位置和大小,x^*蹄殃,y^*, w^*携茂,h^*指相對(duì)全圖的box中心點(diǎn)坐標(biāo)以及寬和高,x_a窃爷,y_a, w_a邑蒋,h_a指每個(gè)anchor相對(duì)全圖的box中心點(diǎn)坐標(biāo)以及寬和高。由此可以看出按厘,box回歸分支直接預(yù)測(cè)的便是相對(duì)anchor的偏移值医吊,即公式中的t^*_xt^*_y逮京、t^*_wt^*_h卿堂。

以上提到的2000和1000是作為Fast R-CNN的輸入proposal box,在訓(xùn)練時(shí)參與RPN loss計(jì)算的anchor boxs數(shù)量為256個(gè)懒棉,正負(fù)樣本數(shù)量為1:1草描,正樣本不足128的用負(fù)樣本補(bǔ)足。這里的256是從所有feature map中的anchor box中選擇的策严,并非每個(gè)feature map都獨(dú)立取得256個(gè)正負(fù)樣本穗慕。這也是合理的,因?yàn)槊總€(gè)gt box由于尺寸的原因妻导,幾乎不可能與所有feature map上的anchor box的IoU都大于一定的閾值(原因參考2.3.1節(jié))逛绵。注意選擇前并未進(jìn)行NMS處理,而是直接根據(jù)2.3.1節(jié)中確定正負(fù)樣本的方式確定每個(gè)預(yù)測(cè)box正負(fù)類別倔韭,然后分別在正樣本中隨機(jī)選擇128個(gè)正樣本术浪,在負(fù)樣本中隨機(jī)選擇128個(gè)負(fù)樣本。

4.Fast R-CNN:輸入為FPN產(chǎn)生的前4個(gè)feature map和RPN輸出的proposal box寿酌,4個(gè)feature map為P2胰苏、P3、P4、P5,與backbone對(duì)應(yīng)观蓄,不使用P6。那么鲤孵,如何確定在哪個(gè)feature map上執(zhí)行每個(gè)proposal box對(duì)應(yīng)的RoIAlign操作并得到7*7大大小的feature map呢?論文中的做法是通過(guò)下面的公式將特定尺寸的proposal box與FPN產(chǎn)生的4個(gè)feature map中尺寸最適合的對(duì)應(yīng)起來(lái)辰如,即讓感受野更接近對(duì)象尺寸的feature map預(yù)測(cè)該對(duì)象 ,其中224為backbone在ImageNet上預(yù)訓(xùn)練的尺寸贵试,w和h為proposal box的長(zhǎng)和寬琉兜,k表示適合尺寸為w和h的propsal box的feature map的位置凯正,即4個(gè)feature map為P2、P3豌蟋、P4廊散、P5的下標(biāo),k_0為proposal box大致為224*224時(shí)對(duì)應(yīng)feature map位置值(k_0=4)梧疲,表示proposal box大致為224*224時(shí)在P4上執(zhí)行RoIAlign允睹,小于224*224時(shí),在P2或P3上執(zhí)行幌氮,大于則在P5上缭受。

網(wǎng)絡(luò)都會(huì)針對(duì)每個(gè)RoI會(huì)輸出一個(gè)類別概率分布(包括背景類別)和一個(gè)相對(duì)RoI box的長(zhǎng)度為4的box偏移向量。概率分支由softmax激活函數(shù)得到该互。與RPN的類似米者,訓(xùn)練時(shí),如2.4.2節(jié)loss計(jì)算中所述宇智,會(huì)將gt box通過(guò)下面的公式轉(zhuǎn)換為相對(duì)proposal box(前提是該RoI是正樣本)的偏移量蔓搞,然后使用loss計(jì)算公式直接與預(yù)測(cè)的相對(duì)偏移量進(jìn)行l(wèi)oss計(jì)算;測(cè)試時(shí)随橘,會(huì)通過(guò)下列公式的逆運(yùn)算將偏移值換算回相對(duì)原圖的位置box喂分,然后使用NMS去掉冗余的box,最終輸出机蔗。

訓(xùn)練時(shí)蒲祈,通過(guò)2.3.2中的方式確定每個(gè)proposal box屬于正樣本或負(fù)樣本后,隨機(jī)選擇512個(gè)樣本蜒车,其中正負(fù)比例為1:3進(jìn)行l(wèi)oss計(jì)算讳嘱,正樣本不足的由負(fù)樣本補(bǔ)足。

2.3 正負(fù)樣本

2.3.1 RPN的正負(fù)樣本

在RPN中酿愧,由于每個(gè)feature map的每個(gè)滑窗位置上的張量(3*3*C維張量沥潭,C為feature map的通道數(shù))會(huì)被用來(lái)預(yù)測(cè)k個(gè)box和每個(gè)box對(duì)應(yīng)的類別概率,那么具體哪個(gè)box才能參與gt box的損失計(jì)算(包括類別和box回歸損失)嬉挡?這便需要在所有預(yù)測(cè)的box中確定正負(fù)樣本钝鸽,因?yàn)橐粋€(gè)anchor對(duì)應(yīng)一個(gè)預(yù)測(cè)的box和類別,那么確定預(yù)測(cè)的box是正例還是負(fù)例等價(jià)于確定anchor box的是正例還是反例庞钢。為了便于訓(xùn)練拔恰,RPN中使用雙IoU閾值的方式確定正負(fù)樣本,與gt box的IoU為最大或者大于0.7的anchor box被設(shè)置為正樣本基括,這會(huì)導(dǎo)致一個(gè)gt box與多個(gè)預(yù)測(cè)box計(jì)算損失颜懊,即允許多個(gè)box預(yù)測(cè)同一對(duì)象,與gt box的IoU小于0.3的anchor box被設(shè)置為負(fù)樣本,其余的忽略掉河爹,即不參與loss計(jì)算匠璧。在此基礎(chǔ)上,如2.2節(jié)中所述咸这,會(huì)對(duì)正負(fù)樣本進(jìn)行隨機(jī)采樣夷恍,總數(shù)為256,其他不參與損失函數(shù)計(jì)算媳维。

2.3.2 Fast RCNN的正負(fù)樣本

與gt box的IoU大于0.5的proposal box作為正樣本酿雪,注意,是將proposal box與gt box計(jì)算IoU侄刽,F(xiàn)ast-RCNN中的proposal box的作用與anchor box有些類似指黎,即確定正負(fù)樣本和預(yù)測(cè)的box 都是針對(duì)它們的偏移值 ,其余IoU在[0.1, 0.5)之間的作為負(fù)樣本唠梨,低于0.1的作為難例挖掘時(shí)的啟發(fā)式樣本(mmdetection中的做法是單閾值方式袋励,與gt box的IoU大于0.5的proposal box作為正樣本,小于的都是負(fù)樣本)当叭。

2.4 損失函數(shù)

Faster R-CNN中是以分步的方式聯(lián)合訓(xùn)練RPN和Fast R-CNN茬故,大致的過(guò)程為:

  1. backbone使用ImageNet預(yù)訓(xùn)練模型初始化后訓(xùn)練RPN,新增的Head 卷積層隨機(jī)初始化蚁鳖;

  2. 使用第1步RPN產(chǎn)生的proposal box, backbone使用ImageNet預(yù)訓(xùn)練模型初始化后訓(xùn)練Fast R-CNN磺芭,新增的Head 全連接層隨機(jī)初始化;

  3. 使用第2步訓(xùn)練的模型初始化RPN的backbone醉箕,并且固定backbone參數(shù)不進(jìn)行訓(xùn)練钾腺,對(duì)RPN新增的Head 卷積層進(jìn)行微調(diào),這一步開(kāi)始RPN和Fast R-CNN共享同一backbone參數(shù)讥裤;

  4. 最后也固定Fast R-CNN的backbone放棒,微調(diào)Fast R-CNN新增的Head全連接層。

但在mmdetection中己英,已經(jīng)將RPN和Fast R-CNN的loss進(jìn)行權(quán)重加和间螟,從而進(jìn)行聯(lián)合訓(xùn)練,訓(xùn)練流程簡(jiǎn)化很多损肛,且能夠達(dá)到相同的效果厢破。

2.4.1 RPN的損失函數(shù)

確定了每個(gè)預(yù)測(cè)box或anchor box的正負(fù)類別后,便可以計(jì)算損失函數(shù)了治拿,類似于Fast RCNN的做法摩泪,只有正樣本的box才會(huì)參與box損失計(jì)算,損失函數(shù)如下:

L_{cls}為類別損失為類別損失函數(shù)劫谅,使用交叉熵?fù)p失见坑,L_{reg}為box回歸損失嚷掠,使用smooth L1損失,論文中平衡因子lambda為10鳄梅。p_i^*表示第i個(gè)anchor box對(duì)應(yīng)的gt 類別(背景為0叠国,對(duì)象為1),t_i^*為gt box相對(duì)anchor box的偏移量(如果該anchor box被確定為正樣本)戴尸,通過(guò)下面的公式計(jì)算得到,p_i^*L_{reg}(t_i, t_i^*)即表示只有p_i=1冤狡,即為正樣本時(shí)才會(huì)計(jì)算box的損失孙蒙。

2.4.2 Fast R-CNN的損失函數(shù)

Fast R-CNN的loss類似于RPN,只有proposal box為非背景類別(正樣本)時(shí)才計(jì)算box損失悲雳,L_{cls}為類別損失挎峦,L_{loc}為box損失,[u>=1]表示proposal box的類別>=1合瓢,類別=0時(shí)表示背景(通過(guò)2.3.2的方式確定proposal box的類別)坦胶。\lambda為平衡因子,作者所有實(shí)驗(yàn)中\lambda=1晴楔。為了防止box回歸的L2 loss放大噪聲(異常loss)從而影響訓(xùn)練顿苇,作者將L2 loss修改為smooth_{L1} loss,當(dāng)box尺寸的差異較大時(shí)使用L1 loss税弃,抑制異常值對(duì)梯度的貢獻(xiàn)纪岁。

其中v是通過(guò)下面的公式將gt box(G_x, G_y, G_w, G_h)轉(zhuǎn)換得到,其中则果,(P_x, P_y, P_w, P_h)為proposal box的在原圖中的中心點(diǎn)坐標(biāo)和寬與高幔翰。

2.5 Anchor box設(shè)計(jì)

在Faster R-CNN和Faster R-CNN-ResNet中,由于RPN只是在單尺寸的feature map上進(jìn)行滑窗西壮,為了緩解多尺寸的問(wèn)題遗增,每個(gè)滑窗位置會(huì)設(shè)計(jì)多個(gè)尺寸的anchor,但是在Faster R-CNN-FPN中使用了FPN款青,則天然就具有了適應(yīng)對(duì)象多尺寸的問(wèn)題做修,因此不用再為每個(gè)滑窗設(shè)計(jì)多個(gè)尺寸的anchor。即在Faster RCNN-FPN中可都,為每種尺寸feature map上的滑窗只設(shè)計(jì)了單一尺寸多種長(zhǎng)寬比的anchor缓待,長(zhǎng)寬比有1:21:12:1渠牲,不同feature map上anchor的尺寸為:32*32, 64*64, 128*128, 256*256512*512旋炒,依次對(duì)應(yīng)P2、P3签杈、P4瘫镇、P5和P6鼎兽。

2.6 訓(xùn)練細(xì)節(jié)

COCO上的訓(xùn)練細(xì)節(jié):RPN的weight decay為0.0001,SGD的mometum=0.9铣除,初始學(xué)習(xí)率為0.002谚咬,學(xué)習(xí)率調(diào)整使用step decay方式。

3. 參考文獻(xiàn)

  1. RoIPooling: https://towardsdatascience.com/understanding-region-of-interest-part-1-roi-pooling-e4f5dd65bb44

  2. RoIAlign: https://towardsdatascience.com/understanding-region-of-interest-part-2-roi-align-and-roi-warp-f795196fc193

  3. Fast R-CNN

  4. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

  5. Feature Pyramid Networks for Object Detection

  6. Mask R-CNN

  7. Deep residual learning for image recognition

  8. mmdetection: https://github.com/open-mmlab/mmdetection

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尚粘,一起剝皮案震驚了整個(gè)濱河市择卦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郎嫁,老刑警劉巖秉继,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異泽铛,居然都是意外死亡尚辑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門盔腔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杠茬,“玉大人,你說(shuō)我怎么就攤上這事弛随∑昂恚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵撵幽,是天一觀的道長(zhǎng)灯荧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)盐杂,這世上最難降的妖魔是什么逗载? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮链烈,結(jié)果婚禮上厉斟,老公的妹妹穿的比我還像新娘。我一直安慰自己强衡,他們只是感情好擦秽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著漩勤,像睡著了一般感挥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上越败,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天触幼,我揣著相機(jī)與錄音,去河邊找鬼究飞。 笑死置谦,一個(gè)胖子當(dāng)著我的面吹牛堂鲤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播媒峡,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瘟栖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谅阿?” 一聲冷哼從身側(cè)響起半哟,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奔穿,沒(méi)想到半個(gè)月后镜沽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贱田,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘴脾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片男摧。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖译打,靈堂內(nèi)的尸體忽然破棺而出耗拓,到底是詐尸還是另有隱情,我是刑警寧澤奏司,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布乔询,位于F島的核電站,受9級(jí)特大地震影響韵洋,放射性物質(zhì)發(fā)生泄漏竿刁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一搪缨、第九天 我趴在偏房一處隱蔽的房頂上張望食拜。 院中可真熱鬧,春花似錦副编、人聲如沸负甸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呻待。三九已至,卻和暖如春队腐,著一層夾襖步出監(jiān)牢的瞬間蚕捉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工香到, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鱼冀,地道東北人报破。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像千绪,于是被迫代替她去往敵國(guó)和親充易。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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