本文是何凱明大神他們組的faster rcnn文章

上圖是faster RCNN一系列文章的發(fā)展歷程與區(qū)別,從fast RCNN到faster RCNN主要區(qū)別就是建議框生成算法由SS變成了RPN,另外整個網(wǎng)絡(luò)變成了一個整體的結(jié)構(gòu),使得算法進(jìn)一步加快。
Faster RCNN的模型結(jié)構(gòu)圖如下圖所示,RPN網(wǎng)絡(luò)與檢測網(wǎng)絡(luò)共享卷積層,目標(biāo)檢測的四個基本步驟(候選區(qū)域生成,特征提取,分類,位置精修)被統(tǒng)一到一個深度網(wǎng)絡(luò)框架之內(nèi),實現(xiàn)了端對端的檢測框架,大大提高了運行速度。

Faster RCNN可以簡單地看做“區(qū)域生成網(wǎng)絡(luò)+fast RCNN“的系統(tǒng),用區(qū)域生成網(wǎng)絡(luò)代替fast RCNN中的Selective Search方法。所以本文著重介紹了RPN的相關(guān)內(nèi)容。
RPN是全卷積神經(jīng)網(wǎng)絡(luò),用于提取候選框。之前的共享卷積層用ZF net,所以輸入一個224*224的圖像,經(jīng)過卷積層特征提取變成51*39*256的特征圖,其中256為通道數(shù)。RPN的作用就是將51*39*256的特征圖輸出建議框。而建議框的生成方式就是在共享的卷積層上進(jìn)行小窗口(n*n)滑動,也就是一個n*n的卷積層,然后映射到256維的向量上,接著這個向量被喂給兩個同級的全連接網(wǎng)絡(luò)b box的回歸和分類網(wǎng)絡(luò),全連接網(wǎng)絡(luò)用1*1的卷積層實現(xiàn),所以RPN網(wǎng)絡(luò)是全卷積網(wǎng)絡(luò)實現(xiàn)。

在RPN小窗口滑動時,每個中心作為anchor的中心,以3種尺度和三種長寬比生成3*3=9個anchor,而b box的回歸層就是所有anchor的位置參數(shù)(4k,x,y,w,h),分類層的輸出就是對每個建議框是目標(biāo)/非目標(biāo)的估計概率(2k,p1,p2)。Anchor擁有平移不變性,所以RPN所需要的參數(shù)非常少,減少過擬合的可能。
為了給每個anchor分配一個二分類的標(biāo)簽(是否是目標(biāo)),作者定義正標(biāo)簽為兩類(i)與某個ground truth(GT)包圍盒有最高IoU重疊的anchor(也許不到0.7),(ii)與任意GT包圍盒有大于0.7的IoU交疊的anchor。定義負(fù)標(biāo)簽為與所有GT包圍盒的IoU比率都低于0.3的anchor,非負(fù)非正的anchor沒有意義。根據(jù)以上,作者定義損失函數(shù)為:

其中,i是一個mini-batch中anchor的索引,Pi是anchor i是目標(biāo)的預(yù)測概率。如果anchor為正,GT標(biāo)簽Pi* 就是1,如果anchor為負(fù),Pi* 就是0。ti是一個向量,表示預(yù)測的包圍盒的4個參數(shù)化坐標(biāo),ti* 是與正anchor對應(yīng)的GT包圍盒的坐標(biāo)向量。
Lcls是兩個類別(目標(biāo)vs.非目標(biāo))的對數(shù)損失,定義為:

對于回歸損失,為:

其中R是定義的魯棒的損失函數(shù)(smooth L1):

因為整個網(wǎng)絡(luò)損失函數(shù)中定義為Pi*和回歸損失函數(shù)的乘積,所以只有正樣本時此項才有值,回歸損失函數(shù)中的參數(shù)有:

其中不帶*的為b box的參數(shù),帶*的是GT的參數(shù)。
RPN是全卷積網(wǎng)絡(luò)實現(xiàn),所以采用反向傳播算法,用SDG進(jìn)行優(yōu)化,安裝正負(fù)anchor1:1的比例隨機(jī)地在一個圖像中采樣256個anchor,計算mini-batch的損失函數(shù),共享卷積層用ImageNet預(yù)訓(xùn)練。
文中選擇了4步訓(xùn)練算法,通過交替優(yōu)化來學(xué)習(xí)共享的特征。?
第一步,依上述訓(xùn)練RPN,該網(wǎng)絡(luò)用ImageNet預(yù)訓(xùn)練的模型初始化,并端到端微調(diào)用于區(qū)域建議任務(wù)。第二步,利用第一步的RPN生成的建議框,由Fast R-CNN訓(xùn)練一個單獨的檢測網(wǎng)絡(luò),這個檢測網(wǎng)絡(luò)同樣是由ImageNet預(yù)訓(xùn)練的模型初始化的,這時候兩個網(wǎng)絡(luò)還沒有共享卷積層。第三步,用檢測網(wǎng)絡(luò)初始化RPN訓(xùn)練,但固定共享的卷積層,并且只微調(diào)RPN獨有的層,現(xiàn)在兩個網(wǎng)絡(luò)共享卷積層了。第四步,保持共享的卷積層固定,微調(diào)Fast R-CNN的fc層。這樣,兩個網(wǎng)絡(luò)共享相同的卷積層,構(gòu)成一個統(tǒng)一的網(wǎng)絡(luò)。
對于anchor,文中用3個簡單的尺度,包圍盒面積為128x128,256x256,512x512,和3個簡單的長寬比,1:1,1:2,2:1提取大概20K個框,但文中忽略所有跨越圖像邊界的anchor,只剩下6K個框,然后采用非極大值抑制IoU閾值為0.7,這樣每個圖像只剩2k個建議區(qū)域,然后用2k個RPN建議框訓(xùn)練Fast R-CNN。
實驗:
PASCAL VOC 2007上進(jìn)行實驗,結(jié)果如下表:

作者在此基礎(chǔ)上也進(jìn)行了很多對比實驗,比如建議框數(shù)量,只選擇前100個建議框時,mAP為55.1%,仍舊很好,但如果增加建議框至6K,不采用非極大值抑制,mAP值并不會提升,表明非極大值抑制算法不會降低檢測mAP。另外作者分別去掉了分類和回歸層,沒有分類層時,從沒有計算得分的區(qū)域隨機(jī)抽取N個建議框。N =1k 時mAP幾乎沒有變化(55.8%),但當(dāng)N=100則大大降低為44.6%。這表明,cls得分是排名最高的建議框準(zhǔn)確的原因。在測試時移除reg層(這樣的建議框就直接是anchor框了),mAP下降到52.1%。這表明,高品質(zhì)的建議框主要歸功于回歸后的位置。單是anchor框不足以精確檢測。?
其他的實驗結(jié)果如下,faster rcnn在速度上明顯高于其他網(wǎng)絡(luò),也就是因為RPN的速度比SS高很多,而且檢測精度也有提升。



作者還進(jìn)行了召回率的對比,如下圖,該圖顯示,當(dāng)建議框數(shù)量由2k下降到300時,RPN方法的表現(xiàn)很好。這就解釋了使用少到300個建議框時,為什么RPN有良好的最終檢測mAP。
