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