算法了解:RCNN、SPP-Net、Fast-RCNN、Faster-RCNN
強烈推薦視頻:
非常嚴(yán)謹(jǐn),非常美觀,非常清楚(重點和細(xì)節(jié)全講了,觀看人數(shù)多,有指正)。
RCNN理論合集:https://www.bilibili.com/video/BV1af4y1m7iL?from=search&seid=4520391483531272743
(包括RCNN系列、YOLO系列、以及源碼講解,非常精良成體系)
1 RCNN(2013年11月)
一句話介紹RCNN:將CNN方法引入目標(biāo)檢測領(lǐng)域的開山之作!大大提高了檢測效果。
1.1 發(fā)明背景
2012年AlexNet在ImageNet舉辦的ILSVRC中大放異彩,R-CNN作者受此啟發(fā),嘗試將AlexNet在圖像分類上的能力遷移到PASCAL VOC(1萬圖像,20類,標(biāo)定類別和位置)的目標(biāo)檢測上。這就要解決兩個問題:
- 如何利用卷積網(wǎng)絡(luò)去目標(biāo)定位
- 如何在小規(guī)模的數(shù)據(jù)集上訓(xùn)練出較好的網(wǎng)絡(luò)模型。
1.2 解決思路
針對問題1,R-CNN利用候選區(qū)域的方法(Region Proposal),這也是該網(wǎng)絡(luò)被稱為R-CNN的原因:Regions with CNN features。
針對問題2,R-CNN使用了微調(diào)的方法,利用AlexNet在ImageNet上預(yù)訓(xùn)練好的模型。
訓(xùn)練總思路
- 生成候選區(qū):一張圖片生成1000~2000個候選區(qū)域(Region Proposal)。
- CNN特征提取:對每個候選區(qū)域,輸入到預(yù)訓(xùn)練好的AlexNet中,提取一個固定長度(4096)的特征向量。
- 分類器(類別):對每個目標(biāo)(類別)訓(xùn)練一SVM分類器,識別該區(qū)域是否包含目標(biāo)。
- 回歸器(位置):訓(xùn)練一個線性回歸模型判斷當(dāng)前框是不是很完美,修正候選區(qū)域中目標(biāo)的位置。
疑問:為什么用SVM分類而不使用CNN全連接之后的softmax直接把分類做了?
原因:主要是基于CNN階段和SVM階段對正樣本的IOU閾值標(biāo)準(zhǔn)需要不一樣,單獨再訓(xùn)練SVM去分類,對正樣本IOU閾值可以定的更高,從而帶來分類精度提升。見知乎:https://www.zhihu.com/question/54117650?
R-CNN的目標(biāo)檢測過程:
1)候選區(qū)域選擇
用什么方法提取框:Region Proposal是一類傳統(tǒng)的區(qū)域提取方法,可以看作不同寬高的滑動窗口,通過窗口滑動獲得潛在的目標(biāo)圖像。
提取多少個框:具體是使用了Selective Search方法從一張圖像生成約2000-3000個候選區(qū)域。
提取框后干什么:根據(jù)Proposal提取的目標(biāo)圖像進行歸一化,作為CNN的標(biāo)準(zhǔn)輸入。
2)CNN特征提取
對生成的2000個候選區(qū)域,使用預(yù)訓(xùn)練好的AlexNet網(wǎng)絡(luò)進行特征提取。
- 輸入:候選框輸入尺寸227×227,歸一化。
- 網(wǎng)絡(luò)結(jié)構(gòu):改造預(yù)訓(xùn)練好的AlexNet網(wǎng)絡(luò)(5個卷積層,2個全連接層),將其最后的全連接層去掉,并將類別設(shè)置為21(20個目標(biāo)類別,另外一個類別代表背景).
- 輸出:得到一個4096×21的特征。
3)SVM分類器
利用上面提取到的候選區(qū)域的特征向量,通過SVM分類器來判斷是哪個目標(biāo)類別。而SVM是一種典型的兩類分類器,即它只回答屬于正類還是負(fù)類的問題。SVM多分類有兩種方式,這里作者使用的是:有多少個目標(biāo)類,就單獨訓(xùn)練多少個SVM分類器。
比如,下圖針對狗的SVM分類器:
狗的SVM分類器,就要能判斷出某個候選區(qū)域是不是包含狗,包含狗了那就是Positive;不包含就是Negative.
對于候選區(qū)域只是框出來了某個類的一部分圖像問題,在R-CNN中,設(shè)定一個0.3的IOU閾值,如果該區(qū)域與Ground truth的IOU低于該閾值,就將給區(qū)域設(shè)置為Negative。
4)邊界框回歸
主要參考:https://blog.csdn.net/zijin0802034/article/details/77685438
邊界框回歸怎么做的?
對于窗口一般使用四維向量(x,y,w,h)來表示, 分別表示窗口的中心點坐標(biāo)和寬高。 對于下圖2,紅色的框 P 代表原始的Proposal, 綠色的框 G 代表目標(biāo)的 Ground Truth, 我們的目標(biāo)是尋找一種關(guān)系使得輸入原始的窗口 P 經(jīng)過映射得到一個跟真實窗口 G 更接近的回歸窗口G^。
邊框回歸的目的既是:給定(Px,Py,Pw,Ph)尋找一種映射ff, 使得f(Px,Py,Pw,Ph) = (Gx^,Gy^,Gw^,Gh^) 并且(Gx^,Gy^,Gw^,Gh^) ≈ (Gx,Gy,Gw,Gh)。
具體算法見參考文獻,大概意思如下:
測試
從一張圖片中提取2000個候選區(qū)域,將每個區(qū)域按照訓(xùn)練時候的方式進行處理,輸入到SVM中進行正負(fù)樣本的識別,并使用候選框回歸器,計算出每個候選區(qū)域的分?jǐn)?shù)。針對每個類,通過計算IOU,采取非最大值抑制的方法,以最高分的區(qū)域為基礎(chǔ),刪掉重疊的區(qū)域。
1.3 意義
RCNN作為第一篇目標(biāo)檢測領(lǐng)域的深度學(xué)習(xí)文章,大幅提升了目標(biāo)檢測的識別精度,在PASCAL VOC2012數(shù)據(jù)集上將mAP從35.1%提升至53.7%。使得CNN在目標(biāo)檢測領(lǐng)域成為常態(tài),也使得大家開始探索CNN在其他計算機視覺領(lǐng)域的巨大潛力。
1.4 不足
- 對每個新圖像進行預(yù)測需要大約40-50秒。
- 訓(xùn)練分為多個步驟,比較繁瑣:①?需要微調(diào)CNN網(wǎng)絡(luò)提取特征,②需要訓(xùn)練SVM進行正負(fù)樣本分類,③訓(xùn)練邊框回歸器得到正確的預(yù)測位置。
- 訓(xùn)練耗時,中間要保持候選區(qū)域的特征,5000張的圖片會生成幾百G的特征文件。
- 每一個ProposalRegion都需要進入CNN網(wǎng)絡(luò)計算,上千個Region存在大量的范圍重疊,重復(fù)的特征提取帶來巨大的計算浪費。
2 SPP-Net(ECCV 2014)
何凱明等發(fā)明。
智者善于提出疑問,既然CNN的特征提取過程如此耗時(大量的卷積計算),為什么要對每一個候選區(qū)域獨立計算,而不是先提取圖像的整體特征,然后僅在分類之前做一次Region截取呢?立即付諸實踐,于是SPP-Net誕生了。
SPP-Net整個過程:
-
首先通過選擇性搜索,對待檢測的圖片進行搜索出2000個候選窗口。這一步和R-CNN一樣。
-
特征提取階段。這一步就是和R-CNN最大的區(qū)別了,這一步驟的具體操作如下:把整張待檢測的圖片,輸入CNN中,進行一次性特征提取,得到feature maps,然后在feature maps中找到各個候選框的區(qū)域,再對各個候選框采用金字塔空間池化,提取出固定長度的特征向量。而R-CNN輸入的是每個候選框,然后在進入CNN,因為SPP-Net只需要一次對整張圖片進行特征提取,速度會大大提升。
-
最后一步也是和R-CNN一樣,采用SVM算法進行特征向量分類識別。
2.1 SPP-Net網(wǎng)絡(luò)
RCNN過程:
SPP-Net過程:
SPP-net與R-CNN的對比:RCNN輸入原圖像的proposal,SPP-Net輸入特征的proposal.
2.2 SPP-Net 主要改進點
SPP-Net在RCNN的基礎(chǔ)上做了實質(zhì)性的改進:
- 1)取消了crop/warp圖像歸一化過程,解決圖像變形導(dǎo)致的信息丟失以及存儲問題;
- 2)采用空間金字塔池化(SpatialPyramid Pooling?)替換了 全連接層之前的最后一個池化層。
為了適應(yīng)不同分辨率的特征圖,定義一種可伸縮的池化層,不管輸入分辨率是多大,都可以劃分成m*n個部分。這是SPP-net的第一個顯著特征,它的輸入是conv5特征圖?以及特征圖候選框(原圖候選框 通過stride映射得到),輸出是固定尺寸(m*n)特征;
還有金字塔呢?通過多尺度增加所提取特征的魯棒性,這并不關(guān)鍵,在后面的Fast-RCNN改進中該特征已經(jīng)被舍棄;
最關(guān)鍵的是SPP的位置,它放在所有的卷積層之后,有效解決了卷積層的重復(fù)計算問題(測試速度提高了24~102倍),這是論文的核心貢獻。
2.3?SPP-Net不足
- 1)和RCNN一樣,訓(xùn)練過程仍然是隔離的,提取候選框 | 計算CNN特征| SVM分類 | Bounding Box回歸獨立訓(xùn)練,大量的中間結(jié)果需要轉(zhuǎn)存,無法整體訓(xùn)練參數(shù);
- 2)SPP-Net在無法同時Tuning在SPP-Layer兩邊的卷積層和全連接層,很大程度上限制了深度CNN的效果;
- 3)在整個過程中,Proposal Region仍然很耗時。
3?Fast-RCNN(2015)
RCNN原作者Ross Girshick2015年推出。
Fast-RCNN主要貢獻在于對RCNN進行加速:訓(xùn)練時間從84小時減少為9.5小時,測試時間從47秒減少為0.32秒。
創(chuàng)新點:
- 借鑒SPP思路,提出簡化版的ROI池化層(注意,沒用金字塔),同時加入了候選框映射功能,使得網(wǎng)絡(luò)能夠反向傳播,解決了SPP的整體網(wǎng)絡(luò)訓(xùn)練問題,模型訓(xùn)練時可對所有層進行更新;
- 多任務(wù)Loss層
- SoftmaxLoss代替了SVM,證明了softmax比SVM更好的效果;(為什么不使用SVM了:訓(xùn)練使用難樣本挖掘以使網(wǎng)絡(luò)獲得高判別力,從而精準(zhǔn)定位目標(biāo))
- SmoothL1Loss取代Bouding box回歸
將分類和邊框回歸進行合并(又一個開創(chuàng)性的思路),通過多任務(wù)Loss層進一步整合深度網(wǎng)絡(luò),統(tǒng)一了訓(xùn)練過程,從而提高了算法準(zhǔn)確度。
網(wǎng)絡(luò)結(jié)構(gòu)
4?Faster R-CNN(2015)
作者:任少卿、何凱明、Ross Girshick, 孫劍
在Fast R-CNN中使用的目標(biāo)檢測識別網(wǎng)絡(luò),在速度和精度上都有了不錯的結(jié)果。不足的是,其候選區(qū)域提取方法耗時較長,而且和目標(biāo)檢測網(wǎng)絡(luò)是分離的,并不是end-to-end的。在Faster R-CNN中提出了區(qū)域檢測網(wǎng)絡(luò)(Region Proposal Network,RPN),將候選區(qū)域的提取和Fast R-CNN中的目標(biāo)檢測網(wǎng)絡(luò)融合到一起,這樣可以在同一個網(wǎng)絡(luò)中實現(xiàn)目標(biāo)檢測。
Faster R-CNN的網(wǎng)絡(luò)有4部分組成:
- Conv Layers 一組基礎(chǔ)的CNN層,由Conv + Relu + Pooling組成,用于提取輸入圖像的Feature Map。通常可以選擇有5個卷積層的ZF網(wǎng)絡(luò)或者有13個卷積層的VGG16。Conv Layers提取的Feature Map用于RNP網(wǎng)絡(luò)生成候選區(qū)域以及用于分類和邊框回歸的全連接層。
- RPN,區(qū)域檢測網(wǎng)絡(luò) 輸入的是前面卷積層提取的Feature Map,輸出為一系列的候選區(qū)域。
- RoI池化層 輸入的是卷積層提取的Feature Map 和 RPN生成的候選區(qū)域RoI,其作用是將Feature Map 中每一個RoI對應(yīng)的區(qū)域轉(zhuǎn)為為固定大小的H×WH×W的特征圖,輸入到后面的分類和邊框回歸的全連接層。
- 分類和邊框回歸修正 輸入的是RoI池化后RoI的H×WH×W的特征圖,通過SoftMax判斷每個RoI的類別,并對邊框進行修正。
其整個工作流程如下:
- 將樣本圖像整個輸入到Conv Layers中,最后得到Feature Map。
- 將該Feature Map輸入到RPN網(wǎng)絡(luò)中,提取到一系列的候選區(qū)域
- 然后由RoI池化層提取每個候選區(qū)域的特征圖
- 將候選區(qū)域的特征圖輸入到用于分類的Softmax層以及用于邊框回歸全連接層。
網(wǎng)絡(luò)結(jié)構(gòu)細(xì)節(jié)
下面這張圖的目的是為了顯示訓(xùn)練是分階段的,即像之前的方法一樣,先產(chǎn)生建議框,然后拿建議框去分類,只不過這里建議框的生成方式換成了RPN網(wǎng)絡(luò)。
-
之前的Fast R-CNN存在的問題:存在瓶頸:選擇性搜索,找出所有的候選框,這個也非常耗時。 解決方法:加入一個提取邊緣的神經(jīng)網(wǎng)絡(luò),也就說找到候選框的工作也交給神經(jīng)網(wǎng)絡(luò)來做了,即Region Proposal Network(RPN)。
-
Faster R-CNN解決的是,“為什么還要用selective search呢?”----將選擇性搜索候選框的方法換成Region Proposal Network(RPN)。
RPN(里程碑式的貢獻)
-
RPN的最終結(jié)果是用CNN來生成候選窗口,通過得分排序等方式挑出量少質(zhì)優(yōu)的框(~300)
-
讓生成候選窗口的CNN和分類的CNN共享卷積層
其實RPN最終就是在原圖尺度上,設(shè)置了密密麻麻的候選Anchor。然后用cnn去判斷哪些Anchor是里面有目標(biāo)的foreground anchor,哪些是沒目標(biāo)的backgroud。所以,僅僅是個二分類而已!)
RPN網(wǎng)絡(luò)的特點在于通過滑動窗口的方式實現(xiàn)候選框的提取,每個滑動窗口位置生成9個候選窗口(不同尺度、不同寬高),提取對應(yīng)9個候選窗口(anchor)的特征,用于目標(biāo)分類和邊框回歸,與FastRCNN類似。
目標(biāo)分類只需要區(qū)分候選框內(nèi)特征為前景或者背景。
邊框回歸確定更精確的目標(biāo)位置,基本網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:
訓(xùn)練過程中,涉及到的候選框選取,選取依據(jù):
- 丟棄跨越邊界的anchor;
- 與樣本重疊區(qū)域大于0.7的anchor標(biāo)記為前景,重疊區(qū)域小于0.3的標(biāo)定為背景
對于每一個位置,通過兩個全連接層(目標(biāo)分類+邊框回歸)對每個候選框(anchor)進行判斷,并且結(jié)合概率值進行舍棄(僅保留約300個anchor),?沒有顯式地提取任何候選窗口?,完全使用網(wǎng)絡(luò)自身完成判斷和修正。
從模型訓(xùn)練的角度來看,通過使用共享特征交替訓(xùn)練的方式,達到接近實時的性能,交替訓(xùn)練方式描述為:
- 根據(jù)現(xiàn)有網(wǎng)絡(luò)初始化權(quán)值w,訓(xùn)練RPN;
- 用RPN提取訓(xùn)練集上的候選區(qū)域,用候選區(qū)域訓(xùn)練FastRCNN,更新權(quán)值w;
- 重復(fù)1、2,直到收斂。
5 總結(jié)
RCNN網(wǎng)絡(luò)的演進:
RCNN網(wǎng)絡(luò)的速度和精度:
主要參考:
RCNN到Faster R-CNN筆記?https://www.jianshu.com/p/4064de5499d5
RCNN介紹?https://blog.csdn.net/xyfengbo/article/details/70227173?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242
目標(biāo)檢測之R-CNN系列?https://www.cnblogs.com/wangguchangqing/p/10384058.html
總結(jié)
以上是生活随笔為你收集整理的算法了解:RCNN、SPP-Net、Fast-RCNN、Faster-RCNN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (2017年11月)天池医疗AI大赛肺部
- 下一篇: CV算法复现(分类算法1/6):LeNe