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