Faster-RCNN学习
轉載:RCNN的介紹(有些圖片沒有粘貼成功,推薦查看原文)
RCNN(Regions with CNN features)是將CNN方法應用到目標檢測問題上的一個里程碑,由年輕有為的RBG大神提出,借助CNN良好的特征提取和分類性能,通過RegionProposal方法實現目標檢測問題的轉化。
算法可以分為四步:
1)候選區域選擇
Region Proposal是一類傳統的區域提取方法,可以看作不同寬高的滑動窗口,通過窗口滑動獲得潛在的目標圖像,關于Proposal大家可以看下SelectiveSearch,一般Candidate選項為2k個即可,這里不再詳述;
根據Proposal提取的目標圖像進行歸一化,作為CNN的標準輸入。
2)CNN特征提取
標準CNN過程,根據輸入進行卷積/池化等操作,得到固定維度的輸出;
3)分類與邊界回歸
實際包含兩個子步驟,一是對上一步的輸出向量進行分類(需要根據特征訓練分類器);二是通過邊界回歸(bounding-box regression) 得到精確的目標區域,由于實際目標會產生多個子區域,旨在對完成分類的前景目標進行精確的定位與合并,避免多個檢出。
RCNN存在三個明顯的問題:
1)多個候選區域對應的圖像需要預先提取,占用較大的磁盤空間;
2)針對傳統CNN需要固定尺寸的輸入圖像,crop/warp(歸一化)產生物體截斷或拉伸,會導致輸入CNN的信息丟失;
3)每一個ProposalRegion都需要進入CNN網絡計算,上千個Region存在大量的范圍重疊,重復的特征提取帶來巨大的計算浪費。
??SPP-Net
智者善于提出疑問,既然CNN的特征提取過程如此耗時(大量的卷積計算),為什么要對每一個候選區域獨立計算,而不是提取整體特征,僅在分類之前做一次Region截取呢?智者提出疑問后會立即付諸實踐,于是SPP-Net誕生了。
SPP-Net在RCNN的基礎上做了實質性的改進:
1)取消了crop/warp圖像歸一化過程,解決圖像變形導致的信息丟失以及存儲問題;
2)采用空間金字塔池化(SpatialPyramid Pooling )替換了 全連接層之前的最后一個池化層(上圖top),翠平說這是一個新詞,我們先認識一下它。
為了適應不同分辨率的特征圖,定義一種可伸縮的池化層,不管輸入分辨率是多大,都可以劃分成m*n個部分。這是SPP-net的第一個顯著特征,它的輸入是conv5特征圖?以及特征圖候選框(原圖候選框 通過stride映射得到),輸出是固定尺寸(m*n)特征;
還有金字塔呢?通過多尺度增加所提取特征的魯棒性,這并不關鍵,在后面的Fast-RCNN改進中該特征已經被舍棄;
最關鍵的是SPP的位置,它放在所有的卷積層之后,有效解決了卷積層的重復計算問題(測試速度提高了24~102倍),這是論文的核心貢獻。
盡管SPP-Net貢獻很大,仍然存在很多問題:
1)和RCNN一樣,訓練過程仍然是隔離的,提取候選框 | 計算CNN特征| SVM分類 | Bounding Box回歸獨立訓練,大量的中間結果需要轉存,無法整體訓練參數;
2)SPP-Net在無法同時Tuning在SPP-Layer兩邊的卷積層和全連接層,很大程度上限制了深度CNN的效果;
3)在整個過程中,Proposal Region仍然很耗時。
??Fast-RCNN
問題很多,解決思路同樣也非常巧妙,ok,再次感謝 RBG 大神的貢獻,直接引用論文原圖(描述十分詳盡)。Fast-RCNN主要貢獻在于對RCNN進行加速,快是我們一直追求的目標(來個山寨版的奧運口號- 更快、更準、更魯棒),問題在以下方面得到改進:
1)賣點1 - 借鑒SPP思路,提出簡化版的ROI池化層(注意,沒用金字塔),同時加入了候選框映射功能,使得網絡能夠反向傳播,解決了SPP的整體網絡訓練問題;
2)賣點2 - 多任務Loss層
A)SoftmaxLoss代替了SVM,證明了softmax比SVM更好的效果;
B)SmoothL1Loss取代Bouding box回歸。
將分類和邊框回歸進行合并(又一個開創性的思路),通過多任務Loss層進一步整合深度網絡,統一了訓練過程,從而提高了算法準確度。
3)全連接層通過SVD加速
這個大家可以自己看,有一定的提升但不是革命性的。
4)結合上面的改進,模型訓練時可對所有層進行更新,除了速度提升外(訓練速度是SPP的3倍,測試速度10倍),得到了更好的檢測效果(VOC07數據集mAP為70,注:mAP,mean Average Precision)。
接下來分別展開這里面的兩大賣點:
前面已經了解過可伸縮的池化層,那么在訓練中參數如何通過ROI Pooling層傳導的?根據鏈式求導法則,對于yj = max(xi) 傳統的max pooling的映射公式:其中 為判別函數,為1時表示選中為最大值,0表示被丟棄,誤差不需要回傳,即對應 權值不需要更新。如下圖所示,對于輸入 xi 的擴展公式表示為:
(i,r,j)?表示 xi 在第 r 個框的第 j 個節點是否被選中為最大值(對應上圖 y0,8 和 y1,0),xi 參數在前向傳導時受后面梯度誤差之和的影響。
多任務Loss層(全連接層)是第二個核心思路,如上圖所示,其中cls_score用于判斷分類,bbox_reg計算邊框回歸,label為訓練樣本標記。
其中Lcls為分類誤差:
px?為對應Softmax分類概率,pl?即為label所對應概率(正確分類的概率),pl?= 1時,計算結果Loss為0, 越小,Loss值越大(0.01對應Loss為2)。
Lreg 為邊框回歸誤差: 即在正確分類的情況下,回歸框與Label框之間的誤差(Smooth L1), 對應描述邊框的4個參數(上下左右or平移縮放),g對應單個參數的差異,|x|>1 時,變換為線性以降低離群噪聲:
Ltotal為加權目標函數(背景不考慮回歸Loss):
細心的小伙伴可能發現了,我們提到的SPP的第三個問題還沒有解決,依然是耗時的候選框提取過程(忽略這個過程,Fast-RCNN幾乎達到了實時),那么有沒有簡化的方法呢?
必須有,搞學術一定要有這種勇氣。
??Faster-RCNN
對于提取候選框最常用的SelectiveSearch方法,提取一副圖像大概需要2s的時間,改進的EdgeBoxes算法將效率提高到了0.2s,但是這還不夠。
候選框提取不一定要在原圖上做,特征圖上同樣可以,低分辨率特征圖意味著更少的計算量,基于這個假設,MSRA的任少卿等人提出RPN(RegionProposal Network),完美解決了這個問題,我們先來看一下網絡拓撲。
通過添加額外的RPN分支網絡,將候選框提取合并到深度網絡中,這正是Faster-RCNN里程碑式的貢獻。
RPN網絡的特點在于通過滑動窗口的方式實現候選框的提取,每個滑動窗口位置生成9個候選窗口(不同尺度、不同寬高),提取對應9個候選窗口(anchor)的特征,用于目標分類和邊框回歸,與FastRCNN類似。
目標分類只需要區分候選框內特征為前景或者背景。
邊框回歸確定更精確的目標位置,基本網絡結構如下圖所示:
訓練過程中,涉及到的候選框選取,選取依據:
1)丟棄跨越邊界的anchor;
2)與樣本重疊區域大于0.7的anchor標記為前景,重疊區域小于0.3的標定為背景;
對于每一個位置,通過兩個全連接層(目標分類+邊框回歸)對每個候選框(anchor)進行判斷,并且結合概率值進行舍棄(僅保留約300個anchor),沒有顯式地提取任何候選窗口,完全使用網絡自身完成判斷和修正。從模型訓練的角度來看,通過使用共享特征交替訓練的方式,達到接近實時的性能,交替訓練方式描述為:
1)根據現有網絡初始化權值w,訓練RPN;
2)用RPN提取訓練集上的候選區域,用候選區域訓練FastRCNN,更新權值w;
3)重復1、2,直到收斂。
因為Faster-RCNN,這種基于CNN的real-time 的目標檢測方法看到了希望,在這個方向上有了進一步的研究思路。至此,我們來看一下RCNN網絡的演進,如下圖所示:
Faster實現了端到端的檢測,并且幾乎達到了效果上的最優,速度方向的改進仍有余地,于是YOLO誕生了。
??YOLO
YOLO來自于“YouOnly Look Once”,你只需要看一次,不需要類似RPN的候選框提取,直接進行整圖回歸就可以了,簡單吧?
算法描述為:
1)將圖像劃分為固定的網格(比如7*7),如果某個樣本Object中心落在對應網格,該網格負責這個Object位置的回歸;
2)每個網格預測包含Object位置與置信度信息,這些信息編碼為一個向量;
3)網絡輸出層即為每個Grid的對應結果,由此實現端到端的訓練。
YOLO算法的問題有以下幾點:
1)7*7的網格回歸特征丟失比較嚴重,缺乏多尺度回歸依據;
2)Loss計算方式無法有效平衡(不管是加權或者均差),Loss收斂變差,導致模型不穩定。
Object(目標分類+回歸)<=等價于=>背景(目標分類)
導致Loss對目標分類+回歸的影響,與背景影響一致,部分殘差無法有效回傳;
整體上YOLO方法定位不夠精確,貢獻在于提出給目標檢測一個新的思路,讓我們看到了目標檢測在實際應用中真正的可能性。
這里備注一下,直接回歸可以認為最后一層即是對應7*7個網格的特征結果,每一個網格的對應向量代表了要回歸的參數(比如pred、cls、xmin、ymin、xmax、ymax),參數的含義在于Loss函數的設計。??SSD
由于YOLO本身采用的SingleShot基于最后一個卷積層實現,對目標定位有一定偏差,也容易造成小目標的漏檢。
借鑒Faster-RCNN的Anchor機制,SSD(Single Shot MultiBox Detector)在一定程度上解決了這個問題,我們先來看下SSD的結構對比圖。
基于多尺度特征的Proposal,SSD達到了效率與效果的平衡,從運算速度上來看,能達到接近實時的表現,從效果上看,要比YOLO更好。
對于目標檢測網絡的探索仍在一個快速的過程中,有些基于Faster-RCNN的變種準確度已經刷到了87%以上,而在速度的改進上,YOLO2也似乎會給我們帶來一定的驚喜,“未來已來”,我們拭目以待!總結
以上是生活随笔為你收集整理的Faster-RCNN学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Faster R-CNN论文详解
- 下一篇: Faster RCNN原理分析(二):R