寫在最前面潮尝,本文大部分內(nèi)容來自Fast R-CNN-曉雷的文章
在R-CNN中,Ross Girshick提出使用卷積網(wǎng)絡(luò)來替代傳統(tǒng)的提取圖像特征的方法鲫售,大大提高了目標檢測的性能佑惠。而在Fast R-CNN中,Ross Girshick大神繼續(xù)提出改進腻扇,利用一個網(wǎng)絡(luò)的多任務(wù)學(xué)習(xí)不僅將R-CNN中的三段式系統(tǒng)(即提取候選框特征,SVM分類砾嫉,候選框坐標精修)合在了一個網(wǎng)絡(luò)中幼苛,還借鑒SPPnet的思想,共享同一張圖片的卷積計算焰枢,大大縮短了檢測時間蚓峦。而在Faster R-CNN中,針對R-CNN济锄、Fast R-CNN中留下來的問題,同時也是Fast R-CNN檢測時間限制的瓶頸所在——如何獲取候選框(region proposals)霍转。Shaoqing Ren提出了一個專門尋找候選框的網(wǎng)絡(luò)RPN(region proposals Network)荐绝,并將其與Fast R-CNN中的檢測網(wǎng)絡(luò)整合在一起,最后形成了一個端到端的檢測網(wǎng)絡(luò)避消。在本篇將對Faster R-CNN作簡單的介紹低滩。
Region Proposal Networks (RPN)
關(guān)于候選框(region proposal bounding boxes)生成有很多現(xiàn)成的算法召夹,廣泛使用的候選框生成算法包括基于超像素分組(如選擇性搜索,CPMC恕沫,MCG)和那些基于滑動窗口的方法(如EdgeBoxes)监憎。但是目前候選框生成基本都是獨立于目標檢測器的一個獨立模塊(R-CNN和Fast R-CNN中的選擇性搜索生成候選框都是獨立于檢測部分存在的)。
在Faster R-CNN中婶溯,作者提出了一個一體化的端到端的目標檢測網(wǎng)絡(luò)鲸阔。這個網(wǎng)絡(luò)主要包括兩部分,第一個是生成目標候選框的全卷積網(wǎng)絡(luò)(RPN)迄委,另一部分是與Fast R-CNN中相同的檢測網(wǎng)絡(luò)褐筛,其中RPN和檢測網(wǎng)絡(luò)部分可以共享網(wǎng)絡(luò)前面的卷積計算。如下圖所示:
RPN借鑒了SPPnet 的空間金字塔池化和Fast R-CNN Roi池化中從feature map上直接生成候選框的方法叙身。先通過對應(yīng)關(guān)系(高維)feature map的點映射回原圖上(參看:原始圖片中的ROI如何映射到到feature map?)渔扎,在每一個對應(yīng)的原圖設(shè)計不同的anchor box,訓(xùn)練RPN時根據(jù)anchor box與ground truth的IoU給它正負標簽信轿,進行學(xué)習(xí)晃痴。
生成anchor boxes
由于我們只需要找出大致的地方,無論是精確定位位置還是尺寸财忽,后面的工作都可以完成愧旦,作者對bbox做了三個固定:固定尺度變化(三種尺度),固定scale ratio變化(三種ratio)定罢,固定采樣方式(只在feature map的每個點在原圖中的對應(yīng)ROI上采樣笤虫,反正后面的工作能進行調(diào)整) 。如此就可以降低任務(wù)復(fù)雜度祖凫。
可以在特征圖上提取proposal之后琼蚯,網(wǎng)絡(luò)前面就可以共享卷積計算結(jié)果(SPP減少計算量的思想)。這個網(wǎng)絡(luò)的結(jié)果就是卷積層的每個點都有有關(guān)于k個achor boxes的輸出惠况,包括是不是物體遭庶,調(diào)整box相應(yīng)的位置。具體過程:
- 得到最終用來預(yù)測的feature map:圖片在輸入網(wǎng)絡(luò)后稠屠,經(jīng)過一系列的卷積核池化后峦睡,最后會得到一個feature map,無論是SPPnet還是Fast R-CNN都是從這個feature map上來提取proposal的权埠;
- 計算anchor boxes:在feature map上進行滑窗(sliding window)榨了,文章滑窗的大小是3x3,將這3x3的滑窗的中心作為anchor box的中心攘蔽,圍繞這個中心選取k個不同scale龙屉、aspect ratio的anchor boxes。論文中使用了3個scale(3種面積{128x128, 256x256满俗,512x512})转捕,3個縱橫比(aspect ratio){1:1, 1:2, 2:1}作岖,即每次滑動產(chǎn)生9個anchor boxes。
多尺度預(yù)測主要有兩種方法:第一種方法是基于圖像/特征金字塔五芝,圖像在多個尺度上進行縮放痘儡,并針對每個尺度計算特征映射。這種方法通常是有效的枢步,但也是非常耗時的沉删。第二種方法是在特征映射上使用多尺度(和/或長寬比)的滑動窗口,如DPM使用不同的濾波器大屑叟酢(如7x5和5x7)分別對不同長寬比的模型進行訓(xùn)練丑念。如果使用這種方法來解決多尺度問題,可以將其看作是一個‘濾波器金字塔’结蟋。第二種方法通常和第一種方法聯(lián)合使用脯倚。
而文章中基于錨點(anchor)建立的錨點金字塔更加高效。該方法參照多尺度和長寬比的anchor boxes來分類和回歸邊界框嵌屎。它只依賴單一尺度的圖像和特征映射推正,并使用單一尺寸的濾波器(特征映射上的滑動窗口)。實驗結(jié)果顯示這種解決多尺度和尺寸的方法是非常有效的宝惰。
注意:
- 在到達全連接層之前植榕,卷積層和Pooling層對圖片輸入大小其實沒有size的限制,因此RCNN系列的網(wǎng)絡(luò)模型其實是不需要實現(xiàn)把圖片resize到固定大小的尼夺;
- n=3看起來很小尊残,但是要考慮到這是非常高層的feature map,其size本身也沒有多大淤堵,因此 3×33×3 9個矩形中寝衫,每個矩形窗框都是可以感知到很大范圍的。
關(guān)于RPN訓(xùn)練時正負樣本的劃分
考察訓(xùn)練集中的每張圖像的所有anchor box和ground truth的關(guān)系:
- a. 對每個標定的ground truth區(qū)域拐邪,與其重疊比例最大的anchor box記為正樣本(確保每個ground truth至少對應(yīng)一個正樣本anchor)慰毅;
- b. 對于(a)中剩余的anchor,如果與其某個標定區(qū)域重疊比例大于0.7扎阶,記為正樣本(每個ground true box可能會對應(yīng)多個正樣本anchor汹胃。但每個正樣本anchor 只可能對應(yīng)一個grand true box);如果其與任意一個標定的重疊比例都小于0.3东臀,記為負樣本着饥。
- c. 對于(a)(b)剩余的anchor,棄去不用啡邑;
-
d. 跨越圖像邊界的anchor棄去不用贱勃。
圖片來自https://zhuanlan.zhihu.com/p/24916624
RPN損失函數(shù)
對于每個anchor,首先在后面接上一個二分類softmax谤逼,有2個score輸出對這個anchor box是否包含物體的概率進行打分(pi)贵扰,然后再接上一個bounding box的regressor輸出代表這個anchor的4個位置(ti),因此RPN的總體loss函數(shù)可以定義為
loss第二項前面的系數(shù)p*i 表示這些regressor的loss指針對正樣本而言流部,因為負樣本時其概率為該項被消去戚绕。
其中i表示第i個anchor,當anchor是正樣本時p*i =1 枝冀,是負樣本則為0 舞丛。t*i =1表示 一個與正樣本anchor 相關(guān)的ground true box 坐標 (每個正樣本anchor 只可能對應(yīng)一個ground true box: 一個正樣本anchor 與某個grand true box對應(yīng),那么該anchor與ground true box 的IOU要么是所有anchor中最大果漾,要么大于0.7);
x,y,w,h分別表示box的中心坐標和寬高球切,x, xa, t*i 分別表示 predicted box, anchor box, and ground truth box (y,w,h同理)。ti表示predict box相對于anchor box的偏移绒障, t*i表示ground true box相對于anchor box的偏移吨凑,學(xué)習(xí)目標自然就是讓前者接近后者的值。
其中Lreg是:
RPN訓(xùn)練
如果對每幅圖的所有anchor都去優(yōu)化loss function户辱,那么最終會因為負樣本過多導(dǎo)致最終得到的模型對正樣本預(yù)測準確率很低鸵钝。因此,在每幅圖像中隨機采樣256個anchor boxes去參與計算一次mini-batch的損失庐镐。正負比例1:1(若正樣本不足128個則以負樣本作為補充)
RPN和Fast R-CNN共享特征
在上面已經(jīng)解決了如何使用卷積網(wǎng)絡(luò)來生成region proposals恩商,但是上面進行訓(xùn)練的時候是單獨的RPN進行訓(xùn)練的,還沒有將RPN與Fast R-CNN的檢測網(wǎng)絡(luò)結(jié)合起來必逆。如何將這兩個網(wǎng)絡(luò)結(jié)合起來并使其共享前面的特征計算層是一個非常關(guān)鍵的問題怠堪。下面我們來看看如何將這兩個網(wǎng)絡(luò)合并起來訓(xùn)練使其共享圖像特征的卷積計算。文中提出了三種方式:
1名眉、Alternating training
此方法其實就是一個不斷迭代的訓(xùn)練過程粟矿,既然分別訓(xùn)練RPN和Fast-RCNN可能讓網(wǎng)絡(luò)朝不同的方向收斂,a)那么我們可以先獨立訓(xùn)練RPN璧针,然后用這個RPN的網(wǎng)絡(luò)權(quán)重對Fast-RCNN網(wǎng)絡(luò)進行初始化并且用之前RPN輸出proposal作為此時Fast-RCNN的輸入訓(xùn)練Fast R-CNN嚷炉。b) 用Fast R-CNN的網(wǎng)絡(luò)參數(shù)去初始化RPN。之后不斷迭代這個過程探橱,即循環(huán)訓(xùn)練RPN申屹、Fast-RCNN。在本文中使用的訓(xùn)練方法就是基于這個迭代訓(xùn)練隧膏。
2哗讥、Approximate joint training
這里與前一種方法不同,不再是串行訓(xùn)練RPN和Fast-RCNN胞枕,而是嘗試把二者融入到一個網(wǎng)絡(luò)內(nèi)杆煞,具體融合的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,可以看到,proposals是由中間的RPN層輸出的决乎,而不是從網(wǎng)絡(luò)外部得到队询。需要注意的一點,名字中的"approximate"是因為反向傳播階段RPN產(chǎn)生的cls score能夠獲得梯度用以更新參數(shù)构诚,但是proposal的坐標預(yù)測則直接把梯度舍棄了蚌斩,這樣使得該網(wǎng)絡(luò)反向傳播時只能得到一個近似解,但是這種方式相對于Alternating training減少了25-50%的訓(xùn)練時間范嘱。
3送膳、Non-approximate training
上面的Approximate joint training把proposal的坐標預(yù)測梯度直接舍棄,所以被稱作approximate丑蛤,那么理論上如果不舍棄是不是能更好的提升RPN部分網(wǎng)絡(luò)的性能呢叠聋?作者把這種訓(xùn)練方式稱為“ Non-approximate joint training”。在本文中作者只提及但并沒有實現(xiàn)這種方法受裹。
雖然提到了3中可能的方法碌补,但是作者實際用的其實是一個4步訓(xùn)練法,思路與Alternating training類似名斟,但是細節(jié)略有差別:
- 第一步:使用ImageNet預(yù)訓(xùn)練模型初始化訓(xùn)練一個RPN網(wǎng)絡(luò)脑慧;
- 第二步:依然使用ImageNet預(yù)訓(xùn)練模型初始化來訓(xùn)練Fast R-CNN檢測網(wǎng)絡(luò),但是此時的輸入是RPN網(wǎng)絡(luò)產(chǎn)生的region proposals砰盐,到這里我們訓(xùn)練了兩個網(wǎng)絡(luò)——RPN網(wǎng)絡(luò)和Fast R-CNN檢測網(wǎng)絡(luò)闷袒,這兩個網(wǎng)絡(luò)現(xiàn)在參數(shù)不共享;
- 第三步:使用第二步的Fast R-CNN網(wǎng)絡(luò)參數(shù)來初始化一個新的RPN模型岩梳,但在這里把RPN囊骤、Fast R-CNN共享的卷積層的學(xué)習(xí)率設(shè)置為0,即不更新這些共享網(wǎng)絡(luò)層冀值。這一步僅更新RPN特有的那些網(wǎng)絡(luò)層也物。這一步訓(xùn)練完,這個時候這個一體化模型中RPN和Fast R-CNN的前面卷積部分已經(jīng)實現(xiàn)了參數(shù)共享列疗;
- 第四步:仍然將兩個網(wǎng)絡(luò)的共享層進行固定滑蚯,fine-tune Fast R-CNN特有的網(wǎng)絡(luò)層。至此抵栈,一個包含region proposal生成和Fast R-CNN檢測兩部分的一體化網(wǎng)絡(luò)已經(jīng)形成告材。
-
類似的交替訓(xùn)練可以運行更多的迭代。
圖片來自https://zhuanlan.zhihu.com/p/24916624
實驗結(jié)果
作者在多個數(shù)據(jù)集上進行測試古劲,檢測RPN即文中提出的一體化網(wǎng)絡(luò)的有效性斥赋,結(jié)果當然是好,不然也沒必要發(fā)出來了产艾。
總結(jié)
最后做一個簡單的總結(jié)疤剑,在這篇文章總其實一共僅做了兩件事滑绒,但這兩件事都是非常關(guān)鍵的,他使得目標檢測的速度得到了幾乎上百倍的加速同時還沒有降低檢測的性能隘膘。
1疑故、提出了RPN網(wǎng)絡(luò),這個網(wǎng)絡(luò)與Fast R-CNN共享前面圖像特征的卷積計算棘幸。其在最后feature map上生成映射到原圖的anchor boxes焰扳,這些anchor boxes還有效的解決了多尺度問題(通過多尺度anchor box)倦零;
2误续、將RPN網(wǎng)絡(luò)與Fast R-CNN結(jié)合在一起形成一個unified Network(通過文中的4步法進行訓(xùn)練),真正實現(xiàn)了端到端的目標檢測扫茅。
雖說到這里是對Faster R-CNN有了一個簡單的了解蹋嵌,但對其中的細節(jié)還是沒有理解,譬如RPN提出的anchor box是如何傳給Fast R-CNN的葫隙,這些實現(xiàn)細節(jié)還需要慢慢琢磨栽烂。
參考:
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun.
Fast R-CNN-曉雷的文章
Faster R-CNN論文翻譯——中英文對照