R-CNN有以下幾個(gè)缺點(diǎn):
1龄寞、訓(xùn)練分多階段,首先fine-tune CNN谬俄,然后訓(xùn)練SVM作為檢測器柏靶,最后訓(xùn)練bonding box 回歸器。
2溃论、訓(xùn)練時(shí)間空間消耗大屎蜓。特征需要寫入硬盤。
3蔬芥、測試時(shí)間比較長梆靖。一張圖片在VGG16網(wǎng)絡(luò)上,GPU運(yùn)行需要47s笔诵。因?yàn)閷γ總€(gè)region proposal都當(dāng)做一幅圖像返吻,通過CNN提取特征。
SPPnets(Spatial pyramid pooling networks):
SPPnets【1】提高了R-CNN的速度乎婿。根據(jù)R-CNN的速度慢的缺點(diǎn)测僵,R-CNN對每個(gè)region proposal都當(dāng)做一幅圖像,通過CNN提取特征谢翎,沒有共享計(jì)算捍靠。SPPnet的思想是把整副圖像輸入CNN網(wǎng)絡(luò),然后把每個(gè)region proposal的對應(yīng)特征提取出來森逮,輸入CNN榨婆。這樣一幅圖像就需要一遍CNN前向傳播,共享了計(jì)算褒侧。但是每個(gè)region proposal的大小形狀不一樣良风,對應(yīng)的特征大小也不一樣谊迄,但全連接層需要特定大小的輸入,所以SPP-NET恰好可以解決這個(gè)問題:
上圖對應(yīng)的就是SPP-NET的網(wǎng)絡(luò)結(jié)構(gòu)圖烟央,任意給一張圖像輸入到CNN统诺,經(jīng)過卷積操作我們可以得到卷積特征(比如VGG16最后的卷積層為conv5_3,共產(chǎn)生512張?zhí)卣鲌D)疑俭。圖中的window是就是原圖一個(gè)region proposal對應(yīng)到特征圖的區(qū)域粮呢,只需要將這些不同大小window的特征映射到同樣的維度,將其作為全連接的輸入钞艇,就能保證只對圖像提取一次卷積層特征啄寡。SPP-NET使用了空間金字塔采樣(spatial pyramid pooling):將每個(gè)window劃分為4*4, 2*2, 1*1的塊,然后每個(gè)塊使用max-pooling下采樣香璃,這樣對于每個(gè)window經(jīng)過SPP層之后都得到了一個(gè)長度為(4*4+2*2+1)*512維度的特征向量这难,將這個(gè)作為全連接層的輸入進(jìn)行后續(xù)操作。
SPPnets因?yàn)閷?shí)現(xiàn)了計(jì)算共享葡秒,所以測試速度比R-CNN快了10~100倍姻乓,訓(xùn)練速度也提高了3倍。
SPPnets也存在著不足:
1.訓(xùn)練還是多階段的眯牧,region proposal+fine-tune CNN+訓(xùn)練svm+fit Bounding box regression蹋岩。特征還是需要寫入硬盤。
2.fine-tune過程中只調(diào)整了全連接層学少,對spatial pyramid pooling之前的層沒有更新剪个。這個(gè)限制了網(wǎng)絡(luò)的準(zhǔn)確性。
FAST R-CNN[2]
針對R-CNN和SPPnets的缺點(diǎn)版确,F(xiàn)AST R-CNN 被提出來扣囊。FAST R-CNN 有以下幾個(gè)優(yōu)點(diǎn):
1.比R-CNN和SPPnets有更高的檢測準(zhǔn)確率(mAP)。
2.使用多任務(wù)損失绒疗,訓(xùn)練是單階段的侵歇。
3.訓(xùn)練時(shí)可以更新所有的層。
4.不需要硬盤存儲(chǔ)提取的特征吓蘑。
從上圖可以看出惕虑,F(xiàn)AST R-CNN的整個(gè)結(jié)構(gòu)和R-CNN類似,改變的地方有在卷積層后有一個(gè)ROI pooling layer 這個(gè)層的左右是把大小不同的region proposal 的特征下采樣的同樣的大小磨镶。最后輸出采用的多任務(wù)的輸出溃蔫,將分類和BBOX 回歸整合到一塊進(jìn)行。用softmax代替SVM分類器琳猫。測試時(shí)伟叛,最后輸出后要經(jīng)過非極大值抑制和R-CNN一樣。注意:region proposal步驟還是要提前單獨(dú)進(jìn)行的脐嫂。
The RoI pooling layer:
所有的ROI都要下采樣到固定的大小H*W痪伦。若某個(gè)ROI長寬為h侄榴,w。那么要把ROI均勻分成H*W個(gè)方格网沾,每個(gè)方格進(jìn)行max pooling。是一種特殊的SPPnets蕊爵,只有一層辉哥。
fine-tune:
把最后一個(gè)pooling層改為POI層,最后一個(gè)全連接層和softmax層被兩個(gè)姐妹層代替(全連接層和一個(gè)K+1類的softmax攒射,和類別相關(guān)的BBox回歸)醋旦。把輸入改為一幅圖像和一系列的region proposals。
為了能夠高效的fine-tune全部層的權(quán)重会放,采取了新的策略饲齐。每個(gè)mini-batch采樣N幅圖,每幅圖采樣R/N個(gè)ROIs咧最。因?yàn)槊糠鶊D里的POIs可以共享計(jì)算捂人,這樣就提高了訓(xùn)練速度。
Multi task loss:
Each training RoI is labeled with a ground-truth class u and a ground-truth bounding-box regression target v.
Truncated SVD for faster detection
因?yàn)槊糠鶊D有大量的ROIs矢沿,每個(gè)ROI都要經(jīng)過全連接層滥搭,所以全連接層的時(shí)間占了一半左右〉肪ǎ可以通過Truncated SVD壓縮瑟匆。
全連接層的權(quán)重矩陣W可以被如下分解:
因?yàn)閠<<min(u,v),所以參數(shù)大大減少。一個(gè)全連接層可以被分解為兩個(gè)全連接層栽惶。The first of these layers uses the weight matrix ΣtVT (and no biases) and the second uses U(with the original biases associated with W).
參考論文:
1.Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
2.faster R-cnn (ICCV 2015)