1. R-CNN
概覽
R-CNN訓(xùn)練的過程如上圖:
1 輸入圖片附迷,通過selective search獲取2000個可能包含目標的區(qū)域PR茴迁。
2 將PR變形縮放到227*227的大小輸入到CNN網(wǎng)絡(luò)中進行特征提取
3 將提取出的特征輸入到svm中進行分類
接下來我們對每一部分進行細致的分析。
1.1 Region Proposal
候選區(qū)域的提取使用的是傳統(tǒng)的selective search方法菇曲,其利用像素之間的關(guān)系來合并得到可能存在的區(qū)域嗡午,比滑窗法高效得多,但是計算量很大并且其候選框存在大量的冗余稠肘,后續(xù)的算法利用深度學(xué)習(xí)對RP進行了改進福铅。
2特征提取
2.1 圖片縮放
實際上,在第一步RP獲得的候選框的大小不可能完全一樣项阴,然后我們使用的CNN網(wǎng)絡(luò)由于最后連接了全連接層滑黔,那么我們輸入的圖片的大小必須是一致的(強行變形到一致會導(dǎo)致特征的損失,后續(xù)有網(wǎng)絡(luò)對此進行了優(yōu)化)环揽,那么輸入之前我們把這些區(qū)域縮放到227*227,縮放的方法如下:
- B: 直接用原始圖片的像素擴充略荡,形成一個227*227的區(qū)域
- C: 用灰色填補缺失的部分
-
D: 直接放縮
Wrap.PNG
2.2特征提取CNN
特征提取網(wǎng)絡(luò)是基于Alex net的變形,AlexNet的結(jié)構(gòu)如圖薯演,首先這個Alexnet的權(quán)重是在ImageNet數(shù)據(jù)集上訓(xùn)練好的撞芍,我們只需要把softmax的1000個類別改為21 (數(shù)據(jù)集為Pascal Voc格式,其中有20個類別跨扮,背景也算一個負類序无,一共21)验毡,然后在poscal voc數(shù)據(jù)集上做fine-tuning,使得alexnet的權(quán)重你和當前數(shù)據(jù)集辩昆。
3 SVM分類
對每一個類別菱涤,訓(xùn)練一個SVM分類器,每個SVM的輸入為Alexnet中最后一個全連接層FC7的4096維向量华望,那么對于每個候選框來說哟玷,最終都會輸出一個4096維向量來送入到SVM進行分類狮辽,那么就會得到2000個分類,其中對于同一個目標可能會存在多個候選框巢寡,那么我們就要做一個NMS(non-maximun suppression),得到最佳的預(yù)測框喉脖。對于位置的預(yù)測,我們訓(xùn)練一個回歸器抑月,輸入的數(shù)據(jù)是Pool5的特征和每個樣本對的坐標和長寬树叽。后續(xù)深入探討下Bbox回歸
一些重要的細節(jié)
1.正負樣本
在fine-tuning 中,對于得到的2000個RP,如果某個RP與GT(ground truth)重疊的部分最大的那個其IOU大于0.5谦絮,那么RP可以作為這個GT的正樣本题诵,否則為負樣本,另外层皱,GT也作為正樣本性锭。
在訓(xùn)練SVM的過程中,IOU大于0.7的認定為正樣本叫胖,IOU小于0草冈,3的認定為負樣本。
在fine-tuning與SVM訓(xùn)練中之所以IOU不一樣是因為:
- 正樣本相對負樣本很少臭家,IOU閾值低可以獲得多一點的數(shù)據(jù)疲陕,同時也為了防止過擬合
- SVM是一個最終的分類器,且SVM適用于小樣本钉赁,IOU閾值高樣本會更為準確蹄殃,那SVM會更為精確。
- 回歸
用Alexnet中pool5的6*6*256維特征和bounding box的GT來訓(xùn)練回歸你踩,每種類型的回歸也是單獨訓(xùn)練的诅岩。輸入的是pool5的特征和樣本對的坐標(x,y)和長寬w, h。另外只跟和GT的IOU超過某個閾值带膜,并且最大的RP進行回歸吩谦,其余的RP不參與回歸。
假設(shè)我們現(xiàn)在有:候選框膝藕,對應(yīng)的ground truth :
式廷,以及我們希望獲得的預(yù)測結(jié)果
,那么我們希望
盡可能接近
芭挽。通過pool5層的特征
做線性變換得到函數(shù)
,輸出平移量和縮放量滑废,從而得到
.
詳細的敘述下:
?????
?????
?????
我們提出了一個候選框時蝗肪,發(fā)現(xiàn)它與
IOU較低,那么可以把從候選框
到通過平移和縮放使得與
的IOU盡量大蠕趁,那么其實學(xué)習(xí)的是一個平移量
,移動
薛闪,使得其盡量靠近
,還需要學(xué)習(xí)一個縮放量
,讓
按照一定比列縮放,使得最終的預(yù)測框
與
的IOU盡可能的大俺陋。
輸入:
樣本值:輸入的是P區(qū)域經(jīng)過Alexnet網(wǎng)絡(luò)在pool5的特征向量
標簽值:GT:
輸出:平移以及縮放尺度
訓(xùn)練過程:
2. SppNet
R-CNN缺陷與SppNet的改進
- R-CNN缺陷
R-CNN提高了目標檢測的mAP豁延,但是即使在GPU上處理,其fps也很低腊状,其中主要原因:- 在region proposal階段提取了2k個RP,并且需要把每個RP都送入到Alexnet中進行特征提取诱咏,大大增加了計算量,導(dǎo)致處理時間較長.
- 由于Alexnet輸入的是一個固定尺寸的圖片寿酌,而我們在將RP送入時是對其進行了放縮胰苏,一定程度上減少了物體的特征,例如下圖中的燈塔醇疼。這樣會導(dǎo)致識別率的降低。
- SppNet改進
- 在提取特征的時候法焰,我們可以直接把圖片輸入到Alexnet中秧荆,得到一個完整的feature map,然后對應(yīng)每個RP埃仪,直接在feature map上找到其相應(yīng)位置的feature 即可乙濒,只需要進行一次特征提取,大大減少了運算量
- 對于輸入圖片需要固定大小的問題卵蛉,SppNet提出了一個叫做spatial pyramid pooling的結(jié)構(gòu)來提取特征颁股,并且保證提取的特征維數(shù),長度等完全一致傻丝,然后輸入到FCN中甘有,接下來再詳述這個結(jié)構(gòu)。
上圖是R-CNN和SppNet的pipeline,我們只討論SppNet葡缰。輸入一張圖片Image到CNN中亏掀,得到全圖的feature map,讓2000個候選框RP與feature map直接映射泛释,可以直接得到RP的特征(這里通過映射得到feature滤愕,不用經(jīng)過CNN了,因為是直接從計算好的全局的feature map中得到的)怜校,然后將這個RP對應(yīng)的feature map輸入到空間金字塔變換層间影,輸出一個固定大小的向量給到fc6,fc7中,進行分類茄茁。實際上魂贬,我們只需要著重關(guān)注兩個點:RP到全局feature map的映射蔓搞,空間金字塔變換層的結(jié)構(gòu)。
RP->feature map
原始圖片到feature map的映射要從感受野(receptive field)說起随橘,感受野即特征圖上一點在原始圖像上對應(yīng)的面積喂分,之前我們找到一個圖片,給定一層CNN的filter机蔗,stride蒲祈,經(jīng)過運算后可以得到其運算結(jié)果feature map的大小,實際上萝嘁,它們的坐標之間是有關(guān)聯(lián)的梆掸,我們以下圖為例:
在這個圖中,假定Conv1為feature map1,Conv2為feature map2,原始圖像大小為7*7牙言,假定從在原圖上那四個框框起來的面積為RP酸钦,我們用兩個坐標來確定他的位置:第一次的運算filter1 = 3,stride1=2,那么RP在Conv1上其坐標為
第二次的運算filter1 = 2,stride1=1,那么RP在Conv2上其坐標為
由這個例子可知,給定原圖上的一個位置RP其坐標咱枉,可以計算出其在feature map上的坐標卑硫。
Spatial Pyramid Pooling
如下圖,假設(shè)RP在feature map上得到的特征向量為N*N*256蚕断,那么先對N*N的面積做一個maxpooling,得到一個1*256向量欢伏,再把N*N分成四塊,每塊做maxpooling,得到一個4*256維向量亿乳,然后把N*N分成16塊硝拧,每塊做maxpooling,得到一個16*16的向量葛假,然后把這三個向量合并起來得到一個21*256維向量輸入到FCN中障陶,可以看到,得到這個21*256維向量和尺寸N*N沒有關(guān)系聊训,輸出的都是固定的大小抱究,劃分為4塊或者是16塊有時候并不一定可以均分,有固定的公式魔眨,這里就不展開媳维。
3. Fast R-CNN
SppNet缺點
- 整體的結(jié)構(gòu)是分階段訓(xùn)練,不是一個end-to-end結(jié)構(gòu)遏暴,訓(xùn)練CNN侄刽,訓(xùn)練SVM,訓(xùn)練bbox回歸器沒有結(jié)合到一起
-
訓(xùn)練SVM朋凉,Bbox回歸時算法不能更新卷積層的參數(shù)州丹,影響網(wǎng)絡(luò)的精度
Fast R-CNN提出了ROI層,整合了整個結(jié)構(gòu),下圖是pipeline:
ROI.PNG
首先把圖片輸入到CNN中得到一個全圖的feature map墓毒,然后找到RP(候選框)在feature map對應(yīng)的區(qū)域S吓揪,把S輸入到ROI (region of interest ) pooling layer,輸出一個固定大小的特征向量所计,然后特征向量經(jīng)過FCN后柠辞,最后分為兩個分支:一個處理softmax概率,一個作bbox回歸主胧。然后聯(lián)合一起訓(xùn)練網(wǎng)絡(luò)叭首。
ROI layer
ROI層實際上就是單尺度的一個SppNet,就是把RP的feature map直接劃分為H*W大小的塊,然后直接去做maxpooling那么得到的一定是一個固定大小的向量踪栋。
4. Faster R-CNN
實際上焙格,F(xiàn)ast R-CNN最耗時間的地方是在Region proposal,通過selective search獲取2000個候選區(qū)RP夷都,F(xiàn)aster R-CNN提出了RPN網(wǎng)絡(luò)(region proposal network)來提取特征眷唉,使得R-CNN系列形成了一個完整的end-to-end的網(wǎng)絡(luò)結(jié)構(gòu)。Faster R-CNN = RPN +Fast R-CNN .
-
RPN
基本思想:在提取好的feature map上囤官,通過一個滑動窗口獲取特征向量冬阳,然后輸出到兩個全連接層,一個是bbox回歸層治拿,一個是分類層cls∧幔現(xiàn)在我們實際上來看下。
原文中中結(jié)果特征提取后得到了一個13*13*256的feature map劫谅,然后他經(jīng)過了一個3*3*256*256的卷積后得到了一個11*11*256的特征向量,就是圖中的那個sliding window嚷掠,對于這個11*11*256的feature map來說捏检,其上面的1*1*256的向量可能在原圖中代表的是一個很大的面積,而256-d則是這個面積的特征不皆,原圖的大小可能是440*440贯城,那么對于1*1來講,可能對應(yīng)的是一個20*20的面積霹娄,然后有k個可能的anchor在上面框能犯,框出物體,輸出即為2k個score犬耻,為包含某個物體的概率和4k個coordinate踩晶,為bbox坐標。
RPN.jpg - pipeline
理解了RPN枕磁,我們可以看下Faster R-CNN的pipeline:- 首先渡蜻,將圖片輸入到一個特征提取網(wǎng)絡(luò)獲得一個feature map
- RPN作用在feature map后,給出RP的信息,然后和feature map一起輸入到ROI pooling(ROI pooling實際上是一個單尺度的SppNet),得到了一個固定長度的特征向量茸苇。
-
將固定長度的特征向量輸入到FCN中排苍,最后進行softmax回歸分類和bbox regress進行定位。
Pipeline