RCNN SPP-net Fast-RCNN Faster-RCNN
轉載自:http://blog.sina.com.cn/s/blog_9ae57c020102vopp.html
先截個圖,這就是RCNN的原理圖。
?該文是由UC-Berkeley(加利福尼亞大學伯克利分校)發表的。說明下RCNN的意思。CNN也就是眾多周知的convolutional?neural?network,?R是region的縮寫,意為對圖像進行局部區域的處理。?該文的主要亮點在于:,一是利用的region?proposals對物體探測中位置信息的精確處理,二是利用監督式預訓練和主域特殊化的微調方法,代替了傳統的非監督式預訓練和監督式微調,使得MAP(mean?average?precision?)得到大幅提升。現在來介紹原理圖的具體實現。
? 由于在深度CNN中,FC(full-connected)層的輸入是需要定的size的,所以對輸入圖像的大小需要做預處理以滿足這一要求。本文中采取的是wrap方案。生成類別獨立的region?proposals?有許多可選方法,該文采取了selective?search方案。在image中取出大約有2000個region?proposals,?他們的維數都是4096維。之前提到的wrap接著對region?proposals進行固定size的處理。接著通過CNN進行特征提取,然后再用這些特征訓練SVM分類/預測器。在原理圖實現中需要注意有以下幾點:
1) selective?search提取region?proposals時,由于它對scale是敏感的,所以選取出來的region?proposals的個數就會發生變化,為了使得region?proposals的個數一定,在selective?search之前還需要進行resize的處理。
2)原始圖像進行wrap處理時,固定大小的選擇,一般是227*227;
3)由于訓練集龐大,分類器優化開銷很大,該文采用了標準的hard?negative?mining?method方法提高了存儲利用率;
4)分類器采用的是非線性核的SV;
5)為了強化定位,引入Bounding-Box;
該文算是諸多文章優勢的集成體現。它達到的MAP也再次刷新了記錄:在PASCAL?VOC?2010上,其MAP達到了53.7%;在ILSVRC2013?detection?dataset達到了31.4%
但一如文章中提到的,該方法的主要缺陷在于計算的時間成本很大,根本達不到real-time的要求。原因也在于region?proposals處理中所固有的缺陷:CNN需要對每個region?proposals進行單獨的特征提取,這是十分耗時的。同時在進入CNN之前的wrap處理也是存在問題的,這種預處理會使得圖像失真,部分信息丟失。
?于是MSRA(微軟亞洲研究院)的何凱明等人提出了SPP-net。
?SPP-net
還是先貼上圖。首先需要聲明的是這篇paper仍有些地方沒搞明白(上邊的RCNN雖然算是吧啦完了,但難免存在理解偏差,望大牛們多多指教。)
?
?
首先,我們看看截圖二,很清楚的看到該文將crop/wrap這一預處理方法去掉了,同時在卷積層后加上了SPP。那我們就從這里開始談起。
Crop/wrap,顧名思義就是對圖像進行分割和變形。這兩種方法都存在著丟失或者扭曲原始圖像信息的缺陷。這樣CNN獲取的特征也就受到了限制,從而導致后續分類/預測的泛化能力不夠。需要略作解釋的是crop/wrap處理的充分性是由于FC層固有特性決定的,即FC層的輸入必須固定大小。該文亮點在于,將這一固定大小的處理放在特征提取之后。這樣原始圖像得到保護,特征提取更加的充分,然后再利用該文中提出的SPP代替最后一個卷積層的max-pooling層,完成大小固定的處理。該文主要亮點如下:
1)對輸入圖像尺度無限制,同時輸出的是定長特征,但運用滑動窗口的pooling技術就不能;
2) SPP可運用不同大小的pooling窗口,但CNN只能是單一的窗口;
3)SPP可以從尺度變化中提取特征;
4)大大提高了圖像處理速度,24-102*faster?than?the?R-CNN?method;
接下來就來看看SPP到底是什么。上邊已經談到,SPP是代替了傳統CNN中的pool5層,所以它也是一種pooling方法。同時,傳統CNN中pooling層的滑動窗口是一定的,但在SPP中可以看到,它的pooling層是分層的,正如SPP自身的含義——金字塔式池化一樣,它每層pooling??bins的大小是可變的,它的大小是個輸入圖像的大小成比例的;同時pooling?bins的個數是確定的,這就相當于多尺度的pooling,相較于傳統CNN中單尺度的pooling,肯定存在更多的優勢。
SPP-net在物體探測中的效果也非常好。在RCNN中是對上千個region?proposals分別進行CNN特征提取,而在SPP-net中則是對原始圖像進行CNN特征提取,然后再對region?所對應的window利用SPP。這里需要理解的是,對圖像的分割操作仍然是需要的,只是SPP中并不是立即對每個region直接特征抽取,而是將“對每個region的操作”放在了SPP這一過程中,即RCNN是多個regions+多次CNN+單個pooling,而SPP則是單個圖像+單次CNN+多個region+多個pooling。
盡管如此,SPP-net仍存在缺陷:一是SPP-net雖然極大的提高了RCNN的速度,但和RCNN一樣,他們的訓練過程都是一個多階段過程:即包含著特征抽取,網絡微調,分類器SVM的訓練以及最后的對BB回歸器的匹配。二是SPP-net中用到的微調技術只能更新FC層,這無疑限制了深度CNN的潛力。
Fast-RCNN
在此基礎上,MSRA又提出了Fast-RCNN。相較與RCNN和SPP-net,它的亮點在于:
1)MAP相較于RCNN也有很大的提高;
2)訓練過程通過運用多任務損失,實現單步驟完成;
3)在訓練過程中所有層都可以得到更新;
4)不再需要磁盤存儲器作為特征緩存;
5)比RCNN的訓練時間快9倍,測試時間快213倍,在?PASCAL?VOC?2012上獲得MAP也更高.。和SPPnet相比,訓練時間快3倍,測試時間快10倍,MAP也有提升。
從下圖可以看到如下變化:一是輸入從單輸入變為雙輸入;二是引入ROI?pooling層(region?of?interest,它是只含一層的SPP);三是在FC層后有兩個輸入。接下看看這些變化的具體實現和影響。
?
? 上述的變化都是在訓練過程做的改變,在微調階段曾談及SPP-net只能更新FC層,這是因為卷積特征是線下計算的,從而無法再微調階段反向傳播誤差。而在fast-RCNN中則是通過image-centric?sampling提高了卷積層特征抽取的速度,從而保證了梯度可以通過SPP層(即ROI?pooling層)反向傳播。 ? ? ? 上述的變化都是在訓練過程做的改變,在微調階段曾談及SPP-net只能更新FC層,這是因為卷積特征是線下計算的,從而無法再微調階段反向傳播誤差。而在fast-RCNN中則是通過image-centric?sampling提高了卷積層特征抽取的速度,從而保證了梯度可以通過SPP層(即ROI?pooling層)反向傳播。輸入除了batch大小為N的圖像外,還有R大小的ROI序列。這種多任務訓練機制避免了對順序訓練任務的pipeline的管理,同時也對MAP的提高起到了一定的作用。輸出也因為變成兩個輸出而存在著兩個loss?function。一個輸出對k個物體類別的可能性的softmax型預測,一個輸出針對每個類的四位實數。
該文在隨后還探討了SVM和softmax兩類分類器在VOC07上MAP的大小,發現softmax表現更為突出;同時發現region?proposals并不是越多越好,這些都可作為一些trick指導自己的工作。
RCNN到SPP-net,再到Fast-RCNN,在MAP不斷得到提升的同時,速度也不斷的提升,但我們也注意到在proposals的計算中仍然存在的計算瓶頸,而最近MSRA提出的Faster-RCNN正是這一問題的解決方案。由于這篇文章才出來不久,還沒來得及讀,暫時寫到這里。?
PS:文章完全來自個人理解,肯定很多漏洞或者理解過于表面的問題,此文后續會不斷更新,以求更全面更簡單的詮釋。
參考文獻:
[1]?R.?Girshick,?J.?Donahue,?T.?Darrell,?and?J.?Malik,?“Rich?feature?hierarchies?for?accurate?object?detection?and?semantic?segmentation,”in?CVPR,?2014
[2]?K.?He,?X.?Zhang,?S.?Ren,?and?J.?Sun.?Spatial?pyramid?pooling?in?deep?convolutional?networks?for?visual?recognition.?In?ECCV,?2014.
[3]?R.?Girshick.?Fast?R-CNN.?arXiv:1504.08083,?2015.
[4]?Shaoqing?Ren?Kaiming?He?Ross?Girshick?Jian?Sun.?Faster?R-CNN:?Towards?Real-Time?Object?Detection?with?Region?Proposal?Networks.arXiv:1506.01497,2015
?
總結
以上是生活随笔為你收集整理的RCNN SPP-net Fast-RCNN Faster-RCNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fast-RCNN解析:训练阶段代码导读
- 下一篇: windows下安装python+ecl