R-CNN有以下幾個缺點:
1、訓(xùn)練分多階段,首先fine-tune CNN,然后訓(xùn)練SVM作為檢測器,最后訓(xùn)練bonding box 回歸器。
2、訓(xùn)練時間空間消耗大。特征需要寫入硬盤。
3、測試時間比較長。一張圖片在VGG16網(wǎng)絡(luò)上,GPU運行需要47s。因為對每個region proposal都當(dāng)做一幅圖像,通過CNN提取特征。
SPPnets(Spatial pyramid pooling networks):
SPPnets【1】提高了R-CNN的速度。根據(jù)R-CNN的速度慢的缺點,R-CNN對每個region proposal都當(dāng)做一幅圖像,通過CNN提取特征,沒有共享計算。SPPnet的思想是把整副圖像輸入CNN網(wǎng)絡(luò),然后把每個region proposal的對應(yīng)特征提取出來,輸入CNN。這樣一幅圖像就需要一遍CNN前向傳播,共享了計算。但是每個region proposal的大小形狀不一樣,對應(yīng)的特征大小也不一樣,但全連接層需要特定大小的輸入,所以SPP-NET恰好可以解決這個問題:

上圖對應(yīng)的就是SPP-NET的網(wǎng)絡(luò)結(jié)構(gòu)圖,任意給一張圖像輸入到CNN,經(jīng)過卷積操作我們可以得到卷積特征(比如VGG16最后的卷積層為conv5_3,共產(chǎn)生512張?zhí)卣鲌D)。圖中的window是就是原圖一個region proposal對應(yīng)到特征圖的區(qū)域,只需要將這些不同大小window的特征映射到同樣的維度,將其作為全連接的輸入,就能保證只對圖像提取一次卷積層特征。SPP-NET使用了空間金字塔采樣(spatial pyramid pooling):將每個window劃分為4*4, 2*2, 1*1的塊,然后每個塊使用max-pooling下采樣,這樣對于每個window經(jīng)過SPP層之后都得到了一個長度為(4*4+2*2+1)*512維度的特征向量,將這個作為全連接層的輸入進行后續(xù)操作。
SPPnets因為實現(xiàn)了計算共享,所以測試速度比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之前的層沒有更新。這個限制了網(wǎng)絡(luò)的準(zhǔn)確性。
FAST R-CNN[2]
針對R-CNN和SPPnets的缺點,F(xiàn)AST R-CNN 被提出來。FAST R-CNN 有以下幾個優(yōu)點:
1.比R-CNN和SPPnets有更高的檢測準(zhǔn)確率(mAP)。
2.使用多任務(wù)損失,訓(xùn)練是單階段的。
3.訓(xùn)練時可以更新所有的層。
4.不需要硬盤存儲提取的特征。

從上圖可以看出,F(xiàn)AST R-CNN的整個結(jié)構(gòu)和R-CNN類似,改變的地方有在卷積層后有一個ROI pooling layer 這個層的左右是把大小不同的region proposal 的特征下采樣的同樣的大小。最后輸出采用的多任務(wù)的輸出,將分類和BBOX 回歸整合到一塊進行。用softmax代替SVM分類器。測試時,最后輸出后要經(jīng)過非極大值抑制和R-CNN一樣。注意:region proposal步驟還是要提前單獨進行的。
The RoI pooling layer:
所有的ROI都要下采樣到固定的大小H*W。若某個ROI長寬為h,w。那么要把ROI均勻分成H*W個方格,每個方格進行max pooling。是一種特殊的SPPnets,只有一層。
fine-tune:
把最后一個pooling層改為POI層,最后一個全連接層和softmax層被兩個姐妹層代替(全連接層和一個K+1類的softmax,和類別相關(guān)的BBox回歸)。把輸入改為一幅圖像和一系列的region proposals。
為了能夠高效的fine-tune全部層的權(quán)重,采取了新的策略。每個mini-batch采樣N幅圖,每幅圖采樣R/N個ROIs。因為每幅圖里的POIs可以共享計算,這樣就提高了訓(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
因為每幅圖有大量的ROIs,每個ROI都要經(jīng)過全連接層,所以全連接層的時間占了一半左右。可以通過Truncated SVD壓縮。
全連接層的權(quán)重矩陣W可以被如下分解:

因為t<<min(u,v),所以參數(shù)大大減少。一個全連接層可以被分解為兩個全連接層。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)