轉(zhuǎn)載自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region PRoposal networks.” Advances in Neural Information Processing Systems. 2015.
本文是繼RCNN[1],fast RCNN[2]之后,目標(biāo)檢測界的領(lǐng)軍人物Ross Girshick團隊在2015年的又一力作。簡單網(wǎng)絡(luò)目標(biāo)檢測速度達到17fps,在PASCAL VOC上準(zhǔn)確率為59.9%;復(fù)雜網(wǎng)絡(luò)達到5fps,準(zhǔn)確率78.8%。
作者在github上給出了基于matlab和python的源碼。對Region CNN算法不了解的同學(xué),請先參看這兩篇文章:《RCNN算法詳解》,《fast RCNN算法詳解》。
從RCNN到fast RCNN,再到本文的faster RCNN,目標(biāo)檢測的四個基本步驟(候選區(qū)域生成,特征提取,分類,位置精修)終于被統(tǒng)一到一個深度網(wǎng)絡(luò)框架之內(nèi)。所有計算沒有重復(fù),完全在GPU中完成,大大提高了運行速度。 
faster RCNN可以簡單地看做“區(qū)域生成網(wǎng)絡(luò)+fast RCNN“的系統(tǒng),用區(qū)域生成網(wǎng)絡(luò)代替fast RCNN中的Selective Search方法。本篇論文著重解決了這個系統(tǒng)中的三個問題: 1. 如何設(shè)計區(qū)域生成網(wǎng)絡(luò) 2. 如何訓(xùn)練區(qū)域生成網(wǎng)絡(luò) 3. 如何讓區(qū)域生成網(wǎng)絡(luò)和fast RCNN網(wǎng)絡(luò)共享特征提取網(wǎng)絡(luò)
基本設(shè)想是:在提取好的特征圖上,對所有可能的候選框進行判別。由于后續(xù)還有位置精修步驟,所以候選框?qū)嶋H比較稀疏。 
原始特征提取(上圖灰色方框)包含若干層conv+relu,直接套用ImageNet上常見的分類網(wǎng)絡(luò)即可。本文試驗了兩種網(wǎng)絡(luò):5層的ZF[3],16層的VGG-16[4],具體結(jié)構(gòu)不再贅述。 額外添加一個conv+relu層,輸出51*39*256維特征(feature)。
特征可以看做一個尺度51*39的256通道圖像,對于該圖像的每一個位置,考慮9個可能的候選窗口:三種面積{1282,2562,5122}×。這些候選窗口稱為anchors。下圖示出51*39個anchor中心,以及9種anchor示例。 
在整個faster RCNN算法中,有三種尺度。 原圖尺度:原始輸入的大小。不受任何限制,不影響性能。 歸一化尺度:輸入特征提取網(wǎng)絡(luò)的大小,在測試時設(shè)置,源碼中opts.test_scale=600。anchor在這個尺度上設(shè)定。這個參數(shù)和anchor的相對大小決定了想要檢測的目標(biāo)范圍。 網(wǎng)絡(luò)輸入尺度:輸入特征檢測網(wǎng)絡(luò)的大小,在訓(xùn)練時設(shè)置,源碼中為224*224。
分類層(cls_score)輸出每一個位置上,9個anchor屬于前景和背景的概率;窗口回歸層(bbox_pred)輸出每一個位置上,9個anchor對應(yīng)窗口應(yīng)該平移縮放的參數(shù)。 對于每一個位置來說,分類層從256維特征中輸出屬于前景和背景的概率;窗口回歸層從256維特征中輸出4個平移縮放參數(shù)。
就局部來說,這兩層是全連接網(wǎng)絡(luò);就全局來說,由于網(wǎng)絡(luò)在所有位置(共51*39個)的參數(shù)相同,所以實際用尺寸為1×1的卷積網(wǎng)絡(luò)實現(xiàn)。
需要注意的是:并沒有顯式地提取任何候選窗口,完全使用網(wǎng)絡(luò)自身完成判斷和修正。
考察訓(xùn)練集中的每張圖像: a. 對每個標(biāo)定的真值候選區(qū)域,與其重疊比例最大的anchor記為前景樣本 b. 對a)剩余的anchor,如果其與某個標(biāo)定重疊比例大于0.7,記為前景樣本;如果其與任意一個標(biāo)定的重疊比例都小于0.3,記為背景樣本 c. 對a),b)剩余的anchor,棄去不用。 d. 跨越圖像邊界的anchor棄去不用
同時最小化兩種代價: a. 分類誤差 b. 前景樣本的窗口位置偏差 具體參看fast RCNN中的“分類與位置調(diào)整”段落。
原始特征提取網(wǎng)絡(luò)使用ImageNet的分類樣本初始化,其余新增層隨機初始化。 每個mini-batch包含從一張圖像中提取的256個anchor,前景背景樣本1:1. 前60K迭代,學(xué)習(xí)率0.001,后20K迭代,學(xué)習(xí)率0.0001。 momentum設(shè)置為0.9,weight decay設(shè)置為0.0005。[5]
區(qū)域生成網(wǎng)絡(luò)(RPN)和fast RCNN都需要一個原始特征提取網(wǎng)絡(luò)(下圖灰色方框)。這個網(wǎng)絡(luò)使用ImageNet的分類庫得到初始參數(shù)W0,但要如何精調(diào)參數(shù),使其同時滿足兩方的需求呢?本文講解了三種方法。 
a. 從W0開始,訓(xùn)練RPN。用RPN提取訓(xùn)練集上的候選區(qū)域 b. 從W0 c. 從W1開始,訓(xùn)練RPN… 具體操作時,僅執(zhí)行兩次迭代,并在訓(xùn)練時凍結(jié)了部分層。論文中的實驗使用此方法。 如Ross Girshick在ICCV 15年的講座Training R-CNNs of various velocities中所述,采用此方法沒有什么根本原因,主要是因為”實現(xiàn)問題,以及截稿日期“。
直接在上圖結(jié)構(gòu)上訓(xùn)練。在backward計算梯度時,把提取的ROI區(qū)域當(dāng)做固定值看待;在backward更新參數(shù)時,來自RPN和來自Fast RCNN的增量合并輸入原始特征提取層。 此方法和前方法效果類似,但能將訓(xùn)練時間減少20%-25%。公布的python代碼中包含此方法。
直接在上圖結(jié)構(gòu)上訓(xùn)練。但在backward計算梯度時,要考慮ROI區(qū)域的變化的影響。推導(dǎo)超出本文范疇,請參看15年Nip論文[6]。
除了開篇提到的基本性能外,還有一些值得注意的結(jié)論
與Selective Search方法(黑)相比,當(dāng)每張圖生成的候選區(qū)域從2000減少到300時,本文RPN方法(紅藍)的召回率下降不大。說明RPN方法的目的性更明確。 
使用更大的Microsoft COCO庫[7]訓(xùn)練,直接在PASCAL VOC上測試,準(zhǔn)確率提升6%。說明faster RCNN遷移性良好,沒有over fitting。 
新聞熱點
疑難解答